From 8c7be6b800db0af96fc2b5b61c827a5e5890b075 Mon Sep 17 00:00:00 2001 From: johngrantuk Date: Tue, 7 May 2024 12:28:50 +0100 Subject: [PATCH 1/3] chore: Add ethers to deps to avoid version issues. --- balancer-js/package.json | 2 +- balancer-js/yarn.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/balancer-js/package.json b/balancer-js/package.json index 2ad8c5fb5..2435426fa 100644 --- a/balancer-js/package.json +++ b/balancer-js/package.json @@ -70,7 +70,6 @@ "eslint": "^7.9.0", "eslint-plugin-mocha-no-only": "^1.1.1", "eslint-plugin-prettier": "^3.1.4", - "ethers": "^5.0.0", "fishery": "^2.2.2", "hardhat": "^2.9.3", "mocha": "^8.2.1", @@ -99,6 +98,7 @@ "@ethersproject/contracts": "^5.4.0", "@ethersproject/providers": "^5.4.5", "axios": "^0.24.0", + "ethers": "^5", "graphql": "^15.6.1", "graphql-request": "^3.5.0", "json-to-graphql-query": "^2.2.4", diff --git a/balancer-js/yarn.lock b/balancer-js/yarn.lock index 1c1ba2400..d74837247 100644 --- a/balancer-js/yarn.lock +++ b/balancer-js/yarn.lock @@ -3482,7 +3482,7 @@ ethereumjs-util@^7.1.4: ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethers@^5.0.0: +ethers@^5: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== From 43685751ad0fcfe22faa1d662beb6011e8640ccc Mon Sep 17 00:00:00 2001 From: johngrantuk Date: Tue, 7 May 2024 12:32:51 +0100 Subject: [PATCH 2/3] test: Add package for testing. --- balancer-labs-sdk-v1.1.6-beta.16.tgz | Bin 0 -> 1652687 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 balancer-labs-sdk-v1.1.6-beta.16.tgz diff --git a/balancer-labs-sdk-v1.1.6-beta.16.tgz b/balancer-labs-sdk-v1.1.6-beta.16.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3380124efcee5382a80d9fc8d5ba78e9933efba5 GIT binary patch literal 1652687 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

J$EFfp)XP%TAAdCTrCBrACTaWj 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 z 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%0AHB!C!|!S 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

50ckm7 zx9rD8iK;x_b{|uZG{46_`bI0#@yV?Lj2d#WdmvZdhFtk}&XH>qAQJa_J-#2ROSIF_RbF_ymfXFyDt&n!7X7@1IS6BJv~Z!m-Z~Rm02E18 z_7Smq$aT@LoolQxh%-TM<$yO;!<%ti((01a6R#!C)q3TrYI?cYg-XenRkoVGs184u z!^d-Y1Yy}-P<`E!VD|=pt+nF1tQsb1!Xw@h?nMz9GsW zN{jl-WN~qt#E+IqCSKY@^~v0e^F%denO60yzdo{0^8I8mbmV(P3{gC=t&#f9OZ^Ch zp7TdZtlm48HBj$AksNx)Is&8}yCY>LuOc&n#FSTjlUbvz1cd1+^i+~f^gFF3*#s#- zRuh0g>i%Bx)9?Rr@b<^uHzzyKpTFPT-~Y$==U)1edKL4I_T52-Q1&T_)H^?E{ z2pZ*(TSz^vlPC)nxgy10!EI2ekXI5Ul-}dm2~n%^25Xi#qN3${5c#-`$fImjk|0*3q z&akWgx}uxVH=S2vw0x8sDM*f>m}VOkLgG;rKSFCn5x&FN07)9R(F%jcaY`e72DBg_ zod#MY*?fQ|#Zh)*D4d+TnVxFiBe$`vp6X#a@|=jFl;ZeO2OE8~ArcoN04jiU8xm36tG*5ih}WnL{V`{I<}mKt4m)*1+P z5rAA#=}*59OQkUo1=9xie5U*5%MD8#uGKvV-P>z&pIp9m?fm*0DX>vmX%Uxh7JjNS z)IG%>u~(AXUQuCz6s>;G07WD8)RcQhBC7UAY#-12#Ki593V`@!VPte9eCh_ddPke$ zE8{_(_rj_*q+h4SBbWF&05Al7oAWT3P2~`9^Rt)6bZe#QK2m)QYe}`V+G?6~*M#Sk zxw^8{Qlq{L-2q zo{exC_{5$TWx^H4_jf*Ip)5?A+I8jKG@Pct`AjH9P?#-HD(vN$!neh5g4zQdc$czI zQL@Tt;mKQ~9BHv}D#g|DbkQ8gtQEPc!OSWk0m@s8lK6jS2s*r*MxifK(fOje^IGJW zqkG3=yF}p7vF5BAy2RwsI1DlN=1P{RMB}etv!Xh7sUhwgt<~vR7(3c1R%upQHK{+T zIq_HrWx9`2nUrksw_DR?m=s{>LQx$#74jm&Kj$QTE8omm{^8)+t7MgCboo&f{1nA_ zR;3s1GiV{K)LJZ}OqFxPuS+^LynXHgb$B#TOyV)#hxH!1W7sJ0S7%}L2_D=F9``E{;IO$!>A&s{#@o>vbg22`pI%bSP7+wlhCI=}D&z89TR(=T$ zpf^L&2yAk*#t8qb-PwXy=6B(h%17f;-kK~UV6Hgjg}4b>s~|Ywx}es$K?*E7M?^hu zL{tqPGV;LrqW(%MRtHtvdFL$8m)Y$5?`d$4gvWyL0!itXGfPqX|MY!Fze-%e4Ib3! za!qQqiWyTj63dVK{mPx)Mm6~N7hberA&APnlMNc6klklIki9x@sk(O*A>;6b2$qd$ z=R_rrMXf5gP5#sbXa1&a^5}N)?-O$y|CyQBxPvHF`GL!}%~{3XL4!S8;FYi6$y~+L zq4s!uoej&_kT;fedvE2g(uS7>hO(R$6;Doc4y}!~GKO(aCH%eq51!EOEnFITIjWQA zio4Ed3mm6XXe$OnjL9zUhhOr6&yw}pjcJifG?_;%GmkcT|NXTfT&K;hJ1h>#*e$6R zZyb=Uve;;f2)&D)(}ZkFicWPp4}0xeK9`Wn$iRCzWXc96yF_D2@eIPp(QJ<=Kvbhd z)31In2b)<}5CVn-tgZtai93m&fZ~2BuWMWCUL!_b!T(Iln-9Y2#2ig*HW<$>Z)!Rt zHk?cc<0+ds!(iBvm;XBF%QG}gHnwJu&Edee9N+TC(~0j4hW>DBd4tfl*=RVj!@-z& z`55HyaABVLAk~D2@l4$H}uBVbTk}Hryfkunoh?az|{99;bdqBuquu=K;H{b zS=!p5?^%>GWMmILXFMDXY-c*2cq22II@UNCPP~CVVC4qeXFD+mLFi8{YXr^u{&+GT zO+v>W+Rkw3S-u7MGxp~bZMMGu$a_TRAuUZ#ZOfcnwmI;Jo;?^3Yz9NN=VQwpIiqkq zvSDfF4#plTHMz>dpdAT)e?FR6K`>yx2^~y)#wJ7N0cb-fv>ZSHa}Fz4Z?hd0$Ntb9 zkB830fhIFyF4X**?s0I`BLP_FFg&ho(Iknoi(N22*Pu zu&HOy{Xyti(}}(|@yFKYOhCTza6TGL1`e#l)Ek>qHl2jFZw5ZBzZu$-$(ZSjh$Zfj-|TNZP?Soif;XJ{ym{5p(bap22_9 zi9NKYrauMPIrhXJXwBv6HI!j!0hnMxfNo6#4+i7SCx|KYiNhxLXuyK`bTSGwIw#lXgAQ@U~pW3lGFtIu;;m8i0p=|<~*l0c+TVvY-zB2H}b9)3dTx%^k zU$!;}9MuXuYwnNdeh>y@z!}^0pb=*}@(0YchOok8&)1v#+}_&Ial9#fFaUZ0kQ;@T zH4U)UIj|7Z_e=*!#!y3(ApO)%pM48x)Of%qQxm2<0Q?6gG93;W3z-)TrbBydg{HO) z*O8XFZ4RxWW%*OzvMpyim;>kWC-ZSQU_fXFjx+XvPK=Az&b(FDPW=V-p z9IdtJ^t64hBYPV7Ku|(wJhg%;YYrpy^#}4EYJ3tH3h2W z04@XLELxlA=j{vwI4wvhL(>BSV2zv*82WTL4(7wjU=$9=4vcLw)_4A#wc`j2t--_$ zEf~tc3a9qmfvq(k`(Zel*p|&47^X8CYdA8$hDi)3BM;XSHY9L{DPzD3QK$fAK$^dp znt&(6Ij#uijaO6yr^9dnvLw)D2Z;T^)Ry5i z^*%+{%Tg?uAj~GP!XR6KJY`S(u^9kQ4dx~wpKtmAic*{HBMeN-@&LI&kQk4EGXt71 zD;SQ4Kulp{&6(-VZEvKlMHaX3{vpt{dEhf|h@lig>K+0yACAY(4h2M4TkVh%kZ!#=Y? zvIEXMF@fp@$9CyB1WrE%F5>{s2Ee(7 zfjJG$u?_1v82BKXnZTt%fYkPDvS^>_I0SLT8~bBxGWRDiG~Y2j$MZqdoC9N+cwR6E zIZ*=~c~rNyhiCx2$_mEA&@_Q+&IfGBMpN4k{W0tjAk3&D=##xh`9ZY|6ai53KzA~y zqruQ}V82?SJ)APnvp^#A=0jg2oaYzqV*^DD_N?uIpai=NC>>B^57u%p23ZOy%Ls%M z;EU6uwU|Q5wQsOF^OzUHdVs(MTBK)z5I3;B04NJ!@swF??yyi3n&Kp9*I?Z^1TlXw z31C4z-x*JaxVj+e0Eq{79WbO-15Ij50_L?3Z-k<{Ga7(g4B9Mk<`MiF0#log1K_hx zI0n9B>BCFT+L@T=1GAd@BiOSJMoxu~Cj$@IEbzy0f}II8<*E9p&pPQ6EvoA z0MeZe$}vcH3>B)$C=BKy5PMLem^QX$)-E89CZ+?F2v*Yus80hn0_>Q0Ai#T58_)*& z2?j7|eQfPpY%m0+5y(f#pf$@0aj2+6OknFx7&adG-h4dKTl>;3=S-%smOv_D1z|Ug zLeutuOU|JYHk=12)cI4-V;ZSj#_bFixS`DgCzy}C;m|itP>q8yoZG%V_5)yTHW1Fx zVj5{e$H4Zv0;+mW0PH>tLmMd7U_L@M8gaRL+s#^YhDL;u?|?)-@$AqBeF?+~pvpF2&=@ucNVL$R#{I8d30Q+6vqz|pgrL!R z)6vA4gX#&|#T2+jU=4j{&UIlTZ6_uU$mgh{gI);wJ?!_P@617l8v3X~m}n*gKCTNB zU#`)b9B)1kK&1xcBZlMnBhV`XcnkZ# zkU~M68%{lE2+}oBh{;r=O<8!I3CgkpP>y`y1c3bxND@Opx@qWu#u9+aIrdE0Y9NJc z?d9#%X@VOR#E{Uod>A5(%9^0fE(B;osX4KI2ZTm#T`3ZO`?{LU2mQfx&=d#+38PmB zb_hFl8Un2XfjI!VP7^tEhCXT6NC2aG=wsmQU>c&0EgX#*8-i*Ainl*B{gLBYo+zr5@kxPT>3VaO6^TdJ0)y8+NO$-zhZ-Az|G0YCAJ1ofvfEWPs zf~o?HcVydhbEwHXdCV70@61FHa7HyDo{Z>rI|RoqUV zED&M`rZ*XeLzHTOHCyA64VxBr98?2VVNw;nwf0Tnnf?Tz1Y94ji9lDNxhW8Pn@yRI zdOHv#&wU;6SZH*&U>AP44`3omm?cFb|}Y zsc+k;9EQNU*)RZtIR=3WbTJ16NFe$e0r-3!v16de!75r4;5dk3K;8!fo3tB{{y`0! zf=V{k4T+z<^J{1^EG!7GK=6h`kmqm_y}@AagTNQg0qLN%zz&8}4T(QrM?B{?nn__b zr?7DW{u3b1A>f6D3Mew4U}^!c)sXme9JEUmX!r_-up+}LXrN9o41Azaphr3L35c=5 z6v!)RWEv8G&hqQPH=YKdhar2$mYD-mggGBhVBdoZ3GBl%O`rx-ZE?R`V>~haU}ytR zFo6P_mIs&-!ls1{7Jyi0jYgo7!5TXnIlh>;PzQ0qoPrK8ngX#0g$39+ z2rSc)4XjK*uDA}7O&gU?KY&#oKzmczzxDv0V0#3Ba)_0yXe}Sh4X4WC|OW$|?`9OrV@`nM46<&BL*8j@fj`7%=}Z1bND2z$!)~ z&>ZnZWT4@)6~)2XH7$mta6WZxZvg7V9JJ#($Q6U(97JsfR06~S-?jqSH`*AzPwbio z1E6ib7Y5^C3?rN)6(wcN1Qh_V=Kp2y-PfBqvc2K&@AoPc-g$zZ5q6&sW)!volXwR( zW0PcNJbsw!u4}h}?~ov*?y6O%b*@#l0_IqP z`EG2^A-`AwFpIo|`>^H`@{2*}Bq0yH0Fu@TQ=j>yd1KwoU9QuH244qgfd#}M-2h|{ zz5*c$o{~W!5H@WSz?cWu!E)CCu7W3Gn8y~DL{a|2=|2qFk&=)Ey4ToGq36GL9Ed%R^Uq z22K-ZA&e$44G-(&3WmwdVC}$$Gfao(hD!q#!Sn)8dYZwg0SlF3v?dk|#1L5Sxe+94 zVn`SM>-jicwZ;$vu9L~WIMB6h;edyEP&HvQ_?SST5EdvhhMX-{vIwa3SO(y59C$!F ztOm3>#!1S;4zXR^&Y%KBrg<}61ut~SO!Y|_$pUC#m_`SNL=bQw5$p;MwSuV9*aPEi zwgRBbIG8kNu7y>NJi>0vv7o(KU~4c402lgfXka09r8UUU%Pfd?@EdYda`e>!cn0g3 zQR*KX##Cm5O&T*f2H-2fLd(fK8(iArY_Lv{AE*rPm1n07Ea z3ZVg?N+Q$iI|hfln!m-cP#_D0L+X5J#Q_u+P)}mPPIFlbl`v$H8RzrMVwGm)G9MPb zm%@C>$eToHm64+>&MeRNAvR$OyQ#s4^JUxJ-I!G00@v_h=R$*r=3*y4G+y7eJr+<3 zDB|v9AND)E8yti|T-yr53VrbE>FKwMCe&BhDYej+QVEI#Muc>V?q^p>E0?i)W7s8B3kUK66Oh`2-lYYR! zPhkPao)D&ic@;zp_Bb@~EU?hQ4CIHe4s0YKPJk(Zc1eyz%b>l*O404PHt7H{OJgjh zOT&dwNHQPGk^#ZpEEcw9S~ZL0!%D3$b0KDJFM&x!Iz`|!z>cx9FtD*&o`8*G8EDwy zYHkWLo2Ah1p-;j3w?HlwVdzC(=EYf@*dimnz%xm2Mkn1@5g(WU?Yu&uK^VaFOfvxv znRs^K01LSV&LOg-$#PfWwzTr0tH7Z4{WyfumxNIId`ur{SWpc(hrwiu+w=VGO7#>% z#SO_af?nVSnAVWCcpYedS(G@g1p|*L#`M^&Qpg4HCQhJXI2rhYYlRVdD_9H}L(whZ ziGJXs!=~qH728f7+l5X6J^(8fd=*3!1msk;LN9`rMuB)x&@&U>N(gS+Gxh~vx$3pcmfSHVjX@Tt&ET{|K3C1Ox|Q*hP{4ghzxqp z*>n}pc4C-@F02OF42cUR!ga|*8H83ErC1W$u3(mJ5a06cDxASOQX~aX15Dp>6Ld9m zeGgR3V=H7qXnQsVWf=xYx@y1>bI=^E2sq7QSw_HR%s~X(kOP%u)Ke6MzJb=u=5~8S zGDlWSO8^T-K-{?@!)QI`GnZmNJ@7-A5T3~$=s3YDB{Cyv68Tojgys8*6IyP}z%rno z`4nvkspzGFfz#*7$`OY#`HVm!T)XU}@C8_ER)X~qKs?|KxpZP!{|WiZC}4nrTRLXQ z(ub?WGSHa==UiAC4p15kn>iNrupmsh2W63>K&i+IFKA;Hy$Fb%2w1?dV=@oYo`t?( zStR@<>jkDqZ;_1il`t*Of~Cb%uz{FEt4SPg z`=pMiKJy?LAO;y!@mk#MWHm&vY1en4W&0kG6Y4@7ktGwmm|7>Xp@Ih?R?aZh>jcw+ zm_cjvAPY!UWFdGV$PY||f{|DjJDwl;P<#>t#hc!Q7D(_IhyiGfu!gNT$|4t23DXcW zXamh1C}rU2-0%c9<3QWJB#E2~7upPi#_8K}9K|6f!KO^E2`Q#LbX=pClq>6OB}~W? z7#L1s35aSQ!+eP$U7^*3ZByuPMj@fGx#8b%d$b^O8N*KDjXsCz$zdL)B(wrTD+nF( z3c$QG?e@C%)PfjUE_qX8$*ME*@Q_a(%3TPSY22lH42fz{0Sn+ zf>`*lEG$OhwF$U8Kyo)U%~#%F;w_M{{!)tLhK_<2f|QAb?FivO{y=Lcwr*qLe6y4D zkE<~VCK=#46jTR|5mpg|UmUpH3AhNum@tz$w!z02SAk4jhy>RKr^#Foc7p41--}%* z3?Le@`bm^w;ar0W@sF#Aoq>vNAWC9|0c@<0!8{e*A%6|U*w~hUg33*m?DTAPALZtq z1La$Auu0E%ppB8z2vsZ$$r$D$fr@5oDD_aq7DP;%PeG3!MW5LqL&v88YC)$eVvnq0 z3S2ZjNmIVMkKhIg$eM@bu66?~6Kq1vr{_d4a47N<{dYYx)Qg?g+69 zKTpX`VMkao$TLUoTrw{eHJGppS0WHtt03EyJFvMRxuO*FV8xhOm`P3q`M_aL8#@af z=4x9;1b!I8s)w}zW)@@=0};`FbQIfAJ2-{_h0Qird=7J~zH8p5o*?#IdCY^h0R)Aj z`T?{bmotZFmYq1Mu!U(Xh6shiO#|SzFAs+VFym7Xb_i|gm{AS&ZT>c9LSQqBK7f(} z{AQWOm`yG-+m&mS!Au4C_s4wfF8Hk2-dxiyvPHcn;^1z@`gSUMOloo&lP2E|Q4I>NGJ5S)Hu zp6h7pz8$?3E{ifN2v`86B?y9qw73|?wg)6~pu8qFP_(fxexeV8zUsN_MxOChXPRZo z5jsEr%VOix`GT?@;faVd?}nd>D+_j(!}9ESmBLZb)lur212c(>yd$Bfl*%YI6!i>G zl-9hc{!LZZVL3lWjWVl-tn`nSmGmo>%e%;XWM+m@`BNmMzn75e z#ao?_uZ@1cyt-o96M5=ZUDHt%(+7!-Hwx_OWMf68G9#fn6TPVtb+sTBH=Z@~J?Pi! ze0Om$dGk`;D10IErC8u${^|ypY~+&wZk2d_N!i&4@Qsu7|>mp%hoqzL}Jn(qu{oU2ilpR=zU{ zvg*ikvN5iZ1RP|j?#Y}^R^ha|nd7C{V4Wmdl~gkz?;?1muH}>&4<{Qkb$5Y5Ts~#g zWYrO)>i6Y^v<8szWP=Zj9H+9_3$aug6~$!Z_~Z)8n-sZB4f6Z7kBa(+*~NooRe3)P z-P^K|xyP$7CZ_?Y2jf*j7D=-o zCL?)c)#%%MM@zac>z=&IUnQdX0W5v%`QCTCPyYVq==JX7=X*Q%p3KhB6)I_z|N3iN z=I1r4Jvn&s>fng#tggDU&YPc{9pnAad;8yg|9bD~@Z)5}bA8jzkysvz3A+%B-8pF@ zz_&f)wd4ywkC$)xf_)h7Hs3r|6FWRIUc3_Gom6%NKNOju+swsJY;q38Xfiro>QwF3 zbw-=RcbG+emxxSVqHo!#r86$_Z}((0K9je@Y;S$@9PP5j);HUmn~xq(B-owflgr`b zstw9!K(~Q&y4{pMb<*jaeiz@2jPdliN*}MTY`ynloabc*61reo3(f-8u>qh+3UU0Y zOr}J6$tfqn{?y3UEuS2mFDXN_dUQD~sw~YatX-u{Lv)G3KIyrkr4Z)&E)<#9fvExg zi_oOHW>sE3`>!gQriMnCE^qIdjgG5y8nMmt%AIk+ z(el}1xp6S5?(Hh_SWqHHmCkCz$Z$^gBTvzxaV5*4Y1Dc(9P^!Vk-0+i zLHDBjaH?1OiIL}hT&-l0tc`7DFa|a@G1*$Ln^9hG)*MZ7*Ar#hDlH#o!HdzN%%p|6dC@VA zba!JinygdoY}Cbf&EDDOPd%}ZEKGyEZY>+W9vz=NJp1;6{b(ZtdXD9EpAFxMiygWl zYSv_x8~?JcKYco*>#9zua!(;g7dqM80o)6XE^5&>bSulNT3J#nbQSmO280!jQXQf- zeGk>ByXd_*j_+*__i6An52rwZhn*tKoXZUqvo?q6*I)0ed^R6J3B#`}AP!Kxe7ZN; zm=7g_;jw8C8y3gmGYg&rohx5^lmg{Isz_{J}2PA2N&Nn*?$V9J-98+kF2>F9&ZZdYD0RmxK`v1RVNQhG?r zCXv3A4s}Mw#c(0g@tiUO?o5WW^X2?}S*}LD1M5aZ(K*F-K1s=u?|=!6r|LRZ*ISht;YMTh#ISvpu{R zo((gs()`g3XgVwL>CH$lWF@wyqv~3GgJUfvi9$B3d({elBrOffyHQZ}baOZ!EzO_# zXjVgZ06AVll1QRCfL*+K^7->Ikm!MZQkab!$3U$U&Awy~ZT9)I{CBD?`{R=`(K6i< zN{t>*%XCoh2$9D`Y~}r|gk#4!ik|G`a@y1&hXr36o=K7UMzeUm8sA!#@O;yt`Z-K; zl6zAuzP@2s-~XM_485bwb`8|nc}-XEs{{ecelEbs>8%>wd{`1%$=Wq-sqRcb>L53K z%<1EtD1W?_%@%vC$g8CjS`zqWt(VhQw`P|k@sM&ysjC95hvF|qqV0#`&wt)5U@3~2 zm73AG(unfQ5oL*bI8pr`!(dn6^35Sv-`Lg*_Hkcc!)@G^UcM%j*NeIswc1i>=zJr} zCd(&(wsoG@9a2*T<)yLiRm5}8`grg1;kjyLv3WUH-!#{Dz9~iu6eI>dyOelS@QEUc z>e3+j*^sW9Z4x9HXPZhFmn{yX+<_l}OY&06*D77@k^U;bNdC1y9n$-J=X|KS$7Gm6 zPt3uGCgU?ozsrYQFg}4W*a0cF?!uK$qg0G1&HMFa{*=w(d$JScWVKk>Tr!s#aF6US zH5so)Nr|^Wut~uLz8VR`-_ywFc3}{DF%^30Prv^9H3;(aXCqx(h6g=~+K8Y&f41c6 z)Wp!#RDM7YCY_v@+=skt6#@e7($UeD%4A$zQk+Y90l7gE2M{-h7fMb{+j4^3u?;!# zj%36|AtNRR!tmiQx_DC{%)nzmYJmWPIq0u$E5`zQs@!G9BQ`93`_oJ9T|O1i1?D1M3jTObOk?zH(tfBM zAoVuO>v-!87xynWTQ4r`FYjrd>gy$`zB8AILQ9LG(6Ul8<{5fi`I=Wf5->F8XP(k@mcdXF4&i)&S2%4*+$jg;$@%&?XU zgK57jrHmY&nNsFqA+gIzPklvecq~QR{&ZyHx&CgvpfNbb8~jkOUW_@P zh>?pI>g&DBjYGQV`fwui)ef6&mr9LnzWk-2k*t)>%S86_5t&)CU6qY~<0S!qseo&l z@Vqy-+NQ#=KFGrn93YDHQX~(jsnFc{C<@u6hd2R{|;f`9eN~v|VT*$La9mq*3UgPzPYI zLwD38pNfymgE^j3R!g0>az?*li!YX=RNt8|m6j6Vk^H&Qm;*WI1%*Pdd~eh^)DJeA zW0RFGn=@Xlj&^T~!U@fwc^pnk)cpKeKTuc*`x8I0R)k1>?+Bwdzy5k-*5fRhKCm}y z_Q&k9V+wUnGnJS5Q>n#^ud4p-Po;mg>H=x9<%CqAC=uh3!HgOngFBvFHdocmiSZ}& zuc^k1&0*^qrFJy(O?9Kbn%tu6vk}b~=4mSRYV=xhi5>a)Q8lWavOuv6JLM47WYwmr z%o}pG8;tU4(gpg4VrxS93Z46Ec`5Vrta#rd!YZANP#B>G_W83InX7f#rpdKxqTppk z6B;p!YL75~mnQ!Ayf5~J%A|IqB7x=cJ=#Rpp0VM*#+O%bReIkO*iq@^oKrfM%}2|T z-MvLcZoTEm1(gut|GTm57Ak_v$VM`k#%CM?yf~f7ns8*0%2ak@c-zPiACv6w)fGIq<$9jTeYhr*efA zpz-&soLdwK1#JJ+L73Mdxp!C6@0xBegYWQ8w^wVeSGmC&gkS$@XibuI8gxBx({<_T z`!A#GpVp;otg57JehbRxD=3>k;w5D-%0M{UCDKEeFbf}9`MhYXaFR7yfkKKRl_hNB z`JA$PjSa8IC|5rSPezNHmtdq*Dlr*RqeN6rn<56G7rzRoQ`vf|N%FIgjwzLlDE1O+ zi&(~7Xj5~X!~CaB$tG9Yd^m?8(&~=#m$pmakckbOwq&b6r9M=~G`1R8p$QGobc|PZCDXOk*ep(un0U+Xdsc?^c zLN&}7^}nKRmyKnKniRihPH89D5*<3=mhUL+mV$rOYHVJPb8W!M&8kMuPC5U_74?*x zXeWBX42+||U=zo6iPDEa@0F-A7rPU9gN4hgC6T6Vy2~5A{pu@CAoa1p!mE?rXw)J_ z6{^-OQ9Yse#u#d2qIcS-qTi@rm5NbqEFYi9y;q$YYcR_OZ3ePgZqJu;NktHfpD4ss zMk)b8e;l{AS064F)l7?RyjiuUxrU5iOB!Eo30y)mT64RzTJ~b!(-0DR2Xt2KfErxN zh&VTfzgcaO-sS#ig{GHK@;df*$5r;Sav!`r*PId86q_@p;FWIR&!5dFq{u&-)f9ED zmu>FMYI-;;pHJK03b!3C1kL}HKG?~n5#Z3>bCp5b==D_fdTR8sWFU_idSM8(>EiO@Z0No-is7AZDY}K4QhwjrVB`xlN+~s-)CDaNs^};Rx-JSXFDav>>fv`C`EWnU zSfYG~z9?juJpEn~yg%5NA_-OkJHzAm>c>)+DFT!)hmFc*k=L8&dKb9SLzr^}*0g`K3@Q@uXXO-Q9twoxMRbb#Hk`Ge#akuE7uEQIE(#cVDXOG=0<7o=c`y@_W8jRk^&}9QHy!IyhV#B+9Oar8UQVeTYSkm2h*phw}K<>oR2c zA7U|+hyV7^=8SgJ*KF@fNGtpCL8HN4^kfZK)EBX}`{LD`SBHB~_K)@tUXEOP^6K!- z>+cWuj=n#5{&ZvukDjsjLY?@L>&}R^Uc7mesV}3+vQ?&fnHMh)LC5*%rO-crUO=yc z%2Ab^%aVlY-;2qdjs^dl9_XkNv8YO>RPyoe^WB$E_72~?+7z?9~w`M7QbgX)NYQ8;s`ol>23!5H7DZ+mk(>}5~t2(DW zL>(cQ$^&>sv|EmO(CTJ!26x0BHgkYuX`atcPqAuyQ$j($@zqxX77%^cFSPzR6-&xe zu1@)lp2|KbRlkUnTb5sSer7$IC&f`fbr?}=pEY=0hYE)kJlzsWGYR9>qyxtA%JwnC z#Z=JhT+qQgxP^bz6l=G?#^W zCUxrq;^hdNqJ&zn}lE2j2JGPUaV10%@xl+GkSDX6b;MBfa?t(9xOU8=YB;0d#f z2R-jw5^s0eQ?e@ZQ5BiO^gk8T<&*Qp`$mcPRDziQ=oNMBsYqasV?sy2lK9v=eBxMD z;m1q$%nO`gg(!a3S*&`0Am5))X!?7BJnbk{y?semF0U+jQE(Fj%)z24r*0}SUcHpBFpgyQamA?rwCpNYz5iamm*U_# z=@gI8#}h)DnS5RzX|F2$QoPvv$uUGXX&Vg;E{^1n#xxnv$9&e3_-7p-DH`4v#XTCel2S^u#Oro70)DE1Q-d%>pcRB)5t-qGWN zIp?EiH2Sg`x9ZM}nJ=p6jGn(bICy?k^BHL__3N=Xc|;#OKM_BARbGE%^z82o{ie8O z$9VUT;#~`){#v}rN4)%MsGLU84#iAu)x!LHXvq6wqcVRto{y~3S@=wVVG4P&SNlBW z6Vf1xN9lyT_figgr|%S@eYpAf2XUc&qVgt}(I*D1-O=_3dNn?sZhX2N8i#O%D%o=m zhpOY1k&kG$z$!k5O}?Bh*`&mSd+LP>siRo%dtBt{z2S$qVj*_qZh+PwcRq<*+gJD*OMJ6o22Nfru}_Qk3`v#vfH7Z%9+)afxNd#N~hj3zfPhY+7)DF)RP$sx)m zxXfspX)E>#!vfU2oz<%8aBfiGpCK$&yu7Sv`u}uaMbRm-m5mqq5}mTqp^n$oJ{@>^ z*oYR;xbXS2+J>QDyOW93?yHjx^6TDoc7FO+Vx_Jm&%6$+iq**Ih1qol@>2`jI&jh| z^ooxv(xgx?jkzq}jp{{pUyPD+QebboZtCp@a-i81{haBa zv`eKHK=yxgvoU)eS63Me@~}<*de!|N86ZxHbxW)JJc|oDNAC5FcNtF{}%&JbGx9 zmOTTP_?AHq0M4d7*Hd`e2F7~e;idjoacGLLp$aC8Wb;K2gItIYY{7Tu3n<46!QS!N zhiSzJ{`2VI<<^`na#7=64R8kU>IC;t*64gUT3#Amowi|53)oYo^IxNyCW_CjeD}py&-T&+eG!IHVld?dQ~FoR~tRO`*ze>W3z^w<=f*P zC@0-C*f|Om(SvAH*%kF3Ur^2AvZ`AvBS92%u>Me6hv;6;24thsl|N^)z~khQ?6e1|P=Dw*x_waYfr( z{~~X*gg@K7>>JCU%WH|+XtDTrYe#!ES#^pel1YUm#{fHO=(kdPuDWTeEV5#Gq>v8VlyjnuF?}(rF*$!*G|Lz- ze~~YZ>*q?tF(czbTc;zQS3l|=a7HeSqwja0KR@{SP5Z{Q$3H%Mws#0^FQ8(x#pnmR z7_#k%$`fra6n!){CaPku%WEOaq4cANd55I7Jt&G|Z@MHW{f2%d z^iNSt`6dS{IlC;Lnsl}y2irQr8 zc@VUu1rm(rx$&#McQRcXubR%ase~dO;&gI%t7F1vlj6C$ZqTSLFCCQI-Nt?pt=>;` zH>2SrRL`EmayylnCT|clyl(Wq*ibbw>3!pQ%l(ryYZ}{4^y=>d%xi`F=xs+KW79{* zW2Y$v+`OKZR}Bbt)#6bR`TU=vx_j{jo9|CYPw7d*CVTS!E%K7=(d;HuI)FS?TH3Sm zN9gSQ#o^K03a;<&!4xlRhrwYnjL2uwx=kRo8fhOGaQ z9`oURn951X4$D`Kh?pFuL4LDzZ_4`#bpi5)9dx>vXGbO zmmACSl*+O?l%|7&i$}Y~?f{TPq6;nJuaga~mSvdAwfXvM-NK4{E;q(>IDZ1et6IV( zE#X`#jIGG6Wg~K{ihyN$eI@?L^<9?hOAA;TI)-BTf^9T*cb}l2TQ3jZkmK;p)7{s* z+Hx$SG-qX$=J*mVl!3eQX!Ut{%~4v!gARQc*mtb74#>1cK)(SH`@MpR;k#I#to;Ketnh*XY zP~JRO(mvBX-rQ_AVOFVyH5aFz7BXyoJ@D!_4GHCE=idovy+=3!Z z>TkdPdU~DW)JG*Tp;wJ|NoGpRTWhaHu*B#YX^X@Q_TCGcTX_b1PO%A)sidSRM~;+> zqn}0f0Q0Qw)Uczj9fPS^vGY7Wq$_ojt^--VmDlZ#eiG_|3YMjf*Fu^fG4)1wUn5jL zIvlI#G@e2gcv(GqIiqvSPpbz@s&k#ul7>B==3=oN{f&Aw z&XpcA&fkvysvf+g!2yimO3%q_mzW5HGt{}jkZsXg8G-GfBSy;7E0D+XEd^=I29DU7 zC@UUH z=-)#AmirL$Ol3a$hk7)p)S08d(+}EBzzDEx)jhsSmX6Fr6%bzKt$M}Y2fx&YswmwL zv?edr7CYS(J2I~H*K-0+Pq&>+%BoXZ>3n0pS)JTr1Iq0JJ7DkD~@G73x;7b@Mk zQp+_wxaC>fufINK$IC{DX!)cJS~c#Gn3i`NU+R8sO8Su#^-3ScrkgH{?Xs7|`tlkV z+IcRoCy{gYl$4cC6)#ni`=5xyma{g`G3gmn*|sdw)3rlT&!9R6jaT{vbdA|;@$q~4 zu1X5B2JezeT8nQL4T^G;NZTBA%QRIiZ^sfKRm7;IjG5UVF{ zH1wQJy5N`~pHC_BNNuY9NMq80NGfU-R`BQJBYD_#>->yw{USH%{?Gr@`ZH(gJK*#-ALq;M zX8CsU8~w2?EAYGl{fj@fe{I`x@z)vHUSJ2F6?&FEux!r{ZM?su_E-Kn&zEe0uG|(* zb8!Dn{(QQpCGfo+cX$sRN!;7HXX3%V;XQ>{`MsUvds|!E_&;By+r*?FB+zZQmD&#L zh{`q!sJQW!MT&s#m4(tWAgvGN6u;h_N$SYAm*eThgYon|bVN2?D&!XVS>w4HU8AM* z<#>{BD}mMQ%4D2uOSXf``L+%^TwO>x#v4V7Zj#}nT2+CR+e>McTvmS9&F z?|eu@Q1dXEou0Orq%eG6v#wXSKU933`YWTeZwlZh__8Vne4YCBK=3td^u&MPsP;_;-4{K6 zgSt0qz7d|jPLr`$>fM2VYd#!3W zsGu8+V$;t-=OYIvEDphvDWO?LJHQa(HC&gXIRM1)YZ0! zD)P49EU5Hsb*ivgCaE1+?Q2FKIF$eDqrWS3Mv3%f9rTzhB~-H5l$|99NnJ!&rUi&v zbNbzlVbP79w+2Et65bj}d0y|k`(@F{%J@LrTNU47}M5STfZe}!)+YyuoatFw#A>ADD6o4DAPxkSa^9cZV zFb#lm2NDWU?gY^Q=SKLEeZ28HP^#=(u7m_}2WuhW+`(!{ICruh64H%Uglb-IO&%1j z_LVPZ*qH0pEy!Cq3Jc(hLQjkvJ60PM@*HFtg4nb3latCXKet34bUVbgbN0cKok|N~ zr4PLD@@}7ssUXicuYASDy9cYyp%oC+#?O^CSGk(C$DDit6dETM?v*=8+gNc5ws|10 z)#z({wophSs}(&coTgW;7%CeZ2W9nYH~%UC{N2`C7No@H*R%c8>1?rfci4PqO7$3kO2XIub?eO3)zI_k_@^xIqHS!^NrqwP(S3ju3Kq5&1P>X8yIkS z)=So1wJ{SD@y2|1joJxO{531*S4^V59%r>1qbQ{Ry=q-rw0Z>>HoO=3_bQHB`fkQ& z^NBbU)1|svVw?8h9}p3&#T!=a+Kta{(E5Avc=!1YtAS8vAA9{wRps*AT5=6diNzV4 zqOs?*y!HDE8kD>a+<99Rr&3n8#^$8ztJ7o;7UI2_o?p?wObGRHHDGzlxVw-RC|xq4 z9#x^T_w~Z5u3M7z)HkVkT&IFmi|ncFMTZ6s=iVH)QgrTurxo{YDJP_c7^l5UgcM{8NIDe)?6j=>UB=V@=Z?^ zRlP#V+*WH3dJv1*e6}F;VUq{yV(qo+)r+i(NXg|1m>Y((G%KGkv*<<@6LsF8yY4SJ zg;BY3nDk}67IaL~4F}e&y?$iTJCUaBo#O}B2=gJs@qyZo0XrP0soJH>iS9A?`fIFTQlC@0vO+O6Yp$QH@{2w*v2OHcS^heW zTo13L9ZLReAk)V!c6?2XD)J|JJX));iW|T!pgj8dbm4lLuFU=r>yGcf_vj z0*XH1RoQjdjjE-^J(FwWM`3|FZbX5`|^W#1_ZdNpd%m)$AfTQwT~?g~4lk_5$#J8Q^{YqHJm@^veG+B_>p#ZStk6?DuI z2u3F?z;vK&4?YdJ$jEx!O~!OWdoj2i&|$s7{f4T?lJWhA|D2Z9%Cmjr{B2*IWPGaV zm}>rWy1hL(+o(>iwok3H+ z7@X1B^nXq%GeFrBLI_IAIr#L?>7dc^(ZKQj;XkLBG%WE^PKnAl*|@SnmSBD3$5Afs7v%S5e6+m0$QuRi6@8IR0 z8VPl;F+!u59&9l}<4tWc+Cx;-*Sh|yNqgz_2Ezf^$a3Vo+@D79v_(UrHk z0ZG#Rsp0~xOi)}SmE)5;;R44eCLd@M(-vX#a8P!_ApdJmzSfiVeTq^89*_nsU$%&< zdsg(F?&fuHG)cFZi}vu_guT^C#pT#5$%2?pU` zAfXc5(n=tKR-z%xD`c;OJwt!a&d*3vDY*Kz1GAbur$8(~`F-G3shzLZ3A=C$T*yGJ+K7G|%<3|(egm_r zg#t?SXaxA}46Jn)(a^|y46eIh7IXRy6}D63Xi5uNUTPgC%O`=v7wp5di#khXgMGxn z8|&JyaM0>DP^W69Purle7prb)9bMW+OQuxnMy;d2waT%Q39Pp0ii*_;jfeG7buob7 zg=udd2mDgT{a~>B{CT7Dl@5T~oxZ=lwLTcU*nPSC-QJ76m#@hXxyqLBxPth9ku`6Q z{(qZ2-$g-pY0+0EiP_R0cI@xjj_t&W|0+wijW!Jvc0crD*Z*<{ z08T)$zr=bA`9)n2y-V|l6XL&z6QUD`zO);nVav7?_x{f?Wh*i^N|w|Vvzmcc4egE{GyS;shnw$r;O1M2 zPQN#IU!^d2V$~mxrQf$>X_apJyLK@B&f{B3Z}V^NVY=zswrqt}i~AdKjNg?CRa*^|MX(wU|p)A0%qV%)xw_eJ_Rxf`Vj7Fou{drl8d<0Z=z7W~? zBP!kBFS6U{MD|poFg^!m>Kn>d3*7_HhJ!OS!cIkL;*PUH^}2jYe-wH=R1Yqz(q_kN z6{@_W@+RjE)y>U11l5177>x#GL<8q_uhf8x0o)%vDqg@O-zmO7tN^JKXrl_?qrpG# z{qvr@MvpCZ2ZngIgTI^AV^x}9sv;U>a{v;2)0g64$8wT(GnoiYtMn*I zR~ZqNVpSDXsh?Q5SxjXItd^88 z0vt-g)m&85LD@<@E$W8q)uv_%&2~HUqc-a3PMEn>Yb6K)FKa8l_fZ{f*K3Yx*S%BN zLJL^U>}^-jc%@tETCe)7(2~`c%M<`=N-HL&O6o*~l2Zi1P_e+txImJDdVODU9lbWX zW|78k;5nOXOjZNuzwDgV8(T4T4d&1_gI&dLKbul#+8!LxHo;p4W83Xw4H(I6@IlBO zg8%AdPmcJYbgXpODmx0?D zMgw{|7>yil7;E5$B*rg{5+!r(!34_*PmB0V-!`@F4q;08A>>fVe ze|`8PJ@Xtp&<}sweZKqh$@f&%b8Xv`PmlJ{;Qp?xZTmhxhOKReY z8_-4tA48i?7A<7E`NEI4->BeaW^5GF3MGD8^mv34+1?>7s|X$v^CyzY(Hk)&HZO;U|Lwtx4`NJfE*C|ozoDGY zgAtL-=fV9MhCC7GmhOH1=0nG`yfn&+Cuh~hcJZk6s6L*}mUO3>Ok`)4NM^IV0lAq@ zL%w@hcAb8{5KBhaeqh*=S;;irrqcM9<@+gVZGb-!Y+8y7J*yJZOVpAr=LH-L>hbRL z8l)tl9DF|>J>4nP$M<%v03JBC2bc2m;|ns$uURQy-lWzU8+&CH^`lk^j~*xN$DDW6 zmDj!+&oAo}UCzutr|ihkTiAlO8UIqv-M13XD|R}bYE4=90B7TX`p-29bi-=kl`X_s`bkQ^aiz+lUY53cs zBk!)!m4b*`fK3Yfw!{g=h+Z8WJU@D)l!2XY6w!@qS}I%*_pOgS<=kT~cLUgs5%)ts z_Cyqify=ERW}%1^$8m*Yb^ZyQ``XHClcb^)G-10e<({4Tksz{E@9(L5=*Wv%WqGAv)wf!1OM39^Z`#w@ z&oPb-a=ANPro{^^;RQUlGKUM-&qClHb3*R2I10VkvpoxB>GK|JvunWaijXC+H1@;9 zCJ%Vx*r63BVdRJ;5<)nFM+78_Jc8WWvoNRuyDM^43*cq3%R#4}aKj|yi5GJR$m4}k z%(IYLHptNBVK*?F*MM0T3xJe%5~N`mBtc}mzUL-s9A}vmU_l(3a`&q=fon)EoWl8J=ZpcMU zfIf7C@I00Qhd?T!&7(}P7~Ftia=2hl0;IRy%nt(z!cb&~#$d1_z+fi=PX^uv3G-a$ z`mqJB941lh`;qG;q6vT$a1x#BSqU!jqBQlK)blwO$j1VK7X3KzS(#O zS)nsm{Y$Jgbb>I9QkMxYaXsJTk?;E<^CA&t%(pO19ti z7BQFu1KY3?CU}~LwgnuvFrnZ<%uTJ(wM9y8nd-dJ+sGrH1r*3!?m51nxFJiOC`uha zwXN8;yv(uvh#+)o{}rg%%YrEJJv+9uz{$eM&P3#3aU}{jj@DDYTIBgU{r}8x~{`vigj}6;bPxb+MeDxfj~?-zN%2agpl z4oE%^pe$Aw(CD+R?`mh*broJK;2E@xBmui;JdMB>UCZ%2H;5g}4F!+0 z*iO8@C2`kKc*Dd8E&6VRh37$Lfs9y`IV9)P7!nk7DoC<+H<5{!!VA{OV#f;w^Bf*} zuH!~l6oUcyp=Cp1;4E}9;d!0#T%Y$VyguX;#_zdt%oCo(X(TeJXHbAWh-WJTGfA-Q zJ)~oMe<-|dh4=pbejQa4S*fY&-=?~%A2oh96j%L}vL8FOUvBN!Uik}puAx4!r|jOI zREWPT5_AU}Pj~kpfL`eDlTD);r~;h3P@8;+<1qFeXa~SL%MW>gMwtyY5ynBc;$#JZ zYUbz1ub(_vh$;P(@W*`C(oz&V z7ElhM#f2`Y9F0JjrBUQ$js=}134A+FpkjvIBx>7^f`1776iam_YiBdJXIfIvV&mx) z?Ig(qMhk5;5c#$b)7r({SkOuXSOJ+xvF>Sv*@1=tmBF!D+&vD#wYHEi_g;U${WCrW z|JSKm8QhAX4_Z!?Mo_vF%m_>vD3ngjAGkK1C6r>c9cAP<@#n zWyGfw=$xTzMSdD~&ZxyQ)vNL0!Q+G12eu!uQ~-~IKycxBy{2*ya!3R+ zX}vH8#RgGg$atqv*rKf;FR@fe-5_DA%R)hh7v?G|@e#U`7u%AGiaksF7dR7OP zSTPsOhUyt*RtT9CK=%b{Nr4{wmYV`qK=IvH7pprgq5z6dmO)HIp|v7t%t7pN$j}g+ zp9wGaTp?o71FSyG+bf%-dQBLj zwjEjygE&YTbDeHretph-=yQI;Gw8-{mf9}RB;vHL4s`GsI#CpR7`WXHjMazf^B~Bw zEO1f?F;F*@xg@Z7hA9s-u&FRkI2NH>AF#c&4vg5L7x56C@m-Q=kuT7FDBZ$#xZ?_! zgPMDgHm&yz^AcEo=DA*I+mUNyU~ZJ!jONlOpDsXw$@TcM;yP;Foxg>E3C zk5%tkOw7TxVa;++Fqd(UCl)7HdW;2tWgB`iczE{$K#8aW3j!~Q-5`l=Xg8Q{4gnmJ z-Z=8)(nG$I0w)o z&Yx6CD}0)t+2;fa_YOUnFlqM$4TUH=&n%zz}eFfxE*-18D?^>!>kR2OwX@D$1pBh<8EV9*|J=!Om#S&~4#VlE^)h^hxz zeF4Zy<1u&|lpmPBo}coFfe0Kh%aq41X3*lWEV_aD^*N(GLC*p6gE|bAAh7W_@T0(s zgd2oVCPT(xW77h(4bkSlu)|%?W09Az6et)3Q2rbnGD$#<0cL=4J3e_-dWPBH8Xn{~ z%u8a`K#A0&$%Cv)vc!cUkjCJhK;|A`vDeTwz#%O1RK&uE)e98^hBmYwnA{w?dS)^3 zPu|D2>*REM_nt|cQJRJVnnvIO;e6N$;AkND$cx-C#yTc3OFY)2IdakHnHyR>7H&cg zD>sHh8pW{h!NfuQ(9ysIz>0gghN$Zr3M6;8_HhHY|nLoPuzE)fqF@jVwON+uw*fBG0aiY zY&(IuO*J&}U589}AE?1l33%sVH8b=r_I#+ymSCaXt!=w*T|Mx?_dw=A|A4_x1(!yz zz}D;pvrk561Yws&-7Ls$nAHLEA?$pQe4bFE9MDn9VaD)X7A^ zAx8b4o;89BZtpk0Qzv=bzuFa4aBCawc0mQp#d$rZ;BE&0B|3F$x7CVH=}n&Nbm!Lm zw%wgwwZ&#`Io%=-M4w?=9S72g{4YZ_Qb>O{fL7=15g-O=Ec%fhN?P3L*rw_`Wv&_e0 z_?|;iKwz7JYq1D&p0SuiK1Z}+5nE9YPdAyJ?s)_)*b5vO$36vTdNEiNR7&V@ft`iq z%OXWO?k0w?9b{5F0a5(CHGZ2e#_9}3@kHs!zLz*Qw8qe;O}WSwSXLk?9kdo+GhYon$G!FUxu=N>w3d9Lq= zw&(lg44ve-oD-N0|pAI)jcm+T#c`5E!zx;YNh(k3f6^f4*WAIMc{C$zx3M9sX~34kZH%u z4!~3eBm_@`DB+e16CC(VyDk})9@aJQjvWjOvVop(z8IJkbBzF>LgxN&30~o}Ip#W$ z%07p+&OCsCn1qxd=Ha@TqnP4pTfr zdKbq%tPIRLM28d1UF_27#Duo)EXGA9LWp8m)^_Z62CEbtwHd6E+75IBNEQJ-B&01x z9yqBW0tcEi3Koko*?woRiXj*~f>lx$2dS6YaRmLr6^?JiWVGze6@VMqB6Df3Qv2#) zl?p9vH^{gJ!h=qfW`P4HPk}3GVq>PA)ONu~QYZCp7_9>Qh*KAG)e(>$Fl#yFb{bkq z0=bxw$b~?M{QP3kDvsQ4%It`ch(qvuQOH<8ThBoPu#=x=B zM{aXD%#NNl4p2h80;4d(2%WIGp9WBBMGQL!icRX#f$5l(qi$dgS0qd#I=GfX=TB3| zwSlKx04p$h2JvID5V%4cZ{50({pA!Z=t5qS*^nYG)L0503ZcFvju&Qrfc{}xGGRqM zAqkBDliREJCNM$!Z5}8ygMbVziq}f83YfVN$QnTmTL~mo_X0GO(KK^?FOU&0BH>O( zJ6x`?6U%eF0PD&y4NSy6Aqjq+Yw*P8kX8;w3?+#NB7zR(GvEn~1Ix{X%Tvfqx4UO< zW8(y}dzxr)HG_%;5=`L_#4k z7MMRQ7%%k5#sQD@DI~!HBMOr49V8%R9cgcEA(^xZuD~5D@C0d4;MU;0ED6E{np_Co z$_@mJlb-E$*hq~{pWABdcWPSv-Yuw}t(9(XcySw7pF8{ycjmh8%-`ZViI}3%1k~3k z@VNzD#u5>XEa1Ou+liA}o|OXo`l6$>7m_WK@p5r~W-2qj>oOM#W9C9R^K7!>9E;fz z)O-&NCd{NM)~B-ty?~)OfW6UHd6dMkZ(Z)OECE%(Xp6!S%jv|vh9I!GkfcXuD*QVX$?xnLdQjkl5$vb&l4N#nOz=2uNTDT*F zY_o)LjU^FO{lNBF3eKE%H{i#GomP6}?$((R@(fn34`sx+;vgVTaO^;R2A#M`MhX(l z4p=qame{Vwsxot0Wt5Vjff*x6nqRVIn#)1RrM*fnF#=n4>IN$8}M*BYhaN39q~sb_6Is zxKIdV+V``VIS|&7#TXf+m=_nu0}sRNHv_b;nqesi$|i0|Ds>t~7HmnFHZBx)*GkCT z48fr6w9`3KFd?1ht-_Y;c%fR}krHaRdqiX~PJO^3oDbOv%Vg^~?Y0#Dr;^%JP@kV7%%680->;q`o70rYbSFmOtdLZPPHY+$x>;5`=>gN~BPuRW`2 zH7)%p0CUBhG48;+!NdbgK$0#fG8S=42OW6OcQUJSUci+{gfT0gMQ%4&M(R3T!1RjH zVKDKSS<-0gGJzXCgM|}jHoBF-nBf^v$A(ml9X}EwR4+&emm)8FdRC7vOr6YvA?~_> z3OmeYAZjjPc+oCh#_7Ud-*#BfAs4$I+?K*NqLW;)$0N%IqZPm}NYyBY4F}l;Z6o!R zN3RQM8?mBvDMMs~06{Y>iLDs+IGCCT!i| zmFYZ*4RtEE1eO|v(G9F|jalMS2o&r$5@9JAE3knN$v zY`J=Oa#7zJO3?M_Xz%6T;r^392_r{C={uUlW3WO|JLXWWl;rvZaETez#k z1AhzG;x&+?>!@QRa`M&g;Wqx>twq(-^Z%Yvl3&*2`bA?fzxbVEcN65<4(|Np`lUav zU-}(gzx0PgydZ%uG(1+rZ+d6D~kU; zo=1h|ZwF51x?mGfB0>>`F_0#5trQZ=hBg5ja65hCp6$K(pLDvBm z6W9@8`g|t^g9MATx?^GjcjZi7?>uVXJ>ahjN5`>F9=D}(;hgN$QsWG3MfCOIWf}du zUPzxUEeq-2^+H9+OIX&tW46R+)oX7TVCs?kGv22D4fCcI1H7Jd7!a zYgv?%>%J2glrB-_2rj3|OiEZjJRb9t!K23Sow`4%%)e}ACZukB$IeehzPns5#>x3o zK zv(q&TgTarvSQztmUj1A>OR^(6b7g&)28i18dJasLT}}1YOhDEewVd|OVb_P(F%b1a z0#Ie;`lzSfbJjiHstcV1ZjYjW5>8hkQ87o48c)ah597&1a5JABJ(tN2kIv`w$wdnp zugG<|)t~E9*O5u!KGpKSUnfttuKr{;Rk;*jMf$e<`Ml6%B^H*HT=qgfk$tW|dct6R zYbaHQ)1sH8q^#)BW0s3&LOdPk3gm22k&+~Y{7}qi`Is`$m0ePdv*Sf~4Q)!0Fa4ED z_r54=&|K4k)atb7nnuw^obRCRzy0g;-Nk9%!1q&n^XsHtWp}=Kyb$aipM97P+OwtB zl+73Px0Ve4=sb}?8_3!L14yZ`LQZ|&UC)614N2F(o(pnc^mOP~^|rN+n1YMN45XKh zPpcX1=#%WqDat-bW#R2bS^B=ID|~YW{^(*Qn;AAHw3U0aV$>zu>fpPD@^-}Eslh1Z z+}@^?v25^eO29Se8mJt$ghrIAo<#P766U7oIaK+98Xwix-P5Sy;yu$jF&=YdM#FRaK4xf#@XOvc0S;<>HX#41Etc|32tTL*g_X2CM7MU zCH_KD2E1IQ6xZD?unKM0WkJyx;l%}BX;ha#i{8yueq4;b>gb#;mU)ranpi$(3qCkH zI5Z{(2>PhX@M+Bb(QKinMCF-WiYZ8SLd_S2Uh7B3%!w)Sp69dEQ}q2&U2>(M?o*Mz zo8kGB;(J-QTLyPGr4WL$$L0AC;-V#j>k5dHId$1hyL3vxJu>o+uI__5Cv}ue&c~DG zgE0(A%?C`ZEO2p5>6*#Qs}jFsRajfLDX3gz?0mAMyvEh6$wg?EhpofrAoSi9>*9||?lD7;heVFQ%z-#Du}(B!n^yyzq!4$vcrP7I;Q{+x+r z`j+%-O75KN^xH7+In*gis|~?Sq*CiLl_HCfQZXw42h%46Rj+?u%PZW8DTUgj`COr~ zz9;ZC{5!(~N&`M=sme4)&HmdO-pM5VTbBVTXU38(|<(=hInQOl8L-=m8%u9yN)!P!nE>MM{WwS}6?mvZm))r^l@q z=n6;eC@6VKxfS0F4c)1B<@-xPUM{XEbBdSA?Bf-sF7R@?vW)ZsysP-&iD6!zgKuUe zZmwi+H8H5Ie?ou5Hz51N3gj;BnNpkIX;VOHvygUeIBGtSZ&vV^(lFjd$z{X(0dgku zLpG*F?@Bi>hpZDC(;s<8plLV_bP}KT^Mp-W&pNPD7L^x2HJ@J^X8(E;5&A(j?tuEwi68prU}ZDf9{xJwFZdi?d`_;aEW|B|%uh{bKi!oO&ng)KaCRP#?rH(%? z1Wk+iwhg+1Nk1XpO`K$>G(-QQX8hZV$tw$v6wWRSP?hU2IjBO%V=Zw^yOv;=&DTxd zZ<}&}%63_gN?G{k8@aUK41Rul0Yw}_L88jQ9q@6coOxT^^HL-Jh9geBnVNh1x5w_EV^yC4VB&tkT-VB4*Q{`IN z$aFJoDnt1P5PM*=j}}Hm2AoC)6JF?|xPxP4(}*r5{3}NB2iyBG3P(YlGq&(FSO}UH z#xsS10&RBdO+ls&zXu91uO~^Mu0>ab0D+2z-H*zJVZIh;Va0-;gj<0RhFr*|Cw&jJV|G52s%j1!vv z#=Gm@OcvvL+y`kk{i31(E;x5+^UpMcVZistyw2E?j$&i^uqn{P!I;Dj(^keV8Vl?W z7xP43CSvo+DriYJ`5~+(SRo}@hJJTZ>TvpZkR?WPhb36TP+WThavsdQTbaQun|b3H zq$e}6cc&6la%TaT^mz|RY^3qpRJ60jlBi}glxJo#;jFSVkj!aB=d&IV;tYz&o-0xa z62Z62I~Y?^r_Y^gR#&Z7?XIQ(=IytTMp~u!R;RSlK`ilT8bEncJA-8Dztl!QOTL&e z?B$#{^KO!|J6X)9i#gd%tnEEH&eE2?r-VG2_c2Q`Z7*i1lkRb!C!CXuVQmoymUolM zi+UT$>YV$sPBd2aFZ52`$4$GYcB;f&KcVPwAC?+VR!q)HlBrWMr<|YjTu~Ah@P*Vv zv-jcr(uYYpw+!tJU4EF17B{&q237z=0JLswddnPP?Iu_5(2bX(^SO2` z9fc>5=#7E3f{8%Z&Kfm)3ULagtePL6XvCC5|Rnle6P~jxR$V^)S8U_S)+K zOr>4Th)Vy&F|1r?!S}*_QA%~|g+a&k4s2#Wgl(75zf)TtuuzYD=Rt;OqTDZ89;)f* zRPE%+Ba^5AuKrGbcqHGAXJ zI>LvAvvatXxJ`q_th;G+s|-_(>t%GeOs3UzT2H2lt7hWd9d(3%aynfWL3f-uC?kXt zmQJI|t>cYG&VMzdyQM*tv+xX=C-G5**-y6)IuQIi7N(*JFW93IR z)IyGmmdUSqbMQe;A{`_&!$Bskm@`Y9aP4$~3Ertoc=59w(Nag+(}7IqW096=Mj6Tz zoHX1>iK;Q3fRsH?aXR-SiJQoIO~#L%IbkIZi3#1$%z@?eJhc6oa#GB8JPY4-cIINd zG&_n9!rO%T!3NvO7)-nC$vnY{FpRTv=rrrgj2UpnnI$y`3B1V=NRuKX*_)!+n0x-V zi!XykZ^YzpnnIJ?aCYj=t`aLWm|io}l_e-0fU&eT%|t=&kr&UU(+lQ0Zx+E+W8)RU zf&-`h58>>7e-b2Z!ze!T(2bpCGCnXb8|ov8UcRL*7He`zlu<&hc-ZOrEh{I$aozWD z&+!?r&1iGZq3t^?^(;rL;rbNj>FWvD;L;XnmypK|5YJf&b%B!`&U82E&H?jf>*y30gkUk^mI0p09!1kBOuA4W`hixY zfcQ6RmOuhJUEjx*p(GR~qrISl)2j*$w?7su4YiG>_L0e}X4ZEKGmG)b`bU<$-6hh?WxK_5f8@mJXl zpTvzVp3H<(2}W#iPn-0>ab`~(T>(YQm|(2>P+qs1M#~5fV#7m{r99z@mw^G$I-tRl}WW&`IdMEtrB( zOf(S1NC>Hbfa?KRlDPGRn`^YMVD>2z4q_gbh#hFZa#AYnDhBYf!E*TaNqP0DoMOC5 zofJ1!cN2oay-<2oF&UKNO%#XUbKw^$4zrHIPOPe9kjx1MGq=X$qf`w-&QLX&oULkr z0H6U732WS&6`o|=myLn1hrMX!da@V=XJm~SyX>(3BiZ478`?e)^S;;_W?!kOj=NaO zpmDq*l7WQD*)cX*=^?Fz#NxL7D5P<72(&&F$I~_>9|R5O*WMguSkdV=g7p)z8h0`P zpE1|?tUAp;A*_U)`JNDB;%y==slH@#HVd>RAJG8y75W1nl=IB>0~Y} z8yv>C_$ButF&@}K-JT0go1t)$%Y%#}N+l)BNa8;VhYYDuhSv!+M8+3TT~t<7R1L@! zqL_6gkhozx^>Z#d8OO=R!gO{OZ)x0S+j_u5Xc)dSckS#$;c{b4onq@wqvUCC)?FAmidNVx>b936 zig&^rQTJtXw_D#j^G9I#ICyehE^>i|A5f;OGwo&rW}z5QM*B`gH>;3i+)|CcM5eQEGAY6(GeyQ4-3yfH^7coDAmCqxz;i~SP~5P(bVP<0NwE%IB>}EfmE@>_`41E_o)ZY?=s#bAh_>J{7`*7YgwEFo}YtWDs@C zhNJOtQn-O}XDF3KQ`pgTb4FK@4}e2?G`T9gJMSOt9$q+q`9(DP@txIK0ru9Ljh_lE zwe{}&P51cVLAc>;2Ey`0fVr`E=e^_O!{Y}*&!e00sUTBZ@6J#A`@NOm_Qt_eg2v`n zfS$NM38P6~S<1P{C@&mu8n>`S6%0AIGW~ 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

tfv&tL$nf(SlAN{GYMFvWY`pLl7>q< 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அ$@J?!3{O9?q}I4)22 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 =``De{Nd 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 literal 0 HcmV?d00001 From a8289d174d4daa5a68311c06e84ebfeae46daa0d Mon Sep 17 00:00:00 2001 From: johngrantuk Date: Tue, 7 May 2024 12:34:10 +0100 Subject: [PATCH 3/3] test: Add package for testing. --- .DS_Store | Bin 0 -> 8196 bytes package/README.md | 887 + package/dist/index.d.ts | 44976 ++++++++++++++++++++++++++++++++ package/dist/index.esm.js | 515 + package/dist/index.esm.js.map | 1 + package/dist/index.js | 515 + package/dist/index.js.map | 1 + package/dist/index.umd.js | 515 + package/dist/index.umd.js.map | 1 + package/package.json | 107 + 10 files changed, 47518 insertions(+) create mode 100644 .DS_Store create mode 100644 package/README.md create mode 100644 package/dist/index.d.ts create mode 100644 package/dist/index.esm.js create mode 100644 package/dist/index.esm.js.map create mode 100644 package/dist/index.js create mode 100644 package/dist/index.js.map create mode 100644 package/dist/index.umd.js create mode 100644 package/dist/index.umd.js.map create mode 100644 package/package.json diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ede9ed305c2a32054d83071860eb407c6279527a GIT binary patch literal 8196 zcmeHMYit!o6rQs!?JiyD6k1v2f)|Ps@hWZ6LR*AOduymXT6$aB(!yo$-31o5yJdIp zEm|9IOpFhFM1L7ye>D<~37|%!i810M8XrLt_@Rl35q|iHe~gKVo|)N8prwC|X?*M? zGw04Zb7tn8`OeOsy@U{G&l`<|XoL_ME2Fduo2wKiXLVYULQVxzKz%|Sk|QSZ$j#)? zw9yeG@<8N)$ODlFA`e6!_$PP(?`&4&8SZ@{joQcqkq7>l9$?RhI95iJAuS5ZA0626 z6aZ;CvU$PZmfmL4`U2p-v!N8Nv(& z`0A(^=fepk1&!Ls1Ca-&dw}KcRU}JvVq?8LfA_QF{#e#_vpC|7?3iu&K|{k?kjl#E zR8-29a+SO%eb60G2YQhA+jVc4_4-`b&X#`b*hck3R0nO+h3oO_1cbT4# zG()R>G`B0~Iz67rDoY5b&a7m_EJH=E`UYWlrw*30lYi@1X*s*0> z&zWjkvtVJZs_sU=I)Sy{GQIwB%Lon*>3+_149ht%P_TR}Yny$JK5EuT? zWJAc1$x_lpQe+$1hu_F1$fM*ba-5tb?~~KyEAlnDNPZ%}0YC*PFc+$z7V2OTXs{es z!#ZezR%nA1^uSK&g<;qSS;&C_qu@aRc__fWa6dc%55hz6Bs>kz!gKIEya2Dl2{;L- z;2roBK7-HU3pfwo!S`?hF2XNTxim+rkg6pr)ksUEmC`z?MQWAWqzzK1v_l$@Mx;Gr z_fjdwMoQ*|{QXF0c!FSzg-;Oa#MNUgwx#RNt?KrFO^ltJFQTgMnniIIYU^)rzl2Hw z;}UW&j|UzESA-4^0*;R<=slw?zII7$sd`;0G^d7aKSqyvRAwPSE5+y)>Pi`-ht3h* zRqBm0#tp3y-9+pb86%ZSysI|G)+!i}v`lmpv2}_}L3CQx4GKmkEf?KQ>Sl#K6e!{S zSSoghjL}8^Hqf6V-;xXDXYxCOem*QjsIP(sSPvUv3+#Yygn1hJVJ~DrN3b)fJ1_=E zz=wNa65(Ei``{Qn0*}Gt@B~8s83a9p{EP4s9EX?THFzD~gty>rI1L}bNANLxf_XaeY}Yw}BUo5ek}7xxlXJ_%+M9D0dGO?b<^8e16zyHtjuA=244@4fAO%FhMDxGS_6-!tA)Wun@9ml#4 zD=TbVQBbae4Nu3B@^l>Or9TYucN~W@on%Ohf+7dYtbYi=*SEj^jvd|q(fxmj`2T_X F|4)_3oG}0Z literal 0 HcmV?d00001 diff --git a/package/README.md b/package/README.md new file mode 100644 index 000000000..92c096487 --- /dev/null +++ b/package/README.md @@ -0,0 +1,887 @@ +# Balancer Javascript SDK + +A JavaScript SDK which provides commonly used utilties for interacting with Balancer Protocol V2. + +## How to run the examples (Javascript)? + +**In order to run the examples provided, you need to follow the next steps:** + +1. ```git clone https://github.com/balancer-labs/balancer-sdk.git``` +2. ```cd balancer-sdk``` +3. ```cd balancer-js``` +4. Create a .env file in the balancer-js folder +5. In the .env file you will need to define and initialize the following variables + + We have defined both Alchemy and Infura, because some of the examples use Infura, others use Alchemy. However, feel free to modify accordingly and use your favourite one. + ALCHEMY_URL=[ALCHEMY HTTPS ENDPOINT] + INFURA=[Infura API KEY] + TRADER_KEY=[MetaMask PRIVATE KEY] + Some examples also require the following Tenderly config parameters to be defined: + TENDERLY_ACCESS_KEY=[TENDERLY API ACCESS KEY] + TENDERLY_PROJECT=[TENDERLY PROJECT NAME] + TENDERLY_USER=[TENDERLY USERNAME] + +6. Run 'npm run node', this runs a local Hardhat Network +7. Open a new terminal +8. cd to balancer-js +9. Install ts-node using: ```npm install ts-node``` +10. Install tsconfig-paths using: ```npm install --save-dev tsconfig-paths``` +11. Generate contracts using: ```npm run typechain:generate``` +12. Run one of the provided examples (eg: npm run examples:run -- examples/join.ts) + +## Installation + +## Getting Started + +```js +import { BalancerSDK, BalancerSdkConfig, Network } from '@balancer-labs/sdk'; + +const config: BalancerSdkConfig = { + network: Network.MAINNET, + rpcUrl: `https://mainnet.infura.io/v3/${process.env.INFURA}`, +}; +const balancer = new BalancerSDK(config); +``` + +In some examples we present a way to make end to end trades against mainnet state. To run them you will need to setup a localhost test node using tools like ganache, hardhat, anvil. + +Installation instructions for: + +- [Hardhat](https://hardhat.org/getting-started/#installation) + + To start a MAINNET forked node: + + - Set env var: `ALCHEMY_URL=[ALCHEMY HTTPS ENDPOINT for MAINNET]` + - Run: `npm run node` + + To start a GOERLI forked node: + + - Set env var: `ALCHEMY_URL_GOERLI=[ALCHEMY HTTPS ENDPOINT for GOERLI]` + - Run: `npm run node:goerli` + +- [Anvil](https://github.com/foundry-rs/foundry/tree/master/anvil#installation) - use with caution, still experimental. + + To start a forked node: + + ``` + anvil -f FORKABLE_RPC_URL (optional pinned block: --fork-block-number XXX) + ``` + +## Swaps Module + +Exposes complete functionality for token swapping. An example of using the module with data fetched from the subgraph: + +```js +// Uses SOR to find optimal route for a trading pair and amount +const route = balancer.swaps.findRouteGivenIn({ + tokenIn, + tokenOut, + amount, + gasPrice, + maxPools, +}); + +// Prepares transaction attributes based on the route +const transactionAttributes = balancer.swaps.buildSwap({ + userAddress, + swapInfo: route, + kind: 0, // 0 - givenIn, 1 - givenOut + deadline, + maxSlippage, +}); + +// Extract parameters required for sendTransaction +const { to, data, value } = transactionAttributes; + +// Execution with ethers.js +const transactionResponse = await signer.sendTransaction({ to, data, value }); +``` + +## SwapsService + +The SwapsService provides function to query and make swaps using Balancer V2 liquidity. + +```js +const swaps = new swapService({ + network: Network; + rpcUrl: string; +}); +``` + +## Examples + +You can run each example with `npm run examples:run -- examples/exampleName.ts` + +### #queryBatchSwap + +The Balancer Vault provides a [method to simulate a call to batchSwap](https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/vault/contracts/interfaces/IVault.sol#L644). +This function performs no checks on the sender or recipient or token balances or approvals. Note that this function is not 'view' (due to implementation details): the client code must explicitly execute eth_call instead of eth_sendTransaction. + +@param batchSwap - BatchSwap information used for query. +@param batchSwap.kind - either exactIn or exactOut. +@param batchSwap.swaps - sequence of swaps. +@param batchSwap.assets - array contains the addresses of all assets involved in the swaps. +@returns Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at the same index in the `assets` array. + +```js +swaps.queryBatchSwap(batchSwap: { + kind: SwapType, + swaps: BatchSwapStep[], + assets: string[] +}): Promise +``` + +[Example](./examples/queryBatchSwap.ts) + +### #encodeBatchSwap + +Static method to encode a [batch swap](https://dev.balancer.fi/references/contracts/apis/the-vault#batch-swaps). + +_NB: This method doesn't execute a batchSwap -- it returns an [ABI byte string](https://docs.soliditylang.org/en/latest/abi-spec.html) containing the data of the function call on a contract, which can then be sent to the network (ex. [sendTransaction](https://web3js.readthedocs.io/en/v1.2.11/web3-eth.html#sendtransaction)). to be executed. See example for more info._ + +```js +/** + * @param {BatchSwap} batchSwap - BatchSwap information used for query. + * @param {SwapType} batchSwap.kind - either exactIn or exactOut + * @param {BatchSwapSteps[]} batchSwap.swaps - sequence of swaps + * @param {string[]} batchSwap.assets - array contains the addresses of all assets involved in the swaps + * @param {FundManagement} batchSwap.funds - object containing information about where funds should be taken/sent + * @param {number[]} batchSwap.limits - limits for each token involved in the swap, where either the maximum number of tokens to send (by passing a positive value) or the minimum amount of tokens to receive (by passing a negative value) is specified + * @param {string} batchSwap.deadline - time (in Unix timestamp) after which it will no longer attempt to make a trade + * @returns {string} encodedBatchSwapData - Returns an ABI byte string containing the data of the function call on a contract +*/ +Swaps.encodeBatchSwap(batchSwap: { + kind: SwapType, + swaps: BatchSwapStep[], + assets: string[], + funds: FundManagement, + limits: number[], + deadline: string +}): string +``` + +[Example](./examples/batchSwap.ts) + +### Swap Service: Flash Swaps + +A [Flash Swap](https://dev.balancer.fi/resources/swaps/flash-swaps) is a special type of [batch swap](https://dev.balancer.fi/resources/swaps/batch-swaps) where the caller doesn't need to own or provide any of the input tokens -- the caller is essentially taking a "flash loan" (an uncollateralized loan) from the Balancer Vault. The full amount of the input token must be returned to the Vault by the end of the batch (plus any swap fees), however any excess of an output tokens can be sent to any address. + +IMPORTANT: A "simple" flash swap is an arbitrage executed with only two tokens and two pools, +swapping in the first pool and then back in the second pool for a profit. For more +complex flash swaps, you will have to use batch swap directly. + +Gotchas: + +- Both pools must have both assets (tokens) for swaps to work +- No pool token balances can be zero +- If the flash swap isn't profitable, the internal flash loan will fail. + +### #encodeSimpleFlashSwap + +Static method to encode a simple flash swap [method for a batchSwap](https://dev.balancer.fi/resources/swaps/flash-swaps). + +_NB: This method doesn't execute any swaps -- it returns an [ABI byte string](https://docs.soliditylang.org/en/latest/abi-spec.html) containing the data of the function call on a contract, which can then be sent to the network (ex. [sendTransaction](https://web3js.readthedocs.io/en/v1.2.11/web3-eth.html#sendtransaction)). to be executed. See example for more info._ + +```js +/** + * @param {SimpleFlashSwapParameters} params - BatchSwap information used for query. + * @param {string} params.flashLoanAmount - initial input amount for the flash loan (first asset) + * @param {string[]} params.poolIds - array of Balancer pool ids + * @param {string[]} params.assets - array of token addresses + * @param {string} params.walletAddress - array of token addresses + * @returns {string} encodedBatchSwapData - Returns an ABI byte string containing the data of the function call on a contract +*/ +Swaps.encodeSimpleFlashSwap(simpleFlashSwap: { + flashLoanAmount: string, + poolIds: string[], + assets: string[] + walletAddress: string[] +}): string +``` + +[Example](./examples/flashSwap.ts) + +### #querySimpleFlashSwap + +Method to test if a simple flash swap is valid and see potential profits. + +```js +/** + * @param {SimpleFlashSwapParameters} params - BatchSwap information used for query. + * @param {string} params.flashLoanAmount - initial input amount for the flash loan (first asset) + * @param {string[]} params.poolIds - array of Balancer pool ids + * @param {string[]} params.assets - array of token addresses + * @returns {Promise<{profits: Record, isProfitable: boolean}>} Returns an ethersjs transaction response +*/ +swaps.querySimpleFlashSwap(batchSwap: { + kind: SwapType, + swaps: BatchSwapStep[], + assets: string[] +}): string +``` + +[Example](./examples/querySimpleFlashSwap.ts) + +## Pricing + +Spot Price functionality allowing user to query spot price for token pair. + +### calcSpotPrice + +Find Spot Price for pair in specific pool. + +```js +const balancer = new BalancerSDK(sdkConfig); +const pool = await balancer.pools.find(poolId); +const spotPrice = await pool.calcSpotPrice( + ADDRESSES[network].DAI.address, + ADDRESSES[network].BAL.address +); +``` + +### #getSpotPrice + +Find Spot Price for a token pair - finds most liquid path and uses this as reference SP. + +```js +const pricing = new Pricing(sdkConfig); +``` + +@param { string } tokenIn Token in address. +@param { string } tokenOut Token out address. +@param { SubgraphPoolBase[] } pools Optional - Pool data. Will be fetched via dataProvider if not supplied. +@returns { string } Spot price. + +```js +async getSpotPrice( + tokenIn: string, + tokenOut: string, + pools: SubgraphPoolBase[] = [] +): Promise +``` + +[Example](./examples/spotPrice.ts) + +## Simulating pool joins and exists + +The Balancer Vault provides a [method to simulate join or exit calls to a pool](https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/standalone-utils/contracts/BalancerQueries.sol#L91). +These function allows you to perform a dry run before sending an actual transaction, without checking the sender / recipient or token balances / approvals. Note that this function is not 'view' (due to implementation details): the client code must explicitly execute `eth_call` instead of `eth_sendTransaction`. + +### Simulating joins + +There are two ways to join a pool: + +1. `joinExactIn`: Joining the pool with known token amounts. This is the most commonly used method. +2. `joinExactOut`: Asking the pool for the expected liquidity when we know how much BPT we want back. + +In this documentation, we will focus on the first method (`joinExactIn`) for joining a pool with known token amounts. + +```js +const pool = await sdk.pools.find(poolId); +const maxAmountsIn = pool.tokenList.map( + (t) => forEachTokenSpecifyAmountYouWantToJoinWith +); +const queryParams = pool.buildQueryJoinExactIn({ maxAmountsIn }); +const response = await balancerContracts.balancerHelpers.queryJoin( + ...queryParams +); +const { bptOut, amountsIn } = response; +``` + +`response` will return: + +- `bptOut`: The expected pool token amount returned by the pool. +- `amountsIn`: The same as maxAmountsIn + +### Simulating exits + +There are three ways to exit a pool: + +1. `exitToSingleToken`: Exiting liquidity to a single underlying token is the simplest method. However, if the amount of liquidity being exited is a significant portion of the pool's total liquidity, it may result in price slippage. +2. `exitProportionally`: Exiting liquidity proportionally to all pool tokens. This is the most commonly used method. However `ComposableStable` pool type doesn't support it. +3. `exitExactOut`: Asking the pool for the expected pool token amount when we know how much token amounts we want back. + +In this example, we will focus on the first method (`exitProportionally`). + +```js +const pool = await sdk.pools.find(poolId); +const queryParams = pool.buildQueryJoinExactIn({ bptIn }); +const response = await balancerContracts.balancerHelpers.queryJoin( + ...queryParams +); +const { bptIn, amountsOut } = response; +``` + +`response` will return: + +- `amountsOut`: Token amounts returned by the pool. +- `bptIn`: The same as intput bptIn + +More examples: https://github.com/balancer-labs/balancer-sdk/blob/master/balancer-js/examples/pools/queries.ts + +## Joining Pools + +### Joining with pool tokens + +Exposes Join functionality allowing user to join pools with its pool tokens. + +```js +const balancer = new BalancerSDK(sdkConfig); +const pool = await balancer.pools.find(poolId); +const { to, functionName, attributes, data } = pool.buildJoin(params); +``` + +#### #buildJoin + +Builds join pool transaction parameters with exact tokens in and minimum BPT out based on slippage tolerance + +```js +/** + * @param joiner Account address joining pool + * @param tokensIn Token addresses provided for joining pool (same length and order as amountsIn) + * @param amountsIn Token amounts provided for joining pool in EVM scale + * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5% + * @returns transaction request ready to send with signer.sendTransaction + */ +buildJoin: ( + joiner: string, + tokensIn: string[], + amountsIn: string[], + slippage: string +) => JoinPoolAttributes; +``` + +where `JoinPoolAttributes` is: + +```js +/** + * Join with exact tokens in transaction parameters + * @param to Address that will execute the transaction (vault address) + * @param functionName Function name to be called (joinPool) + * @param attributes Transaction attributes ready to be encoded + * @param data Encoded transaction data + * @param value (Optional) ETH amount that must be informed when joining with ETH + * @param minBptOut Minimum BPT amoutn out of join transaction considering slippage tolerance + * @param expectedBptOut Expected BPT amount out of join transaction + * @param priceImpact Price impact of join transaction + */ +export interface JoinPoolAttributes { + to: string; + functionName: string; + attributes: JoinPool; + data: string; + value?: BigNumber; + minBPTOut: string; + expectedBPTOut: string; + priceImpact: string; +} +``` + +[Example](./examples/join.ts) + +### #buildInitJoin (Weighted Pool) + +Builds a init join transaction for weighted pool. + +```js +/** + * @param joiner - The address of the joiner of the pool + * @param poolId - The id of the pool + * @param tokensIn - array with the address of the tokens + * @param amountsIn - array with the amount of each token + * @returns a InitJoinPoolAttributes object, which can be directly inserted in the transaction to init join a weighted pool + */ +buildInitJoin({ + joiner, + poolId, + tokensIn, + amountsIn, +}) => InitJoinPoolAttributes +``` + +[Example](./examples/pools/weighted/init-join.ts) +Available pool types: + +- Weighted +- ComposableStable ([Example](./examples/pools/composable-stable/init-join.ts)) + +### Joining nested pools + +Exposes Join functionality allowing user to join a pool that has pool tokens that are BPTs of other pools, e.g.: + +``` + CS0 + / \ + CS1 CS2 + / \ / \ + DAI USDC USDT FRAX + +Can join with tokens: DAI, USDC, USDT, FRAX, CS1_BPT, CS2_BPT +``` + +```js +/** + * Builds generalised join transaction + * + * @param poolId Pool id + * @param tokens Token addresses + * @param amounts Token amounts in EVM scale + * @param userAddress User address + * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%. + * @param signer JsonRpcSigner that will sign the staticCall transaction if Static simulation chosen + * @param simulationType Simulation type (VaultModel, Tenderly or Static) + * @param authorisation Optional auhtorisation call to be added to the chained transaction + * @returns transaction data ready to be sent to the network along with min and expected BPT amounts out. + */ +async generalisedJoin( + poolId: string, + tokens: string[], + amounts: string[], + userAddress: string, + slippage: string, + signer: JsonRpcSigner, + simulationType: SimulationType, + authorisation?: string +): Promise<{ + to: string; + encodedCall: string; + minOut: string; + expectedOut: string; + priceImpact: string; +}> +``` + +[Example](./examples/joinGeneralised.ts) + +## Exit Pool + +Exposes Exit functionality allowing user to exit pools. + +```js +const balancer = new BalancerSDK(sdkConfig); +const pool = await balancer.pools.find(poolId); +const { to, functionName, attributes, data } = pool.buildExitExactBPTIn(params); +``` + +### #buildExitExactBPTIn + +Builds an exit transaction with exact BPT in and minimum token amounts out based on slippage tolerance. + +```js +/** + * Build exit pool transaction parameters with exact BPT in and minimum token amounts out based on slippage tolerance + * @param exiter Account address exiting pool + * @param bptIn BPT provided for exiting pool in EVM scale + * @param slippage Maximum slippage tolerance in bps. i.e. 50 = 5% + * @param shouldUnwrapNativeAsset Indicates whether wrapped native asset should be unwrapped after exit. Defaults to false. + * @param singleTokenOut Optional: token address that if provided will exit to given token + * @returns transaction request ready to send with signer.sendTransaction + */ +buildExitExactBPTIn: ( + exiter: string, + bptIn: string, + slippage: string, + shouldUnwrapNativeAsset?: boolean, + singleTokenOut?: string +) => ExitExactBPTInAttributes; +``` + +where `ExitExactBPTInAttributes` is: + +```js +/** + * Exit exact BPT in transaction parameters + * @param to Address that will execute the transaction (vault address) + * @param functionName Function name to be called (exitPool) + * @param attributes Transaction attributes ready to be encoded + * @param data Encoded transaction data + * @param expectedAmountsOut Expected amounts out of exit transaction + * @param minAmountsOut Minimum amounts out of exit transaction considering slippage tolerance + */ +export interface ExitExactBPTInAttributes extends ExitPoolAttributes { + to: string; + functionName: string; + attributes: ExitPool; + data: string; + expectedAmountsOut: string[]; + minAmountsOut: string[]; +} +``` + +[Example](./examples/exitExactBPTIn.ts)

+Available pool types: + +- Weighted [Example](./examples/exitExactBPTIn.ts) +- Composable Stable [Example](./examples/pools/composable-stable/exit.ts) + - OBS: **Only ComposableStable >V2 supports proportional exits** +- Meta Stable +- Stable + +### #buildExitExactTokensOut + +Builds an exit transaction with exact tokens out and maximum BPT in based on slippage tolerance. + +```js +/** + * Build exit pool transaction parameters with exact tokens out and maximum BPT in based on slippage tolerance + * @param exiter Account address exiting pool + * @param tokensOut Tokens provided for exiting pool (same length and order as amountsOut) + * @param amountsOut Amounts provided for exiting pool in EVM scale + * @param slippage Maximum slippage tolerance in bps. i.e. 50 = 5% + * @returns transaction request ready to send with signer.sendTransaction + */ +buildExitExactTokensOut: ( + exiter: string, + tokensOut: string[], + amountsOut: string[], + slippage: string +) => ExitExactTokensOutAttributes; +``` + +where `ExitExactTokensOutAttributes` is: + +```js +/** + * Exit exact tokens out transaction parameters + * @param to Address that will execute the transaction (vault address) + * @param functionName Function name to be called (exitPool) + * @param attributes Transaction attributes ready to be encoded + * @param data Encoded transaction data + * @param expectedBPTIn Expected BPT into exit transaction + * @param maxBPTIn Max BPT into exit transaction considering slippage tolerance + */ +export interface ExitExactTokensOutAttributes extends ExitPoolAttributes { + to: string; + functionName: string; + attributes: ExitPool; + data: string; + expectedBPTIn: string; + maxBPTIn: string; +} +``` + +[Example](./examples/exitExactTokensOut.ts) +

+Available pool types: + +- Weighted [Example](./examples/exitExactTokensOut.ts) +- Composable Stable +- Meta Stable +- Stable + +### Exiting nested pools + +Exposes Exit functionality allowing user to exit a pool that has pool tokens that are BPTs of other pools, e.g.: + +``` + CS0 + / \ + CS1 CS2 + / \ / \ + DAI USDC USDT FRAX + +Can exit with CS0_BPT proportionally to: DAI, USDC, USDT and FRAX +``` + +```js +/** + * Builds generalised exit transaction + * + * @param poolId Pool id + * @param amount Token amount in EVM scale + * @param userAddress User address + * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%. + * @param signer JsonRpcSigner that will sign the staticCall transaction if Static simulation chosen + * @param simulationType Simulation type (VaultModel, Tenderly or Static) + * @param authorisation Optional auhtorisation call to be added to the chained transaction + * @param unwrapTokens Determines if wrapped tokens should be unwrapped. Default = false + * @returns transaction data ready to be sent to the network along with tokens, min and expected amounts out. + */ +async generalisedExit( + poolId: string, + amount: string, + userAddress: string, + slippage: string, + signer: JsonRpcSigner, + simulationType: SimulationType, + authorisation?: string, + unwrapTokens = false +): Promise<{ + to: string; + encodedCall: string; + tokensOut: string[]; + expectedAmountsOut: string[]; + minAmountsOut: string[]; + priceImpact: string; +}> +``` + +[Example](./examples/exitGeneralised.ts) + +# Factory + +### Creating Pools + +### WeightedPool + +Builds a transaction to create a weighted pool. + +```js +/** + * Builds a transaction for a weighted pool create operation. + * @param factoryAddress - The address of the factory for weighted pool (contract address) + * @param name - The name of the pool + * @param symbol - The symbol of the pool + * @param tokenAddresses - The token's addresses + * @param weights The weights for each token, ordered + * @param swapFee - The swapFee for the owner of the pool in string or number format(100% is "1.00" or 1, 10% is "0.1" or 0.1, 1% is "0.01" or 0.01) + * @param owner - The address of the owner of the pool + * @returns a TransactionRequest object, which can be directly inserted in the transaction to create a weighted pool + */ +create({ + factoryAddress, + name, + symbol, + tokenAddresses, + weights, + swapFee, + owner, +}) => { + to?: string; + data: BytesLike; +} +``` + +[Example](./examples/pools/weighted/create-and-init-join.ts) + +### Composable Stable Pool + +Builds a transaction to create a composable stable pool. + +```js +/** + * Builds a transaction for a composable pool create operation. + * @param contractAddress - The address of the factory for composable stable pool (contract address) + * @param name - The name of the pool + * @param symbol - The symbol of the pool + * @param swapFee - The swapFee for the owner of the pool in string or number format(100% is "1.00" or 1, 10% is "0.1" or 0.1, 1% is "0.01" or 0.01) + * @param tokenAddresses - The token's addresses + * @param rateProviders The addresses of the rate providers for each token, ordered + * @param tokenRateCacheDurations the Token Rate Cache Duration of each token + * @param owner - The address of the owner of the pool + * @param amplificationParameter The amplification parameter(must be greater than 1) + * @param exemptFromYieldProtocolFeeFlags array containing boolean for each token exemption from yield protocol fee flags + * @returns a TransactionRequest object, which can be directly inserted in the transaction to create a composable stable pool + */ +create({ + factoryAddress, + name, + symbol, + tokenAddresses, + amplificationParameter, + rateProviders, + tokenRateCacheDurations, + exemptFromYieldProtocolFeeFlags, + swapFee, + owner, +}) => { + to?: string; + data: BytesLike; +} +``` + +[Example](./examples/pools/composable-stable/create-and-init-join.ts) + +### Linear Pool + +Builds a transaction to create a linear pool. + +```js + /** + * + * @param name The name of the pool + * @param symbol The symbol of the pool (BPT name) + * @param mainToken The unwrapped token + * @param wrappedToken The wrapped token + * @param upperTarget The maximum balance of the unwrapped(main) token (normal number, no need to fix to 18 decimals) + * @param swapFeeEvm The swap fee of the pool + * @param owner The address of the owner of the pool + * @param protocolId The protocolId, to check the available value + */ + create({ + name, + symbol, + mainToken, + wrappedToken, + upperTarget, + swapFeeEvm, + owner, + protocolId, + }: LinearCreatePoolParameters) => { + to?: string; + data: BytesLike; + } +``` + +[Example](./examples/pools/linear/create.ts) + +## RelayerService + +Relayers are (user opt-in, audited) contracts that can make calls to the vault (with the transaction “sender” being any arbitrary address) and use the sender’s ERC20 vault allowance, internal balance or BPTs on their behalf. + +```js +const relayer = new relayerService( + swapsService: SwapsService; + rpcUrl: string; +); +``` + +## Pools Impermanent Loss + +> impermanent loss (IL) describes the percentage by which a pool is worth less than what one would have if they had instead just held the tokens outside the pool + +#### Service + +![class-diagram](IL-class.png) + +#### Algorithm + +Using the variation delta formula: + +![img.png](img.png) + +where **𝚫Pi** represents the difference between the price for a single token at the date of joining the pool and the current price. + +```javascript +// retrieves pool's tokens +tokens = pool.tokens; +// get weights for tokens +weights = tokens.map((token) => token.weight); +// retrieves current price for tokens +exitPrices = tokens.map((token) => tokenPrices.find(token.address)); +// retrieves historical price for tokens +entryPrices = tokens.map((token) => + tokenPrices.findBy('timestamp', { + address: token.address, + timestamp: timestamp, + }) +); +// retrieves list of pool's assets with prices delta and weights +assets = tokens.map((token) => ({ + priceDelta: this.getDelta( + entryPrices[token.address], + exitPrices[token.address] + ), + weight: weights[i], +})); + +poolValueDelta = assets.reduce( + (result, asset) => + result * Math.pow(Math.abs(asset.priceDelta + 1), asset.weight), + 1 +); +holdValueDelta = assets.reduce( + (result, asset) => result + Math.abs(asset.priceDelta + 1) * asset.weight, + 0 +); + +const IL = poolValueDelta / holdValueDelta - 1; +``` + +#### Usage + +```javascript +async impermanentLoss( + timestamp: number, // the UNIX timestamp from which the IL is desired + pool: Pool // the pool on which the IL must be calculated +): Promise +``` + +```javascript +const pool = await sdk.pools.find(poolId); +const joins = (await sdk.data.findByUser(userAddress)).filter( + (it) => it.type === 'Join' && it.poolId === poolId +); +const join = joins[0]; +const IL = await pools.impermanentLoss(join.timestamp, pool); +``` + +[Example](./examples/pools/impermanentLoss.ts) + +## Claim Tokens + +### Service + +![classes](./claim-incentives-class.png) + +### Claim Tokens for a veBAL Holders + +#### Pseudocode + +- **Get Claimable Rewards** + +```javascript +const defaultClaimableTokens = [ + '0x7B50775383d3D6f0215A8F290f2C9e2eEBBEceb2', // bb-a-USD v1 + '0xA13a9247ea42D743238089903570127DdA72fE44', // bb-a-USD v2 + '0xba100000625a3754423978a60c9317c58a424e3D', // BAL +] + +const claimableTokens: string[] = userDefinedClaimableTokens ?? defaultClaimableTokens; + +const balances = await ClaimService.getClaimableVeBalTokens(userAddress, claimableTokens) { + return await this.feeDistributor.callStatic.claimTokens(userAddress,claimableTokens); +} + +const txData = await getClaimableVeBalTokens.buildClaimVeBalTokensRequest(userAddress, claimableTokens) { + data = feeDistributorContract.claimBalances(userAddress, claimableTokens); + to = feeDistributorContract.encodeFunctionData('claimTokens', [userAddress, claimableTokens]) +} + +//on client +signer.request(txData).then(() => { ... }); + +``` + +### Claim Pools Incentives + +#### Pseudocode + +- **Get Claimable Rewards** + +```javascript +gauges = LiquidityGaugesRepository.fetch(); +claimableTokensPerGauge = LiquidityGaugesMulticallRepository.getClaimableTokens(gauges, accountAddress) { + if (MAINNET) { + claimableTokens = this.multicall.aggregate('claimable_tokens', gauges, accountAddress); + claimableReward = gauge.rewardData.forEach(this.multicall.aggregate('claimable_reward', gauges, accountAddress, rewardToken); + return aggregate(claimableReward, claimableTokens); + } else { + return gauge.rewardData.forEach(this.multicall.aggregate('claimable_reward', gauges, accountAddress, rewardToken); + } +}; + +``` + +- **Claim Rewards** + +it returns encoded callable data to be fed to a signer and then to send to the gauge contract. + +```javascript +if (MAINNET) { + const callData = balancerMinterInterface.encodeFunctionData('mintMany', [ + gaugeAddresses, + ]); + return { to: balancerMinterAddress, data: callData }; +} else { + const callData = gaugeClaimHelperInterface.encodeFunctionData( + 'claimRewardsFromGauges', + [gaugeAddresses, userAddress] + ); + return { to: gaugeClaimHelperAddress, data: callData }; +} +``` + +## Licensing + +[GNU General Public License Version 3 (GPL v3)](../../LICENSE). diff --git a/package/dist/index.d.ts b/package/dist/index.d.ts new file mode 100644 index 000000000..a9bde138a --- /dev/null +++ b/package/dist/index.d.ts @@ -0,0 +1,44976 @@ +import { BigNumberish, BigNumber } from '@ethersproject/bignumber'; +import { Contract } from '@ethersproject/contracts'; +import { SubgraphPoolBase, SubgraphToken, PoolDataService, TokenPriceService, SwapInfo, SOR, WeightedPool as WeightedPool$1, StablePool as StablePool$1, LinearPool as LinearPool$1, MetaStablePool, PhantomStablePool, ComposableStablePool as ComposableStablePool$1, SwapTypes, SwapV2 } from '@balancer-labs/sor'; +export { PoolFilter, SOR, SubgraphPoolBase, SwapInfo, SwapOptions, SwapTypes, SwapV2, stableBPTForTokensZeroPriceImpact, weightedBPTForTokensZeroPriceImpact } from '@balancer-labs/sor'; +import { Listener, Provider, TransactionReceipt, JsonRpcSigner, JsonRpcProvider } from '@ethersproject/providers'; +import { Event, EventFilter, BigNumberish as BigNumberish$1, BigNumber as BigNumber$1, BaseContract, Signer, CallOverrides, Overrides, ContractTransaction, BytesLike, PopulatedTransaction, utils, PayableOverrides } from 'ethers'; +import { FunctionFragment, Result, EventFragment, Interface, LogDescription } from '@ethersproject/abi'; +import { GraphQLClient } from 'graphql-request'; +import * as Dom from 'graphql-request/dist/types.dom'; +import { Signer as Signer$1, TypedDataSigner } from '@ethersproject/abstract-signer'; +import { BytesLike as BytesLike$1 } from '@ethersproject/bytes'; + +declare class BasePoolEncoder { + /** + * Encodes the userData parameter for exiting any Pool in recovery mode, by removing tokens in return for + * an exact amount of BPT + * @param bptAmountIn - the amount of BPT to be burned + */ + static recoveryModeExit: (bptAmountIn: BigNumberish) => string; +} + +declare enum StablePoolJoinKind { + INIT = 0, + EXACT_TOKENS_IN_FOR_BPT_OUT = 1, + TOKEN_IN_FOR_EXACT_BPT_OUT = 2 +} +declare enum StablePhantomPoolJoinKind { + INIT = 0, + COLLECT_PROTOCOL_FEES = 1 +} +declare enum StablePoolExitKind { + EXACT_BPT_IN_FOR_ONE_TOKEN_OUT = 0, + EXACT_BPT_IN_FOR_TOKENS_OUT = 1, + BPT_IN_FOR_EXACT_TOKENS_OUT = 2 +} +declare class StablePoolEncoder { + /** + * Cannot be constructed. + */ + private constructor(); + /** + * Encodes the userData parameter for providing the initial liquidity to a StablePool + * @param initialBalances - the amounts of tokens to send to the pool to form the initial balances + */ + static joinInit: (amountsIn: BigNumberish[]) => string; + /** + * Encodes the userData parameter for collecting protocol fees for StablePhantomPool + */ + static joinCollectProtocolFees: () => string; + /** + * Encodes the userData parameter for joining a StablePool with exact token inputs + * @param amountsIn - the amounts each of token to deposit in the pool as liquidity + * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens + */ + static joinExactTokensInForBPTOut: (amountsIn: BigNumberish[], minimumBPT: BigNumberish) => string; + /** + * Encodes the userData parameter for joining a StablePool with to receive an exact amount of BPT + * @param bptAmountOut - the amount of BPT to be minted + * @param enterTokenIndex - the index of the token to be provided as liquidity + */ + static joinTokenInForExactBPTOut: (bptAmountOut: BigNumberish, enterTokenIndex: number) => string; + /** + * Encodes the userData parameter for exiting a StablePool by removing a single token in return for an exact amount of BPT + * @param bptAmountIn - the amount of BPT to be burned + * @param enterTokenIndex - the index of the token to removed from the pool + */ + static exitExactBPTInForOneTokenOut: (bptAmountIn: BigNumberish, exitTokenIndex: number) => string; + /** + * Encodes the userData parameter for exiting a StablePool by removing tokens in return for an exact amount of BPT + * @param bptAmountIn - the amount of BPT to be burned + */ + static exitExactBPTInForTokensOut: (bptAmountIn: BigNumberish) => string; + /** + * Encodes the userData parameter for exiting a StablePool by removing exact amounts of tokens + * @param amountsOut - the amounts of each token to be withdrawn from the pool + * @param maxBPTAmountIn - the minimum acceptable BPT to burn in return for withdrawn tokens + */ + static exitBPTInForExactTokensOut: (amountsOut: BigNumberish[], maxBPTAmountIn: BigNumberish) => string; +} + +declare enum WeightedPoolJoinKind { + INIT = 0, + EXACT_TOKENS_IN_FOR_BPT_OUT = 1, + TOKEN_IN_FOR_EXACT_BPT_OUT = 2, + ALL_TOKENS_IN_FOR_EXACT_BPT_OUT = 3 +} +declare enum WeightedPoolExitKind { + EXACT_BPT_IN_FOR_ONE_TOKEN_OUT = 0, + EXACT_BPT_IN_FOR_TOKENS_OUT = 1, + BPT_IN_FOR_EXACT_TOKENS_OUT = 2, + MANAGEMENT_FEE_TOKENS_OUT = 3 +} +declare class WeightedPoolEncoder { + /** + * Cannot be constructed. + */ + private constructor(); + /** + * Encodes the userData parameter for providing the initial liquidity to a WeightedPool + * @param initialBalances - the amounts of tokens to send to the pool to form the initial balances + */ + static joinInit: (amountsIn: BigNumberish[]) => string; + /** + * Encodes the userData parameter for joining a WeightedPool with exact token inputs + * @param amountsIn - the amounts each of token to deposit in the pool as liquidity + * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens + */ + static joinExactTokensInForBPTOut: (amountsIn: BigNumberish[], minimumBPT: BigNumberish) => string; + /** + * Encodes the userData parameter for joining a WeightedPool with a single token to receive an exact amount of BPT + * @param bptAmountOut - the amount of BPT to be minted + * @param enterTokenIndex - the index of the token to be provided as liquidity + */ + static joinTokenInForExactBPTOut: (bptAmountOut: BigNumberish, enterTokenIndex: number) => string; + /** + * Encodes the userData parameter for joining a WeightedPool proportionally to receive an exact amount of BPT + * @param bptAmountOut - the amount of BPT to be minted + */ + static joinAllTokensInForExactBPTOut: (bptAmountOut: BigNumberish) => string; + /** + * Encodes the userData parameter for exiting a WeightedPool by removing a single token in return for an exact amount of BPT + * @param bptAmountIn - the amount of BPT to be burned + * @param enterTokenIndex - the index of the token to removed from the pool + */ + static exitExactBPTInForOneTokenOut: (bptAmountIn: BigNumberish, exitTokenIndex: number) => string; + /** + * Encodes the userData parameter for exiting a WeightedPool by removing tokens in return for an exact amount of BPT + * @param bptAmountIn - the amount of BPT to be burned + */ + static exitExactBPTInForTokensOut: (bptAmountIn: BigNumberish) => string; + /** + * Encodes the userData parameter for exiting a WeightedPool by removing exact amounts of tokens + * @param amountsOut - the amounts of each token to be withdrawn from the pool + * @param maxBPTAmountIn - the minimum acceptable BPT to burn in return for withdrawn tokens + */ + static exitBPTInForExactTokensOut: (amountsOut: BigNumberish[], maxBPTAmountIn: BigNumberish) => string; +} +declare class ManagedPoolEncoder { + /** + * Cannot be constructed. + */ + private constructor(); + /** + * Encodes the userData parameter for exiting a ManagedPool for withdrawing management fees. + * This can only be done by the pool owner. + */ + static exitForManagementFees: () => string; +} + +/** + * Normalize an array of token weights to ensure they sum to `1e18` + * @param weights - an array of token weights to be normalized + * @returns an equivalent set of normalized weights + */ +declare function toNormalizedWeights(weights: BigNumber[]): BigNumber[]; +/** + * Check whether a set of weights are normalized + * @param weights - an array of potentially unnormalized weights + * @returns a boolean of whether the weights are normalized + */ +declare const isNormalizedWeights: (weights: BigNumberish[]) => boolean; + +declare enum ComposableStablePoolJoinKind { + INIT = 0, + EXACT_TOKENS_IN_FOR_BPT_OUT = 1, + TOKEN_IN_FOR_EXACT_BPT_OUT = 2 +} +declare enum ComposableStablePoolExitKind { + EXACT_BPT_IN_FOR_ONE_TOKEN_OUT = 0, + BPT_IN_FOR_EXACT_TOKENS_OUT = 1, + EXACT_BPT_IN_FOR_ALL_TOKENS_OUT = 2 +} +declare class ComposableStablePoolEncoder { + /** + * Cannot be constructed. + */ + private constructor(); + /** + * Encodes the userData parameter for providing the initial liquidity to a ComposableStablePool + * @param initialBalances - the amounts of tokens to send to the pool to form the initial balances + */ + static joinInit: (amountsIn: BigNumberish[]) => string; + /** + * Encodes the userData parameter for collecting protocol fees for StablePhantomPool + */ + static joinCollectProtocolFees: () => string; + /** + * Encodes the userData parameter for joining a ComposableStablePool with exact token inputs + * @param amountsIn - the amounts each of token to deposit in the pool as liquidity + * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens + */ + static joinExactTokensInForBPTOut: (amountsIn: BigNumberish[], minimumBPT: BigNumberish) => string; + /** + * Encodes the userData parameter for joining a ComposableStablePool with to receive an exact amount of BPT + * @param bptAmountOut - the amount of BPT to be minted + * @param enterTokenIndex - the index of the token to be provided as liquidity + */ + static joinTokenInForExactBPTOut: (bptAmountOut: BigNumberish, enterTokenIndex: number) => string; + /** + * Encodes the userData parameter for exiting a ComposableStablePool by removing a single token in return for an exact amount of BPT + * @param bptAmountIn - the amount of BPT to be burned + * @param enterTokenIndex - the index of the token to removed from the pool + */ + static exitExactBPTInForOneTokenOut: (bptAmountIn: BigNumberish, exitTokenIndex: number) => string; + /** + * Encodes the userData parameter for exiting a StablePool by removing tokens in return for an exact amount of BPT + * @param bptAmountIn - the amount of BPT to be burned + */ + static exitExactBPTInForAllTokensOut: (bptAmountIn: BigNumberish) => string; + /** + * Encodes the userData parameter for exiting a ComposableStablePool by removing exact amounts of tokens + * @param amountsOut - the amounts of each token to be withdrawn from the pool + * @param maxBPTAmountIn - the max acceptable BPT to burn in return for withdrawn tokens + */ + static exitBPTInForExactTokensOut: (amountsOut: BigNumberish[], maxBPTAmountIn: BigNumberish) => string; +} + +declare enum Network { + MAINNET = 1, + GOERLI = 5, + GÖRLI = 5, + OPTIMISM = 10, + GNOSIS = 100, + POLYGON = 137, + FANTOM = 250, + BASE = 8453, + ZKEVM = 1101, + ARBITRUM = 42161, + AVALANCHE = 43114, + SEPOLIA = 11155111 +} + +interface JoinPool { + poolId: string; + sender: string; + recipient: string; + joinPoolRequest: JoinPoolRequest$1; +} +/** + * Join with exact tokens in transaction parameters + * @param to Address that will execute the transaction (vault address) + * @param functionName Function name to be called (joinPool) + * @param attributes Transaction attributes ready to be encoded + * @param data Encoded transaction data + * @param value Optional: ETH amount in EVM scale (required when joining with ETH) + * @param minBptOut Minimum BPT amount out of join transaction considering slippage tolerance in EVM scale + * @param expectedBptOut Expected BPT amount out of join transaction in EVM scale + * @param priceImpact Price impact of join transaction in EVM scale + */ +interface JoinPoolAttributes { + to: string; + functionName: string; + attributes: JoinPool; + data: string; + value?: BigNumber; + minBPTOut: string; + expectedBPTOut: string; + priceImpact: string; +} +interface ExitPool { + poolId: string; + sender: string; + recipient: string; + exitPoolRequest: ExitPoolRequest$1; +} +interface ExitPoolAttributes { + to: string; + functionName: string; + attributes: ExitPool; + data: string; +} +/** + * Exit exact BPT in transaction parameters + * @param to Address that will execute the transaction (vault address) + * @param functionName Function name to be called (exitPool) + * @param attributes Transaction attributes ready to be encoded + * @param data Encoded transaction data + * @param expectedAmountsOut Expected amounts out of exit transaction in EVM scale + * @param minAmountsOut Minimum amounts out of exit transaction (considering slippage tolerance) in EVM scale + * @param priceImpact Price impact of exit transaction in EVM scale + */ +interface ExitExactBPTInAttributes extends ExitPoolAttributes { + expectedAmountsOut: string[]; + minAmountsOut: string[]; + priceImpact: string; +} +/** + * Exit exact tokens out transaction parameters + * @param to Address that will execute the transaction (vault address) + * @param functionName Function name to be called (exitPool) + * @param attributes Transaction attributes ready to be encoded + * @param data Encoded transaction data + * @param expectedBPTIn Expected BPT into exit transaction in EVM scale + * @param maxBPTIn Max BPT into exit transaction (considering slippage tolerance) in EVM scale + * @param priceImpact Price impact of exit transaction in EVM scale + */ +interface ExitExactTokensOutAttributes extends ExitPoolAttributes { + expectedBPTIn: string; + maxBPTIn: string; + priceImpact: string; +} + +interface TypedEvent = any, TArgsObject = any> extends Event { + args: TArgsArray & TArgsObject; +} +interface TypedEventFilter<_TEvent extends TypedEvent> extends EventFilter { +} +interface TypedListener { + (...listenerArg: [...__TypechainArgsArray, TEvent]): void; +} +type __TypechainArgsArray = T extends TypedEvent ? U : never; +interface OnEvent { + (eventFilter: TypedEventFilter, listener: TypedListener): TRes; + (eventName: string, listener: Listener): TRes; +} +type PromiseOrValue = T | Promise; + +declare namespace IPoolSwapStructs$b { + type SwapRequestStruct = { + kind: PromiseOrValue; + tokenIn: PromiseOrValue; + tokenOut: PromiseOrValue; + amount: PromiseOrValue; + poolId: PromiseOrValue; + lastChangeBlock: PromiseOrValue; + from: PromiseOrValue; + to: PromiseOrValue; + userData: PromiseOrValue; + }; + type SwapRequestStructOutput = [ + number, + string, + string, + BigNumber$1, + string, + BigNumber$1, + string, + string, + string + ] & { + kind: number; + tokenIn: string; + tokenOut: string; + amount: BigNumber$1; + poolId: string; + lastChangeBlock: BigNumber$1; + from: string; + to: string; + userData: string; + }; +} +interface AaveLinearPoolInterface extends utils.Interface { + functions: { + "DOMAIN_SEPARATOR()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "disableRecoveryMode()": FunctionFragment; + "enableRecoveryMode()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getBptIndex()": FunctionFragment; + "getDomainSeparator()": FunctionFragment; + "getMainIndex()": FunctionFragment; + "getMainToken()": FunctionFragment; + "getNextNonce(address)": FunctionFragment; + "getOwner()": FunctionFragment; + "getPausedState()": FunctionFragment; + "getPoolId()": FunctionFragment; + "getProtocolFeesCollector()": FunctionFragment; + "getRate()": FunctionFragment; + "getScalingFactors()": FunctionFragment; + "getSwapFeePercentage()": FunctionFragment; + "getTargets()": FunctionFragment; + "getVault()": FunctionFragment; + "getVirtualSupply()": FunctionFragment; + "getWrappedIndex()": FunctionFragment; + "getWrappedToken()": FunctionFragment; + "getWrappedTokenRate()": FunctionFragment; + "inRecoveryMode()": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "initialize()": FunctionFragment; + "name()": FunctionFragment; + "nonces(address)": FunctionFragment; + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)": FunctionFragment; + "pause()": FunctionFragment; + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "setSwapFeePercentage(uint256)": FunctionFragment; + "setTargets(uint256,uint256)": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "unpause()": FunctionFragment; + "version()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "DOMAIN_SEPARATOR" | "allowance" | "approve" | "balanceOf" | "decimals" | "decreaseAllowance" | "disableRecoveryMode" | "enableRecoveryMode" | "getActionId" | "getAuthorizer" | "getBptIndex" | "getDomainSeparator" | "getMainIndex" | "getMainToken" | "getNextNonce" | "getOwner" | "getPausedState" | "getPoolId" | "getProtocolFeesCollector" | "getRate" | "getScalingFactors" | "getSwapFeePercentage" | "getTargets" | "getVault" | "getVirtualSupply" | "getWrappedIndex" | "getWrappedToken" | "getWrappedTokenRate" | "inRecoveryMode" | "increaseAllowance" | "initialize" | "name" | "nonces" | "onExitPool" | "onJoinPool" | "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)" | "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)" | "pause" | "permit" | "queryExit" | "queryJoin" | "setSwapFeePercentage" | "setTargets" | "symbol" | "totalSupply" | "transfer" | "transferFrom" | "unpause" | "version"): FunctionFragment; + encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string; + encodeFunctionData(functionFragment: "allowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "decreaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "disableRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "enableRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getBptIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getDomainSeparator", values?: undefined): string; + encodeFunctionData(functionFragment: "getMainIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getMainToken", values?: undefined): string; + encodeFunctionData(functionFragment: "getNextNonce", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getOwner", values?: undefined): string; + encodeFunctionData(functionFragment: "getPausedState", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolId", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolFeesCollector", values?: undefined): string; + encodeFunctionData(functionFragment: "getRate", values?: undefined): string; + encodeFunctionData(functionFragment: "getScalingFactors", values?: undefined): string; + encodeFunctionData(functionFragment: "getSwapFeePercentage", values?: undefined): string; + encodeFunctionData(functionFragment: "getTargets", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "getVirtualSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedToken", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedTokenRate", values?: undefined): string; + encodeFunctionData(functionFragment: "inRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "increaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "initialize", values?: undefined): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "nonces", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "onExitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onJoinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)", values: [ + IPoolSwapStructs$b.SwapRequestStruct, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)", values: [ + IPoolSwapStructs$b.SwapRequestStruct, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "pause", values?: undefined): string; + encodeFunctionData(functionFragment: "permit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryExit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryJoin", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "setSwapFeePercentage", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setTargets", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "transfer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "transferFrom", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decreaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "disableRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "enableRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getBptIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDomainSeparator", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMainIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMainToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNextNonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getOwner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPausedState", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeesCollector", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getScalingFactors", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTargets", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVirtualSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedTokenRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "inRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onExitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onJoinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryExit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryJoin", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setTargets", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + events: { + "Approval(address,address,uint256)": EventFragment; + "PausedStateChanged(bool)": EventFragment; + "RecoveryModeStateChanged(bool)": EventFragment; + "SwapFeePercentageChanged(uint256)": EventFragment; + "TargetsSet(address,uint256,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PausedStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RecoveryModeStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SwapFeePercentageChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TargetsSet"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} +interface ApprovalEventObject$d { + owner: string; + spender: string; + value: BigNumber$1; +} +type ApprovalEvent$d = TypedEvent<[ + string, + string, + BigNumber$1 +], ApprovalEventObject$d>; +type ApprovalEventFilter$d = TypedEventFilter; +interface PausedStateChangedEventObject$a { + paused: boolean; +} +type PausedStateChangedEvent$a = TypedEvent<[ + boolean +], PausedStateChangedEventObject$a>; +type PausedStateChangedEventFilter$a = TypedEventFilter; +interface RecoveryModeStateChangedEventObject$6 { + enabled: boolean; +} +type RecoveryModeStateChangedEvent$6 = TypedEvent<[ + boolean +], RecoveryModeStateChangedEventObject$6>; +type RecoveryModeStateChangedEventFilter$6 = TypedEventFilter; +interface SwapFeePercentageChangedEventObject$9 { + swapFeePercentage: BigNumber$1; +} +type SwapFeePercentageChangedEvent$9 = TypedEvent<[ + BigNumber$1 +], SwapFeePercentageChangedEventObject$9>; +type SwapFeePercentageChangedEventFilter$9 = TypedEventFilter; +interface TargetsSetEventObject$5 { + token: string; + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; +} +type TargetsSetEvent$5 = TypedEvent<[ + string, + BigNumber$1, + BigNumber$1 +], TargetsSetEventObject$5>; +type TargetsSetEventFilter$5 = TypedEventFilter; +interface TransferEventObject$d { + from: string; + to: string; + value: BigNumber$1; +} +type TransferEvent$d = TypedEvent<[ + string, + string, + BigNumber$1 +], TransferEventObject$d>; +type TransferEventFilter$d = TypedEventFilter; +declare namespace AaveLinearPool { + type ConstructorArgsStruct = { + vault: PromiseOrValue; + name: PromiseOrValue; + symbol: PromiseOrValue; + mainToken: PromiseOrValue; + wrappedToken: PromiseOrValue; + assetManager: PromiseOrValue; + upperTarget: PromiseOrValue; + swapFeePercentage: PromiseOrValue; + pauseWindowDuration: PromiseOrValue; + bufferPeriodDuration: PromiseOrValue; + owner: PromiseOrValue; + version: PromiseOrValue; + }; + type ConstructorArgsStructOutput = [ + string, + string, + string, + string, + string, + string, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + string, + string + ] & { + vault: string; + name: string; + symbol: string; + mainToken: string; + wrappedToken: string; + assetManager: string; + upperTarget: BigNumber$1; + swapFeePercentage: BigNumber$1; + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + owner: string; + version: string; + }; +} +interface AaveLinearPool extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: AaveLinearPoolInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + decimals(overrides?: CallOverrides): Promise<[number]>; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getBptIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getDomainSeparator(overrides?: CallOverrides): Promise<[string]>; + getMainIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getMainToken(overrides?: CallOverrides): Promise<[string]>; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + getOwner(overrides?: CallOverrides): Promise<[string]>; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise<[string]>; + getProtocolFeesCollector(overrides?: CallOverrides): Promise<[string]>; + getRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getScalingFactors(overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + getSwapFeePercentage(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise<[string]>; + getVirtualSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getWrappedIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getWrappedToken(overrides?: CallOverrides): Promise<[string]>; + getWrappedTokenRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + inRecoveryMode(overrides?: CallOverrides): Promise<[boolean]>; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise<[string]>; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$b.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$b.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise<[string]>; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise<[string]>; + }; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$b.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$b.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + callStatic: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + disableRecoveryMode(overrides?: CallOverrides): Promise; + enableRecoveryMode(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsOut: BigNumber$1[]; + dueProtocolFees: BigNumber$1[]; + }>; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsIn: BigNumber$1[]; + dueProtocolFees: BigNumber$1[]; + }>; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$b.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$b.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: CallOverrides): Promise; + pause(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptIn: BigNumber$1; + amountsOut: BigNumber$1[]; + }>; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptOut: BigNumber$1; + amountsIn: BigNumber$1[]; + }>; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: CallOverrides): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + unpause(overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + filters: { + "Approval(address,address,uint256)"(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$d; + Approval(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$d; + "PausedStateChanged(bool)"(paused?: null): PausedStateChangedEventFilter$a; + PausedStateChanged(paused?: null): PausedStateChangedEventFilter$a; + "RecoveryModeStateChanged(bool)"(enabled?: null): RecoveryModeStateChangedEventFilter$6; + RecoveryModeStateChanged(enabled?: null): RecoveryModeStateChangedEventFilter$6; + "SwapFeePercentageChanged(uint256)"(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$9; + SwapFeePercentageChanged(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$9; + "TargetsSet(address,uint256,uint256)"(token?: PromiseOrValue | null, lowerTarget?: null, upperTarget?: null): TargetsSetEventFilter$5; + TargetsSet(token?: PromiseOrValue | null, lowerTarget?: null, upperTarget?: null): TargetsSetEventFilter$5; + "Transfer(address,address,uint256)"(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$d; + Transfer(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$d; + }; + estimateGas: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$b.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$b.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$b.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$b.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + }; +} + +interface AaveLinearPoolFactoryInterface extends utils.Interface { + functions: { + "create(string,string,address,address,uint256,uint256,address,uint256,bytes32)": FunctionFragment; + "disable()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getCreationCode()": FunctionFragment; + "getCreationCodeContracts()": FunctionFragment; + "getLastCreatedPool()": FunctionFragment; + "getPauseConfiguration()": FunctionFragment; + "getPoolVersion()": FunctionFragment; + "getProtocolFeePercentagesProvider()": FunctionFragment; + "getVault()": FunctionFragment; + "isDisabled()": FunctionFragment; + "isPoolFromFactory(address)": FunctionFragment; + "version()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "create" | "disable" | "getActionId" | "getAuthorizer" | "getCreationCode" | "getCreationCodeContracts" | "getLastCreatedPool" | "getPauseConfiguration" | "getPoolVersion" | "getProtocolFeePercentagesProvider" | "getVault" | "isDisabled" | "isPoolFromFactory" | "version"): FunctionFragment; + encodeFunctionData(functionFragment: "create", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "disable", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getCreationCode", values?: undefined): string; + encodeFunctionData(functionFragment: "getCreationCodeContracts", values?: undefined): string; + encodeFunctionData(functionFragment: "getLastCreatedPool", values?: undefined): string; + encodeFunctionData(functionFragment: "getPauseConfiguration", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolVersion", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolFeePercentagesProvider", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "isDisabled", values?: undefined): string; + encodeFunctionData(functionFragment: "isPoolFromFactory", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + decodeFunctionResult(functionFragment: "create", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "disable", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCreationCode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCreationCodeContracts", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getLastCreatedPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPauseConfiguration", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolVersion", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeePercentagesProvider", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isDisabled", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isPoolFromFactory", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + events: { + "AaveLinearPoolCreated(address,uint256)": EventFragment; + "FactoryDisabled()": EventFragment; + "PoolCreated(address)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "AaveLinearPoolCreated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "FactoryDisabled"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PoolCreated"): EventFragment; +} +interface AaveLinearPoolCreatedEventObject { + pool: string; + protocolId: BigNumber$1; +} +type AaveLinearPoolCreatedEvent = TypedEvent<[ + string, + BigNumber$1 +], AaveLinearPoolCreatedEventObject>; +type AaveLinearPoolCreatedEventFilter = TypedEventFilter; +interface FactoryDisabledEventObject$6 { +} +type FactoryDisabledEvent$6 = TypedEvent<[], FactoryDisabledEventObject$6>; +type FactoryDisabledEventFilter$6 = TypedEventFilter; +interface PoolCreatedEventObject$6 { + pool: string; +} +type PoolCreatedEvent$6 = TypedEvent<[string], PoolCreatedEventObject$6>; +type PoolCreatedEventFilter$6 = TypedEventFilter; +interface AaveLinearPoolFactory extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: AaveLinearPoolFactoryInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getCreationCode(overrides?: CallOverrides): Promise<[string]>; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise<[string]>; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise<[string]>; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise<[string]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + isDisabled(overrides?: CallOverrides): Promise<[boolean]>; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + version(overrides?: CallOverrides): Promise<[string]>; + }; + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + callStatic: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides): Promise; + disable(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + filters: { + "AaveLinearPoolCreated(address,uint256)"(pool?: PromiseOrValue | null, protocolId?: PromiseOrValue | null): AaveLinearPoolCreatedEventFilter; + AaveLinearPoolCreated(pool?: PromiseOrValue | null, protocolId?: PromiseOrValue | null): AaveLinearPoolCreatedEventFilter; + "FactoryDisabled()"(): FactoryDisabledEventFilter$6; + FactoryDisabled(): FactoryDisabledEventFilter$6; + "PoolCreated(address)"(pool?: PromiseOrValue | null): PoolCreatedEventFilter$6; + PoolCreated(pool?: PromiseOrValue | null): PoolCreatedEventFilter$6; + }; + estimateGas: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; +} + +interface AaveWrappingInterface extends utils.Interface { + functions: { + "approveVault(address,uint256)": FunctionFragment; + "getVault()": FunctionFragment; + "unwrapAaveStaticToken(address,address,address,uint256,bool,uint256)": FunctionFragment; + "wrapAaveDynamicToken(address,address,address,uint256,bool,uint256)": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "approveVault" | "getVault" | "unwrapAaveStaticToken" | "wrapAaveDynamicToken"): FunctionFragment; + encodeFunctionData(functionFragment: "approveVault", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "unwrapAaveStaticToken", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "wrapAaveDynamicToken", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + decodeFunctionResult(functionFragment: "approveVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unwrapAaveStaticToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "wrapAaveDynamicToken", data: BytesLike): Result; + events: {}; +} +interface AaveWrapping extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: AaveWrappingInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + approveVault(token: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getVault(overrides?: CallOverrides): Promise<[string]>; + unwrapAaveStaticToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, toUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapAaveDynamicToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, fromUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; + approveVault(token: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getVault(overrides?: CallOverrides): Promise; + unwrapAaveStaticToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, toUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapAaveDynamicToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, fromUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + approveVault(token: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + unwrapAaveStaticToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, toUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + wrapAaveDynamicToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, fromUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + filters: {}; + estimateGas: { + approveVault(token: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getVault(overrides?: CallOverrides): Promise; + unwrapAaveStaticToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, toUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapAaveDynamicToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, fromUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + approveVault(token: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getVault(overrides?: CallOverrides): Promise; + unwrapAaveStaticToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, toUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapAaveDynamicToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, fromUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +interface AuthoriserInterface extends utils.Interface { + functions: { + "DEFAULT_ADMIN_ROLE()": FunctionFragment; + "canPerform(bytes32,address,address)": FunctionFragment; + "getRoleAdmin(bytes32)": FunctionFragment; + "getRoleMember(bytes32,uint256)": FunctionFragment; + "getRoleMemberCount(bytes32)": FunctionFragment; + "grantRole(bytes32,address)": FunctionFragment; + "grantRoles(bytes32[],address)": FunctionFragment; + "grantRolesToMany(bytes32[],address[])": FunctionFragment; + "hasRole(bytes32,address)": FunctionFragment; + "renounceRole(bytes32,address)": FunctionFragment; + "revokeRole(bytes32,address)": FunctionFragment; + "revokeRoles(bytes32[],address)": FunctionFragment; + "revokeRolesFromMany(bytes32[],address[])": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "DEFAULT_ADMIN_ROLE" | "canPerform" | "getRoleAdmin" | "getRoleMember" | "getRoleMemberCount" | "grantRole" | "grantRoles" | "grantRolesToMany" | "hasRole" | "renounceRole" | "revokeRole" | "revokeRoles" | "revokeRolesFromMany"): FunctionFragment; + encodeFunctionData(functionFragment: "DEFAULT_ADMIN_ROLE", values?: undefined): string; + encodeFunctionData(functionFragment: "canPerform", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "getRoleAdmin", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getRoleMember", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getRoleMemberCount", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "grantRole", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "grantRoles", values: [PromiseOrValue[], PromiseOrValue]): string; + encodeFunctionData(functionFragment: "grantRolesToMany", values: [PromiseOrValue[], PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "hasRole", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "renounceRole", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "revokeRole", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "revokeRoles", values: [PromiseOrValue[], PromiseOrValue]): string; + encodeFunctionData(functionFragment: "revokeRolesFromMany", values: [PromiseOrValue[], PromiseOrValue[]]): string; + decodeFunctionResult(functionFragment: "DEFAULT_ADMIN_ROLE", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "canPerform", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRoleAdmin", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRoleMember", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRoleMemberCount", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "grantRoles", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "grantRolesToMany", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "renounceRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "revokeRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "revokeRoles", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "revokeRolesFromMany", data: BytesLike): Result; + events: { + "RoleAdminChanged(bytes32,bytes32,bytes32)": EventFragment; + "RoleGranted(bytes32,address,address)": EventFragment; + "RoleRevoked(bytes32,address,address)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "RoleAdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RoleGranted"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RoleRevoked"): EventFragment; +} +interface RoleAdminChangedEventObject { + role: string; + previousAdminRole: string; + newAdminRole: string; +} +type RoleAdminChangedEvent = TypedEvent<[ + string, + string, + string +], RoleAdminChangedEventObject>; +type RoleAdminChangedEventFilter = TypedEventFilter; +interface RoleGrantedEventObject { + role: string; + account: string; + sender: string; +} +type RoleGrantedEvent = TypedEvent<[ + string, + string, + string +], RoleGrantedEventObject>; +type RoleGrantedEventFilter = TypedEventFilter; +interface RoleRevokedEventObject { + role: string; + account: string; + sender: string; +} +type RoleRevokedEvent = TypedEvent<[ + string, + string, + string +], RoleRevokedEventObject>; +type RoleRevokedEventFilter = TypedEventFilter; +interface Authoriser extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: AuthoriserInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise<[string]>; + canPerform(actionId: PromiseOrValue, account: PromiseOrValue, arg2: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + getRoleAdmin(role: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getRoleMember(role: PromiseOrValue, index: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getRoleMemberCount(role: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + grantRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + grantRoles(roles: PromiseOrValue[], account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + grantRolesToMany(roles: PromiseOrValue[], accounts: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + hasRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + renounceRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + revokeRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + revokeRoles(roles: PromiseOrValue[], account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + revokeRolesFromMany(roles: PromiseOrValue[], accounts: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise; + canPerform(actionId: PromiseOrValue, account: PromiseOrValue, arg2: PromiseOrValue, overrides?: CallOverrides): Promise; + getRoleAdmin(role: PromiseOrValue, overrides?: CallOverrides): Promise; + getRoleMember(role: PromiseOrValue, index: PromiseOrValue, overrides?: CallOverrides): Promise; + getRoleMemberCount(role: PromiseOrValue, overrides?: CallOverrides): Promise; + grantRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + grantRoles(roles: PromiseOrValue[], account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + grantRolesToMany(roles: PromiseOrValue[], accounts: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + hasRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: CallOverrides): Promise; + renounceRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + revokeRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + revokeRoles(roles: PromiseOrValue[], account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + revokeRolesFromMany(roles: PromiseOrValue[], accounts: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise; + canPerform(actionId: PromiseOrValue, account: PromiseOrValue, arg2: PromiseOrValue, overrides?: CallOverrides): Promise; + getRoleAdmin(role: PromiseOrValue, overrides?: CallOverrides): Promise; + getRoleMember(role: PromiseOrValue, index: PromiseOrValue, overrides?: CallOverrides): Promise; + getRoleMemberCount(role: PromiseOrValue, overrides?: CallOverrides): Promise; + grantRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: CallOverrides): Promise; + grantRoles(roles: PromiseOrValue[], account: PromiseOrValue, overrides?: CallOverrides): Promise; + grantRolesToMany(roles: PromiseOrValue[], accounts: PromiseOrValue[], overrides?: CallOverrides): Promise; + hasRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: CallOverrides): Promise; + renounceRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: CallOverrides): Promise; + revokeRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: CallOverrides): Promise; + revokeRoles(roles: PromiseOrValue[], account: PromiseOrValue, overrides?: CallOverrides): Promise; + revokeRolesFromMany(roles: PromiseOrValue[], accounts: PromiseOrValue[], overrides?: CallOverrides): Promise; + }; + filters: { + "RoleAdminChanged(bytes32,bytes32,bytes32)"(role?: PromiseOrValue | null, previousAdminRole?: PromiseOrValue | null, newAdminRole?: PromiseOrValue | null): RoleAdminChangedEventFilter; + RoleAdminChanged(role?: PromiseOrValue | null, previousAdminRole?: PromiseOrValue | null, newAdminRole?: PromiseOrValue | null): RoleAdminChangedEventFilter; + "RoleGranted(bytes32,address,address)"(role?: PromiseOrValue | null, account?: PromiseOrValue | null, sender?: PromiseOrValue | null): RoleGrantedEventFilter; + RoleGranted(role?: PromiseOrValue | null, account?: PromiseOrValue | null, sender?: PromiseOrValue | null): RoleGrantedEventFilter; + "RoleRevoked(bytes32,address,address)"(role?: PromiseOrValue | null, account?: PromiseOrValue | null, sender?: PromiseOrValue | null): RoleRevokedEventFilter; + RoleRevoked(role?: PromiseOrValue | null, account?: PromiseOrValue | null, sender?: PromiseOrValue | null): RoleRevokedEventFilter; + }; + estimateGas: { + DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise; + canPerform(actionId: PromiseOrValue, account: PromiseOrValue, arg2: PromiseOrValue, overrides?: CallOverrides): Promise; + getRoleAdmin(role: PromiseOrValue, overrides?: CallOverrides): Promise; + getRoleMember(role: PromiseOrValue, index: PromiseOrValue, overrides?: CallOverrides): Promise; + getRoleMemberCount(role: PromiseOrValue, overrides?: CallOverrides): Promise; + grantRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + grantRoles(roles: PromiseOrValue[], account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + grantRolesToMany(roles: PromiseOrValue[], accounts: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + hasRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: CallOverrides): Promise; + renounceRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + revokeRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + revokeRoles(roles: PromiseOrValue[], account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + revokeRolesFromMany(roles: PromiseOrValue[], accounts: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise; + canPerform(actionId: PromiseOrValue, account: PromiseOrValue, arg2: PromiseOrValue, overrides?: CallOverrides): Promise; + getRoleAdmin(role: PromiseOrValue, overrides?: CallOverrides): Promise; + getRoleMember(role: PromiseOrValue, index: PromiseOrValue, overrides?: CallOverrides): Promise; + getRoleMemberCount(role: PromiseOrValue, overrides?: CallOverrides): Promise; + grantRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + grantRoles(roles: PromiseOrValue[], account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + grantRolesToMany(roles: PromiseOrValue[], accounts: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + hasRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: CallOverrides): Promise; + renounceRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + revokeRole(role: PromiseOrValue, account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + revokeRoles(roles: PromiseOrValue[], account: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + revokeRolesFromMany(roles: PromiseOrValue[], accounts: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +declare namespace IVault$3 { + type ExitPoolRequestStruct = { + assets: PromiseOrValue[]; + minAmountsOut: PromiseOrValue[]; + userData: PromiseOrValue; + toInternalBalance: PromiseOrValue; + }; + type ExitPoolRequestStructOutput = [ + string[], + BigNumber$1[], + string, + boolean + ] & { + assets: string[]; + minAmountsOut: BigNumber$1[]; + userData: string; + toInternalBalance: boolean; + }; + type JoinPoolRequestStruct = { + assets: PromiseOrValue[]; + maxAmountsIn: PromiseOrValue[]; + userData: PromiseOrValue; + fromInternalBalance: PromiseOrValue; + }; + type JoinPoolRequestStructOutput = [ + string[], + BigNumber$1[], + string, + boolean + ] & { + assets: string[]; + maxAmountsIn: BigNumber$1[]; + userData: string; + fromInternalBalance: boolean; + }; +} +interface BalancerHelpersInterface extends utils.Interface { + functions: { + "queryExit(bytes32,address,address,(address[],uint256[],bytes,bool))": FunctionFragment; + "queryJoin(bytes32,address,address,(address[],uint256[],bytes,bool))": FunctionFragment; + "vault()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "queryExit" | "queryJoin" | "vault"): FunctionFragment; + encodeFunctionData(functionFragment: "queryExit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + IVault$3.ExitPoolRequestStruct + ]): string; + encodeFunctionData(functionFragment: "queryJoin", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + IVault$3.JoinPoolRequestStruct + ]): string; + encodeFunctionData(functionFragment: "vault", values?: undefined): string; + decodeFunctionResult(functionFragment: "queryExit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryJoin", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "vault", data: BytesLike): Result; + events: {}; +} +interface BalancerHelpers extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: BalancerHelpersInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$3.ExitPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$3.JoinPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + vault(overrides?: CallOverrides): Promise<[string]>; + }; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$3.ExitPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$3.JoinPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + vault(overrides?: CallOverrides): Promise; + callStatic: { + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$3.ExitPoolRequestStruct, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptIn: BigNumber$1; + amountsOut: BigNumber$1[]; + }>; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$3.JoinPoolRequestStruct, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptOut: BigNumber$1; + amountsIn: BigNumber$1[]; + }>; + vault(overrides?: CallOverrides): Promise; + }; + filters: {}; + estimateGas: { + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$3.ExitPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$3.JoinPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + vault(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$3.ExitPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$3.JoinPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + vault(overrides?: CallOverrides): Promise; + }; +} + +interface BalancerMinterInterface extends utils.Interface { + functions: { + "allowed_to_mint_for(address,address)": FunctionFragment; + "getBalancerToken()": FunctionFragment; + "getBalancerTokenAdmin()": FunctionFragment; + "getDomainSeparator()": FunctionFragment; + "getGaugeController()": FunctionFragment; + "getMinterApproval(address,address)": FunctionFragment; + "getNextNonce(address)": FunctionFragment; + "mint(address)": FunctionFragment; + "mintFor(address,address)": FunctionFragment; + "mintMany(address[])": FunctionFragment; + "mintManyFor(address[],address)": FunctionFragment; + "mint_for(address,address)": FunctionFragment; + "mint_many(address[8])": FunctionFragment; + "minted(address,address)": FunctionFragment; + "setMinterApproval(address,bool)": FunctionFragment; + "setMinterApprovalWithSignature(address,bool,address,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "toggle_approve_mint(address)": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "allowed_to_mint_for" | "getBalancerToken" | "getBalancerTokenAdmin" | "getDomainSeparator" | "getGaugeController" | "getMinterApproval" | "getNextNonce" | "mint" | "mintFor" | "mintMany" | "mintManyFor" | "mint_for" | "mint_many" | "minted" | "setMinterApproval" | "setMinterApprovalWithSignature" | "toggle_approve_mint"): FunctionFragment; + encodeFunctionData(functionFragment: "allowed_to_mint_for", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getBalancerToken", values?: undefined): string; + encodeFunctionData(functionFragment: "getBalancerTokenAdmin", values?: undefined): string; + encodeFunctionData(functionFragment: "getDomainSeparator", values?: undefined): string; + encodeFunctionData(functionFragment: "getGaugeController", values?: undefined): string; + encodeFunctionData(functionFragment: "getMinterApproval", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getNextNonce", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "mint", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "mintFor", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "mintMany", values: [PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "mintManyFor", values: [PromiseOrValue[], PromiseOrValue]): string; + encodeFunctionData(functionFragment: "mint_for", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "mint_many", values: [PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "minted", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setMinterApproval", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setMinterApprovalWithSignature", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "toggle_approve_mint", values: [PromiseOrValue]): string; + decodeFunctionResult(functionFragment: "allowed_to_mint_for", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getBalancerToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getBalancerTokenAdmin", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDomainSeparator", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getGaugeController", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMinterApproval", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNextNonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "mintFor", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "mintMany", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "mintManyFor", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "mint_for", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "mint_many", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "minted", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setMinterApproval", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setMinterApprovalWithSignature", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "toggle_approve_mint", data: BytesLike): Result; + events: { + "Minted(address,address,uint256)": EventFragment; + "MinterApprovalSet(address,address,bool)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Minted"): EventFragment; + getEvent(nameOrSignatureOrTopic: "MinterApprovalSet"): EventFragment; +} +interface MintedEventObject { + recipient: string; + gauge: string; + minted: BigNumber$1; +} +type MintedEvent = TypedEvent<[ + string, + string, + BigNumber$1 +], MintedEventObject>; +type MintedEventFilter = TypedEventFilter; +interface MinterApprovalSetEventObject { + user: string; + minter: string; + approval: boolean; +} +type MinterApprovalSetEvent = TypedEvent<[ + string, + string, + boolean +], MinterApprovalSetEventObject>; +type MinterApprovalSetEventFilter = TypedEventFilter; +interface BalancerMinter extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: BalancerMinterInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + allowed_to_mint_for(minter: PromiseOrValue, user: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + getBalancerToken(overrides?: CallOverrides): Promise<[string]>; + getBalancerTokenAdmin(overrides?: CallOverrides): Promise<[string]>; + getDomainSeparator(overrides?: CallOverrides): Promise<[string]>; + getGaugeController(overrides?: CallOverrides): Promise<[string]>; + getMinterApproval(minter: PromiseOrValue, user: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + getNextNonce(user: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + mint(gauge: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mintFor(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mintMany(gauges: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mintManyFor(gauges: PromiseOrValue[], user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mint_for(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mint_many(gauges: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + minted(user: PromiseOrValue, gauge: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + setMinterApproval(minter: PromiseOrValue, approval: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setMinterApprovalWithSignature(minter: PromiseOrValue, approval: PromiseOrValue, user: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + toggle_approve_mint(minter: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + allowed_to_mint_for(minter: PromiseOrValue, user: PromiseOrValue, overrides?: CallOverrides): Promise; + getBalancerToken(overrides?: CallOverrides): Promise; + getBalancerTokenAdmin(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getGaugeController(overrides?: CallOverrides): Promise; + getMinterApproval(minter: PromiseOrValue, user: PromiseOrValue, overrides?: CallOverrides): Promise; + getNextNonce(user: PromiseOrValue, overrides?: CallOverrides): Promise; + mint(gauge: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mintFor(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mintMany(gauges: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mintManyFor(gauges: PromiseOrValue[], user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mint_for(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mint_many(gauges: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + minted(user: PromiseOrValue, gauge: PromiseOrValue, overrides?: CallOverrides): Promise; + setMinterApproval(minter: PromiseOrValue, approval: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setMinterApprovalWithSignature(minter: PromiseOrValue, approval: PromiseOrValue, user: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + toggle_approve_mint(minter: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + allowed_to_mint_for(minter: PromiseOrValue, user: PromiseOrValue, overrides?: CallOverrides): Promise; + getBalancerToken(overrides?: CallOverrides): Promise; + getBalancerTokenAdmin(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getGaugeController(overrides?: CallOverrides): Promise; + getMinterApproval(minter: PromiseOrValue, user: PromiseOrValue, overrides?: CallOverrides): Promise; + getNextNonce(user: PromiseOrValue, overrides?: CallOverrides): Promise; + mint(gauge: PromiseOrValue, overrides?: CallOverrides): Promise; + mintFor(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: CallOverrides): Promise; + mintMany(gauges: PromiseOrValue[], overrides?: CallOverrides): Promise; + mintManyFor(gauges: PromiseOrValue[], user: PromiseOrValue, overrides?: CallOverrides): Promise; + mint_for(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: CallOverrides): Promise; + mint_many(gauges: PromiseOrValue[], overrides?: CallOverrides): Promise; + minted(user: PromiseOrValue, gauge: PromiseOrValue, overrides?: CallOverrides): Promise; + setMinterApproval(minter: PromiseOrValue, approval: PromiseOrValue, overrides?: CallOverrides): Promise; + setMinterApprovalWithSignature(minter: PromiseOrValue, approval: PromiseOrValue, user: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + toggle_approve_mint(minter: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + filters: { + "Minted(address,address,uint256)"(recipient?: PromiseOrValue | null, gauge?: null, minted?: null): MintedEventFilter; + Minted(recipient?: PromiseOrValue | null, gauge?: null, minted?: null): MintedEventFilter; + "MinterApprovalSet(address,address,bool)"(user?: PromiseOrValue | null, minter?: PromiseOrValue | null, approval?: null): MinterApprovalSetEventFilter; + MinterApprovalSet(user?: PromiseOrValue | null, minter?: PromiseOrValue | null, approval?: null): MinterApprovalSetEventFilter; + }; + estimateGas: { + allowed_to_mint_for(minter: PromiseOrValue, user: PromiseOrValue, overrides?: CallOverrides): Promise; + getBalancerToken(overrides?: CallOverrides): Promise; + getBalancerTokenAdmin(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getGaugeController(overrides?: CallOverrides): Promise; + getMinterApproval(minter: PromiseOrValue, user: PromiseOrValue, overrides?: CallOverrides): Promise; + getNextNonce(user: PromiseOrValue, overrides?: CallOverrides): Promise; + mint(gauge: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mintFor(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mintMany(gauges: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mintManyFor(gauges: PromiseOrValue[], user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mint_for(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mint_many(gauges: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + minted(user: PromiseOrValue, gauge: PromiseOrValue, overrides?: CallOverrides): Promise; + setMinterApproval(minter: PromiseOrValue, approval: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setMinterApprovalWithSignature(minter: PromiseOrValue, approval: PromiseOrValue, user: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + toggle_approve_mint(minter: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + allowed_to_mint_for(minter: PromiseOrValue, user: PromiseOrValue, overrides?: CallOverrides): Promise; + getBalancerToken(overrides?: CallOverrides): Promise; + getBalancerTokenAdmin(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getGaugeController(overrides?: CallOverrides): Promise; + getMinterApproval(minter: PromiseOrValue, user: PromiseOrValue, overrides?: CallOverrides): Promise; + getNextNonce(user: PromiseOrValue, overrides?: CallOverrides): Promise; + mint(gauge: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mintFor(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mintMany(gauges: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mintManyFor(gauges: PromiseOrValue[], user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mint_for(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + mint_many(gauges: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + minted(user: PromiseOrValue, gauge: PromiseOrValue, overrides?: CallOverrides): Promise; + setMinterApproval(minter: PromiseOrValue, approval: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setMinterApprovalWithSignature(minter: PromiseOrValue, approval: PromiseOrValue, user: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + toggle_approve_mint(minter: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +type PoolDataQueryConfigStruct = { + loadTokenBalanceUpdatesAfterBlock: PromiseOrValue; + loadTotalSupply: PromiseOrValue; + loadSwapFees: PromiseOrValue; + loadLinearWrappedTokenRates: PromiseOrValue; + loadLinearTargets: PromiseOrValue; + loadNormalizedWeights: PromiseOrValue; + loadScalingFactors: PromiseOrValue; + loadAmps: PromiseOrValue; + loadRates: PromiseOrValue; + blockNumber: PromiseOrValue; + totalSupplyTypes: PromiseOrValue[]; + swapFeeTypes: PromiseOrValue[]; + linearPoolIdxs: PromiseOrValue[]; + weightedPoolIdxs: PromiseOrValue[]; + scalingFactorPoolIdxs: PromiseOrValue[]; + ampPoolIdxs: PromiseOrValue[]; + ratePoolIdxs: PromiseOrValue[]; +}; +type PoolStatusQueryConfigStruct = { + loadInRecoveryMode: PromiseOrValue; + loadIsPaused: PromiseOrValue; +}; +interface BalancerPoolDataQueriesInterface extends utils.Interface { + functions: { + "getAmpForPools(address[])": FunctionFragment; + "getInRecoveryModeForPools(address[])": FunctionFragment; + "getIsPausedForPools(address[])": FunctionFragment; + "getLinearTargetsForPools(address[])": FunctionFragment; + "getNormalizedWeightsForPools(address[])": FunctionFragment; + "getPoolData(bytes32[],(bool,bool,bool,bool,bool,bool,bool,bool,bool,uint256,uint8[],uint8[],uint256[],uint256[],uint256[],uint256[],uint256[]))": FunctionFragment; + "getPoolStatus(bytes32[],(bool,bool))": FunctionFragment; + "getPoolTokenBalancesWithUpdatesAfterBlock(bytes32[],uint256)": FunctionFragment; + "getRateForPools(address[])": FunctionFragment; + "getScalingFactorsForPools(address[])": FunctionFragment; + "getSwapFeePercentageForPools(address[],uint8[])": FunctionFragment; + "getTotalSupplyForPools(address[],uint8[])": FunctionFragment; + "getWrappedTokenRateForLinearPools(address[])": FunctionFragment; + "vault()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "getAmpForPools" | "getInRecoveryModeForPools" | "getIsPausedForPools" | "getLinearTargetsForPools" | "getNormalizedWeightsForPools" | "getPoolData" | "getPoolStatus" | "getPoolTokenBalancesWithUpdatesAfterBlock" | "getRateForPools" | "getScalingFactorsForPools" | "getSwapFeePercentageForPools" | "getTotalSupplyForPools" | "getWrappedTokenRateForLinearPools" | "vault"): FunctionFragment; + encodeFunctionData(functionFragment: "getAmpForPools", values: [PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "getInRecoveryModeForPools", values: [PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "getIsPausedForPools", values: [PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "getLinearTargetsForPools", values: [PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "getNormalizedWeightsForPools", values: [PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "getPoolData", values: [PromiseOrValue[], PoolDataQueryConfigStruct]): string; + encodeFunctionData(functionFragment: "getPoolStatus", values: [PromiseOrValue[], PoolStatusQueryConfigStruct]): string; + encodeFunctionData(functionFragment: "getPoolTokenBalancesWithUpdatesAfterBlock", values: [PromiseOrValue[], PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getRateForPools", values: [PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "getScalingFactorsForPools", values: [PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "getSwapFeePercentageForPools", values: [PromiseOrValue[], PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "getTotalSupplyForPools", values: [PromiseOrValue[], PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "getWrappedTokenRateForLinearPools", values: [PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "vault", values?: undefined): string; + decodeFunctionResult(functionFragment: "getAmpForPools", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getInRecoveryModeForPools", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getIsPausedForPools", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getLinearTargetsForPools", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNormalizedWeightsForPools", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolData", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolStatus", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolTokenBalancesWithUpdatesAfterBlock", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRateForPools", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getScalingFactorsForPools", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getSwapFeePercentageForPools", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTotalSupplyForPools", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedTokenRateForLinearPools", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "vault", data: BytesLike): Result; + events: {}; +} +interface BalancerPoolDataQueries extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: BalancerPoolDataQueriesInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + getAmpForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + getInRecoveryModeForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise<[boolean[]]>; + getIsPausedForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise<[boolean[]]>; + getLinearTargetsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise<[BigNumber$1[][]]>; + getNormalizedWeightsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise<[BigNumber$1[][]]>; + getPoolData(poolIds: PromiseOrValue[], config: PoolDataQueryConfigStruct, overrides?: CallOverrides): Promise<[ + BigNumber$1[][], + BigNumber$1[], + BigNumber$1[], + BigNumber$1[], + BigNumber$1[][], + BigNumber$1[][], + BigNumber$1[][], + BigNumber$1[], + BigNumber$1[], + BigNumber$1[] + ] & { + balances: BigNumber$1[][]; + totalSupplies: BigNumber$1[]; + swapFees: BigNumber$1[]; + linearWrappedTokenRates: BigNumber$1[]; + linearTargets: BigNumber$1[][]; + weights: BigNumber$1[][]; + scalingFactors: BigNumber$1[][]; + amps: BigNumber$1[]; + rates: BigNumber$1[]; + ignoreIdxs: BigNumber$1[]; + }>; + getPoolStatus(poolIds: PromiseOrValue[], config: PoolStatusQueryConfigStruct, overrides?: CallOverrides): Promise<[ + boolean[], + boolean[] + ] & { + isPaused: boolean[]; + inRecoveryMode: boolean[]; + }>; + getPoolTokenBalancesWithUpdatesAfterBlock(poolIds: PromiseOrValue[], blockNumber: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1[][]]>; + getRateForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + getScalingFactorsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise<[BigNumber$1[][]]>; + getSwapFeePercentageForPools(poolAddresses: PromiseOrValue[], swapFeeTypes: PromiseOrValue[], overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + getTotalSupplyForPools(poolAddresses: PromiseOrValue[], totalSupplyTypes: PromiseOrValue[], overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + getWrappedTokenRateForLinearPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + vault(overrides?: CallOverrides): Promise<[string]>; + }; + getAmpForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getInRecoveryModeForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getIsPausedForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getLinearTargetsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getNormalizedWeightsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getPoolData(poolIds: PromiseOrValue[], config: PoolDataQueryConfigStruct, overrides?: CallOverrides): Promise<[ + BigNumber$1[][], + BigNumber$1[], + BigNumber$1[], + BigNumber$1[], + BigNumber$1[][], + BigNumber$1[][], + BigNumber$1[][], + BigNumber$1[], + BigNumber$1[], + BigNumber$1[] + ] & { + balances: BigNumber$1[][]; + totalSupplies: BigNumber$1[]; + swapFees: BigNumber$1[]; + linearWrappedTokenRates: BigNumber$1[]; + linearTargets: BigNumber$1[][]; + weights: BigNumber$1[][]; + scalingFactors: BigNumber$1[][]; + amps: BigNumber$1[]; + rates: BigNumber$1[]; + ignoreIdxs: BigNumber$1[]; + }>; + getPoolStatus(poolIds: PromiseOrValue[], config: PoolStatusQueryConfigStruct, overrides?: CallOverrides): Promise<[ + boolean[], + boolean[] + ] & { + isPaused: boolean[]; + inRecoveryMode: boolean[]; + }>; + getPoolTokenBalancesWithUpdatesAfterBlock(poolIds: PromiseOrValue[], blockNumber: PromiseOrValue, overrides?: CallOverrides): Promise; + getRateForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getScalingFactorsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getSwapFeePercentageForPools(poolAddresses: PromiseOrValue[], swapFeeTypes: PromiseOrValue[], overrides?: CallOverrides): Promise; + getTotalSupplyForPools(poolAddresses: PromiseOrValue[], totalSupplyTypes: PromiseOrValue[], overrides?: CallOverrides): Promise; + getWrappedTokenRateForLinearPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + vault(overrides?: CallOverrides): Promise; + callStatic: { + getAmpForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getInRecoveryModeForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getIsPausedForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getLinearTargetsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getNormalizedWeightsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getPoolData(poolIds: PromiseOrValue[], config: PoolDataQueryConfigStruct, overrides?: CallOverrides): Promise<[ + BigNumber$1[][], + BigNumber$1[], + BigNumber$1[], + BigNumber$1[], + BigNumber$1[][], + BigNumber$1[][], + BigNumber$1[][], + BigNumber$1[], + BigNumber$1[], + BigNumber$1[] + ] & { + balances: BigNumber$1[][]; + totalSupplies: BigNumber$1[]; + swapFees: BigNumber$1[]; + linearWrappedTokenRates: BigNumber$1[]; + linearTargets: BigNumber$1[][]; + weights: BigNumber$1[][]; + scalingFactors: BigNumber$1[][]; + amps: BigNumber$1[]; + rates: BigNumber$1[]; + ignoreIdxs: BigNumber$1[]; + }>; + getPoolStatus(poolIds: PromiseOrValue[], config: PoolStatusQueryConfigStruct, overrides?: CallOverrides): Promise<[ + boolean[], + boolean[] + ] & { + isPaused: boolean[]; + inRecoveryMode: boolean[]; + }>; + getPoolTokenBalancesWithUpdatesAfterBlock(poolIds: PromiseOrValue[], blockNumber: PromiseOrValue, overrides?: CallOverrides): Promise; + getRateForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getScalingFactorsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getSwapFeePercentageForPools(poolAddresses: PromiseOrValue[], swapFeeTypes: PromiseOrValue[], overrides?: CallOverrides): Promise; + getTotalSupplyForPools(poolAddresses: PromiseOrValue[], totalSupplyTypes: PromiseOrValue[], overrides?: CallOverrides): Promise; + getWrappedTokenRateForLinearPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + vault(overrides?: CallOverrides): Promise; + }; + filters: {}; + estimateGas: { + getAmpForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getInRecoveryModeForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getIsPausedForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getLinearTargetsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getNormalizedWeightsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getPoolData(poolIds: PromiseOrValue[], config: PoolDataQueryConfigStruct, overrides?: CallOverrides): Promise; + getPoolStatus(poolIds: PromiseOrValue[], config: PoolStatusQueryConfigStruct, overrides?: CallOverrides): Promise; + getPoolTokenBalancesWithUpdatesAfterBlock(poolIds: PromiseOrValue[], blockNumber: PromiseOrValue, overrides?: CallOverrides): Promise; + getRateForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getScalingFactorsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getSwapFeePercentageForPools(poolAddresses: PromiseOrValue[], swapFeeTypes: PromiseOrValue[], overrides?: CallOverrides): Promise; + getTotalSupplyForPools(poolAddresses: PromiseOrValue[], totalSupplyTypes: PromiseOrValue[], overrides?: CallOverrides): Promise; + getWrappedTokenRateForLinearPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + vault(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + getAmpForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getInRecoveryModeForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getIsPausedForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getLinearTargetsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getNormalizedWeightsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getPoolData(poolIds: PromiseOrValue[], config: PoolDataQueryConfigStruct, overrides?: CallOverrides): Promise; + getPoolStatus(poolIds: PromiseOrValue[], config: PoolStatusQueryConfigStruct, overrides?: CallOverrides): Promise; + getPoolTokenBalancesWithUpdatesAfterBlock(poolIds: PromiseOrValue[], blockNumber: PromiseOrValue, overrides?: CallOverrides): Promise; + getRateForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getScalingFactorsForPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + getSwapFeePercentageForPools(poolAddresses: PromiseOrValue[], swapFeeTypes: PromiseOrValue[], overrides?: CallOverrides): Promise; + getTotalSupplyForPools(poolAddresses: PromiseOrValue[], totalSupplyTypes: PromiseOrValue[], overrides?: CallOverrides): Promise; + getWrappedTokenRateForLinearPools(poolAddresses: PromiseOrValue[], overrides?: CallOverrides): Promise; + vault(overrides?: CallOverrides): Promise; + }; +} + +interface BalancerRelayerInterface extends utils.Interface { + functions: { + "getLibrary()": FunctionFragment; + "getVault()": FunctionFragment; + "multicall(bytes[])": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "getLibrary" | "getVault" | "multicall"): FunctionFragment; + encodeFunctionData(functionFragment: "getLibrary", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "multicall", values: [PromiseOrValue[]]): string; + decodeFunctionResult(functionFragment: "getLibrary", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "multicall", data: BytesLike): Result; + events: {}; +} +interface BalancerRelayer extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: BalancerRelayerInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + getLibrary(overrides?: CallOverrides): Promise<[string]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + multicall(data: PromiseOrValue[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; + getLibrary(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + multicall(data: PromiseOrValue[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + getLibrary(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + multicall(data: PromiseOrValue[], overrides?: CallOverrides): Promise; + }; + filters: {}; + estimateGas: { + getLibrary(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + multicall(data: PromiseOrValue[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + getLibrary(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + multicall(data: PromiseOrValue[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +declare namespace IVault$2 { + type BatchSwapStepStruct = { + poolId: PromiseOrValue; + assetInIndex: PromiseOrValue; + assetOutIndex: PromiseOrValue; + amount: PromiseOrValue; + userData: PromiseOrValue; + }; + type BatchSwapStepStructOutput = [ + string, + BigNumber$1, + BigNumber$1, + BigNumber$1, + string + ] & { + poolId: string; + assetInIndex: BigNumber$1; + assetOutIndex: BigNumber$1; + amount: BigNumber$1; + userData: string; + }; + type FundManagementStruct = { + sender: PromiseOrValue; + fromInternalBalance: PromiseOrValue; + recipient: PromiseOrValue; + toInternalBalance: PromiseOrValue; + }; + type FundManagementStructOutput = [ + string, + boolean, + string, + boolean + ] & { + sender: string; + fromInternalBalance: boolean; + recipient: string; + toInternalBalance: boolean; + }; + type ExitPoolRequestStruct = { + assets: PromiseOrValue[]; + minAmountsOut: PromiseOrValue[]; + userData: PromiseOrValue; + toInternalBalance: PromiseOrValue; + }; + type ExitPoolRequestStructOutput = [ + string[], + BigNumber$1[], + string, + boolean + ] & { + assets: string[]; + minAmountsOut: BigNumber$1[]; + userData: string; + toInternalBalance: boolean; + }; + type JoinPoolRequestStruct = { + assets: PromiseOrValue[]; + maxAmountsIn: PromiseOrValue[]; + userData: PromiseOrValue; + fromInternalBalance: PromiseOrValue; + }; + type JoinPoolRequestStructOutput = [ + string[], + BigNumber$1[], + string, + boolean + ] & { + assets: string[]; + maxAmountsIn: BigNumber$1[]; + userData: string; + fromInternalBalance: boolean; + }; + type UserBalanceOpStruct = { + kind: PromiseOrValue; + asset: PromiseOrValue; + amount: PromiseOrValue; + sender: PromiseOrValue; + recipient: PromiseOrValue; + }; + type UserBalanceOpStructOutput = [ + number, + string, + BigNumber$1, + string, + string + ] & { + kind: number; + asset: string; + amount: BigNumber$1; + sender: string; + recipient: string; + }; + type SingleSwapStruct = { + poolId: PromiseOrValue; + kind: PromiseOrValue; + assetIn: PromiseOrValue; + assetOut: PromiseOrValue; + amount: PromiseOrValue; + userData: PromiseOrValue; + }; + type SingleSwapStructOutput = [ + string, + number, + string, + string, + BigNumber$1, + string + ] & { + poolId: string; + kind: number; + assetIn: string; + assetOut: string; + amount: BigNumber$1; + userData: string; + }; +} +declare namespace VaultActions { + type OutputReferenceStruct = { + index: PromiseOrValue; + key: PromiseOrValue; + }; + type OutputReferenceStructOutput = [BigNumber$1, BigNumber$1] & { + index: BigNumber$1; + key: BigNumber$1; + }; +} +interface BatchRelayerLibraryInterface extends utils.Interface { + functions: { + "approveVault(address,uint256)": FunctionFragment; + "batchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool),int256[],uint256,uint256,(uint256,uint256)[])": FunctionFragment; + "exitPool(bytes32,uint8,address,address,(address[],uint256[],bytes,bool),(uint256,uint256)[])": FunctionFragment; + "gaugeClaimRewards(address[])": FunctionFragment; + "gaugeDeposit(address,address,address,uint256)": FunctionFragment; + "gaugeMint(address[],uint256)": FunctionFragment; + "gaugeSetMinterApproval(bool,address,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "gaugeWithdraw(address,address,address,uint256)": FunctionFragment; + "getEntrypoint()": FunctionFragment; + "getVault()": FunctionFragment; + "joinPool(bytes32,uint8,address,address,(address[],uint256[],bytes,bool),uint256,uint256)": FunctionFragment; + "manageUserBalance((uint8,address,uint256,address,address)[],uint256)": FunctionFragment; + "peekChainedReferenceValue(uint256)": FunctionFragment; + "setRelayerApproval(address,bool,bytes)": FunctionFragment; + "stakeETH(address,uint256,uint256)": FunctionFragment; + "stakeETHAndWrap(address,uint256,uint256)": FunctionFragment; + "swap((bytes32,uint8,address,address,uint256,bytes),(address,bool,address,bool),uint256,uint256,uint256,uint256)": FunctionFragment; + "unwrapAaveStaticToken(address,address,address,uint256,bool,uint256)": FunctionFragment; + "unwrapCompoundV2(address,address,address,uint256,uint256)": FunctionFragment; + "unwrapERC4626(address,address,address,uint256,uint256)": FunctionFragment; + "unwrapEuler(address,address,address,uint256,uint256)": FunctionFragment; + "unwrapGearbox(address,address,address,uint256,uint256)": FunctionFragment; + "unwrapReaperVaultToken(address,address,address,uint256,uint256)": FunctionFragment; + "unwrapShareToken(address,address,address,uint256,uint256)": FunctionFragment; + "unwrapTetu(address,address,address,uint256,uint256)": FunctionFragment; + "unwrapUnbuttonToken(address,address,address,uint256,uint256)": FunctionFragment; + "unwrapWstETH(address,address,uint256,uint256)": FunctionFragment; + "unwrapYearn(address,address,address,uint256,uint256)": FunctionFragment; + "vaultPermit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "vaultPermitDAI(address,address,uint256,uint256,bool,uint8,bytes32,bytes32)": FunctionFragment; + "wrapAaveDynamicToken(address,address,address,uint256,bool,uint256)": FunctionFragment; + "wrapCompoundV2(address,address,address,uint256,uint256)": FunctionFragment; + "wrapERC4626(address,address,address,uint256,uint256)": FunctionFragment; + "wrapEuler(address,address,address,address,uint256,uint256)": FunctionFragment; + "wrapGearbox(address,address,address,uint256,uint256)": FunctionFragment; + "wrapReaperVaultToken(address,address,address,uint256,uint256)": FunctionFragment; + "wrapShareToken(address,address,address,uint256,uint256)": FunctionFragment; + "wrapStETH(address,address,uint256,uint256)": FunctionFragment; + "wrapTetu(address,address,address,uint256,uint256)": FunctionFragment; + "wrapUnbuttonToken(address,address,address,uint256,uint256)": FunctionFragment; + "wrapYearn(address,address,address,uint256,uint256)": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "approveVault" | "batchSwap" | "exitPool" | "gaugeClaimRewards" | "gaugeDeposit" | "gaugeMint" | "gaugeSetMinterApproval" | "gaugeWithdraw" | "getEntrypoint" | "getVault" | "joinPool" | "manageUserBalance" | "peekChainedReferenceValue" | "setRelayerApproval" | "stakeETH" | "stakeETHAndWrap" | "swap" | "unwrapAaveStaticToken" | "unwrapCompoundV2" | "unwrapERC4626" | "unwrapEuler" | "unwrapGearbox" | "unwrapReaperVaultToken" | "unwrapShareToken" | "unwrapTetu" | "unwrapUnbuttonToken" | "unwrapWstETH" | "unwrapYearn" | "vaultPermit" | "vaultPermitDAI" | "wrapAaveDynamicToken" | "wrapCompoundV2" | "wrapERC4626" | "wrapEuler" | "wrapGearbox" | "wrapReaperVaultToken" | "wrapShareToken" | "wrapStETH" | "wrapTetu" | "wrapUnbuttonToken" | "wrapYearn"): FunctionFragment; + encodeFunctionData(functionFragment: "approveVault", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "batchSwap", values: [ + PromiseOrValue, + IVault$2.BatchSwapStepStruct[], + PromiseOrValue[], + IVault$2.FundManagementStruct, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + VaultActions.OutputReferenceStruct[] + ]): string; + encodeFunctionData(functionFragment: "exitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + IVault$2.ExitPoolRequestStruct, + VaultActions.OutputReferenceStruct[] + ]): string; + encodeFunctionData(functionFragment: "gaugeClaimRewards", values: [PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "gaugeDeposit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "gaugeMint", values: [PromiseOrValue[], PromiseOrValue]): string; + encodeFunctionData(functionFragment: "gaugeSetMinterApproval", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "gaugeWithdraw", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "getEntrypoint", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "joinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + IVault$2.JoinPoolRequestStruct, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "manageUserBalance", values: [IVault$2.UserBalanceOpStruct[], PromiseOrValue]): string; + encodeFunctionData(functionFragment: "peekChainedReferenceValue", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setRelayerApproval", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "stakeETH", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "stakeETHAndWrap", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "swap", values: [ + IVault$2.SingleSwapStruct, + IVault$2.FundManagementStruct, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unwrapAaveStaticToken", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unwrapCompoundV2", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unwrapERC4626", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unwrapEuler", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unwrapGearbox", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unwrapReaperVaultToken", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unwrapShareToken", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unwrapTetu", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unwrapUnbuttonToken", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unwrapWstETH", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unwrapYearn", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "vaultPermit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "vaultPermitDAI", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "wrapAaveDynamicToken", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "wrapCompoundV2", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "wrapERC4626", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "wrapEuler", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "wrapGearbox", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "wrapReaperVaultToken", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "wrapShareToken", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "wrapStETH", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "wrapTetu", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "wrapUnbuttonToken", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "wrapYearn", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + decodeFunctionResult(functionFragment: "approveVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "batchSwap", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "exitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "gaugeClaimRewards", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "gaugeDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "gaugeMint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "gaugeSetMinterApproval", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "gaugeWithdraw", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getEntrypoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "joinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "manageUserBalance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "peekChainedReferenceValue", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setRelayerApproval", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "stakeETH", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "stakeETHAndWrap", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "swap", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unwrapAaveStaticToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unwrapCompoundV2", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unwrapERC4626", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unwrapEuler", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unwrapGearbox", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unwrapReaperVaultToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unwrapShareToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unwrapTetu", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unwrapUnbuttonToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unwrapWstETH", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unwrapYearn", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "vaultPermit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "vaultPermitDAI", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "wrapAaveDynamicToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "wrapCompoundV2", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "wrapERC4626", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "wrapEuler", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "wrapGearbox", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "wrapReaperVaultToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "wrapShareToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "wrapStETH", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "wrapTetu", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "wrapUnbuttonToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "wrapYearn", data: BytesLike): Result; + events: {}; +} +interface BatchRelayerLibrary extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: BatchRelayerLibraryInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + approveVault(token: PromiseOrValue, amount: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + batchSwap(kind: PromiseOrValue, swaps: IVault$2.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault$2.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, value: PromiseOrValue, outputReferences: VaultActions.OutputReferenceStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + exitPool(poolId: PromiseOrValue, kind: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$2.ExitPoolRequestStruct, outputReferences: VaultActions.OutputReferenceStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeClaimRewards(gauges: PromiseOrValue[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeDeposit(gauge: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeMint(gauges: PromiseOrValue[], outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeSetMinterApproval(approval: PromiseOrValue, user: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeWithdraw(gauge: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + getEntrypoint(overrides?: CallOverrides): Promise<[string]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + joinPool(poolId: PromiseOrValue, kind: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$2.JoinPoolRequestStruct, value: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + manageUserBalance(ops: IVault$2.UserBalanceOpStruct[], value: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + peekChainedReferenceValue(ref: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1] & { + value: BigNumber$1; + }>; + setRelayerApproval(relayer: PromiseOrValue, approved: PromiseOrValue, authorisation: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + stakeETH(recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + stakeETHAndWrap(recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + swap(singleSwap: IVault$2.SingleSwapStruct, funds: IVault$2.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, value: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapAaveStaticToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, toUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapCompoundV2(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapERC4626(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapEuler(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapGearbox(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, dieselAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapReaperVaultToken(vaultToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapShareToken(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapTetu(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapUnbuttonToken(wrapperToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapWstETH(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapYearn(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + vaultPermit(token: PromiseOrValue, owner: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + vaultPermitDAI(token: PromiseOrValue, holder: PromiseOrValue, nonce: PromiseOrValue, expiry: PromiseOrValue, allowed: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapAaveDynamicToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, fromUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapCompoundV2(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapERC4626(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapEuler(wrappedToken: PromiseOrValue, eulerProtocol: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapGearbox(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, mainAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapReaperVaultToken(vaultToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapShareToken(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapStETH(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapTetu(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapUnbuttonToken(wrapperToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, uAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapYearn(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; + approveVault(token: PromiseOrValue, amount: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + batchSwap(kind: PromiseOrValue, swaps: IVault$2.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault$2.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, value: PromiseOrValue, outputReferences: VaultActions.OutputReferenceStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + exitPool(poolId: PromiseOrValue, kind: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$2.ExitPoolRequestStruct, outputReferences: VaultActions.OutputReferenceStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeClaimRewards(gauges: PromiseOrValue[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeDeposit(gauge: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeMint(gauges: PromiseOrValue[], outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeSetMinterApproval(approval: PromiseOrValue, user: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeWithdraw(gauge: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + getEntrypoint(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + joinPool(poolId: PromiseOrValue, kind: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$2.JoinPoolRequestStruct, value: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + manageUserBalance(ops: IVault$2.UserBalanceOpStruct[], value: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + peekChainedReferenceValue(ref: PromiseOrValue, overrides?: CallOverrides): Promise; + setRelayerApproval(relayer: PromiseOrValue, approved: PromiseOrValue, authorisation: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + stakeETH(recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + stakeETHAndWrap(recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + swap(singleSwap: IVault$2.SingleSwapStruct, funds: IVault$2.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, value: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapAaveStaticToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, toUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapCompoundV2(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapERC4626(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapEuler(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapGearbox(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, dieselAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapReaperVaultToken(vaultToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapShareToken(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapTetu(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapUnbuttonToken(wrapperToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapWstETH(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapYearn(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + vaultPermit(token: PromiseOrValue, owner: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + vaultPermitDAI(token: PromiseOrValue, holder: PromiseOrValue, nonce: PromiseOrValue, expiry: PromiseOrValue, allowed: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapAaveDynamicToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, fromUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapCompoundV2(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapERC4626(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapEuler(wrappedToken: PromiseOrValue, eulerProtocol: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapGearbox(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, mainAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapReaperVaultToken(vaultToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapShareToken(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapStETH(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapTetu(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapUnbuttonToken(wrapperToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, uAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapYearn(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + approveVault(token: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + batchSwap(kind: PromiseOrValue, swaps: IVault$2.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault$2.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, value: PromiseOrValue, outputReferences: VaultActions.OutputReferenceStruct[], overrides?: CallOverrides): Promise; + exitPool(poolId: PromiseOrValue, kind: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$2.ExitPoolRequestStruct, outputReferences: VaultActions.OutputReferenceStruct[], overrides?: CallOverrides): Promise; + gaugeClaimRewards(gauges: PromiseOrValue[], overrides?: CallOverrides): Promise; + gaugeDeposit(gauge: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + gaugeMint(gauges: PromiseOrValue[], outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + gaugeSetMinterApproval(approval: PromiseOrValue, user: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + gaugeWithdraw(gauge: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + getEntrypoint(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + joinPool(poolId: PromiseOrValue, kind: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$2.JoinPoolRequestStruct, value: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + manageUserBalance(ops: IVault$2.UserBalanceOpStruct[], value: PromiseOrValue, overrides?: CallOverrides): Promise; + peekChainedReferenceValue(ref: PromiseOrValue, overrides?: CallOverrides): Promise; + setRelayerApproval(relayer: PromiseOrValue, approved: PromiseOrValue, authorisation: PromiseOrValue, overrides?: CallOverrides): Promise; + stakeETH(recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + stakeETHAndWrap(recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + swap(singleSwap: IVault$2.SingleSwapStruct, funds: IVault$2.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, value: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + unwrapAaveStaticToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, toUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + unwrapCompoundV2(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + unwrapERC4626(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + unwrapEuler(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + unwrapGearbox(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, dieselAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + unwrapReaperVaultToken(vaultToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + unwrapShareToken(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + unwrapTetu(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + unwrapUnbuttonToken(wrapperToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + unwrapWstETH(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + unwrapYearn(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + vaultPermit(token: PromiseOrValue, owner: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + vaultPermitDAI(token: PromiseOrValue, holder: PromiseOrValue, nonce: PromiseOrValue, expiry: PromiseOrValue, allowed: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + wrapAaveDynamicToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, fromUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + wrapCompoundV2(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + wrapERC4626(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + wrapEuler(wrappedToken: PromiseOrValue, eulerProtocol: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + wrapGearbox(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, mainAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + wrapReaperVaultToken(vaultToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + wrapShareToken(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + wrapStETH(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + wrapTetu(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + wrapUnbuttonToken(wrapperToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, uAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + wrapYearn(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + filters: {}; + estimateGas: { + approveVault(token: PromiseOrValue, amount: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + batchSwap(kind: PromiseOrValue, swaps: IVault$2.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault$2.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, value: PromiseOrValue, outputReferences: VaultActions.OutputReferenceStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + exitPool(poolId: PromiseOrValue, kind: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$2.ExitPoolRequestStruct, outputReferences: VaultActions.OutputReferenceStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeClaimRewards(gauges: PromiseOrValue[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeDeposit(gauge: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeMint(gauges: PromiseOrValue[], outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeSetMinterApproval(approval: PromiseOrValue, user: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeWithdraw(gauge: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + getEntrypoint(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + joinPool(poolId: PromiseOrValue, kind: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$2.JoinPoolRequestStruct, value: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + manageUserBalance(ops: IVault$2.UserBalanceOpStruct[], value: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + peekChainedReferenceValue(ref: PromiseOrValue, overrides?: CallOverrides): Promise; + setRelayerApproval(relayer: PromiseOrValue, approved: PromiseOrValue, authorisation: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + stakeETH(recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + stakeETHAndWrap(recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + swap(singleSwap: IVault$2.SingleSwapStruct, funds: IVault$2.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, value: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapAaveStaticToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, toUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapCompoundV2(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapERC4626(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapEuler(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapGearbox(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, dieselAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapReaperVaultToken(vaultToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapShareToken(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapTetu(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapUnbuttonToken(wrapperToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapWstETH(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapYearn(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + vaultPermit(token: PromiseOrValue, owner: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + vaultPermitDAI(token: PromiseOrValue, holder: PromiseOrValue, nonce: PromiseOrValue, expiry: PromiseOrValue, allowed: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapAaveDynamicToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, fromUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapCompoundV2(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapERC4626(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapEuler(wrappedToken: PromiseOrValue, eulerProtocol: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapGearbox(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, mainAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapReaperVaultToken(vaultToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapShareToken(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapStETH(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapTetu(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapUnbuttonToken(wrapperToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, uAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapYearn(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + approveVault(token: PromiseOrValue, amount: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + batchSwap(kind: PromiseOrValue, swaps: IVault$2.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault$2.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, value: PromiseOrValue, outputReferences: VaultActions.OutputReferenceStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + exitPool(poolId: PromiseOrValue, kind: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$2.ExitPoolRequestStruct, outputReferences: VaultActions.OutputReferenceStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeClaimRewards(gauges: PromiseOrValue[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeDeposit(gauge: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeMint(gauges: PromiseOrValue[], outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeSetMinterApproval(approval: PromiseOrValue, user: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + gaugeWithdraw(gauge: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + getEntrypoint(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + joinPool(poolId: PromiseOrValue, kind: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$2.JoinPoolRequestStruct, value: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + manageUserBalance(ops: IVault$2.UserBalanceOpStruct[], value: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + peekChainedReferenceValue(ref: PromiseOrValue, overrides?: CallOverrides): Promise; + setRelayerApproval(relayer: PromiseOrValue, approved: PromiseOrValue, authorisation: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + stakeETH(recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + stakeETHAndWrap(recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + swap(singleSwap: IVault$2.SingleSwapStruct, funds: IVault$2.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, value: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapAaveStaticToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, toUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapCompoundV2(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapERC4626(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapEuler(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapGearbox(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, dieselAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapReaperVaultToken(vaultToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapShareToken(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapTetu(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapUnbuttonToken(wrapperToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapWstETH(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + unwrapYearn(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + vaultPermit(token: PromiseOrValue, owner: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + vaultPermitDAI(token: PromiseOrValue, holder: PromiseOrValue, nonce: PromiseOrValue, expiry: PromiseOrValue, allowed: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapAaveDynamicToken(staticToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, fromUnderlying: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapCompoundV2(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapERC4626(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapEuler(wrappedToken: PromiseOrValue, eulerProtocol: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapGearbox(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, mainAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapReaperVaultToken(vaultToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapShareToken(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapStETH(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapTetu(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapUnbuttonToken(wrapperToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, uAmount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + wrapYearn(wrappedToken: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, outputReference: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +declare namespace IPoolSwapStructs$a { + type SwapRequestStruct = { + kind: PromiseOrValue; + tokenIn: PromiseOrValue; + tokenOut: PromiseOrValue; + amount: PromiseOrValue; + poolId: PromiseOrValue; + lastChangeBlock: PromiseOrValue; + from: PromiseOrValue; + to: PromiseOrValue; + userData: PromiseOrValue; + }; + type SwapRequestStructOutput = [ + number, + string, + string, + BigNumber$1, + string, + BigNumber$1, + string, + string, + string + ] & { + kind: number; + tokenIn: string; + tokenOut: string; + amount: BigNumber$1; + poolId: string; + lastChangeBlock: BigNumber$1; + from: string; + to: string; + userData: string; + }; +} +interface ComposableStablePoolInterface extends utils.Interface { + functions: { + "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL()": FunctionFragment; + "DOMAIN_SEPARATOR()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "disableRecoveryMode()": FunctionFragment; + "enableRecoveryMode()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getActualSupply()": FunctionFragment; + "getAmplificationParameter()": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getBptIndex()": FunctionFragment; + "getDomainSeparator()": FunctionFragment; + "getLastJoinExitData()": FunctionFragment; + "getMinimumBpt()": FunctionFragment; + "getNextNonce(address)": FunctionFragment; + "getOwner()": FunctionFragment; + "getPausedState()": FunctionFragment; + "getPoolId()": FunctionFragment; + "getProtocolFeePercentageCache(uint256)": FunctionFragment; + "getProtocolFeesCollector()": FunctionFragment; + "getProtocolSwapFeeDelegation()": FunctionFragment; + "getRate()": FunctionFragment; + "getRateProviders()": FunctionFragment; + "getScalingFactors()": FunctionFragment; + "getSwapFeePercentage()": FunctionFragment; + "getTokenRate(address)": FunctionFragment; + "getTokenRateCache(address)": FunctionFragment; + "getVault()": FunctionFragment; + "inRecoveryMode()": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "isTokenExemptFromYieldProtocolFee(address)": FunctionFragment; + "name()": FunctionFragment; + "nonces(address)": FunctionFragment; + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)": FunctionFragment; + "pause()": FunctionFragment; + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "setAssetManagerPoolConfig(address,bytes)": FunctionFragment; + "setSwapFeePercentage(uint256)": FunctionFragment; + "setTokenRateCacheDuration(address,uint256)": FunctionFragment; + "startAmplificationParameterUpdate(uint256,uint256)": FunctionFragment; + "stopAmplificationParameterUpdate()": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "unpause()": FunctionFragment; + "updateProtocolFeePercentageCache()": FunctionFragment; + "updateTokenRateCache(address)": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL" | "DOMAIN_SEPARATOR" | "allowance" | "approve" | "balanceOf" | "decimals" | "decreaseAllowance" | "disableRecoveryMode" | "enableRecoveryMode" | "getActionId" | "getActualSupply" | "getAmplificationParameter" | "getAuthorizer" | "getBptIndex" | "getDomainSeparator" | "getLastJoinExitData" | "getMinimumBpt" | "getNextNonce" | "getOwner" | "getPausedState" | "getPoolId" | "getProtocolFeePercentageCache" | "getProtocolFeesCollector" | "getProtocolSwapFeeDelegation" | "getRate" | "getRateProviders" | "getScalingFactors" | "getSwapFeePercentage" | "getTokenRate" | "getTokenRateCache" | "getVault" | "inRecoveryMode" | "increaseAllowance" | "isTokenExemptFromYieldProtocolFee" | "name" | "nonces" | "onExitPool" | "onJoinPool" | "onSwap" | "pause" | "permit" | "queryExit" | "queryJoin" | "setAssetManagerPoolConfig" | "setSwapFeePercentage" | "setTokenRateCacheDuration" | "startAmplificationParameterUpdate" | "stopAmplificationParameterUpdate" | "symbol" | "totalSupply" | "transfer" | "transferFrom" | "unpause" | "updateProtocolFeePercentageCache" | "updateTokenRateCache"): FunctionFragment; + encodeFunctionData(functionFragment: "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL", values?: undefined): string; + encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string; + encodeFunctionData(functionFragment: "allowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "decreaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "disableRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "enableRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getActualSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "getAmplificationParameter", values?: undefined): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getBptIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getDomainSeparator", values?: undefined): string; + encodeFunctionData(functionFragment: "getLastJoinExitData", values?: undefined): string; + encodeFunctionData(functionFragment: "getMinimumBpt", values?: undefined): string; + encodeFunctionData(functionFragment: "getNextNonce", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getOwner", values?: undefined): string; + encodeFunctionData(functionFragment: "getPausedState", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolId", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolFeePercentageCache", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getProtocolFeesCollector", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolSwapFeeDelegation", values?: undefined): string; + encodeFunctionData(functionFragment: "getRate", values?: undefined): string; + encodeFunctionData(functionFragment: "getRateProviders", values?: undefined): string; + encodeFunctionData(functionFragment: "getScalingFactors", values?: undefined): string; + encodeFunctionData(functionFragment: "getSwapFeePercentage", values?: undefined): string; + encodeFunctionData(functionFragment: "getTokenRate", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getTokenRateCache", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "inRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "increaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "isTokenExemptFromYieldProtocolFee", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "nonces", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "onExitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onJoinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap", values: [ + IPoolSwapStructs$a.SwapRequestStruct, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "pause", values?: undefined): string; + encodeFunctionData(functionFragment: "permit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryExit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryJoin", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "setAssetManagerPoolConfig", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setSwapFeePercentage", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setTokenRateCacheDuration", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "startAmplificationParameterUpdate", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "stopAmplificationParameterUpdate", values?: undefined): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "transfer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "transferFrom", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData(functionFragment: "updateProtocolFeePercentageCache", values?: undefined): string; + encodeFunctionData(functionFragment: "updateTokenRateCache", values: [PromiseOrValue]): string; + decodeFunctionResult(functionFragment: "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decreaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "disableRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "enableRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActualSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAmplificationParameter", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getBptIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDomainSeparator", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getLastJoinExitData", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMinimumBpt", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNextNonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getOwner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPausedState", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeePercentageCache", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeesCollector", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolSwapFeeDelegation", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRateProviders", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getScalingFactors", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTokenRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTokenRateCache", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "inRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isTokenExemptFromYieldProtocolFee", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onExitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onJoinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryExit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryJoin", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setAssetManagerPoolConfig", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setTokenRateCacheDuration", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "startAmplificationParameterUpdate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "stopAmplificationParameterUpdate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "updateProtocolFeePercentageCache", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "updateTokenRateCache", data: BytesLike): Result; + events: { + "AmpUpdateStarted(uint256,uint256,uint256,uint256)": EventFragment; + "AmpUpdateStopped(uint256)": EventFragment; + "Approval(address,address,uint256)": EventFragment; + "PausedStateChanged(bool)": EventFragment; + "ProtocolFeePercentageCacheUpdated(uint256,uint256)": EventFragment; + "RecoveryModeStateChanged(bool)": EventFragment; + "SwapFeePercentageChanged(uint256)": EventFragment; + "TokenRateCacheUpdated(uint256,uint256)": EventFragment; + "TokenRateProviderSet(uint256,address,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "AmpUpdateStarted"): EventFragment; + getEvent(nameOrSignatureOrTopic: "AmpUpdateStopped"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PausedStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ProtocolFeePercentageCacheUpdated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RecoveryModeStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SwapFeePercentageChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TokenRateCacheUpdated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TokenRateProviderSet"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} +interface AmpUpdateStartedEventObject$1 { + startValue: BigNumber$1; + endValue: BigNumber$1; + startTime: BigNumber$1; + endTime: BigNumber$1; +} +type AmpUpdateStartedEvent$1 = TypedEvent<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 +], AmpUpdateStartedEventObject$1>; +type AmpUpdateStartedEventFilter$1 = TypedEventFilter; +interface AmpUpdateStoppedEventObject$1 { + currentValue: BigNumber$1; +} +type AmpUpdateStoppedEvent$1 = TypedEvent<[ + BigNumber$1 +], AmpUpdateStoppedEventObject$1>; +type AmpUpdateStoppedEventFilter$1 = TypedEventFilter; +interface ApprovalEventObject$c { + owner: string; + spender: string; + value: BigNumber$1; +} +type ApprovalEvent$c = TypedEvent<[ + string, + string, + BigNumber$1 +], ApprovalEventObject$c>; +type ApprovalEventFilter$c = TypedEventFilter; +interface PausedStateChangedEventObject$9 { + paused: boolean; +} +type PausedStateChangedEvent$9 = TypedEvent<[ + boolean +], PausedStateChangedEventObject$9>; +type PausedStateChangedEventFilter$9 = TypedEventFilter; +interface ProtocolFeePercentageCacheUpdatedEventObject$1 { + feeType: BigNumber$1; + protocolFeePercentage: BigNumber$1; +} +type ProtocolFeePercentageCacheUpdatedEvent$1 = TypedEvent<[ + BigNumber$1, + BigNumber$1 +], ProtocolFeePercentageCacheUpdatedEventObject$1>; +type ProtocolFeePercentageCacheUpdatedEventFilter$1 = TypedEventFilter; +interface RecoveryModeStateChangedEventObject$5 { + enabled: boolean; +} +type RecoveryModeStateChangedEvent$5 = TypedEvent<[ + boolean +], RecoveryModeStateChangedEventObject$5>; +type RecoveryModeStateChangedEventFilter$5 = TypedEventFilter; +interface SwapFeePercentageChangedEventObject$8 { + swapFeePercentage: BigNumber$1; +} +type SwapFeePercentageChangedEvent$8 = TypedEvent<[ + BigNumber$1 +], SwapFeePercentageChangedEventObject$8>; +type SwapFeePercentageChangedEventFilter$8 = TypedEventFilter; +interface TokenRateCacheUpdatedEventObject { + tokenIndex: BigNumber$1; + rate: BigNumber$1; +} +type TokenRateCacheUpdatedEvent = TypedEvent<[ + BigNumber$1, + BigNumber$1 +], TokenRateCacheUpdatedEventObject>; +type TokenRateCacheUpdatedEventFilter = TypedEventFilter; +interface TokenRateProviderSetEventObject { + tokenIndex: BigNumber$1; + provider: string; + cacheDuration: BigNumber$1; +} +type TokenRateProviderSetEvent = TypedEvent<[ + BigNumber$1, + string, + BigNumber$1 +], TokenRateProviderSetEventObject>; +type TokenRateProviderSetEventFilter = TypedEventFilter; +interface TransferEventObject$c { + from: string; + to: string; + value: BigNumber$1; +} +type TransferEvent$c = TypedEvent<[ + string, + string, + BigNumber$1 +], TransferEventObject$c>; +type TransferEventFilter$c = TypedEventFilter; +declare namespace ComposableStablePool { + type NewPoolParamsStruct = { + vault: PromiseOrValue; + protocolFeeProvider: PromiseOrValue; + name: PromiseOrValue; + symbol: PromiseOrValue; + tokens: PromiseOrValue[]; + rateProviders: PromiseOrValue[]; + tokenRateCacheDurations: PromiseOrValue[]; + exemptFromYieldProtocolFeeFlags: PromiseOrValue[]; + amplificationParameter: PromiseOrValue; + swapFeePercentage: PromiseOrValue; + pauseWindowDuration: PromiseOrValue; + bufferPeriodDuration: PromiseOrValue; + owner: PromiseOrValue; + }; + type NewPoolParamsStructOutput = [ + string, + string, + string, + string, + string[], + string[], + BigNumber$1[], + boolean[], + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + string + ] & { + vault: string; + protocolFeeProvider: string; + name: string; + symbol: string; + tokens: string[]; + rateProviders: string[]; + tokenRateCacheDurations: BigNumber$1[]; + exemptFromYieldProtocolFeeFlags: boolean[]; + amplificationParameter: BigNumber$1; + swapFeePercentage: BigNumber$1; + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + owner: string; + }; +} +interface ComposableStablePool extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: ComposableStablePoolInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL(overrides?: CallOverrides): Promise<[BigNumber$1]>; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + decimals(overrides?: CallOverrides): Promise<[number]>; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getActualSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getAmplificationParameter(overrides?: CallOverrides): Promise<[ + BigNumber$1, + boolean, + BigNumber$1 + ] & { + value: BigNumber$1; + isUpdating: boolean; + precision: BigNumber$1; + }>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getBptIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getDomainSeparator(overrides?: CallOverrides): Promise<[string]>; + getLastJoinExitData(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lastJoinExitAmplification: BigNumber$1; + lastPostJoinExitInvariant: BigNumber$1; + }>; + getMinimumBpt(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + getOwner(overrides?: CallOverrides): Promise<[string]>; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise<[string]>; + getProtocolFeePercentageCache(feeType: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + getProtocolFeesCollector(overrides?: CallOverrides): Promise<[string]>; + getProtocolSwapFeeDelegation(overrides?: CallOverrides): Promise<[boolean]>; + getRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getRateProviders(overrides?: CallOverrides): Promise<[string[]]>; + getScalingFactors(overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + getSwapFeePercentage(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getTokenRate(token: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + getTokenRateCache(token: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + rate: BigNumber$1; + oldRate: BigNumber$1; + duration: BigNumber$1; + expires: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise<[string]>; + inRecoveryMode(overrides?: CallOverrides): Promise<[boolean]>; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + isTokenExemptFromYieldProtocolFee(token: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + name(overrides?: CallOverrides): Promise<[string]>; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(swapRequest: IPoolSwapStructs$a.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTokenRateCacheDuration(token: PromiseOrValue, duration: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + startAmplificationParameterUpdate(rawEndValue: PromiseOrValue, endTime: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + stopAmplificationParameterUpdate(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise<[string]>; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + updateProtocolFeePercentageCache(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + updateTokenRateCache(token: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL(overrides?: CallOverrides): Promise; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getActualSupply(overrides?: CallOverrides): Promise; + getAmplificationParameter(overrides?: CallOverrides): Promise<[ + BigNumber$1, + boolean, + BigNumber$1 + ] & { + value: BigNumber$1; + isUpdating: boolean; + precision: BigNumber$1; + }>; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getLastJoinExitData(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lastJoinExitAmplification: BigNumber$1; + lastPostJoinExitInvariant: BigNumber$1; + }>; + getMinimumBpt(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeePercentageCache(feeType: PromiseOrValue, overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getProtocolSwapFeeDelegation(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getRateProviders(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTokenRate(token: PromiseOrValue, overrides?: CallOverrides): Promise; + getTokenRateCache(token: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + rate: BigNumber$1; + oldRate: BigNumber$1; + duration: BigNumber$1; + expires: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + isTokenExemptFromYieldProtocolFee(token: PromiseOrValue, overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(swapRequest: IPoolSwapStructs$a.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTokenRateCacheDuration(token: PromiseOrValue, duration: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + startAmplificationParameterUpdate(rawEndValue: PromiseOrValue, endTime: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + stopAmplificationParameterUpdate(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + updateProtocolFeePercentageCache(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + updateTokenRateCache(token: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL(overrides?: CallOverrides): Promise; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + disableRecoveryMode(overrides?: CallOverrides): Promise; + enableRecoveryMode(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getActualSupply(overrides?: CallOverrides): Promise; + getAmplificationParameter(overrides?: CallOverrides): Promise<[ + BigNumber$1, + boolean, + BigNumber$1 + ] & { + value: BigNumber$1; + isUpdating: boolean; + precision: BigNumber$1; + }>; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getLastJoinExitData(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lastJoinExitAmplification: BigNumber$1; + lastPostJoinExitInvariant: BigNumber$1; + }>; + getMinimumBpt(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeePercentageCache(feeType: PromiseOrValue, overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getProtocolSwapFeeDelegation(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getRateProviders(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTokenRate(token: PromiseOrValue, overrides?: CallOverrides): Promise; + getTokenRateCache(token: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + rate: BigNumber$1; + oldRate: BigNumber$1; + duration: BigNumber$1; + expires: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: CallOverrides): Promise; + isTokenExemptFromYieldProtocolFee(token: PromiseOrValue, overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1[], BigNumber$1[]]>; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1[], BigNumber$1[]]>; + onSwap(swapRequest: IPoolSwapStructs$a.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise; + pause(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptIn: BigNumber$1; + amountsOut: BigNumber$1[]; + }>; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptOut: BigNumber$1; + amountsIn: BigNumber$1[]; + }>; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: CallOverrides): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: CallOverrides): Promise; + setTokenRateCacheDuration(token: PromiseOrValue, duration: PromiseOrValue, overrides?: CallOverrides): Promise; + startAmplificationParameterUpdate(rawEndValue: PromiseOrValue, endTime: PromiseOrValue, overrides?: CallOverrides): Promise; + stopAmplificationParameterUpdate(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + unpause(overrides?: CallOverrides): Promise; + updateProtocolFeePercentageCache(overrides?: CallOverrides): Promise; + updateTokenRateCache(token: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + filters: { + "AmpUpdateStarted(uint256,uint256,uint256,uint256)"(startValue?: null, endValue?: null, startTime?: null, endTime?: null): AmpUpdateStartedEventFilter$1; + AmpUpdateStarted(startValue?: null, endValue?: null, startTime?: null, endTime?: null): AmpUpdateStartedEventFilter$1; + "AmpUpdateStopped(uint256)"(currentValue?: null): AmpUpdateStoppedEventFilter$1; + AmpUpdateStopped(currentValue?: null): AmpUpdateStoppedEventFilter$1; + "Approval(address,address,uint256)"(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$c; + Approval(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$c; + "PausedStateChanged(bool)"(paused?: null): PausedStateChangedEventFilter$9; + PausedStateChanged(paused?: null): PausedStateChangedEventFilter$9; + "ProtocolFeePercentageCacheUpdated(uint256,uint256)"(feeType?: PromiseOrValue | null, protocolFeePercentage?: null): ProtocolFeePercentageCacheUpdatedEventFilter$1; + ProtocolFeePercentageCacheUpdated(feeType?: PromiseOrValue | null, protocolFeePercentage?: null): ProtocolFeePercentageCacheUpdatedEventFilter$1; + "RecoveryModeStateChanged(bool)"(enabled?: null): RecoveryModeStateChangedEventFilter$5; + RecoveryModeStateChanged(enabled?: null): RecoveryModeStateChangedEventFilter$5; + "SwapFeePercentageChanged(uint256)"(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$8; + SwapFeePercentageChanged(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$8; + "TokenRateCacheUpdated(uint256,uint256)"(tokenIndex?: PromiseOrValue | null, rate?: null): TokenRateCacheUpdatedEventFilter; + TokenRateCacheUpdated(tokenIndex?: PromiseOrValue | null, rate?: null): TokenRateCacheUpdatedEventFilter; + "TokenRateProviderSet(uint256,address,uint256)"(tokenIndex?: PromiseOrValue | null, provider?: PromiseOrValue | null, cacheDuration?: null): TokenRateProviderSetEventFilter; + TokenRateProviderSet(tokenIndex?: PromiseOrValue | null, provider?: PromiseOrValue | null, cacheDuration?: null): TokenRateProviderSetEventFilter; + "Transfer(address,address,uint256)"(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$c; + Transfer(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$c; + }; + estimateGas: { + DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL(overrides?: CallOverrides): Promise; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getActualSupply(overrides?: CallOverrides): Promise; + getAmplificationParameter(overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getLastJoinExitData(overrides?: CallOverrides): Promise; + getMinimumBpt(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeePercentageCache(feeType: PromiseOrValue, overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getProtocolSwapFeeDelegation(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getRateProviders(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTokenRate(token: PromiseOrValue, overrides?: CallOverrides): Promise; + getTokenRateCache(token: PromiseOrValue, overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + isTokenExemptFromYieldProtocolFee(token: PromiseOrValue, overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(swapRequest: IPoolSwapStructs$a.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTokenRateCacheDuration(token: PromiseOrValue, duration: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + startAmplificationParameterUpdate(rawEndValue: PromiseOrValue, endTime: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + stopAmplificationParameterUpdate(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + updateProtocolFeePercentageCache(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + updateTokenRateCache(token: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL(overrides?: CallOverrides): Promise; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getActualSupply(overrides?: CallOverrides): Promise; + getAmplificationParameter(overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getLastJoinExitData(overrides?: CallOverrides): Promise; + getMinimumBpt(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeePercentageCache(feeType: PromiseOrValue, overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getProtocolSwapFeeDelegation(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getRateProviders(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTokenRate(token: PromiseOrValue, overrides?: CallOverrides): Promise; + getTokenRateCache(token: PromiseOrValue, overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + isTokenExemptFromYieldProtocolFee(token: PromiseOrValue, overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(swapRequest: IPoolSwapStructs$a.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTokenRateCacheDuration(token: PromiseOrValue, duration: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + startAmplificationParameterUpdate(rawEndValue: PromiseOrValue, endTime: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + stopAmplificationParameterUpdate(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + updateProtocolFeePercentageCache(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + updateTokenRateCache(token: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +interface ComposableStablePoolFactoryInterface extends utils.Interface { + functions: { + "create(string,string,address[],uint256,address[],uint256[],bool[],uint256,address,bytes32)": FunctionFragment; + "disable()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getCreationCode()": FunctionFragment; + "getCreationCodeContracts()": FunctionFragment; + "getPauseConfiguration()": FunctionFragment; + "getPoolVersion()": FunctionFragment; + "getProtocolFeePercentagesProvider()": FunctionFragment; + "getVault()": FunctionFragment; + "isDisabled()": FunctionFragment; + "isPoolFromFactory(address)": FunctionFragment; + "version()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "create" | "disable" | "getActionId" | "getAuthorizer" | "getCreationCode" | "getCreationCodeContracts" | "getPauseConfiguration" | "getPoolVersion" | "getProtocolFeePercentagesProvider" | "getVault" | "isDisabled" | "isPoolFromFactory" | "version"): FunctionFragment; + encodeFunctionData(functionFragment: "create", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "disable", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getCreationCode", values?: undefined): string; + encodeFunctionData(functionFragment: "getCreationCodeContracts", values?: undefined): string; + encodeFunctionData(functionFragment: "getPauseConfiguration", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolVersion", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolFeePercentagesProvider", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "isDisabled", values?: undefined): string; + encodeFunctionData(functionFragment: "isPoolFromFactory", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + decodeFunctionResult(functionFragment: "create", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "disable", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCreationCode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCreationCodeContracts", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPauseConfiguration", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolVersion", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeePercentagesProvider", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isDisabled", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isPoolFromFactory", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + events: { + "FactoryDisabled()": EventFragment; + "PoolCreated(address)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "FactoryDisabled"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PoolCreated"): EventFragment; +} +interface FactoryDisabledEventObject$5 { +} +type FactoryDisabledEvent$5 = TypedEvent<[], FactoryDisabledEventObject$5>; +type FactoryDisabledEventFilter$5 = TypedEventFilter; +interface PoolCreatedEventObject$5 { + pool: string; +} +type PoolCreatedEvent$5 = TypedEvent<[string], PoolCreatedEventObject$5>; +type PoolCreatedEventFilter$5 = TypedEventFilter; +interface ComposableStablePoolFactory extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: ComposableStablePoolFactoryInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + create(name: PromiseOrValue, symbol: PromiseOrValue, tokens: PromiseOrValue[], amplificationParameter: PromiseOrValue, rateProviders: PromiseOrValue[], tokenRateCacheDurations: PromiseOrValue[], exemptFromYieldProtocolFeeFlags: PromiseOrValue[], swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getCreationCode(overrides?: CallOverrides): Promise<[string]>; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise<[string]>; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise<[string]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + isDisabled(overrides?: CallOverrides): Promise<[boolean]>; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + version(overrides?: CallOverrides): Promise<[string]>; + }; + create(name: PromiseOrValue, symbol: PromiseOrValue, tokens: PromiseOrValue[], amplificationParameter: PromiseOrValue, rateProviders: PromiseOrValue[], tokenRateCacheDurations: PromiseOrValue[], exemptFromYieldProtocolFeeFlags: PromiseOrValue[], swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + callStatic: { + create(name: PromiseOrValue, symbol: PromiseOrValue, tokens: PromiseOrValue[], amplificationParameter: PromiseOrValue, rateProviders: PromiseOrValue[], tokenRateCacheDurations: PromiseOrValue[], exemptFromYieldProtocolFeeFlags: PromiseOrValue[], swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides): Promise; + disable(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + filters: { + "FactoryDisabled()"(): FactoryDisabledEventFilter$5; + FactoryDisabled(): FactoryDisabledEventFilter$5; + "PoolCreated(address)"(pool?: PromiseOrValue | null): PoolCreatedEventFilter$5; + PoolCreated(pool?: PromiseOrValue | null): PoolCreatedEventFilter$5; + }; + estimateGas: { + create(name: PromiseOrValue, symbol: PromiseOrValue, tokens: PromiseOrValue[], amplificationParameter: PromiseOrValue, rateProviders: PromiseOrValue[], tokenRateCacheDurations: PromiseOrValue[], exemptFromYieldProtocolFeeFlags: PromiseOrValue[], swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + create(name: PromiseOrValue, symbol: PromiseOrValue, tokens: PromiseOrValue[], amplificationParameter: PromiseOrValue, rateProviders: PromiseOrValue[], tokenRateCacheDurations: PromiseOrValue[], exemptFromYieldProtocolFeeFlags: PromiseOrValue[], swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; +} + +declare namespace IPoolSwapStructs$9 { + type SwapRequestStruct = { + kind: PromiseOrValue; + tokenIn: PromiseOrValue; + tokenOut: PromiseOrValue; + amount: PromiseOrValue; + poolId: PromiseOrValue; + lastChangeBlock: PromiseOrValue; + from: PromiseOrValue; + to: PromiseOrValue; + userData: PromiseOrValue; + }; + type SwapRequestStructOutput = [ + number, + string, + string, + BigNumber$1, + string, + BigNumber$1, + string, + string, + string + ] & { + kind: number; + tokenIn: string; + tokenOut: string; + amount: BigNumber$1; + poolId: string; + lastChangeBlock: BigNumber$1; + from: string; + to: string; + userData: string; + }; +} +interface ConvergentCurvePoolInterface extends utils.Interface { + functions: { + "DOMAIN_SEPARATOR()": FunctionFragment; + "FEE_BOUND()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "bond()": FunctionFragment; + "bondDecimals()": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseApproval(address,uint256)": FunctionFragment; + "expiration()": FunctionFragment; + "feesBond()": FunctionFragment; + "feesUnderlying()": FunctionFragment; + "getPoolId()": FunctionFragment; + "getVault()": FunctionFragment; + "governance()": FunctionFragment; + "increaseApproval(address,uint256)": FunctionFragment; + "name()": FunctionFragment; + "nonces(address)": FunctionFragment; + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)": FunctionFragment; + "percentFee()": FunctionFragment; + "percentFeeGov()": FunctionFragment; + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "solveTradeInvariant(uint256,uint256,uint256,bool)": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "underlying()": FunctionFragment; + "underlyingDecimals()": FunctionFragment; + "unitSeconds()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "DOMAIN_SEPARATOR" | "FEE_BOUND" | "allowance" | "approve" | "balanceOf" | "bond" | "bondDecimals" | "decimals" | "decreaseApproval" | "expiration" | "feesBond" | "feesUnderlying" | "getPoolId" | "getVault" | "governance" | "increaseApproval" | "name" | "nonces" | "onExitPool" | "onJoinPool" | "onSwap" | "percentFee" | "percentFeeGov" | "permit" | "solveTradeInvariant" | "symbol" | "totalSupply" | "transfer" | "transferFrom" | "underlying" | "underlyingDecimals" | "unitSeconds"): FunctionFragment; + encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string; + encodeFunctionData(functionFragment: "FEE_BOUND", values?: undefined): string; + encodeFunctionData(functionFragment: "allowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "bond", values?: undefined): string; + encodeFunctionData(functionFragment: "bondDecimals", values?: undefined): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "decreaseApproval", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "expiration", values?: undefined): string; + encodeFunctionData(functionFragment: "feesBond", values?: undefined): string; + encodeFunctionData(functionFragment: "feesUnderlying", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolId", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "governance", values?: undefined): string; + encodeFunctionData(functionFragment: "increaseApproval", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "nonces", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "onExitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onJoinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap", values: [ + IPoolSwapStructs$9.SwapRequestStruct, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "percentFee", values?: undefined): string; + encodeFunctionData(functionFragment: "percentFeeGov", values?: undefined): string; + encodeFunctionData(functionFragment: "permit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "solveTradeInvariant", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "transfer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "transferFrom", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "underlying", values?: undefined): string; + encodeFunctionData(functionFragment: "underlyingDecimals", values?: undefined): string; + encodeFunctionData(functionFragment: "unitSeconds", values?: undefined): string; + decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "FEE_BOUND", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "bond", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "bondDecimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decreaseApproval", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "expiration", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "feesBond", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "feesUnderlying", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "governance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increaseApproval", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onExitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onJoinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "percentFee", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "percentFeeGov", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "solveTradeInvariant", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "underlyingDecimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unitSeconds", data: BytesLike): Result; + events: { + "Approval(address,address,uint256)": EventFragment; + "FeeCollection(uint256,uint256,uint256,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "FeeCollection"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} +interface ApprovalEventObject$b { + owner: string; + spender: string; + value: BigNumber$1; +} +type ApprovalEvent$b = TypedEvent<[ + string, + string, + BigNumber$1 +], ApprovalEventObject$b>; +type ApprovalEventFilter$b = TypedEventFilter; +interface FeeCollectionEventObject { + collectedBase: BigNumber$1; + collectedBond: BigNumber$1; + remainingBase: BigNumber$1; + remainingBond: BigNumber$1; +} +type FeeCollectionEvent = TypedEvent<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 +], FeeCollectionEventObject>; +type FeeCollectionEventFilter = TypedEventFilter; +interface TransferEventObject$b { + from: string; + to: string; + value: BigNumber$1; +} +type TransferEvent$b = TypedEvent<[ + string, + string, + BigNumber$1 +], TransferEventObject$b>; +type TransferEventFilter$b = TypedEventFilter; +interface ConvergentCurvePool extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: ConvergentCurvePoolInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; + FEE_BOUND(overrides?: CallOverrides): Promise<[BigNumber$1]>; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + bond(overrides?: CallOverrides): Promise<[string]>; + bondDecimals(overrides?: CallOverrides): Promise<[number]>; + decimals(overrides?: CallOverrides): Promise<[number]>; + decreaseApproval(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + expiration(overrides?: CallOverrides): Promise<[BigNumber$1]>; + feesBond(overrides?: CallOverrides): Promise<[BigNumber$1]>; + feesUnderlying(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getPoolId(overrides?: CallOverrides): Promise<[string]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + governance(overrides?: CallOverrides): Promise<[string]>; + increaseApproval(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise<[string]>; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + onExitPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, currentBalances: PromiseOrValue[], arg4: PromiseOrValue, protocolSwapFee: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, currentBalances: PromiseOrValue[], arg4: PromiseOrValue, protocolSwapFee: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(swapRequest: IPoolSwapStructs$9.SwapRequestStruct, currentBalanceTokenIn: PromiseOrValue, currentBalanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + percentFee(overrides?: CallOverrides): Promise<[BigNumber$1]>; + percentFeeGov(overrides?: CallOverrides): Promise<[BigNumber$1]>; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + solveTradeInvariant(amountX: PromiseOrValue, reserveX: PromiseOrValue, reserveY: PromiseOrValue, out: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + symbol(overrides?: CallOverrides): Promise<[string]>; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + underlying(overrides?: CallOverrides): Promise<[string]>; + underlyingDecimals(overrides?: CallOverrides): Promise<[number]>; + unitSeconds(overrides?: CallOverrides): Promise<[BigNumber$1]>; + }; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + FEE_BOUND(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + bond(overrides?: CallOverrides): Promise; + bondDecimals(overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseApproval(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + expiration(overrides?: CallOverrides): Promise; + feesBond(overrides?: CallOverrides): Promise; + feesUnderlying(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + governance(overrides?: CallOverrides): Promise; + increaseApproval(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, currentBalances: PromiseOrValue[], arg4: PromiseOrValue, protocolSwapFee: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, currentBalances: PromiseOrValue[], arg4: PromiseOrValue, protocolSwapFee: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(swapRequest: IPoolSwapStructs$9.SwapRequestStruct, currentBalanceTokenIn: PromiseOrValue, currentBalanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + percentFee(overrides?: CallOverrides): Promise; + percentFeeGov(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + solveTradeInvariant(amountX: PromiseOrValue, reserveX: PromiseOrValue, reserveY: PromiseOrValue, out: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + underlying(overrides?: CallOverrides): Promise; + underlyingDecimals(overrides?: CallOverrides): Promise; + unitSeconds(overrides?: CallOverrides): Promise; + callStatic: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + FEE_BOUND(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + bond(overrides?: CallOverrides): Promise; + bondDecimals(overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseApproval(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + expiration(overrides?: CallOverrides): Promise; + feesBond(overrides?: CallOverrides): Promise; + feesUnderlying(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + governance(overrides?: CallOverrides): Promise; + increaseApproval(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, currentBalances: PromiseOrValue[], arg4: PromiseOrValue, protocolSwapFee: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsOut: BigNumber$1[]; + dueProtocolFeeAmounts: BigNumber$1[]; + }>; + onJoinPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, currentBalances: PromiseOrValue[], arg4: PromiseOrValue, protocolSwapFee: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsIn: BigNumber$1[]; + dueProtocolFeeAmounts: BigNumber$1[]; + }>; + onSwap(swapRequest: IPoolSwapStructs$9.SwapRequestStruct, currentBalanceTokenIn: PromiseOrValue, currentBalanceTokenOut: PromiseOrValue, overrides?: CallOverrides): Promise; + percentFee(overrides?: CallOverrides): Promise; + percentFeeGov(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + solveTradeInvariant(amountX: PromiseOrValue, reserveX: PromiseOrValue, reserveY: PromiseOrValue, out: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + underlying(overrides?: CallOverrides): Promise; + underlyingDecimals(overrides?: CallOverrides): Promise; + unitSeconds(overrides?: CallOverrides): Promise; + }; + filters: { + "Approval(address,address,uint256)"(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$b; + Approval(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$b; + "FeeCollection(uint256,uint256,uint256,uint256)"(collectedBase?: null, collectedBond?: null, remainingBase?: null, remainingBond?: null): FeeCollectionEventFilter; + FeeCollection(collectedBase?: null, collectedBond?: null, remainingBase?: null, remainingBond?: null): FeeCollectionEventFilter; + "Transfer(address,address,uint256)"(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$b; + Transfer(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$b; + }; + estimateGas: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + FEE_BOUND(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + bond(overrides?: CallOverrides): Promise; + bondDecimals(overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseApproval(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + expiration(overrides?: CallOverrides): Promise; + feesBond(overrides?: CallOverrides): Promise; + feesUnderlying(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + governance(overrides?: CallOverrides): Promise; + increaseApproval(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, currentBalances: PromiseOrValue[], arg4: PromiseOrValue, protocolSwapFee: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, currentBalances: PromiseOrValue[], arg4: PromiseOrValue, protocolSwapFee: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(swapRequest: IPoolSwapStructs$9.SwapRequestStruct, currentBalanceTokenIn: PromiseOrValue, currentBalanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + percentFee(overrides?: CallOverrides): Promise; + percentFeeGov(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + solveTradeInvariant(amountX: PromiseOrValue, reserveX: PromiseOrValue, reserveY: PromiseOrValue, out: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + underlying(overrides?: CallOverrides): Promise; + underlyingDecimals(overrides?: CallOverrides): Promise; + unitSeconds(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + FEE_BOUND(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + bond(overrides?: CallOverrides): Promise; + bondDecimals(overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseApproval(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + expiration(overrides?: CallOverrides): Promise; + feesBond(overrides?: CallOverrides): Promise; + feesUnderlying(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + governance(overrides?: CallOverrides): Promise; + increaseApproval(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, currentBalances: PromiseOrValue[], arg4: PromiseOrValue, protocolSwapFee: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, currentBalances: PromiseOrValue[], arg4: PromiseOrValue, protocolSwapFee: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(swapRequest: IPoolSwapStructs$9.SwapRequestStruct, currentBalanceTokenIn: PromiseOrValue, currentBalanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + percentFee(overrides?: CallOverrides): Promise; + percentFeeGov(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + solveTradeInvariant(amountX: PromiseOrValue, reserveX: PromiseOrValue, reserveY: PromiseOrValue, out: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + underlying(overrides?: CallOverrides): Promise; + underlyingDecimals(overrides?: CallOverrides): Promise; + unitSeconds(overrides?: CallOverrides): Promise; + }; +} + +interface ERC20Interface extends utils.Interface { + functions: { + "name()": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "totalSupply()": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "decimals()": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "symbol()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "allowance(address,address)": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "name" | "approve" | "totalSupply" | "transferFrom" | "decimals" | "balanceOf" | "symbol" | "transfer" | "allowance"): FunctionFragment; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "transferFrom", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "balanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "transfer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "allowance", values: [PromiseOrValue, PromiseOrValue]): string; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + events: { + "Approval(address,address,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} +interface ApprovalEventObject$a { + owner: string; + spender: string; + value: BigNumber$1; +} +type ApprovalEvent$a = TypedEvent<[ + string, + string, + BigNumber$1 +], ApprovalEventObject$a>; +type ApprovalEventFilter$a = TypedEventFilter; +interface TransferEventObject$a { + from: string; + to: string; + value: BigNumber$1; +} +type TransferEvent$a = TypedEvent<[ + string, + string, + BigNumber$1 +], TransferEventObject$a>; +type TransferEventFilter$a = TypedEventFilter; +interface ERC20 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: ERC20Interface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + name(overrides?: CallOverrides): Promise<[string]>; + approve(_spender: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + transferFrom(_from: PromiseOrValue, _to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + decimals(overrides?: CallOverrides): Promise<[number]>; + balanceOf(_owner: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1] & { + balance: BigNumber$1; + }>; + symbol(overrides?: CallOverrides): Promise<[string]>; + transfer(_to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + allowance(_owner: PromiseOrValue, _spender: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + }; + name(overrides?: CallOverrides): Promise; + approve(_spender: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transferFrom(_from: PromiseOrValue, _to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + decimals(overrides?: CallOverrides): Promise; + balanceOf(_owner: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + transfer(_to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + allowance(_owner: PromiseOrValue, _spender: PromiseOrValue, overrides?: CallOverrides): Promise; + callStatic: { + name(overrides?: CallOverrides): Promise; + approve(_spender: PromiseOrValue, _value: PromiseOrValue, overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transferFrom(_from: PromiseOrValue, _to: PromiseOrValue, _value: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + balanceOf(_owner: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + transfer(_to: PromiseOrValue, _value: PromiseOrValue, overrides?: CallOverrides): Promise; + allowance(_owner: PromiseOrValue, _spender: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + filters: { + "Approval(address,address,uint256)"(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$a; + Approval(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$a; + "Transfer(address,address,uint256)"(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$a; + Transfer(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$a; + }; + estimateGas: { + name(overrides?: CallOverrides): Promise; + approve(_spender: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transferFrom(_from: PromiseOrValue, _to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + decimals(overrides?: CallOverrides): Promise; + balanceOf(_owner: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + transfer(_to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + allowance(_owner: PromiseOrValue, _spender: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + populateTransaction: { + name(overrides?: CallOverrides): Promise; + approve(_spender: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transferFrom(_from: PromiseOrValue, _to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + decimals(overrides?: CallOverrides): Promise; + balanceOf(_owner: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + transfer(_to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + allowance(_owner: PromiseOrValue, _spender: PromiseOrValue, overrides?: CallOverrides): Promise; + }; +} + +declare namespace IPoolSwapStructs$8 { + type SwapRequestStruct = { + kind: PromiseOrValue; + tokenIn: PromiseOrValue; + tokenOut: PromiseOrValue; + amount: PromiseOrValue; + poolId: PromiseOrValue; + lastChangeBlock: PromiseOrValue; + from: PromiseOrValue; + to: PromiseOrValue; + userData: PromiseOrValue; + }; + type SwapRequestStructOutput = [ + number, + string, + string, + BigNumber$1, + string, + BigNumber$1, + string, + string, + string + ] & { + kind: number; + tokenIn: string; + tokenOut: string; + amount: BigNumber$1; + poolId: string; + lastChangeBlock: BigNumber$1; + from: string; + to: string; + userData: string; + }; +} +interface ERC4626LinearPoolInterface extends utils.Interface { + functions: { + "DOMAIN_SEPARATOR()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "disableRecoveryMode()": FunctionFragment; + "enableRecoveryMode()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getBptIndex()": FunctionFragment; + "getDomainSeparator()": FunctionFragment; + "getMainIndex()": FunctionFragment; + "getMainToken()": FunctionFragment; + "getNextNonce(address)": FunctionFragment; + "getOwner()": FunctionFragment; + "getPausedState()": FunctionFragment; + "getPoolId()": FunctionFragment; + "getProtocolFeesCollector()": FunctionFragment; + "getRate()": FunctionFragment; + "getScalingFactors()": FunctionFragment; + "getSwapFeePercentage()": FunctionFragment; + "getTargets()": FunctionFragment; + "getVault()": FunctionFragment; + "getVirtualSupply()": FunctionFragment; + "getWrappedIndex()": FunctionFragment; + "getWrappedToken()": FunctionFragment; + "getWrappedTokenRate()": FunctionFragment; + "inRecoveryMode()": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "initialize()": FunctionFragment; + "name()": FunctionFragment; + "nonces(address)": FunctionFragment; + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)": FunctionFragment; + "pause()": FunctionFragment; + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "setSwapFeePercentage(uint256)": FunctionFragment; + "setTargets(uint256,uint256)": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "unpause()": FunctionFragment; + "version()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "DOMAIN_SEPARATOR" | "allowance" | "approve" | "balanceOf" | "decimals" | "decreaseAllowance" | "disableRecoveryMode" | "enableRecoveryMode" | "getActionId" | "getAuthorizer" | "getBptIndex" | "getDomainSeparator" | "getMainIndex" | "getMainToken" | "getNextNonce" | "getOwner" | "getPausedState" | "getPoolId" | "getProtocolFeesCollector" | "getRate" | "getScalingFactors" | "getSwapFeePercentage" | "getTargets" | "getVault" | "getVirtualSupply" | "getWrappedIndex" | "getWrappedToken" | "getWrappedTokenRate" | "inRecoveryMode" | "increaseAllowance" | "initialize" | "name" | "nonces" | "onExitPool" | "onJoinPool" | "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)" | "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)" | "pause" | "permit" | "queryExit" | "queryJoin" | "setSwapFeePercentage" | "setTargets" | "symbol" | "totalSupply" | "transfer" | "transferFrom" | "unpause" | "version"): FunctionFragment; + encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string; + encodeFunctionData(functionFragment: "allowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "decreaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "disableRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "enableRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getBptIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getDomainSeparator", values?: undefined): string; + encodeFunctionData(functionFragment: "getMainIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getMainToken", values?: undefined): string; + encodeFunctionData(functionFragment: "getNextNonce", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getOwner", values?: undefined): string; + encodeFunctionData(functionFragment: "getPausedState", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolId", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolFeesCollector", values?: undefined): string; + encodeFunctionData(functionFragment: "getRate", values?: undefined): string; + encodeFunctionData(functionFragment: "getScalingFactors", values?: undefined): string; + encodeFunctionData(functionFragment: "getSwapFeePercentage", values?: undefined): string; + encodeFunctionData(functionFragment: "getTargets", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "getVirtualSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedToken", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedTokenRate", values?: undefined): string; + encodeFunctionData(functionFragment: "inRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "increaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "initialize", values?: undefined): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "nonces", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "onExitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onJoinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)", values: [ + IPoolSwapStructs$8.SwapRequestStruct, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)", values: [ + IPoolSwapStructs$8.SwapRequestStruct, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "pause", values?: undefined): string; + encodeFunctionData(functionFragment: "permit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryExit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryJoin", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "setSwapFeePercentage", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setTargets", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "transfer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "transferFrom", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decreaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "disableRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "enableRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getBptIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDomainSeparator", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMainIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMainToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNextNonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getOwner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPausedState", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeesCollector", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getScalingFactors", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTargets", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVirtualSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedTokenRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "inRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onExitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onJoinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryExit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryJoin", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setTargets", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + events: { + "Approval(address,address,uint256)": EventFragment; + "PausedStateChanged(bool)": EventFragment; + "RecoveryModeStateChanged(bool)": EventFragment; + "SwapFeePercentageChanged(uint256)": EventFragment; + "TargetsSet(address,uint256,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PausedStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RecoveryModeStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SwapFeePercentageChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TargetsSet"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} +interface ApprovalEventObject$9 { + owner: string; + spender: string; + value: BigNumber$1; +} +type ApprovalEvent$9 = TypedEvent<[ + string, + string, + BigNumber$1 +], ApprovalEventObject$9>; +type ApprovalEventFilter$9 = TypedEventFilter; +interface PausedStateChangedEventObject$8 { + paused: boolean; +} +type PausedStateChangedEvent$8 = TypedEvent<[ + boolean +], PausedStateChangedEventObject$8>; +type PausedStateChangedEventFilter$8 = TypedEventFilter; +interface RecoveryModeStateChangedEventObject$4 { + enabled: boolean; +} +type RecoveryModeStateChangedEvent$4 = TypedEvent<[ + boolean +], RecoveryModeStateChangedEventObject$4>; +type RecoveryModeStateChangedEventFilter$4 = TypedEventFilter; +interface SwapFeePercentageChangedEventObject$7 { + swapFeePercentage: BigNumber$1; +} +type SwapFeePercentageChangedEvent$7 = TypedEvent<[ + BigNumber$1 +], SwapFeePercentageChangedEventObject$7>; +type SwapFeePercentageChangedEventFilter$7 = TypedEventFilter; +interface TargetsSetEventObject$4 { + token: string; + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; +} +type TargetsSetEvent$4 = TypedEvent<[ + string, + BigNumber$1, + BigNumber$1 +], TargetsSetEventObject$4>; +type TargetsSetEventFilter$4 = TypedEventFilter; +interface TransferEventObject$9 { + from: string; + to: string; + value: BigNumber$1; +} +type TransferEvent$9 = TypedEvent<[ + string, + string, + BigNumber$1 +], TransferEventObject$9>; +type TransferEventFilter$9 = TypedEventFilter; +declare namespace ERC4626LinearPool { + type ConstructorArgsStruct = { + vault: PromiseOrValue; + name: PromiseOrValue; + symbol: PromiseOrValue; + mainToken: PromiseOrValue; + wrappedToken: PromiseOrValue; + assetManager: PromiseOrValue; + upperTarget: PromiseOrValue; + swapFeePercentage: PromiseOrValue; + pauseWindowDuration: PromiseOrValue; + bufferPeriodDuration: PromiseOrValue; + owner: PromiseOrValue; + version: PromiseOrValue; + }; + type ConstructorArgsStructOutput = [ + string, + string, + string, + string, + string, + string, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + string, + string + ] & { + vault: string; + name: string; + symbol: string; + mainToken: string; + wrappedToken: string; + assetManager: string; + upperTarget: BigNumber$1; + swapFeePercentage: BigNumber$1; + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + owner: string; + version: string; + }; +} +interface ERC4626LinearPool extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: ERC4626LinearPoolInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + decimals(overrides?: CallOverrides): Promise<[number]>; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getBptIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getDomainSeparator(overrides?: CallOverrides): Promise<[string]>; + getMainIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getMainToken(overrides?: CallOverrides): Promise<[string]>; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + getOwner(overrides?: CallOverrides): Promise<[string]>; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise<[string]>; + getProtocolFeesCollector(overrides?: CallOverrides): Promise<[string]>; + getRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getScalingFactors(overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + getSwapFeePercentage(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise<[string]>; + getVirtualSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getWrappedIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getWrappedToken(overrides?: CallOverrides): Promise<[string]>; + getWrappedTokenRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + inRecoveryMode(overrides?: CallOverrides): Promise<[boolean]>; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise<[string]>; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$8.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$8.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise<[string]>; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise<[string]>; + }; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$8.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$8.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + callStatic: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + disableRecoveryMode(overrides?: CallOverrides): Promise; + enableRecoveryMode(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsOut: BigNumber$1[]; + dueProtocolFees: BigNumber$1[]; + }>; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsIn: BigNumber$1[]; + dueProtocolFees: BigNumber$1[]; + }>; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$8.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$8.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: CallOverrides): Promise; + pause(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptIn: BigNumber$1; + amountsOut: BigNumber$1[]; + }>; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptOut: BigNumber$1; + amountsIn: BigNumber$1[]; + }>; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: CallOverrides): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + unpause(overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + filters: { + "Approval(address,address,uint256)"(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$9; + Approval(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$9; + "PausedStateChanged(bool)"(paused?: null): PausedStateChangedEventFilter$8; + PausedStateChanged(paused?: null): PausedStateChangedEventFilter$8; + "RecoveryModeStateChanged(bool)"(enabled?: null): RecoveryModeStateChangedEventFilter$4; + RecoveryModeStateChanged(enabled?: null): RecoveryModeStateChangedEventFilter$4; + "SwapFeePercentageChanged(uint256)"(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$7; + SwapFeePercentageChanged(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$7; + "TargetsSet(address,uint256,uint256)"(token?: PromiseOrValue | null, lowerTarget?: null, upperTarget?: null): TargetsSetEventFilter$4; + TargetsSet(token?: PromiseOrValue | null, lowerTarget?: null, upperTarget?: null): TargetsSetEventFilter$4; + "Transfer(address,address,uint256)"(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$9; + Transfer(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$9; + }; + estimateGas: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$8.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$8.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$8.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$8.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + }; +} + +interface ERC4626LinearPoolFactoryInterface extends utils.Interface { + functions: { + "create(string,string,address,address,uint256,uint256,address,uint256,bytes32)": FunctionFragment; + "disable()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getCreationCode()": FunctionFragment; + "getCreationCodeContracts()": FunctionFragment; + "getLastCreatedPool()": FunctionFragment; + "getPauseConfiguration()": FunctionFragment; + "getPoolVersion()": FunctionFragment; + "getProtocolFeePercentagesProvider()": FunctionFragment; + "getVault()": FunctionFragment; + "isDisabled()": FunctionFragment; + "isPoolFromFactory(address)": FunctionFragment; + "version()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "create" | "disable" | "getActionId" | "getAuthorizer" | "getCreationCode" | "getCreationCodeContracts" | "getLastCreatedPool" | "getPauseConfiguration" | "getPoolVersion" | "getProtocolFeePercentagesProvider" | "getVault" | "isDisabled" | "isPoolFromFactory" | "version"): FunctionFragment; + encodeFunctionData(functionFragment: "create", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "disable", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getCreationCode", values?: undefined): string; + encodeFunctionData(functionFragment: "getCreationCodeContracts", values?: undefined): string; + encodeFunctionData(functionFragment: "getLastCreatedPool", values?: undefined): string; + encodeFunctionData(functionFragment: "getPauseConfiguration", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolVersion", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolFeePercentagesProvider", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "isDisabled", values?: undefined): string; + encodeFunctionData(functionFragment: "isPoolFromFactory", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + decodeFunctionResult(functionFragment: "create", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "disable", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCreationCode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCreationCodeContracts", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getLastCreatedPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPauseConfiguration", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolVersion", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeePercentagesProvider", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isDisabled", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isPoolFromFactory", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + events: { + "Erc4626LinearPoolCreated(address,uint256)": EventFragment; + "FactoryDisabled()": EventFragment; + "PoolCreated(address)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Erc4626LinearPoolCreated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "FactoryDisabled"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PoolCreated"): EventFragment; +} +interface Erc4626LinearPoolCreatedEventObject { + pool: string; + protocolId: BigNumber$1; +} +type Erc4626LinearPoolCreatedEvent = TypedEvent<[ + string, + BigNumber$1 +], Erc4626LinearPoolCreatedEventObject>; +type Erc4626LinearPoolCreatedEventFilter = TypedEventFilter; +interface FactoryDisabledEventObject$4 { +} +type FactoryDisabledEvent$4 = TypedEvent<[], FactoryDisabledEventObject$4>; +type FactoryDisabledEventFilter$4 = TypedEventFilter; +interface PoolCreatedEventObject$4 { + pool: string; +} +type PoolCreatedEvent$4 = TypedEvent<[string], PoolCreatedEventObject$4>; +type PoolCreatedEventFilter$4 = TypedEventFilter; +interface ERC4626LinearPoolFactory extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: ERC4626LinearPoolFactoryInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getCreationCode(overrides?: CallOverrides): Promise<[string]>; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise<[string]>; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise<[string]>; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise<[string]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + isDisabled(overrides?: CallOverrides): Promise<[boolean]>; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + version(overrides?: CallOverrides): Promise<[string]>; + }; + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + callStatic: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides): Promise; + disable(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + filters: { + "Erc4626LinearPoolCreated(address,uint256)"(pool?: PromiseOrValue | null, protocolId?: PromiseOrValue | null): Erc4626LinearPoolCreatedEventFilter; + Erc4626LinearPoolCreated(pool?: PromiseOrValue | null, protocolId?: PromiseOrValue | null): Erc4626LinearPoolCreatedEventFilter; + "FactoryDisabled()"(): FactoryDisabledEventFilter$4; + FactoryDisabled(): FactoryDisabledEventFilter$4; + "PoolCreated(address)"(pool?: PromiseOrValue | null): PoolCreatedEventFilter$4; + PoolCreated(pool?: PromiseOrValue | null): PoolCreatedEventFilter$4; + }; + estimateGas: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; +} + +declare namespace IPoolSwapStructs$7 { + type SwapRequestStruct = { + kind: PromiseOrValue; + tokenIn: PromiseOrValue; + tokenOut: PromiseOrValue; + amount: PromiseOrValue; + poolId: PromiseOrValue; + lastChangeBlock: PromiseOrValue; + from: PromiseOrValue; + to: PromiseOrValue; + userData: PromiseOrValue; + }; + type SwapRequestStructOutput = [ + number, + string, + string, + BigNumber$1, + string, + BigNumber$1, + string, + string, + string + ] & { + kind: number; + tokenIn: string; + tokenOut: string; + amount: BigNumber$1; + poolId: string; + lastChangeBlock: BigNumber$1; + from: string; + to: string; + userData: string; + }; +} +interface EulerLinearPoolInterface extends utils.Interface { + functions: { + "DOMAIN_SEPARATOR()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "disableRecoveryMode()": FunctionFragment; + "enableRecoveryMode()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getBptIndex()": FunctionFragment; + "getDomainSeparator()": FunctionFragment; + "getMainIndex()": FunctionFragment; + "getMainToken()": FunctionFragment; + "getNextNonce(address)": FunctionFragment; + "getOwner()": FunctionFragment; + "getPausedState()": FunctionFragment; + "getPoolId()": FunctionFragment; + "getProtocolFeesCollector()": FunctionFragment; + "getRate()": FunctionFragment; + "getScalingFactors()": FunctionFragment; + "getSwapFeePercentage()": FunctionFragment; + "getTargets()": FunctionFragment; + "getVault()": FunctionFragment; + "getVirtualSupply()": FunctionFragment; + "getWrappedIndex()": FunctionFragment; + "getWrappedToken()": FunctionFragment; + "getWrappedTokenRate()": FunctionFragment; + "inRecoveryMode()": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "initialize()": FunctionFragment; + "name()": FunctionFragment; + "nonces(address)": FunctionFragment; + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)": FunctionFragment; + "pause()": FunctionFragment; + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "setSwapFeePercentage(uint256)": FunctionFragment; + "setTargets(uint256,uint256)": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "unpause()": FunctionFragment; + "version()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "DOMAIN_SEPARATOR" | "allowance" | "approve" | "balanceOf" | "decimals" | "decreaseAllowance" | "disableRecoveryMode" | "enableRecoveryMode" | "getActionId" | "getAuthorizer" | "getBptIndex" | "getDomainSeparator" | "getMainIndex" | "getMainToken" | "getNextNonce" | "getOwner" | "getPausedState" | "getPoolId" | "getProtocolFeesCollector" | "getRate" | "getScalingFactors" | "getSwapFeePercentage" | "getTargets" | "getVault" | "getVirtualSupply" | "getWrappedIndex" | "getWrappedToken" | "getWrappedTokenRate" | "inRecoveryMode" | "increaseAllowance" | "initialize" | "name" | "nonces" | "onExitPool" | "onJoinPool" | "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)" | "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)" | "pause" | "permit" | "queryExit" | "queryJoin" | "setSwapFeePercentage" | "setTargets" | "symbol" | "totalSupply" | "transfer" | "transferFrom" | "unpause" | "version"): FunctionFragment; + encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string; + encodeFunctionData(functionFragment: "allowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "decreaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "disableRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "enableRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getBptIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getDomainSeparator", values?: undefined): string; + encodeFunctionData(functionFragment: "getMainIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getMainToken", values?: undefined): string; + encodeFunctionData(functionFragment: "getNextNonce", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getOwner", values?: undefined): string; + encodeFunctionData(functionFragment: "getPausedState", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolId", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolFeesCollector", values?: undefined): string; + encodeFunctionData(functionFragment: "getRate", values?: undefined): string; + encodeFunctionData(functionFragment: "getScalingFactors", values?: undefined): string; + encodeFunctionData(functionFragment: "getSwapFeePercentage", values?: undefined): string; + encodeFunctionData(functionFragment: "getTargets", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "getVirtualSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedToken", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedTokenRate", values?: undefined): string; + encodeFunctionData(functionFragment: "inRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "increaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "initialize", values?: undefined): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "nonces", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "onExitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onJoinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)", values: [ + IPoolSwapStructs$7.SwapRequestStruct, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)", values: [ + IPoolSwapStructs$7.SwapRequestStruct, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "pause", values?: undefined): string; + encodeFunctionData(functionFragment: "permit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryExit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryJoin", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "setSwapFeePercentage", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setTargets", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "transfer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "transferFrom", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decreaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "disableRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "enableRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getBptIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDomainSeparator", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMainIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMainToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNextNonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getOwner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPausedState", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeesCollector", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getScalingFactors", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTargets", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVirtualSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedTokenRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "inRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onExitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onJoinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryExit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryJoin", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setTargets", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + events: { + "Approval(address,address,uint256)": EventFragment; + "PausedStateChanged(bool)": EventFragment; + "RecoveryModeStateChanged(bool)": EventFragment; + "SwapFeePercentageChanged(uint256)": EventFragment; + "TargetsSet(address,uint256,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PausedStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RecoveryModeStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SwapFeePercentageChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TargetsSet"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} +interface ApprovalEventObject$8 { + owner: string; + spender: string; + value: BigNumber$1; +} +type ApprovalEvent$8 = TypedEvent<[ + string, + string, + BigNumber$1 +], ApprovalEventObject$8>; +type ApprovalEventFilter$8 = TypedEventFilter; +interface PausedStateChangedEventObject$7 { + paused: boolean; +} +type PausedStateChangedEvent$7 = TypedEvent<[ + boolean +], PausedStateChangedEventObject$7>; +type PausedStateChangedEventFilter$7 = TypedEventFilter; +interface RecoveryModeStateChangedEventObject$3 { + enabled: boolean; +} +type RecoveryModeStateChangedEvent$3 = TypedEvent<[ + boolean +], RecoveryModeStateChangedEventObject$3>; +type RecoveryModeStateChangedEventFilter$3 = TypedEventFilter; +interface SwapFeePercentageChangedEventObject$6 { + swapFeePercentage: BigNumber$1; +} +type SwapFeePercentageChangedEvent$6 = TypedEvent<[ + BigNumber$1 +], SwapFeePercentageChangedEventObject$6>; +type SwapFeePercentageChangedEventFilter$6 = TypedEventFilter; +interface TargetsSetEventObject$3 { + token: string; + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; +} +type TargetsSetEvent$3 = TypedEvent<[ + string, + BigNumber$1, + BigNumber$1 +], TargetsSetEventObject$3>; +type TargetsSetEventFilter$3 = TypedEventFilter; +interface TransferEventObject$8 { + from: string; + to: string; + value: BigNumber$1; +} +type TransferEvent$8 = TypedEvent<[ + string, + string, + BigNumber$1 +], TransferEventObject$8>; +type TransferEventFilter$8 = TypedEventFilter; +declare namespace EulerLinearPool { + type ConstructorArgsStruct = { + vault: PromiseOrValue; + name: PromiseOrValue; + symbol: PromiseOrValue; + mainToken: PromiseOrValue; + wrappedToken: PromiseOrValue; + assetManager: PromiseOrValue; + upperTarget: PromiseOrValue; + swapFeePercentage: PromiseOrValue; + pauseWindowDuration: PromiseOrValue; + bufferPeriodDuration: PromiseOrValue; + owner: PromiseOrValue; + version: PromiseOrValue; + }; + type ConstructorArgsStructOutput = [ + string, + string, + string, + string, + string, + string, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + string, + string + ] & { + vault: string; + name: string; + symbol: string; + mainToken: string; + wrappedToken: string; + assetManager: string; + upperTarget: BigNumber$1; + swapFeePercentage: BigNumber$1; + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + owner: string; + version: string; + }; +} +interface EulerLinearPool extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: EulerLinearPoolInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + decimals(overrides?: CallOverrides): Promise<[number]>; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getBptIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getDomainSeparator(overrides?: CallOverrides): Promise<[string]>; + getMainIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getMainToken(overrides?: CallOverrides): Promise<[string]>; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + getOwner(overrides?: CallOverrides): Promise<[string]>; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise<[string]>; + getProtocolFeesCollector(overrides?: CallOverrides): Promise<[string]>; + getRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getScalingFactors(overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + getSwapFeePercentage(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise<[string]>; + getVirtualSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getWrappedIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getWrappedToken(overrides?: CallOverrides): Promise<[string]>; + getWrappedTokenRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + inRecoveryMode(overrides?: CallOverrides): Promise<[boolean]>; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise<[string]>; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$7.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$7.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise<[string]>; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise<[string]>; + }; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$7.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$7.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + callStatic: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + disableRecoveryMode(overrides?: CallOverrides): Promise; + enableRecoveryMode(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsOut: BigNumber$1[]; + dueProtocolFees: BigNumber$1[]; + }>; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsIn: BigNumber$1[]; + dueProtocolFees: BigNumber$1[]; + }>; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$7.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$7.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: CallOverrides): Promise; + pause(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptIn: BigNumber$1; + amountsOut: BigNumber$1[]; + }>; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptOut: BigNumber$1; + amountsIn: BigNumber$1[]; + }>; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: CallOverrides): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + unpause(overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + filters: { + "Approval(address,address,uint256)"(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$8; + Approval(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$8; + "PausedStateChanged(bool)"(paused?: null): PausedStateChangedEventFilter$7; + PausedStateChanged(paused?: null): PausedStateChangedEventFilter$7; + "RecoveryModeStateChanged(bool)"(enabled?: null): RecoveryModeStateChangedEventFilter$3; + RecoveryModeStateChanged(enabled?: null): RecoveryModeStateChangedEventFilter$3; + "SwapFeePercentageChanged(uint256)"(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$6; + SwapFeePercentageChanged(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$6; + "TargetsSet(address,uint256,uint256)"(token?: PromiseOrValue | null, lowerTarget?: null, upperTarget?: null): TargetsSetEventFilter$3; + TargetsSet(token?: PromiseOrValue | null, lowerTarget?: null, upperTarget?: null): TargetsSetEventFilter$3; + "Transfer(address,address,uint256)"(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$8; + Transfer(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$8; + }; + estimateGas: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$7.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$7.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$7.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$7.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + }; +} + +interface EulerLinearPoolFactoryInterface extends utils.Interface { + functions: { + "create(string,string,address,address,uint256,uint256,address,uint256)": FunctionFragment; + "disable()": FunctionFragment; + "eulerProtocol()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getCreationCode()": FunctionFragment; + "getCreationCodeContracts()": FunctionFragment; + "getLastCreatedPool()": FunctionFragment; + "getPauseConfiguration()": FunctionFragment; + "getPoolVersion()": FunctionFragment; + "getProtocolFeePercentagesProvider()": FunctionFragment; + "getVault()": FunctionFragment; + "isDisabled()": FunctionFragment; + "isPoolFromFactory(address)": FunctionFragment; + "version()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "create" | "disable" | "eulerProtocol" | "getActionId" | "getAuthorizer" | "getCreationCode" | "getCreationCodeContracts" | "getLastCreatedPool" | "getPauseConfiguration" | "getPoolVersion" | "getProtocolFeePercentagesProvider" | "getVault" | "isDisabled" | "isPoolFromFactory" | "version"): FunctionFragment; + encodeFunctionData(functionFragment: "create", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "disable", values?: undefined): string; + encodeFunctionData(functionFragment: "eulerProtocol", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getCreationCode", values?: undefined): string; + encodeFunctionData(functionFragment: "getCreationCodeContracts", values?: undefined): string; + encodeFunctionData(functionFragment: "getLastCreatedPool", values?: undefined): string; + encodeFunctionData(functionFragment: "getPauseConfiguration", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolVersion", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolFeePercentagesProvider", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "isDisabled", values?: undefined): string; + encodeFunctionData(functionFragment: "isPoolFromFactory", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + decodeFunctionResult(functionFragment: "create", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "disable", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "eulerProtocol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCreationCode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCreationCodeContracts", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getLastCreatedPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPauseConfiguration", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolVersion", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeePercentagesProvider", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isDisabled", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isPoolFromFactory", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + events: { + "EulerLinearPoolCreated(address,uint256)": EventFragment; + "FactoryDisabled()": EventFragment; + "PoolCreated(address)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "EulerLinearPoolCreated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "FactoryDisabled"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PoolCreated"): EventFragment; +} +interface EulerLinearPoolCreatedEventObject { + pool: string; + protocolId: BigNumber$1; +} +type EulerLinearPoolCreatedEvent = TypedEvent<[ + string, + BigNumber$1 +], EulerLinearPoolCreatedEventObject>; +type EulerLinearPoolCreatedEventFilter = TypedEventFilter; +interface FactoryDisabledEventObject$3 { +} +type FactoryDisabledEvent$3 = TypedEvent<[], FactoryDisabledEventObject$3>; +type FactoryDisabledEventFilter$3 = TypedEventFilter; +interface PoolCreatedEventObject$3 { + pool: string; +} +type PoolCreatedEvent$3 = TypedEvent<[string], PoolCreatedEventObject$3>; +type PoolCreatedEventFilter$3 = TypedEventFilter; +interface EulerLinearPoolFactory extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: EulerLinearPoolFactoryInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + eulerProtocol(overrides?: CallOverrides): Promise<[string]>; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getCreationCode(overrides?: CallOverrides): Promise<[string]>; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise<[string]>; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise<[string]>; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise<[string]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + isDisabled(overrides?: CallOverrides): Promise<[boolean]>; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + version(overrides?: CallOverrides): Promise<[string]>; + }; + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + eulerProtocol(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + callStatic: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, overrides?: CallOverrides): Promise; + disable(overrides?: CallOverrides): Promise; + eulerProtocol(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + filters: { + "EulerLinearPoolCreated(address,uint256)"(pool?: PromiseOrValue | null, protocolId?: PromiseOrValue | null): EulerLinearPoolCreatedEventFilter; + EulerLinearPoolCreated(pool?: PromiseOrValue | null, protocolId?: PromiseOrValue | null): EulerLinearPoolCreatedEventFilter; + "FactoryDisabled()"(): FactoryDisabledEventFilter$3; + FactoryDisabled(): FactoryDisabledEventFilter$3; + "PoolCreated(address)"(pool?: PromiseOrValue | null): PoolCreatedEventFilter$3; + PoolCreated(pool?: PromiseOrValue | null): PoolCreatedEventFilter$3; + }; + estimateGas: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + eulerProtocol(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + eulerProtocol(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; +} + +declare namespace IPoolSwapStructs$6 { + type SwapRequestStruct = { + kind: PromiseOrValue; + tokenIn: PromiseOrValue; + tokenOut: PromiseOrValue; + amount: PromiseOrValue; + poolId: PromiseOrValue; + lastChangeBlock: PromiseOrValue; + from: PromiseOrValue; + to: PromiseOrValue; + userData: PromiseOrValue; + }; + type SwapRequestStructOutput = [ + number, + string, + string, + BigNumber$1, + string, + BigNumber$1, + string, + string, + string + ] & { + kind: number; + tokenIn: string; + tokenOut: string; + amount: BigNumber$1; + poolId: string; + lastChangeBlock: BigNumber$1; + from: string; + to: string; + userData: string; + }; +} +interface FXPoolInterface extends utils.Interface { + functions: { + "DOMAIN_SEPARATOR()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "assimilator(address)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "collectorAddress()": FunctionFragment; + "curve()": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "derivatives(uint256)": FunctionFragment; + "emergency()": FunctionFragment; + "getPoolId()": FunctionFragment; + "getVault()": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "initialize(address[],uint256[])": FunctionFragment; + "liquidity()": FunctionFragment; + "name()": FunctionFragment; + "nonces(address)": FunctionFragment; + "numeraires(uint256)": FunctionFragment; + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)": FunctionFragment; + "owner()": FunctionFragment; + "paused()": FunctionFragment; + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "protocolPercentFee()": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "reserves(uint256)": FunctionFragment; + "setCap(uint256)": FunctionFragment; + "setCollectorAddress(address)": FunctionFragment; + "setEmergency(bool)": FunctionFragment; + "setParams(uint256,uint256,uint256,uint256,uint256)": FunctionFragment; + "setPaused()": FunctionFragment; + "setProtocolPercentFee(uint256)": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "totalUnclaimedFeesInNumeraire()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "viewDeposit(uint256)": FunctionFragment; + "viewParameters()": FunctionFragment; + "viewWithdraw(uint256)": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "DOMAIN_SEPARATOR" | "allowance" | "approve" | "assimilator" | "balanceOf" | "collectorAddress" | "curve" | "decimals" | "decreaseAllowance" | "derivatives" | "emergency" | "getPoolId" | "getVault" | "increaseAllowance" | "initialize" | "liquidity" | "name" | "nonces" | "numeraires" | "onExitPool" | "onJoinPool" | "onSwap" | "owner" | "paused" | "permit" | "protocolPercentFee" | "renounceOwnership" | "reserves" | "setCap" | "setCollectorAddress" | "setEmergency" | "setParams" | "setPaused" | "setProtocolPercentFee" | "symbol" | "totalSupply" | "totalUnclaimedFeesInNumeraire" | "transfer" | "transferFrom" | "transferOwnership" | "viewDeposit" | "viewParameters" | "viewWithdraw"): FunctionFragment; + encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string; + encodeFunctionData(functionFragment: "allowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "assimilator", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "collectorAddress", values?: undefined): string; + encodeFunctionData(functionFragment: "curve", values?: undefined): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "decreaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "derivatives", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "emergency", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolId", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "increaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "initialize", values: [PromiseOrValue[], PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "liquidity", values?: undefined): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "nonces", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "numeraires", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "onExitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onJoinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap", values: [ + IPoolSwapStructs$6.SwapRequestStruct, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: "paused", values?: undefined): string; + encodeFunctionData(functionFragment: "permit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "protocolPercentFee", values?: undefined): string; + encodeFunctionData(functionFragment: "renounceOwnership", values?: undefined): string; + encodeFunctionData(functionFragment: "reserves", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setCap", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setCollectorAddress", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setEmergency", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setParams", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "setPaused", values?: undefined): string; + encodeFunctionData(functionFragment: "setProtocolPercentFee", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "totalUnclaimedFeesInNumeraire", values?: undefined): string; + encodeFunctionData(functionFragment: "transfer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "transferFrom", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "transferOwnership", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "viewDeposit", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "viewParameters", values?: undefined): string; + encodeFunctionData(functionFragment: "viewWithdraw", values: [PromiseOrValue]): string; + decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "assimilator", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "collectorAddress", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "curve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decreaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "derivatives", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "emergency", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "liquidity", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "numeraires", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onExitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onJoinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "protocolPercentFee", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "renounceOwnership", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "reserves", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setCap", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setCollectorAddress", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setEmergency", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setParams", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setPaused", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setProtocolPercentFee", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalUnclaimedFeesInNumeraire", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferOwnership", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "viewDeposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "viewParameters", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "viewWithdraw", data: BytesLike): Result; + events: { + "Approval(address,address,uint256)": EventFragment; + "AssetIncluded(address,address,uint256)": EventFragment; + "AssimilatorIncluded(address,address,address,address)": EventFragment; + "ChangeCollectorAddress(address)": EventFragment; + "EmergencyAlarm(bool)": EventFragment; + "EmergencyWithdraw(bytes32,uint256,uint256[])": EventFragment; + "FeesAccrued(uint256)": EventFragment; + "FeesCollected(address,uint256)": EventFragment; + "OnExitPool(bytes32,uint256,uint256[])": EventFragment; + "OnJoinPool(bytes32,uint256,uint256[])": EventFragment; + "OwnershipTransferred(address,address)": EventFragment; + "ParametersSet(uint256,uint256,uint256,uint256,uint256)": EventFragment; + "Paused(address)": EventFragment; + "ProtocolFeeShareUpdated(address,uint256)": EventFragment; + "Trade(address,address,address,uint256,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + "Unpaused(address)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "AssetIncluded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "AssimilatorIncluded"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ChangeCollectorAddress"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EmergencyAlarm"): EventFragment; + getEvent(nameOrSignatureOrTopic: "EmergencyWithdraw"): EventFragment; + getEvent(nameOrSignatureOrTopic: "FeesAccrued"): EventFragment; + getEvent(nameOrSignatureOrTopic: "FeesCollected"): EventFragment; + getEvent(nameOrSignatureOrTopic: "OnExitPool"): EventFragment; + getEvent(nameOrSignatureOrTopic: "OnJoinPool"): EventFragment; + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ParametersSet"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Paused"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ProtocolFeeShareUpdated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Trade"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Unpaused"): EventFragment; +} +interface ApprovalEventObject$7 { + owner: string; + spender: string; + value: BigNumber$1; +} +type ApprovalEvent$7 = TypedEvent<[ + string, + string, + BigNumber$1 +], ApprovalEventObject$7>; +type ApprovalEventFilter$7 = TypedEventFilter; +interface AssetIncludedEventObject { + numeraire: string; + reserve: string; + weight: BigNumber$1; +} +type AssetIncludedEvent = TypedEvent<[ + string, + string, + BigNumber$1 +], AssetIncludedEventObject>; +type AssetIncludedEventFilter = TypedEventFilter; +interface AssimilatorIncludedEventObject { + derivative: string; + numeraire: string; + reserve: string; + assimilator: string; +} +type AssimilatorIncludedEvent = TypedEvent<[ + string, + string, + string, + string +], AssimilatorIncludedEventObject>; +type AssimilatorIncludedEventFilter = TypedEventFilter; +interface ChangeCollectorAddressEventObject { + newCollector: string; +} +type ChangeCollectorAddressEvent = TypedEvent<[ + string +], ChangeCollectorAddressEventObject>; +type ChangeCollectorAddressEventFilter = TypedEventFilter; +interface EmergencyAlarmEventObject { + isEmergency: boolean; +} +type EmergencyAlarmEvent = TypedEvent<[ + boolean +], EmergencyAlarmEventObject>; +type EmergencyAlarmEventFilter = TypedEventFilter; +interface EmergencyWithdrawEventObject { + poolId: string; + lptAmountBurned: BigNumber$1; + amountsWithdrawn: BigNumber$1[]; +} +type EmergencyWithdrawEvent = TypedEvent<[ + string, + BigNumber$1, + BigNumber$1[] +], EmergencyWithdrawEventObject>; +type EmergencyWithdrawEventFilter = TypedEventFilter; +interface FeesAccruedEventObject { + feesCollected: BigNumber$1; +} +type FeesAccruedEvent = TypedEvent<[BigNumber$1], FeesAccruedEventObject>; +type FeesAccruedEventFilter = TypedEventFilter; +interface FeesCollectedEventObject { + recipient: string; + feesCollected: BigNumber$1; +} +type FeesCollectedEvent = TypedEvent<[ + string, + BigNumber$1 +], FeesCollectedEventObject>; +type FeesCollectedEventFilter = TypedEventFilter; +interface OnExitPoolEventObject { + poolId: string; + lptAmountBurned: BigNumber$1; + amountsWithdrawn: BigNumber$1[]; +} +type OnExitPoolEvent = TypedEvent<[ + string, + BigNumber$1, + BigNumber$1[] +], OnExitPoolEventObject>; +type OnExitPoolEventFilter = TypedEventFilter; +interface OnJoinPoolEventObject { + poolId: string; + lptAmountMinted: BigNumber$1; + amountsDeposited: BigNumber$1[]; +} +type OnJoinPoolEvent = TypedEvent<[ + string, + BigNumber$1, + BigNumber$1[] +], OnJoinPoolEventObject>; +type OnJoinPoolEventFilter = TypedEventFilter; +interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +type OwnershipTransferredEvent = TypedEvent<[ + string, + string +], OwnershipTransferredEventObject>; +type OwnershipTransferredEventFilter = TypedEventFilter; +interface ParametersSetEventObject { + alpha: BigNumber$1; + beta: BigNumber$1; + delta: BigNumber$1; + epsilon: BigNumber$1; + lambda: BigNumber$1; +} +type ParametersSetEvent = TypedEvent<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 +], ParametersSetEventObject>; +type ParametersSetEventFilter = TypedEventFilter; +interface PausedEventObject { + account: string; +} +type PausedEvent = TypedEvent<[string], PausedEventObject>; +type PausedEventFilter = TypedEventFilter; +interface ProtocolFeeShareUpdatedEventObject { + updater: string; + newProtocolPercentage: BigNumber$1; +} +type ProtocolFeeShareUpdatedEvent = TypedEvent<[ + string, + BigNumber$1 +], ProtocolFeeShareUpdatedEventObject>; +type ProtocolFeeShareUpdatedEventFilter = TypedEventFilter; +interface TradeEventObject { + trader: string; + origin: string; + target: string; + originAmount: BigNumber$1; + targetAmount: BigNumber$1; +} +type TradeEvent = TypedEvent<[ + string, + string, + string, + BigNumber$1, + BigNumber$1 +], TradeEventObject>; +type TradeEventFilter = TypedEventFilter; +interface TransferEventObject$7 { + from: string; + to: string; + value: BigNumber$1; +} +type TransferEvent$7 = TypedEvent<[ + string, + string, + BigNumber$1 +], TransferEventObject$7>; +type TransferEventFilter$7 = TypedEventFilter; +interface UnpausedEventObject { + account: string; +} +type UnpausedEvent = TypedEvent<[string], UnpausedEventObject>; +type UnpausedEventFilter = TypedEventFilter; +interface FXPool extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: FXPoolInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + assimilator(_derivative: PromiseOrValue, overrides?: CallOverrides): Promise<[string] & { + assimilator_: string; + }>; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + collectorAddress(overrides?: CallOverrides): Promise<[string]>; + curve(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + string, + string, + string + ] & { + alpha: BigNumber$1; + beta: BigNumber$1; + delta: BigNumber$1; + epsilon: BigNumber$1; + lambda: BigNumber$1; + cap: BigNumber$1; + vault: string; + fxPoolAddress: string; + poolId: string; + }>; + decimals(overrides?: CallOverrides): Promise<[number]>; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + derivatives(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + emergency(overrides?: CallOverrides): Promise<[boolean]>; + getPoolId(overrides?: CallOverrides): Promise<[string]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(_assets: PromiseOrValue[], _assetWeights: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + liquidity(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + total_: BigNumber$1; + individual_: BigNumber$1[]; + }>; + name(overrides?: CallOverrides): Promise<[string]>; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + numeraires(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, arg3: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(swapRequest: IPoolSwapStructs$6.SwapRequestStruct, arg1: PromiseOrValue, arg2: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + owner(overrides?: CallOverrides): Promise<[string]>; + paused(overrides?: CallOverrides): Promise<[boolean]>; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + protocolPercentFee(overrides?: CallOverrides): Promise<[BigNumber$1]>; + renounceOwnership(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + reserves(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + setCap(_cap: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setCollectorAddress(_collectorAddress: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setEmergency(_emergency: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setParams(_alpha: PromiseOrValue, _beta: PromiseOrValue, _feeAtHalt: PromiseOrValue, _epsilon: PromiseOrValue, _lambda: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setProtocolPercentFee(_protocolPercentFee: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise<[string]>; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + totalUnclaimedFeesInNumeraire(overrides?: CallOverrides): Promise<[BigNumber$1]>; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferOwnership(newOwner: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + viewDeposit(totalDepositNumeraire: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1, BigNumber$1[]]>; + viewParameters(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + alpha_: BigNumber$1; + beta_: BigNumber$1; + delta_: BigNumber$1; + epsilon_: BigNumber$1; + lambda_: BigNumber$1; + }>; + viewWithdraw(_curvesToBurn: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + }; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + assimilator(_derivative: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + collectorAddress(overrides?: CallOverrides): Promise; + curve(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + string, + string, + string + ] & { + alpha: BigNumber$1; + beta: BigNumber$1; + delta: BigNumber$1; + epsilon: BigNumber$1; + lambda: BigNumber$1; + cap: BigNumber$1; + vault: string; + fxPoolAddress: string; + poolId: string; + }>; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + derivatives(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + emergency(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(_assets: PromiseOrValue[], _assetWeights: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + liquidity(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + total_: BigNumber$1; + individual_: BigNumber$1[]; + }>; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + numeraires(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, arg3: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(swapRequest: IPoolSwapStructs$6.SwapRequestStruct, arg1: PromiseOrValue, arg2: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + owner(overrides?: CallOverrides): Promise; + paused(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + protocolPercentFee(overrides?: CallOverrides): Promise; + renounceOwnership(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + reserves(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + setCap(_cap: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setCollectorAddress(_collectorAddress: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setEmergency(_emergency: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setParams(_alpha: PromiseOrValue, _beta: PromiseOrValue, _feeAtHalt: PromiseOrValue, _epsilon: PromiseOrValue, _lambda: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setProtocolPercentFee(_protocolPercentFee: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + totalUnclaimedFeesInNumeraire(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferOwnership(newOwner: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + viewDeposit(totalDepositNumeraire: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1, BigNumber$1[]]>; + viewParameters(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + alpha_: BigNumber$1; + beta_: BigNumber$1; + delta_: BigNumber$1; + epsilon_: BigNumber$1; + lambda_: BigNumber$1; + }>; + viewWithdraw(_curvesToBurn: PromiseOrValue, overrides?: CallOverrides): Promise; + callStatic: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + assimilator(_derivative: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + collectorAddress(overrides?: CallOverrides): Promise; + curve(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + string, + string, + string + ] & { + alpha: BigNumber$1; + beta: BigNumber$1; + delta: BigNumber$1; + epsilon: BigNumber$1; + lambda: BigNumber$1; + cap: BigNumber$1; + vault: string; + fxPoolAddress: string; + poolId: string; + }>; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + derivatives(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + emergency(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(_assets: PromiseOrValue[], _assetWeights: PromiseOrValue[], overrides?: CallOverrides): Promise; + liquidity(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + total_: BigNumber$1; + individual_: BigNumber$1[]; + }>; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + numeraires(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsOut: BigNumber$1[]; + dueProtocolFeeAmounts: BigNumber$1[]; + }>; + onJoinPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, arg3: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsIn: BigNumber$1[]; + dueProtocolFeeAmounts: BigNumber$1[]; + }>; + onSwap(swapRequest: IPoolSwapStructs$6.SwapRequestStruct, arg1: PromiseOrValue, arg2: PromiseOrValue, overrides?: CallOverrides): Promise; + owner(overrides?: CallOverrides): Promise; + paused(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + protocolPercentFee(overrides?: CallOverrides): Promise; + renounceOwnership(overrides?: CallOverrides): Promise; + reserves(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + setCap(_cap: PromiseOrValue, overrides?: CallOverrides): Promise; + setCollectorAddress(_collectorAddress: PromiseOrValue, overrides?: CallOverrides): Promise; + setEmergency(_emergency: PromiseOrValue, overrides?: CallOverrides): Promise; + setParams(_alpha: PromiseOrValue, _beta: PromiseOrValue, _feeAtHalt: PromiseOrValue, _epsilon: PromiseOrValue, _lambda: PromiseOrValue, overrides?: CallOverrides): Promise; + setPaused(overrides?: CallOverrides): Promise; + setProtocolPercentFee(_protocolPercentFee: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + totalUnclaimedFeesInNumeraire(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + transferOwnership(newOwner: PromiseOrValue, overrides?: CallOverrides): Promise; + viewDeposit(totalDepositNumeraire: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1, BigNumber$1[]]>; + viewParameters(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + alpha_: BigNumber$1; + beta_: BigNumber$1; + delta_: BigNumber$1; + epsilon_: BigNumber$1; + lambda_: BigNumber$1; + }>; + viewWithdraw(_curvesToBurn: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + filters: { + "Approval(address,address,uint256)"(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$7; + Approval(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$7; + "AssetIncluded(address,address,uint256)"(numeraire?: PromiseOrValue | null, reserve?: PromiseOrValue | null, weight?: null): AssetIncludedEventFilter; + AssetIncluded(numeraire?: PromiseOrValue | null, reserve?: PromiseOrValue | null, weight?: null): AssetIncludedEventFilter; + "AssimilatorIncluded(address,address,address,address)"(derivative?: PromiseOrValue | null, numeraire?: PromiseOrValue | null, reserve?: PromiseOrValue | null, assimilator?: null): AssimilatorIncludedEventFilter; + AssimilatorIncluded(derivative?: PromiseOrValue | null, numeraire?: PromiseOrValue | null, reserve?: PromiseOrValue | null, assimilator?: null): AssimilatorIncludedEventFilter; + "ChangeCollectorAddress(address)"(newCollector?: null): ChangeCollectorAddressEventFilter; + ChangeCollectorAddress(newCollector?: null): ChangeCollectorAddressEventFilter; + "EmergencyAlarm(bool)"(isEmergency?: null): EmergencyAlarmEventFilter; + EmergencyAlarm(isEmergency?: null): EmergencyAlarmEventFilter; + "EmergencyWithdraw(bytes32,uint256,uint256[])"(poolId?: null, lptAmountBurned?: null, amountsWithdrawn?: null): EmergencyWithdrawEventFilter; + EmergencyWithdraw(poolId?: null, lptAmountBurned?: null, amountsWithdrawn?: null): EmergencyWithdrawEventFilter; + "FeesAccrued(uint256)"(feesCollected?: null): FeesAccruedEventFilter; + FeesAccrued(feesCollected?: null): FeesAccruedEventFilter; + "FeesCollected(address,uint256)"(recipient?: null, feesCollected?: null): FeesCollectedEventFilter; + FeesCollected(recipient?: null, feesCollected?: null): FeesCollectedEventFilter; + "OnExitPool(bytes32,uint256,uint256[])"(poolId?: null, lptAmountBurned?: null, amountsWithdrawn?: null): OnExitPoolEventFilter; + OnExitPool(poolId?: null, lptAmountBurned?: null, amountsWithdrawn?: null): OnExitPoolEventFilter; + "OnJoinPool(bytes32,uint256,uint256[])"(poolId?: null, lptAmountMinted?: null, amountsDeposited?: null): OnJoinPoolEventFilter; + OnJoinPool(poolId?: null, lptAmountMinted?: null, amountsDeposited?: null): OnJoinPoolEventFilter; + "OwnershipTransferred(address,address)"(previousOwner?: PromiseOrValue | null, newOwner?: PromiseOrValue | null): OwnershipTransferredEventFilter; + OwnershipTransferred(previousOwner?: PromiseOrValue | null, newOwner?: PromiseOrValue | null): OwnershipTransferredEventFilter; + "ParametersSet(uint256,uint256,uint256,uint256,uint256)"(alpha?: null, beta?: null, delta?: null, epsilon?: null, lambda?: null): ParametersSetEventFilter; + ParametersSet(alpha?: null, beta?: null, delta?: null, epsilon?: null, lambda?: null): ParametersSetEventFilter; + "Paused(address)"(account?: null): PausedEventFilter; + Paused(account?: null): PausedEventFilter; + "ProtocolFeeShareUpdated(address,uint256)"(updater?: null, newProtocolPercentage?: null): ProtocolFeeShareUpdatedEventFilter; + ProtocolFeeShareUpdated(updater?: null, newProtocolPercentage?: null): ProtocolFeeShareUpdatedEventFilter; + "Trade(address,address,address,uint256,uint256)"(trader?: PromiseOrValue | null, origin?: PromiseOrValue | null, target?: PromiseOrValue | null, originAmount?: null, targetAmount?: null): TradeEventFilter; + Trade(trader?: PromiseOrValue | null, origin?: PromiseOrValue | null, target?: PromiseOrValue | null, originAmount?: null, targetAmount?: null): TradeEventFilter; + "Transfer(address,address,uint256)"(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$7; + Transfer(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$7; + "Unpaused(address)"(account?: null): UnpausedEventFilter; + Unpaused(account?: null): UnpausedEventFilter; + }; + estimateGas: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + assimilator(_derivative: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + collectorAddress(overrides?: CallOverrides): Promise; + curve(overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + derivatives(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + emergency(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(_assets: PromiseOrValue[], _assetWeights: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + liquidity(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + numeraires(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, arg3: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(swapRequest: IPoolSwapStructs$6.SwapRequestStruct, arg1: PromiseOrValue, arg2: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + owner(overrides?: CallOverrides): Promise; + paused(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + protocolPercentFee(overrides?: CallOverrides): Promise; + renounceOwnership(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + reserves(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + setCap(_cap: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setCollectorAddress(_collectorAddress: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setEmergency(_emergency: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setParams(_alpha: PromiseOrValue, _beta: PromiseOrValue, _feeAtHalt: PromiseOrValue, _epsilon: PromiseOrValue, _lambda: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setProtocolPercentFee(_protocolPercentFee: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + totalUnclaimedFeesInNumeraire(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferOwnership(newOwner: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + viewDeposit(totalDepositNumeraire: PromiseOrValue, overrides?: CallOverrides): Promise; + viewParameters(overrides?: CallOverrides): Promise; + viewWithdraw(_curvesToBurn: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + populateTransaction: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + assimilator(_derivative: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + collectorAddress(overrides?: CallOverrides): Promise; + curve(overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + derivatives(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + emergency(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(_assets: PromiseOrValue[], _assetWeights: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + liquidity(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + numeraires(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, arg3: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, arg1: PromiseOrValue, recipient: PromiseOrValue, arg3: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(swapRequest: IPoolSwapStructs$6.SwapRequestStruct, arg1: PromiseOrValue, arg2: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + owner(overrides?: CallOverrides): Promise; + paused(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + protocolPercentFee(overrides?: CallOverrides): Promise; + renounceOwnership(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + reserves(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + setCap(_cap: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setCollectorAddress(_collectorAddress: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setEmergency(_emergency: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setParams(_alpha: PromiseOrValue, _beta: PromiseOrValue, _feeAtHalt: PromiseOrValue, _epsilon: PromiseOrValue, _lambda: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setProtocolPercentFee(_protocolPercentFee: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + totalUnclaimedFeesInNumeraire(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferOwnership(newOwner: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + viewDeposit(totalDepositNumeraire: PromiseOrValue, overrides?: CallOverrides): Promise; + viewParameters(overrides?: CallOverrides): Promise; + viewWithdraw(_curvesToBurn: PromiseOrValue, overrides?: CallOverrides): Promise; + }; +} + +interface GaugeClaimHelperInterface extends utils.Interface { + functions: { + "CLAIM_FREQUENCY()": FunctionFragment; + "claimRewardsFromGauge(address,address)": FunctionFragment; + "claimRewardsFromGauges(address[],address)": FunctionFragment; + "getPendingRewards(address,address,address)": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "CLAIM_FREQUENCY" | "claimRewardsFromGauge" | "claimRewardsFromGauges" | "getPendingRewards"): FunctionFragment; + encodeFunctionData(functionFragment: "CLAIM_FREQUENCY", values?: undefined): string; + encodeFunctionData(functionFragment: "claimRewardsFromGauge", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "claimRewardsFromGauges", values: [PromiseOrValue[], PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getPendingRewards", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + decodeFunctionResult(functionFragment: "CLAIM_FREQUENCY", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "claimRewardsFromGauge", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "claimRewardsFromGauges", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPendingRewards", data: BytesLike): Result; + events: {}; +} +interface GaugeClaimHelper extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: GaugeClaimHelperInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + CLAIM_FREQUENCY(overrides?: CallOverrides): Promise<[BigNumber$1]>; + claimRewardsFromGauge(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + claimRewardsFromGauges(gauges: PromiseOrValue[], user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getPendingRewards(gauge: PromiseOrValue, user: PromiseOrValue, token: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + CLAIM_FREQUENCY(overrides?: CallOverrides): Promise; + claimRewardsFromGauge(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + claimRewardsFromGauges(gauges: PromiseOrValue[], user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getPendingRewards(gauge: PromiseOrValue, user: PromiseOrValue, token: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + CLAIM_FREQUENCY(overrides?: CallOverrides): Promise; + claimRewardsFromGauge(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: CallOverrides): Promise; + claimRewardsFromGauges(gauges: PromiseOrValue[], user: PromiseOrValue, overrides?: CallOverrides): Promise; + getPendingRewards(gauge: PromiseOrValue, user: PromiseOrValue, token: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + filters: {}; + estimateGas: { + CLAIM_FREQUENCY(overrides?: CallOverrides): Promise; + claimRewardsFromGauge(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + claimRewardsFromGauges(gauges: PromiseOrValue[], user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getPendingRewards(gauge: PromiseOrValue, user: PromiseOrValue, token: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + CLAIM_FREQUENCY(overrides?: CallOverrides): Promise; + claimRewardsFromGauge(gauge: PromiseOrValue, user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + claimRewardsFromGauges(gauges: PromiseOrValue[], user: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getPendingRewards(gauge: PromiseOrValue, user: PromiseOrValue, token: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +declare namespace IPoolSwapStructs$5 { + type SwapRequestStruct = { + kind: PromiseOrValue; + tokenIn: PromiseOrValue; + tokenOut: PromiseOrValue; + amount: PromiseOrValue; + poolId: PromiseOrValue; + lastChangeBlock: PromiseOrValue; + from: PromiseOrValue; + to: PromiseOrValue; + userData: PromiseOrValue; + }; + type SwapRequestStructOutput = [ + number, + string, + string, + BigNumber$1, + string, + BigNumber$1, + string, + string, + string + ] & { + kind: number; + tokenIn: string; + tokenOut: string; + amount: BigNumber$1; + poolId: string; + lastChangeBlock: BigNumber$1; + from: string; + to: string; + userData: string; + }; +} +interface GearboxLinearPoolInterface extends utils.Interface { + functions: { + "DOMAIN_SEPARATOR()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "disableRecoveryMode()": FunctionFragment; + "enableRecoveryMode()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getBptIndex()": FunctionFragment; + "getDomainSeparator()": FunctionFragment; + "getMainIndex()": FunctionFragment; + "getMainToken()": FunctionFragment; + "getNextNonce(address)": FunctionFragment; + "getOwner()": FunctionFragment; + "getPausedState()": FunctionFragment; + "getPoolId()": FunctionFragment; + "getProtocolFeesCollector()": FunctionFragment; + "getRate()": FunctionFragment; + "getScalingFactors()": FunctionFragment; + "getSwapFeePercentage()": FunctionFragment; + "getTargets()": FunctionFragment; + "getVault()": FunctionFragment; + "getVirtualSupply()": FunctionFragment; + "getWrappedIndex()": FunctionFragment; + "getWrappedToken()": FunctionFragment; + "getWrappedTokenRate()": FunctionFragment; + "inRecoveryMode()": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "initialize()": FunctionFragment; + "name()": FunctionFragment; + "nonces(address)": FunctionFragment; + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)": FunctionFragment; + "pause()": FunctionFragment; + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "setSwapFeePercentage(uint256)": FunctionFragment; + "setTargets(uint256,uint256)": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "unpause()": FunctionFragment; + "version()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "DOMAIN_SEPARATOR" | "allowance" | "approve" | "balanceOf" | "decimals" | "decreaseAllowance" | "disableRecoveryMode" | "enableRecoveryMode" | "getActionId" | "getAuthorizer" | "getBptIndex" | "getDomainSeparator" | "getMainIndex" | "getMainToken" | "getNextNonce" | "getOwner" | "getPausedState" | "getPoolId" | "getProtocolFeesCollector" | "getRate" | "getScalingFactors" | "getSwapFeePercentage" | "getTargets" | "getVault" | "getVirtualSupply" | "getWrappedIndex" | "getWrappedToken" | "getWrappedTokenRate" | "inRecoveryMode" | "increaseAllowance" | "initialize" | "name" | "nonces" | "onExitPool" | "onJoinPool" | "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)" | "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)" | "pause" | "permit" | "queryExit" | "queryJoin" | "setSwapFeePercentage" | "setTargets" | "symbol" | "totalSupply" | "transfer" | "transferFrom" | "unpause" | "version"): FunctionFragment; + encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string; + encodeFunctionData(functionFragment: "allowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "decreaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "disableRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "enableRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getBptIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getDomainSeparator", values?: undefined): string; + encodeFunctionData(functionFragment: "getMainIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getMainToken", values?: undefined): string; + encodeFunctionData(functionFragment: "getNextNonce", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getOwner", values?: undefined): string; + encodeFunctionData(functionFragment: "getPausedState", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolId", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolFeesCollector", values?: undefined): string; + encodeFunctionData(functionFragment: "getRate", values?: undefined): string; + encodeFunctionData(functionFragment: "getScalingFactors", values?: undefined): string; + encodeFunctionData(functionFragment: "getSwapFeePercentage", values?: undefined): string; + encodeFunctionData(functionFragment: "getTargets", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "getVirtualSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedToken", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedTokenRate", values?: undefined): string; + encodeFunctionData(functionFragment: "inRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "increaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "initialize", values?: undefined): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "nonces", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "onExitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onJoinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)", values: [ + IPoolSwapStructs$5.SwapRequestStruct, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)", values: [ + IPoolSwapStructs$5.SwapRequestStruct, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "pause", values?: undefined): string; + encodeFunctionData(functionFragment: "permit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryExit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryJoin", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "setSwapFeePercentage", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setTargets", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "transfer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "transferFrom", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decreaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "disableRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "enableRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getBptIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDomainSeparator", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMainIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMainToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNextNonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getOwner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPausedState", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeesCollector", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getScalingFactors", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTargets", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVirtualSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedTokenRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "inRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onExitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onJoinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryExit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryJoin", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setTargets", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + events: { + "Approval(address,address,uint256)": EventFragment; + "PausedStateChanged(bool)": EventFragment; + "RecoveryModeStateChanged(bool)": EventFragment; + "SwapFeePercentageChanged(uint256)": EventFragment; + "TargetsSet(address,uint256,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PausedStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RecoveryModeStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SwapFeePercentageChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TargetsSet"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} +interface ApprovalEventObject$6 { + owner: string; + spender: string; + value: BigNumber$1; +} +type ApprovalEvent$6 = TypedEvent<[ + string, + string, + BigNumber$1 +], ApprovalEventObject$6>; +type ApprovalEventFilter$6 = TypedEventFilter; +interface PausedStateChangedEventObject$6 { + paused: boolean; +} +type PausedStateChangedEvent$6 = TypedEvent<[ + boolean +], PausedStateChangedEventObject$6>; +type PausedStateChangedEventFilter$6 = TypedEventFilter; +interface RecoveryModeStateChangedEventObject$2 { + enabled: boolean; +} +type RecoveryModeStateChangedEvent$2 = TypedEvent<[ + boolean +], RecoveryModeStateChangedEventObject$2>; +type RecoveryModeStateChangedEventFilter$2 = TypedEventFilter; +interface SwapFeePercentageChangedEventObject$5 { + swapFeePercentage: BigNumber$1; +} +type SwapFeePercentageChangedEvent$5 = TypedEvent<[ + BigNumber$1 +], SwapFeePercentageChangedEventObject$5>; +type SwapFeePercentageChangedEventFilter$5 = TypedEventFilter; +interface TargetsSetEventObject$2 { + token: string; + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; +} +type TargetsSetEvent$2 = TypedEvent<[ + string, + BigNumber$1, + BigNumber$1 +], TargetsSetEventObject$2>; +type TargetsSetEventFilter$2 = TypedEventFilter; +interface TransferEventObject$6 { + from: string; + to: string; + value: BigNumber$1; +} +type TransferEvent$6 = TypedEvent<[ + string, + string, + BigNumber$1 +], TransferEventObject$6>; +type TransferEventFilter$6 = TypedEventFilter; +declare namespace GearboxLinearPool { + type ConstructorArgsStruct = { + vault: PromiseOrValue; + name: PromiseOrValue; + symbol: PromiseOrValue; + mainToken: PromiseOrValue; + wrappedToken: PromiseOrValue; + assetManager: PromiseOrValue; + upperTarget: PromiseOrValue; + swapFeePercentage: PromiseOrValue; + pauseWindowDuration: PromiseOrValue; + bufferPeriodDuration: PromiseOrValue; + owner: PromiseOrValue; + version: PromiseOrValue; + }; + type ConstructorArgsStructOutput = [ + string, + string, + string, + string, + string, + string, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + string, + string + ] & { + vault: string; + name: string; + symbol: string; + mainToken: string; + wrappedToken: string; + assetManager: string; + upperTarget: BigNumber$1; + swapFeePercentage: BigNumber$1; + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + owner: string; + version: string; + }; +} +interface GearboxLinearPool extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: GearboxLinearPoolInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + decimals(overrides?: CallOverrides): Promise<[number]>; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getBptIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getDomainSeparator(overrides?: CallOverrides): Promise<[string]>; + getMainIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getMainToken(overrides?: CallOverrides): Promise<[string]>; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + getOwner(overrides?: CallOverrides): Promise<[string]>; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise<[string]>; + getProtocolFeesCollector(overrides?: CallOverrides): Promise<[string]>; + getRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getScalingFactors(overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + getSwapFeePercentage(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise<[string]>; + getVirtualSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getWrappedIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getWrappedToken(overrides?: CallOverrides): Promise<[string]>; + getWrappedTokenRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + inRecoveryMode(overrides?: CallOverrides): Promise<[boolean]>; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise<[string]>; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$5.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$5.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise<[string]>; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise<[string]>; + }; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$5.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$5.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + callStatic: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + disableRecoveryMode(overrides?: CallOverrides): Promise; + enableRecoveryMode(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsOut: BigNumber$1[]; + dueProtocolFees: BigNumber$1[]; + }>; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsIn: BigNumber$1[]; + dueProtocolFees: BigNumber$1[]; + }>; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$5.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$5.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: CallOverrides): Promise; + pause(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptIn: BigNumber$1; + amountsOut: BigNumber$1[]; + }>; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptOut: BigNumber$1; + amountsIn: BigNumber$1[]; + }>; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: CallOverrides): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + unpause(overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + filters: { + "Approval(address,address,uint256)"(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$6; + Approval(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$6; + "PausedStateChanged(bool)"(paused?: null): PausedStateChangedEventFilter$6; + PausedStateChanged(paused?: null): PausedStateChangedEventFilter$6; + "RecoveryModeStateChanged(bool)"(enabled?: null): RecoveryModeStateChangedEventFilter$2; + RecoveryModeStateChanged(enabled?: null): RecoveryModeStateChangedEventFilter$2; + "SwapFeePercentageChanged(uint256)"(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$5; + SwapFeePercentageChanged(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$5; + "TargetsSet(address,uint256,uint256)"(token?: PromiseOrValue | null, lowerTarget?: null, upperTarget?: null): TargetsSetEventFilter$2; + TargetsSet(token?: PromiseOrValue | null, lowerTarget?: null, upperTarget?: null): TargetsSetEventFilter$2; + "Transfer(address,address,uint256)"(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$6; + Transfer(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$6; + }; + estimateGas: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$5.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$5.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$5.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$5.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + }; +} + +interface GearboxLinearPoolFactoryInterface extends utils.Interface { + functions: { + "create(string,string,address,address,uint256,uint256,address,uint256,bytes32)": FunctionFragment; + "disable()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getCreationCode()": FunctionFragment; + "getCreationCodeContracts()": FunctionFragment; + "getLastCreatedPool()": FunctionFragment; + "getPauseConfiguration()": FunctionFragment; + "getPoolVersion()": FunctionFragment; + "getProtocolFeePercentagesProvider()": FunctionFragment; + "getVault()": FunctionFragment; + "isDisabled()": FunctionFragment; + "isPoolFromFactory(address)": FunctionFragment; + "version()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "create" | "disable" | "getActionId" | "getAuthorizer" | "getCreationCode" | "getCreationCodeContracts" | "getLastCreatedPool" | "getPauseConfiguration" | "getPoolVersion" | "getProtocolFeePercentagesProvider" | "getVault" | "isDisabled" | "isPoolFromFactory" | "version"): FunctionFragment; + encodeFunctionData(functionFragment: "create", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "disable", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getCreationCode", values?: undefined): string; + encodeFunctionData(functionFragment: "getCreationCodeContracts", values?: undefined): string; + encodeFunctionData(functionFragment: "getLastCreatedPool", values?: undefined): string; + encodeFunctionData(functionFragment: "getPauseConfiguration", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolVersion", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolFeePercentagesProvider", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "isDisabled", values?: undefined): string; + encodeFunctionData(functionFragment: "isPoolFromFactory", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + decodeFunctionResult(functionFragment: "create", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "disable", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCreationCode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCreationCodeContracts", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getLastCreatedPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPauseConfiguration", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolVersion", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeePercentagesProvider", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isDisabled", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isPoolFromFactory", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + events: { + "FactoryDisabled()": EventFragment; + "GearboxLinearPoolCreated(address,uint256)": EventFragment; + "PoolCreated(address)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "FactoryDisabled"): EventFragment; + getEvent(nameOrSignatureOrTopic: "GearboxLinearPoolCreated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PoolCreated"): EventFragment; +} +interface FactoryDisabledEventObject$2 { +} +type FactoryDisabledEvent$2 = TypedEvent<[], FactoryDisabledEventObject$2>; +type FactoryDisabledEventFilter$2 = TypedEventFilter; +interface GearboxLinearPoolCreatedEventObject { + pool: string; + protocolId: BigNumber$1; +} +type GearboxLinearPoolCreatedEvent = TypedEvent<[ + string, + BigNumber$1 +], GearboxLinearPoolCreatedEventObject>; +type GearboxLinearPoolCreatedEventFilter = TypedEventFilter; +interface PoolCreatedEventObject$2 { + pool: string; +} +type PoolCreatedEvent$2 = TypedEvent<[string], PoolCreatedEventObject$2>; +type PoolCreatedEventFilter$2 = TypedEventFilter; +interface GearboxLinearPoolFactory extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: GearboxLinearPoolFactoryInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getCreationCode(overrides?: CallOverrides): Promise<[string]>; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise<[string]>; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise<[string]>; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise<[string]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + isDisabled(overrides?: CallOverrides): Promise<[boolean]>; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + version(overrides?: CallOverrides): Promise<[string]>; + }; + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + callStatic: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides): Promise; + disable(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + filters: { + "FactoryDisabled()"(): FactoryDisabledEventFilter$2; + FactoryDisabled(): FactoryDisabledEventFilter$2; + "GearboxLinearPoolCreated(address,uint256)"(pool?: PromiseOrValue | null, protocolId?: PromiseOrValue | null): GearboxLinearPoolCreatedEventFilter; + GearboxLinearPoolCreated(pool?: PromiseOrValue | null, protocolId?: PromiseOrValue | null): GearboxLinearPoolCreatedEventFilter; + "PoolCreated(address)"(pool?: PromiseOrValue | null): PoolCreatedEventFilter$2; + PoolCreated(pool?: PromiseOrValue | null): PoolCreatedEventFilter$2; + }; + estimateGas: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; +} + +interface GyroConfigInterface extends utils.Interface { + functions: { + "acceptGovernance()": FunctionFragment; + "changeGovernor(address)": FunctionFragment; + "freeze(bytes32)": FunctionFragment; + "getAddress(bytes32,address)": FunctionFragment; + "getAddress(bytes32)": FunctionFragment; + "getConfigMeta(bytes32)": FunctionFragment; + "getUint(bytes32)": FunctionFragment; + "governor()": FunctionFragment; + "hasKey(bytes32)": FunctionFragment; + "initialize(address)": FunctionFragment; + "listKeys()": FunctionFragment; + "pendingGovernor()": FunctionFragment; + "setAddress(bytes32,address)": FunctionFragment; + "setUint(bytes32,uint256)": FunctionFragment; + "unset(bytes32)": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "acceptGovernance" | "changeGovernor" | "freeze" | "getAddress(bytes32,address)" | "getAddress(bytes32)" | "getConfigMeta" | "getUint" | "governor" | "hasKey" | "initialize" | "listKeys" | "pendingGovernor" | "setAddress" | "setUint" | "unset"): FunctionFragment; + encodeFunctionData(functionFragment: "acceptGovernance", values?: undefined): string; + encodeFunctionData(functionFragment: "changeGovernor", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "freeze", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAddress(bytes32,address)", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAddress(bytes32)", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getConfigMeta", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getUint", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "governor", values?: undefined): string; + encodeFunctionData(functionFragment: "hasKey", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "initialize", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "listKeys", values?: undefined): string; + encodeFunctionData(functionFragment: "pendingGovernor", values?: undefined): string; + encodeFunctionData(functionFragment: "setAddress", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setUint", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "unset", values: [PromiseOrValue]): string; + decodeFunctionResult(functionFragment: "acceptGovernance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "changeGovernor", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "freeze", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAddress(bytes32,address)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAddress(bytes32)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getConfigMeta", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getUint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "governor", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "hasKey", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "listKeys", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pendingGovernor", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setAddress", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setUint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unset", data: BytesLike): Result; + events: { + "ConfigChanged(bytes32,uint256,uint256)": EventFragment; + "ConfigFrozen(bytes32)": EventFragment; + "ConfigUnset(bytes32)": EventFragment; + "GovernorChangeRequested(address)": EventFragment; + "GovernorChanged(address,address)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "ConfigChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ConfigFrozen"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ConfigUnset"): EventFragment; + getEvent(nameOrSignatureOrTopic: "GovernorChangeRequested"): EventFragment; + getEvent(nameOrSignatureOrTopic: "GovernorChanged"): EventFragment; +} +interface ConfigChangedEventObject { + key: string; + previousValue: BigNumber$1; + newValue: BigNumber$1; +} +type ConfigChangedEvent = TypedEvent<[ + string, + BigNumber$1, + BigNumber$1 +], ConfigChangedEventObject>; +type ConfigChangedEventFilter = TypedEventFilter; +interface ConfigFrozenEventObject { + key: string; +} +type ConfigFrozenEvent = TypedEvent<[string], ConfigFrozenEventObject>; +type ConfigFrozenEventFilter = TypedEventFilter; +interface ConfigUnsetEventObject { + key: string; +} +type ConfigUnsetEvent = TypedEvent<[string], ConfigUnsetEventObject>; +type ConfigUnsetEventFilter = TypedEventFilter; +interface GovernorChangeRequestedEventObject { + newGovernor: string; +} +type GovernorChangeRequestedEvent = TypedEvent<[ + string +], GovernorChangeRequestedEventObject>; +type GovernorChangeRequestedEventFilter = TypedEventFilter; +interface GovernorChangedEventObject { + oldGovernor: string; + newGovernor: string; +} +type GovernorChangedEvent = TypedEvent<[ + string, + string +], GovernorChangedEventObject>; +type GovernorChangedEventFilter = TypedEventFilter; +interface GyroConfig extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: GyroConfigInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + acceptGovernance(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + changeGovernor(newGovernor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + freeze(key: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "getAddress(bytes32,address)"(key: PromiseOrValue, defaultValue: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + "getAddress(bytes32)"(key: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getConfigMeta(key: PromiseOrValue, overrides?: CallOverrides): Promise<[number, boolean]>; + getUint(key: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + governor(overrides?: CallOverrides): Promise<[string]>; + hasKey(key: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + initialize(_governor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + listKeys(overrides?: CallOverrides): Promise<[string[]]>; + pendingGovernor(overrides?: CallOverrides): Promise<[string]>; + setAddress(key: PromiseOrValue, newValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setUint(key: PromiseOrValue, newValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unset(key: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + acceptGovernance(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + changeGovernor(newGovernor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + freeze(key: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "getAddress(bytes32,address)"(key: PromiseOrValue, defaultValue: PromiseOrValue, overrides?: CallOverrides): Promise; + "getAddress(bytes32)"(key: PromiseOrValue, overrides?: CallOverrides): Promise; + getConfigMeta(key: PromiseOrValue, overrides?: CallOverrides): Promise<[number, boolean]>; + getUint(key: PromiseOrValue, overrides?: CallOverrides): Promise; + governor(overrides?: CallOverrides): Promise; + hasKey(key: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(_governor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + listKeys(overrides?: CallOverrides): Promise; + pendingGovernor(overrides?: CallOverrides): Promise; + setAddress(key: PromiseOrValue, newValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setUint(key: PromiseOrValue, newValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unset(key: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + acceptGovernance(overrides?: CallOverrides): Promise; + changeGovernor(newGovernor: PromiseOrValue, overrides?: CallOverrides): Promise; + freeze(key: PromiseOrValue, overrides?: CallOverrides): Promise; + "getAddress(bytes32,address)"(key: PromiseOrValue, defaultValue: PromiseOrValue, overrides?: CallOverrides): Promise; + "getAddress(bytes32)"(key: PromiseOrValue, overrides?: CallOverrides): Promise; + getConfigMeta(key: PromiseOrValue, overrides?: CallOverrides): Promise<[number, boolean]>; + getUint(key: PromiseOrValue, overrides?: CallOverrides): Promise; + governor(overrides?: CallOverrides): Promise; + hasKey(key: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(_governor: PromiseOrValue, overrides?: CallOverrides): Promise; + listKeys(overrides?: CallOverrides): Promise; + pendingGovernor(overrides?: CallOverrides): Promise; + setAddress(key: PromiseOrValue, newValue: PromiseOrValue, overrides?: CallOverrides): Promise; + setUint(key: PromiseOrValue, newValue: PromiseOrValue, overrides?: CallOverrides): Promise; + unset(key: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + filters: { + "ConfigChanged(bytes32,uint256,uint256)"(key?: null, previousValue?: null, newValue?: null): ConfigChangedEventFilter; + ConfigChanged(key?: null, previousValue?: null, newValue?: null): ConfigChangedEventFilter; + "ConfigFrozen(bytes32)"(key?: null): ConfigFrozenEventFilter; + ConfigFrozen(key?: null): ConfigFrozenEventFilter; + "ConfigUnset(bytes32)"(key?: null): ConfigUnsetEventFilter; + ConfigUnset(key?: null): ConfigUnsetEventFilter; + "GovernorChangeRequested(address)"(newGovernor?: null): GovernorChangeRequestedEventFilter; + GovernorChangeRequested(newGovernor?: null): GovernorChangeRequestedEventFilter; + "GovernorChanged(address,address)"(oldGovernor?: null, newGovernor?: null): GovernorChangedEventFilter; + GovernorChanged(oldGovernor?: null, newGovernor?: null): GovernorChangedEventFilter; + }; + estimateGas: { + acceptGovernance(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + changeGovernor(newGovernor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + freeze(key: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "getAddress(bytes32,address)"(key: PromiseOrValue, defaultValue: PromiseOrValue, overrides?: CallOverrides): Promise; + "getAddress(bytes32)"(key: PromiseOrValue, overrides?: CallOverrides): Promise; + getConfigMeta(key: PromiseOrValue, overrides?: CallOverrides): Promise; + getUint(key: PromiseOrValue, overrides?: CallOverrides): Promise; + governor(overrides?: CallOverrides): Promise; + hasKey(key: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(_governor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + listKeys(overrides?: CallOverrides): Promise; + pendingGovernor(overrides?: CallOverrides): Promise; + setAddress(key: PromiseOrValue, newValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setUint(key: PromiseOrValue, newValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unset(key: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + acceptGovernance(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + changeGovernor(newGovernor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + freeze(key: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "getAddress(bytes32,address)"(key: PromiseOrValue, defaultValue: PromiseOrValue, overrides?: CallOverrides): Promise; + "getAddress(bytes32)"(key: PromiseOrValue, overrides?: CallOverrides): Promise; + getConfigMeta(key: PromiseOrValue, overrides?: CallOverrides): Promise; + getUint(key: PromiseOrValue, overrides?: CallOverrides): Promise; + governor(overrides?: CallOverrides): Promise; + hasKey(key: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(_governor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + listKeys(overrides?: CallOverrides): Promise; + pendingGovernor(overrides?: CallOverrides): Promise; + setAddress(key: PromiseOrValue, newValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setUint(key: PromiseOrValue, newValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unset(key: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +declare namespace IVault$1 { + type BatchSwapStepStruct = { + poolId: PromiseOrValue; + assetInIndex: PromiseOrValue; + assetOutIndex: PromiseOrValue; + amount: PromiseOrValue; + userData: PromiseOrValue; + }; + type BatchSwapStepStructOutput = [ + string, + BigNumber$1, + BigNumber$1, + BigNumber$1, + string + ] & { + poolId: string; + assetInIndex: BigNumber$1; + assetOutIndex: BigNumber$1; + amount: BigNumber$1; + userData: string; + }; + type FundManagementStruct = { + sender: PromiseOrValue; + fromInternalBalance: PromiseOrValue; + recipient: PromiseOrValue; + toInternalBalance: PromiseOrValue; + }; + type FundManagementStructOutput = [ + string, + boolean, + string, + boolean + ] & { + sender: string; + fromInternalBalance: boolean; + recipient: string; + toInternalBalance: boolean; + }; + type ExitPoolRequestStruct = { + assets: PromiseOrValue[]; + minAmountsOut: PromiseOrValue[]; + userData: PromiseOrValue; + toInternalBalance: PromiseOrValue; + }; + type ExitPoolRequestStructOutput = [ + string[], + BigNumber$1[], + string, + boolean + ] & { + assets: string[]; + minAmountsOut: BigNumber$1[]; + userData: string; + toInternalBalance: boolean; + }; + type JoinPoolRequestStruct = { + assets: PromiseOrValue[]; + maxAmountsIn: PromiseOrValue[]; + userData: PromiseOrValue; + fromInternalBalance: PromiseOrValue; + }; + type JoinPoolRequestStructOutput = [ + string[], + BigNumber$1[], + string, + boolean + ] & { + assets: string[]; + maxAmountsIn: BigNumber$1[]; + userData: string; + fromInternalBalance: boolean; + }; + type SingleSwapStruct = { + poolId: PromiseOrValue; + kind: PromiseOrValue; + assetIn: PromiseOrValue; + assetOut: PromiseOrValue; + amount: PromiseOrValue; + userData: PromiseOrValue; + }; + type SingleSwapStructOutput = [ + string, + number, + string, + string, + BigNumber$1, + string + ] & { + poolId: string; + kind: number; + assetIn: string; + assetOut: string; + amount: BigNumber$1; + userData: string; + }; +} +interface LidoRelayerInterface extends utils.Interface { + functions: { + "batchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool),int256[],uint256)": FunctionFragment; + "exitPool(bytes32,address,address,(address[],uint256[],bytes,bool))": FunctionFragment; + "getStETH()": FunctionFragment; + "getVault()": FunctionFragment; + "getWstETH()": FunctionFragment; + "joinPool(bytes32,address,address,(address[],uint256[],bytes,bool))": FunctionFragment; + "swap((bytes32,uint8,address,address,uint256,bytes),(address,bool,address,bool),uint256,uint256)": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "batchSwap" | "exitPool" | "getStETH" | "getVault" | "getWstETH" | "joinPool" | "swap"): FunctionFragment; + encodeFunctionData(functionFragment: "batchSwap", values: [ + PromiseOrValue, + IVault$1.BatchSwapStepStruct[], + PromiseOrValue[], + IVault$1.FundManagementStruct, + PromiseOrValue[], + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "exitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + IVault$1.ExitPoolRequestStruct + ]): string; + encodeFunctionData(functionFragment: "getStETH", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "getWstETH", values?: undefined): string; + encodeFunctionData(functionFragment: "joinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + IVault$1.JoinPoolRequestStruct + ]): string; + encodeFunctionData(functionFragment: "swap", values: [ + IVault$1.SingleSwapStruct, + IVault$1.FundManagementStruct, + PromiseOrValue, + PromiseOrValue + ]): string; + decodeFunctionResult(functionFragment: "batchSwap", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "exitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getStETH", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWstETH", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "joinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "swap", data: BytesLike): Result; + events: {}; +} +interface LidoRelayer extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: LidoRelayerInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + batchSwap(kind: PromiseOrValue, swaps: IVault$1.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault$1.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + exitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$1.ExitPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getStETH(overrides?: CallOverrides): Promise<[string]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + getWstETH(overrides?: CallOverrides): Promise<[string]>; + joinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$1.JoinPoolRequestStruct, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + swap(singleSwap: IVault$1.SingleSwapStruct, funds: IVault$1.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; + batchSwap(kind: PromiseOrValue, swaps: IVault$1.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault$1.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + exitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$1.ExitPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getStETH(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getWstETH(overrides?: CallOverrides): Promise; + joinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$1.JoinPoolRequestStruct, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + swap(singleSwap: IVault$1.SingleSwapStruct, funds: IVault$1.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + batchSwap(kind: PromiseOrValue, swaps: IVault$1.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault$1.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, overrides?: CallOverrides): Promise; + exitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$1.ExitPoolRequestStruct, overrides?: CallOverrides): Promise; + getStETH(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getWstETH(overrides?: CallOverrides): Promise; + joinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$1.JoinPoolRequestStruct, overrides?: CallOverrides): Promise; + swap(singleSwap: IVault$1.SingleSwapStruct, funds: IVault$1.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + filters: {}; + estimateGas: { + batchSwap(kind: PromiseOrValue, swaps: IVault$1.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault$1.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + exitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$1.ExitPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getStETH(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getWstETH(overrides?: CallOverrides): Promise; + joinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$1.JoinPoolRequestStruct, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + swap(singleSwap: IVault$1.SingleSwapStruct, funds: IVault$1.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + batchSwap(kind: PromiseOrValue, swaps: IVault$1.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault$1.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + exitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$1.ExitPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getStETH(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getWstETH(overrides?: CallOverrides): Promise; + joinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault$1.JoinPoolRequestStruct, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + swap(singleSwap: IVault$1.SingleSwapStruct, funds: IVault$1.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +declare namespace IPoolSwapStructs$4 { + type SwapRequestStruct = { + kind: PromiseOrValue; + tokenIn: PromiseOrValue; + tokenOut: PromiseOrValue; + amount: PromiseOrValue; + poolId: PromiseOrValue; + lastChangeBlock: PromiseOrValue; + from: PromiseOrValue; + to: PromiseOrValue; + userData: PromiseOrValue; + }; + type SwapRequestStructOutput = [ + number, + string, + string, + BigNumber$1, + string, + BigNumber$1, + string, + string, + string + ] & { + kind: number; + tokenIn: string; + tokenOut: string; + amount: BigNumber$1; + poolId: string; + lastChangeBlock: BigNumber$1; + from: string; + to: string; + userData: string; + }; +} +interface LinearPoolInterface$1 extends utils.Interface { + functions: { + "DOMAIN_SEPARATOR()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getBptIndex()": FunctionFragment; + "getMainIndex()": FunctionFragment; + "getMainToken()": FunctionFragment; + "getOwner()": FunctionFragment; + "getPausedState()": FunctionFragment; + "getPoolId()": FunctionFragment; + "getRate()": FunctionFragment; + "getScalingFactors()": FunctionFragment; + "getSwapFeePercentage()": FunctionFragment; + "getTargets()": FunctionFragment; + "getVault()": FunctionFragment; + "getVirtualSupply()": FunctionFragment; + "getWrappedIndex()": FunctionFragment; + "getWrappedToken()": FunctionFragment; + "getWrappedTokenRate()": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "initialize()": FunctionFragment; + "name()": FunctionFragment; + "nonces(address)": FunctionFragment; + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)": FunctionFragment; + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "setAssetManagerPoolConfig(address,bytes)": FunctionFragment; + "setPaused(bool)": FunctionFragment; + "setSwapFeePercentage(uint256)": FunctionFragment; + "setTargets(uint256,uint256)": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "DOMAIN_SEPARATOR" | "allowance" | "approve" | "balanceOf" | "decimals" | "decreaseAllowance" | "getActionId" | "getAuthorizer" | "getBptIndex" | "getMainIndex" | "getMainToken" | "getOwner" | "getPausedState" | "getPoolId" | "getRate" | "getScalingFactors" | "getSwapFeePercentage" | "getTargets" | "getVault" | "getVirtualSupply" | "getWrappedIndex" | "getWrappedToken" | "getWrappedTokenRate" | "increaseAllowance" | "initialize" | "name" | "nonces" | "onExitPool" | "onJoinPool" | "onSwap" | "permit" | "queryExit" | "queryJoin" | "setAssetManagerPoolConfig" | "setPaused" | "setSwapFeePercentage" | "setTargets" | "symbol" | "totalSupply" | "transfer" | "transferFrom"): FunctionFragment; + encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string; + encodeFunctionData(functionFragment: "allowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "decreaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getBptIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getMainIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getMainToken", values?: undefined): string; + encodeFunctionData(functionFragment: "getOwner", values?: undefined): string; + encodeFunctionData(functionFragment: "getPausedState", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolId", values?: undefined): string; + encodeFunctionData(functionFragment: "getRate", values?: undefined): string; + encodeFunctionData(functionFragment: "getScalingFactors", values?: undefined): string; + encodeFunctionData(functionFragment: "getSwapFeePercentage", values?: undefined): string; + encodeFunctionData(functionFragment: "getTargets", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "getVirtualSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedToken", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedTokenRate", values?: undefined): string; + encodeFunctionData(functionFragment: "increaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "initialize", values?: undefined): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "nonces", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "onExitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onJoinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap", values: [ + IPoolSwapStructs$4.SwapRequestStruct, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "permit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryExit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryJoin", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "setAssetManagerPoolConfig", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setPaused", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setSwapFeePercentage", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setTargets", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "transfer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "transferFrom", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decreaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getBptIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMainIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMainToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getOwner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPausedState", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getScalingFactors", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTargets", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVirtualSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedTokenRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onExitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onJoinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryExit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryJoin", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setAssetManagerPoolConfig", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setPaused", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setTargets", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; + events: { + "Approval(address,address,uint256)": EventFragment; + "PausedStateChanged(bool)": EventFragment; + "SwapFeePercentageChanged(uint256)": EventFragment; + "TargetsSet(address,uint256,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PausedStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SwapFeePercentageChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TargetsSet"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} +interface ApprovalEventObject$5 { + owner: string; + spender: string; + value: BigNumber$1; +} +type ApprovalEvent$5 = TypedEvent<[ + string, + string, + BigNumber$1 +], ApprovalEventObject$5>; +type ApprovalEventFilter$5 = TypedEventFilter; +interface PausedStateChangedEventObject$5 { + paused: boolean; +} +type PausedStateChangedEvent$5 = TypedEvent<[ + boolean +], PausedStateChangedEventObject$5>; +type PausedStateChangedEventFilter$5 = TypedEventFilter; +interface SwapFeePercentageChangedEventObject$4 { + swapFeePercentage: BigNumber$1; +} +type SwapFeePercentageChangedEvent$4 = TypedEvent<[ + BigNumber$1 +], SwapFeePercentageChangedEventObject$4>; +type SwapFeePercentageChangedEventFilter$4 = TypedEventFilter; +interface TargetsSetEventObject$1 { + token: string; + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; +} +type TargetsSetEvent$1 = TypedEvent<[ + string, + BigNumber$1, + BigNumber$1 +], TargetsSetEventObject$1>; +type TargetsSetEventFilter$1 = TypedEventFilter; +interface TransferEventObject$5 { + from: string; + to: string; + value: BigNumber$1; +} +type TransferEvent$5 = TypedEvent<[ + string, + string, + BigNumber$1 +], TransferEventObject$5>; +type TransferEventFilter$5 = TypedEventFilter; +interface LinearPool extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: LinearPoolInterface$1; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + decimals(overrides?: CallOverrides): Promise<[number]>; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getBptIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getMainIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getMainToken(overrides?: CallOverrides): Promise<[string]>; + getOwner(overrides?: CallOverrides): Promise<[string]>; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise<[string]>; + getRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getScalingFactors(overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + getSwapFeePercentage(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise<[string]>; + getVirtualSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getWrappedIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getWrappedToken(overrides?: CallOverrides): Promise<[string]>; + getWrappedTokenRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise<[string]>; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(request: IPoolSwapStructs$4.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise<[string]>; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(request: IPoolSwapStructs$4.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1[], BigNumber$1[]]>; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1[], BigNumber$1[]]>; + onSwap(request: IPoolSwapStructs$4.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptIn: BigNumber$1; + amountsOut: BigNumber$1[]; + }>; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptOut: BigNumber$1; + amountsIn: BigNumber$1[]; + }>; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: CallOverrides): Promise; + setPaused(paused: PromiseOrValue, overrides?: CallOverrides): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: CallOverrides): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + filters: { + "Approval(address,address,uint256)"(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$5; + Approval(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$5; + "PausedStateChanged(bool)"(paused?: null): PausedStateChangedEventFilter$5; + PausedStateChanged(paused?: null): PausedStateChangedEventFilter$5; + "SwapFeePercentageChanged(uint256)"(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$4; + SwapFeePercentageChanged(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$4; + "TargetsSet(address,uint256,uint256)"(token?: PromiseOrValue | null, lowerTarget?: null, upperTarget?: null): TargetsSetEventFilter$1; + TargetsSet(token?: PromiseOrValue | null, lowerTarget?: null, upperTarget?: null): TargetsSetEventFilter$1; + "Transfer(address,address,uint256)"(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$5; + Transfer(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$5; + }; + estimateGas: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(request: IPoolSwapStructs$4.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(request: IPoolSwapStructs$4.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +interface LiquidityGaugeV5Interface extends utils.Interface { + functions: { + "deposit(uint256)": FunctionFragment; + "deposit(uint256,address)": FunctionFragment; + "deposit(uint256,address,bool)": FunctionFragment; + "withdraw(uint256)": FunctionFragment; + "withdraw(uint256,bool)": FunctionFragment; + "claim_rewards()": FunctionFragment; + "claim_rewards(address)": FunctionFragment; + "claim_rewards(address,address)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "user_checkpoint(address)": FunctionFragment; + "set_rewards_receiver(address)": FunctionFragment; + "kick(address)": FunctionFragment; + "deposit_reward_token(address,uint256)": FunctionFragment; + "add_reward(address,address)": FunctionFragment; + "set_reward_distributor(address,address)": FunctionFragment; + "set_killed(bool)": FunctionFragment; + "claimed_reward(address,address)": FunctionFragment; + "claimable_reward(address,address)": FunctionFragment; + "claimable_reward_write(address,address)": FunctionFragment; + "claimable_tokens(address)": FunctionFragment; + "integrate_checkpoint()": FunctionFragment; + "future_epoch_time()": FunctionFragment; + "inflation_rate()": FunctionFragment; + "decimals()": FunctionFragment; + "version()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "initialize(address)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "totalSupply()": FunctionFragment; + "name()": FunctionFragment; + "symbol()": FunctionFragment; + "DOMAIN_SEPARATOR()": FunctionFragment; + "nonces(address)": FunctionFragment; + "factory()": FunctionFragment; + "lp_token()": FunctionFragment; + "is_killed()": FunctionFragment; + "reward_count()": FunctionFragment; + "reward_data(address)": FunctionFragment; + "rewards_receiver(address)": FunctionFragment; + "reward_integral_for(address,address)": FunctionFragment; + "working_balances(address)": FunctionFragment; + "working_supply()": FunctionFragment; + "integrate_inv_supply_of(address)": FunctionFragment; + "integrate_checkpoint_of(address)": FunctionFragment; + "integrate_fraction(address)": FunctionFragment; + "period()": FunctionFragment; + "reward_tokens(uint256)": FunctionFragment; + "period_timestamp(uint256)": FunctionFragment; + "integrate_inv_supply(uint256)": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "deposit(uint256)" | "deposit(uint256,address)" | "deposit(uint256,address,bool)" | "withdraw(uint256)" | "withdraw(uint256,bool)" | "claim_rewards()" | "claim_rewards(address)" | "claim_rewards(address,address)" | "transferFrom" | "transfer" | "approve" | "permit" | "increaseAllowance" | "decreaseAllowance" | "user_checkpoint" | "set_rewards_receiver" | "kick" | "deposit_reward_token" | "add_reward" | "set_reward_distributor" | "set_killed" | "claimed_reward" | "claimable_reward" | "claimable_reward_write" | "claimable_tokens" | "integrate_checkpoint" | "future_epoch_time" | "inflation_rate" | "decimals" | "version" | "allowance" | "initialize" | "balanceOf" | "totalSupply" | "name" | "symbol" | "DOMAIN_SEPARATOR" | "nonces" | "factory" | "lp_token" | "is_killed" | "reward_count" | "reward_data" | "rewards_receiver" | "reward_integral_for" | "working_balances" | "working_supply" | "integrate_inv_supply_of" | "integrate_checkpoint_of" | "integrate_fraction" | "period" | "reward_tokens" | "period_timestamp" | "integrate_inv_supply"): FunctionFragment; + encodeFunctionData(functionFragment: "deposit(uint256)", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "deposit(uint256,address)", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "deposit(uint256,address,bool)", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "withdraw(uint256)", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "withdraw(uint256,bool)", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "claim_rewards()", values?: undefined): string; + encodeFunctionData(functionFragment: "claim_rewards(address)", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "claim_rewards(address,address)", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "transferFrom", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "transfer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "permit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "increaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "decreaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "user_checkpoint", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "set_rewards_receiver", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "kick", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "deposit_reward_token", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "add_reward", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "set_reward_distributor", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "set_killed", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "claimed_reward", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "claimable_reward", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "claimable_reward_write", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "claimable_tokens", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "integrate_checkpoint", values?: undefined): string; + encodeFunctionData(functionFragment: "future_epoch_time", values?: undefined): string; + encodeFunctionData(functionFragment: "inflation_rate", values?: undefined): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + encodeFunctionData(functionFragment: "allowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "initialize", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string; + encodeFunctionData(functionFragment: "nonces", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "factory", values?: undefined): string; + encodeFunctionData(functionFragment: "lp_token", values?: undefined): string; + encodeFunctionData(functionFragment: "is_killed", values?: undefined): string; + encodeFunctionData(functionFragment: "reward_count", values?: undefined): string; + encodeFunctionData(functionFragment: "reward_data", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "rewards_receiver", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "reward_integral_for", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "working_balances", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "working_supply", values?: undefined): string; + encodeFunctionData(functionFragment: "integrate_inv_supply_of", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "integrate_checkpoint_of", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "integrate_fraction", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "period", values?: undefined): string; + encodeFunctionData(functionFragment: "reward_tokens", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "period_timestamp", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "integrate_inv_supply", values: [PromiseOrValue]): string; + decodeFunctionResult(functionFragment: "deposit(uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "deposit(uint256,address)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "deposit(uint256,address,bool)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "withdraw(uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "withdraw(uint256,bool)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "claim_rewards()", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "claim_rewards(address)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "claim_rewards(address,address)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decreaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "user_checkpoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "set_rewards_receiver", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "kick", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "deposit_reward_token", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "add_reward", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "set_reward_distributor", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "set_killed", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "claimed_reward", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "claimable_reward", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "claimable_reward_write", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "claimable_tokens", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "integrate_checkpoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "future_epoch_time", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "inflation_rate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "factory", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "lp_token", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "is_killed", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "reward_count", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "reward_data", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "rewards_receiver", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "reward_integral_for", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "working_balances", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "working_supply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "integrate_inv_supply_of", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "integrate_checkpoint_of", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "integrate_fraction", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "period", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "reward_tokens", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "period_timestamp", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "integrate_inv_supply", data: BytesLike): Result; + events: { + "Deposit(address,uint256)": EventFragment; + "Withdraw(address,uint256)": EventFragment; + "UpdateLiquidityLimit(address,uint256,uint256,uint256,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + "Approval(address,address,uint256)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Deposit"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Withdraw"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UpdateLiquidityLimit"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; +} +interface DepositEventObject$1 { + provider: string; + value: BigNumber$1; +} +type DepositEvent$1 = TypedEvent<[string, BigNumber$1], DepositEventObject$1>; +type DepositEventFilter$1 = TypedEventFilter; +interface WithdrawEventObject$1 { + provider: string; + value: BigNumber$1; +} +type WithdrawEvent$1 = TypedEvent<[ + string, + BigNumber$1 +], WithdrawEventObject$1>; +type WithdrawEventFilter$1 = TypedEventFilter; +interface UpdateLiquidityLimitEventObject { + user: string; + original_balance: BigNumber$1; + original_supply: BigNumber$1; + working_balance: BigNumber$1; + working_supply: BigNumber$1; +} +type UpdateLiquidityLimitEvent = TypedEvent<[ + string, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 +], UpdateLiquidityLimitEventObject>; +type UpdateLiquidityLimitEventFilter = TypedEventFilter; +interface TransferEventObject$4 { + _from: string; + _to: string; + _value: BigNumber$1; +} +type TransferEvent$4 = TypedEvent<[ + string, + string, + BigNumber$1 +], TransferEventObject$4>; +type TransferEventFilter$4 = TypedEventFilter; +interface ApprovalEventObject$4 { + _owner: string; + _spender: string; + _value: BigNumber$1; +} +type ApprovalEvent$4 = TypedEvent<[ + string, + string, + BigNumber$1 +], ApprovalEventObject$4>; +type ApprovalEventFilter$4 = TypedEventFilter; +interface LiquidityGaugeV5 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: LiquidityGaugeV5Interface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + "deposit(uint256)"(_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "deposit(uint256,address)"(_value: PromiseOrValue, _addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "deposit(uint256,address,bool)"(_value: PromiseOrValue, _addr: PromiseOrValue, _claim_rewards: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "withdraw(uint256)"(_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "withdraw(uint256,bool)"(_value: PromiseOrValue, _claim_rewards: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "claim_rewards()"(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "claim_rewards(address)"(_addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "claim_rewards(address,address)"(_addr: PromiseOrValue, _receiver: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(_from: PromiseOrValue, _to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transfer(_to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + approve(_spender: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(_owner: PromiseOrValue, _spender: PromiseOrValue, _value: PromiseOrValue, _deadline: PromiseOrValue, _v: PromiseOrValue, _r: PromiseOrValue, _s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + increaseAllowance(_spender: PromiseOrValue, _added_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + decreaseAllowance(_spender: PromiseOrValue, _subtracted_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + user_checkpoint(addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + set_rewards_receiver(_receiver: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + kick(addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + deposit_reward_token(_reward_token: PromiseOrValue, _amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + add_reward(_reward_token: PromiseOrValue, _distributor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + set_reward_distributor(_reward_token: PromiseOrValue, _distributor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + set_killed(_is_killed: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + claimed_reward(_addr: PromiseOrValue, _token: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + claimable_reward(_user: PromiseOrValue, _reward_token: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + claimable_reward_write(_addr: PromiseOrValue, _token: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + claimable_tokens(addr: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + integrate_checkpoint(overrides?: CallOverrides): Promise<[BigNumber$1]>; + future_epoch_time(overrides?: CallOverrides): Promise<[BigNumber$1]>; + inflation_rate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + decimals(overrides?: CallOverrides): Promise<[BigNumber$1]>; + version(overrides?: CallOverrides): Promise<[string]>; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + initialize(_lp_token: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + name(overrides?: CallOverrides): Promise<[string]>; + symbol(overrides?: CallOverrides): Promise<[string]>; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; + nonces(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + factory(overrides?: CallOverrides): Promise<[string]>; + lp_token(overrides?: CallOverrides): Promise<[string]>; + is_killed(overrides?: CallOverrides): Promise<[boolean]>; + reward_count(overrides?: CallOverrides): Promise<[BigNumber$1]>; + reward_data(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[ + [ + string, + string, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + token: string; + distributor: string; + period_finish: BigNumber$1; + rate: BigNumber$1; + last_update: BigNumber$1; + integral: BigNumber$1; + } + ]>; + rewards_receiver(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + reward_integral_for(arg0: PromiseOrValue, arg1: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + working_balances(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + working_supply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + integrate_inv_supply_of(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + integrate_checkpoint_of(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + integrate_fraction(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + period(overrides?: CallOverrides): Promise<[BigNumber$1]>; + reward_tokens(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + period_timestamp(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + integrate_inv_supply(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + }; + "deposit(uint256)"(_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "deposit(uint256,address)"(_value: PromiseOrValue, _addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "deposit(uint256,address,bool)"(_value: PromiseOrValue, _addr: PromiseOrValue, _claim_rewards: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "withdraw(uint256)"(_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "withdraw(uint256,bool)"(_value: PromiseOrValue, _claim_rewards: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "claim_rewards()"(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "claim_rewards(address)"(_addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "claim_rewards(address,address)"(_addr: PromiseOrValue, _receiver: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(_from: PromiseOrValue, _to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transfer(_to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + approve(_spender: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(_owner: PromiseOrValue, _spender: PromiseOrValue, _value: PromiseOrValue, _deadline: PromiseOrValue, _v: PromiseOrValue, _r: PromiseOrValue, _s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + increaseAllowance(_spender: PromiseOrValue, _added_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + decreaseAllowance(_spender: PromiseOrValue, _subtracted_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + user_checkpoint(addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + set_rewards_receiver(_receiver: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + kick(addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + deposit_reward_token(_reward_token: PromiseOrValue, _amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + add_reward(_reward_token: PromiseOrValue, _distributor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + set_reward_distributor(_reward_token: PromiseOrValue, _distributor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + set_killed(_is_killed: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + claimed_reward(_addr: PromiseOrValue, _token: PromiseOrValue, overrides?: CallOverrides): Promise; + claimable_reward(_user: PromiseOrValue, _reward_token: PromiseOrValue, overrides?: CallOverrides): Promise; + claimable_reward_write(_addr: PromiseOrValue, _token: PromiseOrValue, overrides?: CallOverrides): Promise; + claimable_tokens(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_checkpoint(overrides?: CallOverrides): Promise; + future_epoch_time(overrides?: CallOverrides): Promise; + inflation_rate(overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(_lp_token: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + nonces(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; + lp_token(overrides?: CallOverrides): Promise; + is_killed(overrides?: CallOverrides): Promise; + reward_count(overrides?: CallOverrides): Promise; + reward_data(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[ + string, + string, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + token: string; + distributor: string; + period_finish: BigNumber$1; + rate: BigNumber$1; + last_update: BigNumber$1; + integral: BigNumber$1; + }>; + rewards_receiver(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + reward_integral_for(arg0: PromiseOrValue, arg1: PromiseOrValue, overrides?: CallOverrides): Promise; + working_balances(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + working_supply(overrides?: CallOverrides): Promise; + integrate_inv_supply_of(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_checkpoint_of(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_fraction(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + period(overrides?: CallOverrides): Promise; + reward_tokens(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + period_timestamp(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_inv_supply(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + callStatic: { + "deposit(uint256)"(_value: PromiseOrValue, overrides?: CallOverrides): Promise; + "deposit(uint256,address)"(_value: PromiseOrValue, _addr: PromiseOrValue, overrides?: CallOverrides): Promise; + "deposit(uint256,address,bool)"(_value: PromiseOrValue, _addr: PromiseOrValue, _claim_rewards: PromiseOrValue, overrides?: CallOverrides): Promise; + "withdraw(uint256)"(_value: PromiseOrValue, overrides?: CallOverrides): Promise; + "withdraw(uint256,bool)"(_value: PromiseOrValue, _claim_rewards: PromiseOrValue, overrides?: CallOverrides): Promise; + "claim_rewards()"(overrides?: CallOverrides): Promise; + "claim_rewards(address)"(_addr: PromiseOrValue, overrides?: CallOverrides): Promise; + "claim_rewards(address,address)"(_addr: PromiseOrValue, _receiver: PromiseOrValue, overrides?: CallOverrides): Promise; + transferFrom(_from: PromiseOrValue, _to: PromiseOrValue, _value: PromiseOrValue, overrides?: CallOverrides): Promise; + transfer(_to: PromiseOrValue, _value: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(_spender: PromiseOrValue, _value: PromiseOrValue, overrides?: CallOverrides): Promise; + permit(_owner: PromiseOrValue, _spender: PromiseOrValue, _value: PromiseOrValue, _deadline: PromiseOrValue, _v: PromiseOrValue, _r: PromiseOrValue, _s: PromiseOrValue, overrides?: CallOverrides): Promise; + increaseAllowance(_spender: PromiseOrValue, _added_value: PromiseOrValue, overrides?: CallOverrides): Promise; + decreaseAllowance(_spender: PromiseOrValue, _subtracted_value: PromiseOrValue, overrides?: CallOverrides): Promise; + user_checkpoint(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + set_rewards_receiver(_receiver: PromiseOrValue, overrides?: CallOverrides): Promise; + kick(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + deposit_reward_token(_reward_token: PromiseOrValue, _amount: PromiseOrValue, overrides?: CallOverrides): Promise; + add_reward(_reward_token: PromiseOrValue, _distributor: PromiseOrValue, overrides?: CallOverrides): Promise; + set_reward_distributor(_reward_token: PromiseOrValue, _distributor: PromiseOrValue, overrides?: CallOverrides): Promise; + set_killed(_is_killed: PromiseOrValue, overrides?: CallOverrides): Promise; + claimed_reward(_addr: PromiseOrValue, _token: PromiseOrValue, overrides?: CallOverrides): Promise; + claimable_reward(_user: PromiseOrValue, _reward_token: PromiseOrValue, overrides?: CallOverrides): Promise; + claimable_reward_write(_addr: PromiseOrValue, _token: PromiseOrValue, overrides?: CallOverrides): Promise; + claimable_tokens(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_checkpoint(overrides?: CallOverrides): Promise; + future_epoch_time(overrides?: CallOverrides): Promise; + inflation_rate(overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(_lp_token: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + nonces(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; + lp_token(overrides?: CallOverrides): Promise; + is_killed(overrides?: CallOverrides): Promise; + reward_count(overrides?: CallOverrides): Promise; + reward_data(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[ + string, + string, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + token: string; + distributor: string; + period_finish: BigNumber$1; + rate: BigNumber$1; + last_update: BigNumber$1; + integral: BigNumber$1; + }>; + rewards_receiver(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + reward_integral_for(arg0: PromiseOrValue, arg1: PromiseOrValue, overrides?: CallOverrides): Promise; + working_balances(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + working_supply(overrides?: CallOverrides): Promise; + integrate_inv_supply_of(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_checkpoint_of(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_fraction(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + period(overrides?: CallOverrides): Promise; + reward_tokens(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + period_timestamp(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_inv_supply(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + filters: { + "Deposit(address,uint256)"(provider?: PromiseOrValue | null, value?: null): DepositEventFilter$1; + Deposit(provider?: PromiseOrValue | null, value?: null): DepositEventFilter$1; + "Withdraw(address,uint256)"(provider?: PromiseOrValue | null, value?: null): WithdrawEventFilter$1; + Withdraw(provider?: PromiseOrValue | null, value?: null): WithdrawEventFilter$1; + "UpdateLiquidityLimit(address,uint256,uint256,uint256,uint256)"(user?: PromiseOrValue | null, original_balance?: null, original_supply?: null, working_balance?: null, working_supply?: null): UpdateLiquidityLimitEventFilter; + UpdateLiquidityLimit(user?: PromiseOrValue | null, original_balance?: null, original_supply?: null, working_balance?: null, working_supply?: null): UpdateLiquidityLimitEventFilter; + "Transfer(address,address,uint256)"(_from?: PromiseOrValue | null, _to?: PromiseOrValue | null, _value?: null): TransferEventFilter$4; + Transfer(_from?: PromiseOrValue | null, _to?: PromiseOrValue | null, _value?: null): TransferEventFilter$4; + "Approval(address,address,uint256)"(_owner?: PromiseOrValue | null, _spender?: PromiseOrValue | null, _value?: null): ApprovalEventFilter$4; + Approval(_owner?: PromiseOrValue | null, _spender?: PromiseOrValue | null, _value?: null): ApprovalEventFilter$4; + }; + estimateGas: { + "deposit(uint256)"(_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "deposit(uint256,address)"(_value: PromiseOrValue, _addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "deposit(uint256,address,bool)"(_value: PromiseOrValue, _addr: PromiseOrValue, _claim_rewards: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "withdraw(uint256)"(_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "withdraw(uint256,bool)"(_value: PromiseOrValue, _claim_rewards: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "claim_rewards()"(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "claim_rewards(address)"(_addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "claim_rewards(address,address)"(_addr: PromiseOrValue, _receiver: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(_from: PromiseOrValue, _to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transfer(_to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + approve(_spender: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(_owner: PromiseOrValue, _spender: PromiseOrValue, _value: PromiseOrValue, _deadline: PromiseOrValue, _v: PromiseOrValue, _r: PromiseOrValue, _s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + increaseAllowance(_spender: PromiseOrValue, _added_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + decreaseAllowance(_spender: PromiseOrValue, _subtracted_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + user_checkpoint(addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + set_rewards_receiver(_receiver: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + kick(addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + deposit_reward_token(_reward_token: PromiseOrValue, _amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + add_reward(_reward_token: PromiseOrValue, _distributor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + set_reward_distributor(_reward_token: PromiseOrValue, _distributor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + set_killed(_is_killed: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + claimed_reward(_addr: PromiseOrValue, _token: PromiseOrValue, overrides?: CallOverrides): Promise; + claimable_reward(_user: PromiseOrValue, _reward_token: PromiseOrValue, overrides?: CallOverrides): Promise; + claimable_reward_write(_addr: PromiseOrValue, _token: PromiseOrValue, overrides?: CallOverrides): Promise; + claimable_tokens(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_checkpoint(overrides?: CallOverrides): Promise; + future_epoch_time(overrides?: CallOverrides): Promise; + inflation_rate(overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(_lp_token: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + nonces(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; + lp_token(overrides?: CallOverrides): Promise; + is_killed(overrides?: CallOverrides): Promise; + reward_count(overrides?: CallOverrides): Promise; + reward_data(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + rewards_receiver(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + reward_integral_for(arg0: PromiseOrValue, arg1: PromiseOrValue, overrides?: CallOverrides): Promise; + working_balances(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + working_supply(overrides?: CallOverrides): Promise; + integrate_inv_supply_of(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_checkpoint_of(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_fraction(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + period(overrides?: CallOverrides): Promise; + reward_tokens(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + period_timestamp(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_inv_supply(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + populateTransaction: { + "deposit(uint256)"(_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "deposit(uint256,address)"(_value: PromiseOrValue, _addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "deposit(uint256,address,bool)"(_value: PromiseOrValue, _addr: PromiseOrValue, _claim_rewards: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "withdraw(uint256)"(_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "withdraw(uint256,bool)"(_value: PromiseOrValue, _claim_rewards: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "claim_rewards()"(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "claim_rewards(address)"(_addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "claim_rewards(address,address)"(_addr: PromiseOrValue, _receiver: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(_from: PromiseOrValue, _to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transfer(_to: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + approve(_spender: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(_owner: PromiseOrValue, _spender: PromiseOrValue, _value: PromiseOrValue, _deadline: PromiseOrValue, _v: PromiseOrValue, _r: PromiseOrValue, _s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + increaseAllowance(_spender: PromiseOrValue, _added_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + decreaseAllowance(_spender: PromiseOrValue, _subtracted_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + user_checkpoint(addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + set_rewards_receiver(_receiver: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + kick(addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + deposit_reward_token(_reward_token: PromiseOrValue, _amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + add_reward(_reward_token: PromiseOrValue, _distributor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + set_reward_distributor(_reward_token: PromiseOrValue, _distributor: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + set_killed(_is_killed: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + claimed_reward(_addr: PromiseOrValue, _token: PromiseOrValue, overrides?: CallOverrides): Promise; + claimable_reward(_user: PromiseOrValue, _reward_token: PromiseOrValue, overrides?: CallOverrides): Promise; + claimable_reward_write(_addr: PromiseOrValue, _token: PromiseOrValue, overrides?: CallOverrides): Promise; + claimable_tokens(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_checkpoint(overrides?: CallOverrides): Promise; + future_epoch_time(overrides?: CallOverrides): Promise; + inflation_rate(overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(_lp_token: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + nonces(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + factory(overrides?: CallOverrides): Promise; + lp_token(overrides?: CallOverrides): Promise; + is_killed(overrides?: CallOverrides): Promise; + reward_count(overrides?: CallOverrides): Promise; + reward_data(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + rewards_receiver(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + reward_integral_for(arg0: PromiseOrValue, arg1: PromiseOrValue, overrides?: CallOverrides): Promise; + working_balances(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + working_supply(overrides?: CallOverrides): Promise; + integrate_inv_supply_of(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_checkpoint_of(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_fraction(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + period(overrides?: CallOverrides): Promise; + reward_tokens(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + period_timestamp(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + integrate_inv_supply(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + }; +} + +interface MulticallInterface extends utils.Interface { + functions: { + "aggregate((address,bytes)[])": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "aggregate"): FunctionFragment; + encodeFunctionData(functionFragment: "aggregate", values: [ + { + target: PromiseOrValue; + callData: PromiseOrValue; + }[] + ]): string; + decodeFunctionResult(functionFragment: "aggregate", data: BytesLike): Result; + events: {}; +} +interface Multicall extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: MulticallInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + aggregate(calls: { + target: PromiseOrValue; + callData: PromiseOrValue; + }[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + aggregate(calls: { + target: PromiseOrValue; + callData: PromiseOrValue; + }[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + aggregate(calls: { + target: PromiseOrValue; + callData: PromiseOrValue; + }[], overrides?: CallOverrides): Promise<[ + BigNumber$1, + string[] + ] & { + blockNumber: BigNumber$1; + returnData: string[]; + }>; + }; + filters: {}; + estimateGas: { + aggregate(calls: { + target: PromiseOrValue; + callData: PromiseOrValue; + }[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + aggregate(calls: { + target: PromiseOrValue; + callData: PromiseOrValue; + }[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +interface Multicall3Interface extends utils.Interface { + functions: { + "aggregate((address,bytes)[])": FunctionFragment; + "aggregate3((address,bool,bytes)[])": FunctionFragment; + "aggregate3Value((address,bool,uint256,bytes)[])": FunctionFragment; + "blockAndAggregate((address,bytes)[])": FunctionFragment; + "getBasefee()": FunctionFragment; + "getBlockHash(uint256)": FunctionFragment; + "getBlockNumber()": FunctionFragment; + "getChainId()": FunctionFragment; + "getCurrentBlockCoinbase()": FunctionFragment; + "getCurrentBlockDifficulty()": FunctionFragment; + "getCurrentBlockGasLimit()": FunctionFragment; + "getCurrentBlockTimestamp()": FunctionFragment; + "getEthBalance(address)": FunctionFragment; + "getLastBlockHash()": FunctionFragment; + "tryAggregate(bool,(address,bytes)[])": FunctionFragment; + "tryBlockAndAggregate(bool,(address,bytes)[])": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "aggregate" | "aggregate3" | "aggregate3Value" | "blockAndAggregate" | "getBasefee" | "getBlockHash" | "getBlockNumber" | "getChainId" | "getCurrentBlockCoinbase" | "getCurrentBlockDifficulty" | "getCurrentBlockGasLimit" | "getCurrentBlockTimestamp" | "getEthBalance" | "getLastBlockHash" | "tryAggregate" | "tryBlockAndAggregate"): FunctionFragment; + encodeFunctionData(functionFragment: "aggregate", values: [Multicall3.CallStruct[]]): string; + encodeFunctionData(functionFragment: "aggregate3", values: [Multicall3.Call3Struct[]]): string; + encodeFunctionData(functionFragment: "aggregate3Value", values: [Multicall3.Call3ValueStruct[]]): string; + encodeFunctionData(functionFragment: "blockAndAggregate", values: [Multicall3.CallStruct[]]): string; + encodeFunctionData(functionFragment: "getBasefee", values?: undefined): string; + encodeFunctionData(functionFragment: "getBlockHash", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getBlockNumber", values?: undefined): string; + encodeFunctionData(functionFragment: "getChainId", values?: undefined): string; + encodeFunctionData(functionFragment: "getCurrentBlockCoinbase", values?: undefined): string; + encodeFunctionData(functionFragment: "getCurrentBlockDifficulty", values?: undefined): string; + encodeFunctionData(functionFragment: "getCurrentBlockGasLimit", values?: undefined): string; + encodeFunctionData(functionFragment: "getCurrentBlockTimestamp", values?: undefined): string; + encodeFunctionData(functionFragment: "getEthBalance", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getLastBlockHash", values?: undefined): string; + encodeFunctionData(functionFragment: "tryAggregate", values: [PromiseOrValue, Multicall3.CallStruct[]]): string; + encodeFunctionData(functionFragment: "tryBlockAndAggregate", values: [PromiseOrValue, Multicall3.CallStruct[]]): string; + decodeFunctionResult(functionFragment: "aggregate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "aggregate3", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "aggregate3Value", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "blockAndAggregate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getBasefee", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getBlockHash", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getBlockNumber", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getChainId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCurrentBlockCoinbase", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCurrentBlockDifficulty", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCurrentBlockGasLimit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCurrentBlockTimestamp", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getEthBalance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getLastBlockHash", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "tryAggregate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "tryBlockAndAggregate", data: BytesLike): Result; + events: {}; +} +declare namespace Multicall3 { + type CallStruct = { + target: PromiseOrValue; + callData: PromiseOrValue; + }; + type CallStructOutput = [string, string] & { + target: string; + callData: string; + }; + type Call3Struct = { + target: PromiseOrValue; + allowFailure: PromiseOrValue; + callData: PromiseOrValue; + }; + type Call3StructOutput = [string, boolean, string] & { + target: string; + allowFailure: boolean; + callData: string; + }; + type ResultStruct = { + success: PromiseOrValue; + returnData: PromiseOrValue; + }; + type ResultStructOutput = [boolean, string] & { + success: boolean; + returnData: string; + }; + type Call3ValueStruct = { + target: PromiseOrValue; + allowFailure: PromiseOrValue; + value: PromiseOrValue; + callData: PromiseOrValue; + }; + type Call3ValueStructOutput = [string, boolean, BigNumber$1, string] & { + target: string; + allowFailure: boolean; + value: BigNumber$1; + callData: string; + }; +} +interface Multicall3 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: Multicall3Interface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + aggregate(calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + aggregate3(calls: Multicall3.Call3Struct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + aggregate3Value(calls: Multicall3.Call3ValueStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + blockAndAggregate(calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + getBasefee(overrides?: CallOverrides): Promise<[BigNumber$1] & { + basefee: BigNumber$1; + }>; + getBlockHash(blockNumber: PromiseOrValue, overrides?: CallOverrides): Promise<[string] & { + blockHash: string; + }>; + getBlockNumber(overrides?: CallOverrides): Promise<[BigNumber$1] & { + blockNumber: BigNumber$1; + }>; + getChainId(overrides?: CallOverrides): Promise<[BigNumber$1] & { + chainid: BigNumber$1; + }>; + getCurrentBlockCoinbase(overrides?: CallOverrides): Promise<[string] & { + coinbase: string; + }>; + getCurrentBlockDifficulty(overrides?: CallOverrides): Promise<[BigNumber$1] & { + difficulty: BigNumber$1; + }>; + getCurrentBlockGasLimit(overrides?: CallOverrides): Promise<[BigNumber$1] & { + gaslimit: BigNumber$1; + }>; + getCurrentBlockTimestamp(overrides?: CallOverrides): Promise<[BigNumber$1] & { + timestamp: BigNumber$1; + }>; + getEthBalance(addr: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1] & { + balance: BigNumber$1; + }>; + getLastBlockHash(overrides?: CallOverrides): Promise<[string] & { + blockHash: string; + }>; + tryAggregate(requireSuccess: PromiseOrValue, calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + tryBlockAndAggregate(requireSuccess: PromiseOrValue, calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; + aggregate(calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + aggregate3(calls: Multicall3.Call3Struct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + aggregate3Value(calls: Multicall3.Call3ValueStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + blockAndAggregate(calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + getBasefee(overrides?: CallOverrides): Promise; + getBlockHash(blockNumber: PromiseOrValue, overrides?: CallOverrides): Promise; + getBlockNumber(overrides?: CallOverrides): Promise; + getChainId(overrides?: CallOverrides): Promise; + getCurrentBlockCoinbase(overrides?: CallOverrides): Promise; + getCurrentBlockDifficulty(overrides?: CallOverrides): Promise; + getCurrentBlockGasLimit(overrides?: CallOverrides): Promise; + getCurrentBlockTimestamp(overrides?: CallOverrides): Promise; + getEthBalance(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + getLastBlockHash(overrides?: CallOverrides): Promise; + tryAggregate(requireSuccess: PromiseOrValue, calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + tryBlockAndAggregate(requireSuccess: PromiseOrValue, calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + aggregate(calls: Multicall3.CallStruct[], overrides?: CallOverrides): Promise<[ + BigNumber$1, + string[] + ] & { + blockNumber: BigNumber$1; + returnData: string[]; + }>; + aggregate3(calls: Multicall3.Call3Struct[], overrides?: CallOverrides): Promise; + aggregate3Value(calls: Multicall3.Call3ValueStruct[], overrides?: CallOverrides): Promise; + blockAndAggregate(calls: Multicall3.CallStruct[], overrides?: CallOverrides): Promise<[ + BigNumber$1, + string, + Multicall3.ResultStructOutput[] + ] & { + blockNumber: BigNumber$1; + blockHash: string; + returnData: Multicall3.ResultStructOutput[]; + }>; + getBasefee(overrides?: CallOverrides): Promise; + getBlockHash(blockNumber: PromiseOrValue, overrides?: CallOverrides): Promise; + getBlockNumber(overrides?: CallOverrides): Promise; + getChainId(overrides?: CallOverrides): Promise; + getCurrentBlockCoinbase(overrides?: CallOverrides): Promise; + getCurrentBlockDifficulty(overrides?: CallOverrides): Promise; + getCurrentBlockGasLimit(overrides?: CallOverrides): Promise; + getCurrentBlockTimestamp(overrides?: CallOverrides): Promise; + getEthBalance(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + getLastBlockHash(overrides?: CallOverrides): Promise; + tryAggregate(requireSuccess: PromiseOrValue, calls: Multicall3.CallStruct[], overrides?: CallOverrides): Promise; + tryBlockAndAggregate(requireSuccess: PromiseOrValue, calls: Multicall3.CallStruct[], overrides?: CallOverrides): Promise<[ + BigNumber$1, + string, + Multicall3.ResultStructOutput[] + ] & { + blockNumber: BigNumber$1; + blockHash: string; + returnData: Multicall3.ResultStructOutput[]; + }>; + }; + filters: {}; + estimateGas: { + aggregate(calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + aggregate3(calls: Multicall3.Call3Struct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + aggregate3Value(calls: Multicall3.Call3ValueStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + blockAndAggregate(calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + getBasefee(overrides?: CallOverrides): Promise; + getBlockHash(blockNumber: PromiseOrValue, overrides?: CallOverrides): Promise; + getBlockNumber(overrides?: CallOverrides): Promise; + getChainId(overrides?: CallOverrides): Promise; + getCurrentBlockCoinbase(overrides?: CallOverrides): Promise; + getCurrentBlockDifficulty(overrides?: CallOverrides): Promise; + getCurrentBlockGasLimit(overrides?: CallOverrides): Promise; + getCurrentBlockTimestamp(overrides?: CallOverrides): Promise; + getEthBalance(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + getLastBlockHash(overrides?: CallOverrides): Promise; + tryAggregate(requireSuccess: PromiseOrValue, calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + tryBlockAndAggregate(requireSuccess: PromiseOrValue, calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + aggregate(calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + aggregate3(calls: Multicall3.Call3Struct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + aggregate3Value(calls: Multicall3.Call3ValueStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + blockAndAggregate(calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + getBasefee(overrides?: CallOverrides): Promise; + getBlockHash(blockNumber: PromiseOrValue, overrides?: CallOverrides): Promise; + getBlockNumber(overrides?: CallOverrides): Promise; + getChainId(overrides?: CallOverrides): Promise; + getCurrentBlockCoinbase(overrides?: CallOverrides): Promise; + getCurrentBlockDifficulty(overrides?: CallOverrides): Promise; + getCurrentBlockGasLimit(overrides?: CallOverrides): Promise; + getCurrentBlockTimestamp(overrides?: CallOverrides): Promise; + getEthBalance(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + getLastBlockHash(overrides?: CallOverrides): Promise; + tryAggregate(requireSuccess: PromiseOrValue, calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + tryBlockAndAggregate(requireSuccess: PromiseOrValue, calls: Multicall3.CallStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +declare namespace IPoolSwapStructs$3 { + type SwapRequestStruct = { + kind: PromiseOrValue; + tokenIn: PromiseOrValue; + tokenOut: PromiseOrValue; + amount: PromiseOrValue; + poolId: PromiseOrValue; + lastChangeBlock: PromiseOrValue; + from: PromiseOrValue; + to: PromiseOrValue; + userData: PromiseOrValue; + }; + type SwapRequestStructOutput = [ + number, + string, + string, + BigNumber$1, + string, + BigNumber$1, + string, + string, + string + ] & { + kind: number; + tokenIn: string; + tokenOut: string; + amount: BigNumber$1; + poolId: string; + lastChangeBlock: BigNumber$1; + from: string; + to: string; + userData: string; + }; +} +interface StablePoolInterface extends utils.Interface { + functions: { + "DOMAIN_SEPARATOR()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAmplificationParameter()": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getOwner()": FunctionFragment; + "getPausedState()": FunctionFragment; + "getPoolId()": FunctionFragment; + "getRate()": FunctionFragment; + "getSwapFeePercentage()": FunctionFragment; + "getVault()": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "name()": FunctionFragment; + "nonces(address)": FunctionFragment; + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)": FunctionFragment; + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "setAssetManagerPoolConfig(address,bytes)": FunctionFragment; + "setPaused(bool)": FunctionFragment; + "setSwapFeePercentage(uint256)": FunctionFragment; + "startAmplificationParameterUpdate(uint256,uint256)": FunctionFragment; + "stopAmplificationParameterUpdate()": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "DOMAIN_SEPARATOR" | "allowance" | "approve" | "balanceOf" | "decimals" | "decreaseAllowance" | "getActionId" | "getAmplificationParameter" | "getAuthorizer" | "getOwner" | "getPausedState" | "getPoolId" | "getRate" | "getSwapFeePercentage" | "getVault" | "increaseAllowance" | "name" | "nonces" | "onExitPool" | "onJoinPool" | "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)" | "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)" | "permit" | "queryExit" | "queryJoin" | "setAssetManagerPoolConfig" | "setPaused" | "setSwapFeePercentage" | "startAmplificationParameterUpdate" | "stopAmplificationParameterUpdate" | "symbol" | "totalSupply" | "transfer" | "transferFrom"): FunctionFragment; + encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string; + encodeFunctionData(functionFragment: "allowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "decreaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAmplificationParameter", values?: undefined): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getOwner", values?: undefined): string; + encodeFunctionData(functionFragment: "getPausedState", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolId", values?: undefined): string; + encodeFunctionData(functionFragment: "getRate", values?: undefined): string; + encodeFunctionData(functionFragment: "getSwapFeePercentage", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "increaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "nonces", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "onExitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onJoinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)", values: [ + IPoolSwapStructs$3.SwapRequestStruct, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)", values: [ + IPoolSwapStructs$3.SwapRequestStruct, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "permit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryExit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryJoin", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "setAssetManagerPoolConfig", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setPaused", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setSwapFeePercentage", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "startAmplificationParameterUpdate", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "stopAmplificationParameterUpdate", values?: undefined): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "transfer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "transferFrom", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decreaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAmplificationParameter", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getOwner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPausedState", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onExitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onJoinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryExit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryJoin", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setAssetManagerPoolConfig", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setPaused", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "startAmplificationParameterUpdate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "stopAmplificationParameterUpdate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; + events: { + "AmpUpdateStarted(uint256,uint256,uint256,uint256)": EventFragment; + "AmpUpdateStopped(uint256)": EventFragment; + "Approval(address,address,uint256)": EventFragment; + "PausedStateChanged(bool)": EventFragment; + "SwapFeePercentageChanged(uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "AmpUpdateStarted"): EventFragment; + getEvent(nameOrSignatureOrTopic: "AmpUpdateStopped"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PausedStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SwapFeePercentageChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} +interface AmpUpdateStartedEventObject { + startValue: BigNumber$1; + endValue: BigNumber$1; + startTime: BigNumber$1; + endTime: BigNumber$1; +} +type AmpUpdateStartedEvent = TypedEvent<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 +], AmpUpdateStartedEventObject>; +type AmpUpdateStartedEventFilter = TypedEventFilter; +interface AmpUpdateStoppedEventObject { + currentValue: BigNumber$1; +} +type AmpUpdateStoppedEvent = TypedEvent<[ + BigNumber$1 +], AmpUpdateStoppedEventObject>; +type AmpUpdateStoppedEventFilter = TypedEventFilter; +interface ApprovalEventObject$3 { + owner: string; + spender: string; + value: BigNumber$1; +} +type ApprovalEvent$3 = TypedEvent<[ + string, + string, + BigNumber$1 +], ApprovalEventObject$3>; +type ApprovalEventFilter$3 = TypedEventFilter; +interface PausedStateChangedEventObject$4 { + paused: boolean; +} +type PausedStateChangedEvent$4 = TypedEvent<[ + boolean +], PausedStateChangedEventObject$4>; +type PausedStateChangedEventFilter$4 = TypedEventFilter; +interface SwapFeePercentageChangedEventObject$3 { + swapFeePercentage: BigNumber$1; +} +type SwapFeePercentageChangedEvent$3 = TypedEvent<[ + BigNumber$1 +], SwapFeePercentageChangedEventObject$3>; +type SwapFeePercentageChangedEventFilter$3 = TypedEventFilter; +interface TransferEventObject$3 { + from: string; + to: string; + value: BigNumber$1; +} +type TransferEvent$3 = TypedEvent<[ + string, + string, + BigNumber$1 +], TransferEventObject$3>; +type TransferEventFilter$3 = TypedEventFilter; +interface StablePool extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: StablePoolInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + decimals(overrides?: CallOverrides): Promise<[number]>; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAmplificationParameter(overrides?: CallOverrides): Promise<[ + BigNumber$1, + boolean, + BigNumber$1 + ] & { + value: BigNumber$1; + isUpdating: boolean; + precision: BigNumber$1; + }>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getOwner(overrides?: CallOverrides): Promise<[string]>; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise<[string]>; + getRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getSwapFeePercentage(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise<[string]>; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(swapRequest: IPoolSwapStructs$3.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$3.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + startAmplificationParameterUpdate(rawEndValue: PromiseOrValue, endTime: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + stopAmplificationParameterUpdate(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise<[string]>; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAmplificationParameter(overrides?: CallOverrides): Promise<[ + BigNumber$1, + boolean, + BigNumber$1 + ] & { + value: BigNumber$1; + isUpdating: boolean; + precision: BigNumber$1; + }>; + getAuthorizer(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(swapRequest: IPoolSwapStructs$3.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$3.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + startAmplificationParameterUpdate(rawEndValue: PromiseOrValue, endTime: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + stopAmplificationParameterUpdate(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAmplificationParameter(overrides?: CallOverrides): Promise<[ + BigNumber$1, + boolean, + BigNumber$1 + ] & { + value: BigNumber$1; + isUpdating: boolean; + precision: BigNumber$1; + }>; + getAuthorizer(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1[], BigNumber$1[]]>; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1[], BigNumber$1[]]>; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(swapRequest: IPoolSwapStructs$3.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$3.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptIn: BigNumber$1; + amountsOut: BigNumber$1[]; + }>; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptOut: BigNumber$1; + amountsIn: BigNumber$1[]; + }>; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: CallOverrides): Promise; + setPaused(paused: PromiseOrValue, overrides?: CallOverrides): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: CallOverrides): Promise; + startAmplificationParameterUpdate(rawEndValue: PromiseOrValue, endTime: PromiseOrValue, overrides?: CallOverrides): Promise; + stopAmplificationParameterUpdate(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + filters: { + "AmpUpdateStarted(uint256,uint256,uint256,uint256)"(startValue?: null, endValue?: null, startTime?: null, endTime?: null): AmpUpdateStartedEventFilter; + AmpUpdateStarted(startValue?: null, endValue?: null, startTime?: null, endTime?: null): AmpUpdateStartedEventFilter; + "AmpUpdateStopped(uint256)"(currentValue?: null): AmpUpdateStoppedEventFilter; + AmpUpdateStopped(currentValue?: null): AmpUpdateStoppedEventFilter; + "Approval(address,address,uint256)"(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$3; + Approval(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$3; + "PausedStateChanged(bool)"(paused?: null): PausedStateChangedEventFilter$4; + PausedStateChanged(paused?: null): PausedStateChangedEventFilter$4; + "SwapFeePercentageChanged(uint256)"(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$3; + SwapFeePercentageChanged(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$3; + "Transfer(address,address,uint256)"(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$3; + Transfer(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$3; + }; + estimateGas: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAmplificationParameter(overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(swapRequest: IPoolSwapStructs$3.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$3.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + startAmplificationParameterUpdate(rawEndValue: PromiseOrValue, endTime: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + stopAmplificationParameterUpdate(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAmplificationParameter(overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(swapRequest: IPoolSwapStructs$3.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$3.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + startAmplificationParameterUpdate(rawEndValue: PromiseOrValue, endTime: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + stopAmplificationParameterUpdate(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +interface StaticATokenRateProviderInterface extends utils.Interface { + functions: { + "getRate()": FunctionFragment; + "waToken()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "getRate" | "waToken"): FunctionFragment; + encodeFunctionData(functionFragment: "getRate", values?: undefined): string; + encodeFunctionData(functionFragment: "waToken", values?: undefined): string; + decodeFunctionResult(functionFragment: "getRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "waToken", data: BytesLike): Result; + events: {}; +} +interface StaticATokenRateProvider extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: StaticATokenRateProviderInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + getRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + waToken(overrides?: CallOverrides): Promise<[string]>; + }; + getRate(overrides?: CallOverrides): Promise; + waToken(overrides?: CallOverrides): Promise; + callStatic: { + getRate(overrides?: CallOverrides): Promise; + waToken(overrides?: CallOverrides): Promise; + }; + filters: {}; + estimateGas: { + getRate(overrides?: CallOverrides): Promise; + waToken(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + getRate(overrides?: CallOverrides): Promise; + waToken(overrides?: CallOverrides): Promise; + }; +} + +declare namespace IVault { + type BatchSwapStepStruct = { + poolId: PromiseOrValue; + assetInIndex: PromiseOrValue; + assetOutIndex: PromiseOrValue; + amount: PromiseOrValue; + userData: PromiseOrValue; + }; + type BatchSwapStepStructOutput = [ + string, + BigNumber$1, + BigNumber$1, + BigNumber$1, + string + ] & { + poolId: string; + assetInIndex: BigNumber$1; + assetOutIndex: BigNumber$1; + amount: BigNumber$1; + userData: string; + }; + type FundManagementStruct = { + sender: PromiseOrValue; + fromInternalBalance: PromiseOrValue; + recipient: PromiseOrValue; + toInternalBalance: PromiseOrValue; + }; + type FundManagementStructOutput = [ + string, + boolean, + string, + boolean + ] & { + sender: string; + fromInternalBalance: boolean; + recipient: string; + toInternalBalance: boolean; + }; + type ExitPoolRequestStruct = { + assets: PromiseOrValue[]; + minAmountsOut: PromiseOrValue[]; + userData: PromiseOrValue; + toInternalBalance: PromiseOrValue; + }; + type ExitPoolRequestStructOutput = [ + string[], + BigNumber$1[], + string, + boolean + ] & { + assets: string[]; + minAmountsOut: BigNumber$1[]; + userData: string; + toInternalBalance: boolean; + }; + type JoinPoolRequestStruct = { + assets: PromiseOrValue[]; + maxAmountsIn: PromiseOrValue[]; + userData: PromiseOrValue; + fromInternalBalance: PromiseOrValue; + }; + type JoinPoolRequestStructOutput = [ + string[], + BigNumber$1[], + string, + boolean + ] & { + assets: string[]; + maxAmountsIn: BigNumber$1[]; + userData: string; + fromInternalBalance: boolean; + }; + type PoolBalanceOpStruct = { + kind: PromiseOrValue; + poolId: PromiseOrValue; + token: PromiseOrValue; + amount: PromiseOrValue; + }; + type PoolBalanceOpStructOutput = [ + number, + string, + string, + BigNumber$1 + ] & { + kind: number; + poolId: string; + token: string; + amount: BigNumber$1; + }; + type UserBalanceOpStruct = { + kind: PromiseOrValue; + asset: PromiseOrValue; + amount: PromiseOrValue; + sender: PromiseOrValue; + recipient: PromiseOrValue; + }; + type UserBalanceOpStructOutput = [ + number, + string, + BigNumber$1, + string, + string + ] & { + kind: number; + asset: string; + amount: BigNumber$1; + sender: string; + recipient: string; + }; + type SingleSwapStruct = { + poolId: PromiseOrValue; + kind: PromiseOrValue; + assetIn: PromiseOrValue; + assetOut: PromiseOrValue; + amount: PromiseOrValue; + userData: PromiseOrValue; + }; + type SingleSwapStructOutput = [ + string, + number, + string, + string, + BigNumber$1, + string + ] & { + poolId: string; + kind: number; + assetIn: string; + assetOut: string; + amount: BigNumber$1; + userData: string; + }; +} +interface VaultInterface extends utils.Interface { + functions: { + "WETH()": FunctionFragment; + "batchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool),int256[],uint256)": FunctionFragment; + "deregisterTokens(bytes32,address[])": FunctionFragment; + "exitPool(bytes32,address,address,(address[],uint256[],bytes,bool))": FunctionFragment; + "flashLoan(address,address[],uint256[],bytes)": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getDomainSeparator()": FunctionFragment; + "getInternalBalance(address,address[])": FunctionFragment; + "getNextNonce(address)": FunctionFragment; + "getPausedState()": FunctionFragment; + "getPool(bytes32)": FunctionFragment; + "getPoolTokenInfo(bytes32,address)": FunctionFragment; + "getPoolTokens(bytes32)": FunctionFragment; + "getProtocolFeesCollector()": FunctionFragment; + "hasApprovedRelayer(address,address)": FunctionFragment; + "joinPool(bytes32,address,address,(address[],uint256[],bytes,bool))": FunctionFragment; + "managePoolBalance((uint8,bytes32,address,uint256)[])": FunctionFragment; + "manageUserBalance((uint8,address,uint256,address,address)[])": FunctionFragment; + "queryBatchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool))": FunctionFragment; + "registerPool(uint8)": FunctionFragment; + "registerTokens(bytes32,address[],address[])": FunctionFragment; + "setAuthorizer(address)": FunctionFragment; + "setPaused(bool)": FunctionFragment; + "setRelayerApproval(address,address,bool)": FunctionFragment; + "swap((bytes32,uint8,address,address,uint256,bytes),(address,bool,address,bool),uint256,uint256)": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "WETH" | "batchSwap" | "deregisterTokens" | "exitPool" | "flashLoan" | "getActionId" | "getAuthorizer" | "getDomainSeparator" | "getInternalBalance" | "getNextNonce" | "getPausedState" | "getPool" | "getPoolTokenInfo" | "getPoolTokens" | "getProtocolFeesCollector" | "hasApprovedRelayer" | "joinPool" | "managePoolBalance" | "manageUserBalance" | "queryBatchSwap" | "registerPool" | "registerTokens" | "setAuthorizer" | "setPaused" | "setRelayerApproval" | "swap"): FunctionFragment; + encodeFunctionData(functionFragment: "WETH", values?: undefined): string; + encodeFunctionData(functionFragment: "batchSwap", values: [ + PromiseOrValue, + IVault.BatchSwapStepStruct[], + PromiseOrValue[], + IVault.FundManagementStruct, + PromiseOrValue[], + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "deregisterTokens", values: [PromiseOrValue, PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "exitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + IVault.ExitPoolRequestStruct + ]): string; + encodeFunctionData(functionFragment: "flashLoan", values: [ + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getDomainSeparator", values?: undefined): string; + encodeFunctionData(functionFragment: "getInternalBalance", values: [PromiseOrValue, PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: "getNextNonce", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getPausedState", values?: undefined): string; + encodeFunctionData(functionFragment: "getPool", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getPoolTokenInfo", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getPoolTokens", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getProtocolFeesCollector", values?: undefined): string; + encodeFunctionData(functionFragment: "hasApprovedRelayer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "joinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + IVault.JoinPoolRequestStruct + ]): string; + encodeFunctionData(functionFragment: "managePoolBalance", values: [IVault.PoolBalanceOpStruct[]]): string; + encodeFunctionData(functionFragment: "manageUserBalance", values: [IVault.UserBalanceOpStruct[]]): string; + encodeFunctionData(functionFragment: "queryBatchSwap", values: [ + PromiseOrValue, + IVault.BatchSwapStepStruct[], + PromiseOrValue[], + IVault.FundManagementStruct + ]): string; + encodeFunctionData(functionFragment: "registerPool", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "registerTokens", values: [ + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue[] + ]): string; + encodeFunctionData(functionFragment: "setAuthorizer", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setPaused", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setRelayerApproval", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "swap", values: [ + IVault.SingleSwapStruct, + IVault.FundManagementStruct, + PromiseOrValue, + PromiseOrValue + ]): string; + decodeFunctionResult(functionFragment: "WETH", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "batchSwap", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "deregisterTokens", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "exitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "flashLoan", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDomainSeparator", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getInternalBalance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNextNonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPausedState", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolTokenInfo", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolTokens", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeesCollector", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "hasApprovedRelayer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "joinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "managePoolBalance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "manageUserBalance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryBatchSwap", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "registerPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "registerTokens", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setPaused", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setRelayerApproval", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "swap", data: BytesLike): Result; + events: { + "AuthorizerChanged(address)": EventFragment; + "ExternalBalanceTransfer(address,address,address,uint256)": EventFragment; + "FlashLoan(address,address,uint256,uint256)": EventFragment; + "InternalBalanceChanged(address,address,int256)": EventFragment; + "PausedStateChanged(bool)": EventFragment; + "PoolBalanceChanged(bytes32,address,address[],int256[],uint256[])": EventFragment; + "PoolBalanceManaged(bytes32,address,address,int256,int256)": EventFragment; + "PoolRegistered(bytes32,address,uint8)": EventFragment; + "RelayerApprovalChanged(address,address,bool)": EventFragment; + "Swap(bytes32,address,address,uint256,uint256)": EventFragment; + "TokensDeregistered(bytes32,address[])": EventFragment; + "TokensRegistered(bytes32,address[],address[])": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "AuthorizerChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ExternalBalanceTransfer"): EventFragment; + getEvent(nameOrSignatureOrTopic: "FlashLoan"): EventFragment; + getEvent(nameOrSignatureOrTopic: "InternalBalanceChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PausedStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PoolBalanceChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PoolBalanceManaged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PoolRegistered"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RelayerApprovalChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Swap"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TokensDeregistered"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TokensRegistered"): EventFragment; +} +interface AuthorizerChangedEventObject { + newAuthorizer: string; +} +type AuthorizerChangedEvent = TypedEvent<[ + string +], AuthorizerChangedEventObject>; +type AuthorizerChangedEventFilter = TypedEventFilter; +interface ExternalBalanceTransferEventObject { + token: string; + sender: string; + recipient: string; + amount: BigNumber$1; +} +type ExternalBalanceTransferEvent = TypedEvent<[ + string, + string, + string, + BigNumber$1 +], ExternalBalanceTransferEventObject>; +type ExternalBalanceTransferEventFilter = TypedEventFilter; +interface FlashLoanEventObject { + recipient: string; + token: string; + amount: BigNumber$1; + feeAmount: BigNumber$1; +} +type FlashLoanEvent = TypedEvent<[ + string, + string, + BigNumber$1, + BigNumber$1 +], FlashLoanEventObject>; +type FlashLoanEventFilter = TypedEventFilter; +interface InternalBalanceChangedEventObject { + user: string; + token: string; + delta: BigNumber$1; +} +type InternalBalanceChangedEvent = TypedEvent<[ + string, + string, + BigNumber$1 +], InternalBalanceChangedEventObject>; +type InternalBalanceChangedEventFilter = TypedEventFilter; +interface PausedStateChangedEventObject$3 { + paused: boolean; +} +type PausedStateChangedEvent$3 = TypedEvent<[ + boolean +], PausedStateChangedEventObject$3>; +type PausedStateChangedEventFilter$3 = TypedEventFilter; +interface PoolBalanceChangedEventObject { + poolId: string; + liquidityProvider: string; + tokens: string[]; + deltas: BigNumber$1[]; + protocolFeeAmounts: BigNumber$1[]; +} +type PoolBalanceChangedEvent = TypedEvent<[ + string, + string, + string[], + BigNumber$1[], + BigNumber$1[] +], PoolBalanceChangedEventObject>; +type PoolBalanceChangedEventFilter = TypedEventFilter; +interface PoolBalanceManagedEventObject { + poolId: string; + assetManager: string; + token: string; + cashDelta: BigNumber$1; + managedDelta: BigNumber$1; +} +type PoolBalanceManagedEvent = TypedEvent<[ + string, + string, + string, + BigNumber$1, + BigNumber$1 +], PoolBalanceManagedEventObject>; +type PoolBalanceManagedEventFilter = TypedEventFilter; +interface PoolRegisteredEventObject { + poolId: string; + poolAddress: string; + specialization: number; +} +type PoolRegisteredEvent = TypedEvent<[ + string, + string, + number +], PoolRegisteredEventObject>; +type PoolRegisteredEventFilter = TypedEventFilter; +interface RelayerApprovalChangedEventObject { + relayer: string; + sender: string; + approved: boolean; +} +type RelayerApprovalChangedEvent = TypedEvent<[ + string, + string, + boolean +], RelayerApprovalChangedEventObject>; +type RelayerApprovalChangedEventFilter = TypedEventFilter; +interface SwapEventObject { + poolId: string; + tokenIn: string; + tokenOut: string; + amountIn: BigNumber$1; + amountOut: BigNumber$1; +} +type SwapEvent = TypedEvent<[ + string, + string, + string, + BigNumber$1, + BigNumber$1 +], SwapEventObject>; +type SwapEventFilter = TypedEventFilter; +interface TokensDeregisteredEventObject { + poolId: string; + tokens: string[]; +} +type TokensDeregisteredEvent = TypedEvent<[ + string, + string[] +], TokensDeregisteredEventObject>; +type TokensDeregisteredEventFilter = TypedEventFilter; +interface TokensRegisteredEventObject { + poolId: string; + tokens: string[]; + assetManagers: string[]; +} +type TokensRegisteredEvent = TypedEvent<[ + string, + string[], + string[] +], TokensRegisteredEventObject>; +type TokensRegisteredEventFilter = TypedEventFilter; +interface Vault extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: VaultInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + WETH(overrides?: CallOverrides): Promise<[string]>; + batchSwap(kind: PromiseOrValue, swaps: IVault.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + deregisterTokens(poolId: PromiseOrValue, tokens: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + exitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault.ExitPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + flashLoan(recipient: PromiseOrValue, tokens: PromiseOrValue[], amounts: PromiseOrValue[], userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getDomainSeparator(overrides?: CallOverrides): Promise<[string]>; + getInternalBalance(user: PromiseOrValue, tokens: PromiseOrValue[], overrides?: CallOverrides): Promise<[BigNumber$1[]] & { + balances: BigNumber$1[]; + }>; + getNextNonce(user: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPool(poolId: PromiseOrValue, overrides?: CallOverrides): Promise<[string, number]>; + getPoolTokenInfo(poolId: PromiseOrValue, token: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + string + ] & { + cash: BigNumber$1; + managed: BigNumber$1; + lastChangeBlock: BigNumber$1; + assetManager: string; + }>; + getPoolTokens(poolId: PromiseOrValue, overrides?: CallOverrides): Promise<[ + string[], + BigNumber$1[], + BigNumber$1 + ] & { + tokens: string[]; + balances: BigNumber$1[]; + lastChangeBlock: BigNumber$1; + }>; + getProtocolFeesCollector(overrides?: CallOverrides): Promise<[string]>; + hasApprovedRelayer(user: PromiseOrValue, relayer: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + joinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault.JoinPoolRequestStruct, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + managePoolBalance(ops: IVault.PoolBalanceOpStruct[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + manageUserBalance(ops: IVault.UserBalanceOpStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + queryBatchSwap(kind: PromiseOrValue, swaps: IVault.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault.FundManagementStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + registerPool(specialization: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + registerTokens(poolId: PromiseOrValue, tokens: PromiseOrValue[], assetManagers: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAuthorizer(newAuthorizer: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setRelayerApproval(sender: PromiseOrValue, relayer: PromiseOrValue, approved: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + swap(singleSwap: IVault.SingleSwapStruct, funds: IVault.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; + WETH(overrides?: CallOverrides): Promise; + batchSwap(kind: PromiseOrValue, swaps: IVault.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + deregisterTokens(poolId: PromiseOrValue, tokens: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + exitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault.ExitPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + flashLoan(recipient: PromiseOrValue, tokens: PromiseOrValue[], amounts: PromiseOrValue[], userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getInternalBalance(user: PromiseOrValue, tokens: PromiseOrValue[], overrides?: CallOverrides): Promise; + getNextNonce(user: PromiseOrValue, overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPool(poolId: PromiseOrValue, overrides?: CallOverrides): Promise<[string, number]>; + getPoolTokenInfo(poolId: PromiseOrValue, token: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + string + ] & { + cash: BigNumber$1; + managed: BigNumber$1; + lastChangeBlock: BigNumber$1; + assetManager: string; + }>; + getPoolTokens(poolId: PromiseOrValue, overrides?: CallOverrides): Promise<[ + string[], + BigNumber$1[], + BigNumber$1 + ] & { + tokens: string[]; + balances: BigNumber$1[]; + lastChangeBlock: BigNumber$1; + }>; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + hasApprovedRelayer(user: PromiseOrValue, relayer: PromiseOrValue, overrides?: CallOverrides): Promise; + joinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault.JoinPoolRequestStruct, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + managePoolBalance(ops: IVault.PoolBalanceOpStruct[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + manageUserBalance(ops: IVault.UserBalanceOpStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + queryBatchSwap(kind: PromiseOrValue, swaps: IVault.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault.FundManagementStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + registerPool(specialization: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + registerTokens(poolId: PromiseOrValue, tokens: PromiseOrValue[], assetManagers: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAuthorizer(newAuthorizer: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setRelayerApproval(sender: PromiseOrValue, relayer: PromiseOrValue, approved: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + swap(singleSwap: IVault.SingleSwapStruct, funds: IVault.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + WETH(overrides?: CallOverrides): Promise; + batchSwap(kind: PromiseOrValue, swaps: IVault.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, overrides?: CallOverrides): Promise; + deregisterTokens(poolId: PromiseOrValue, tokens: PromiseOrValue[], overrides?: CallOverrides): Promise; + exitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault.ExitPoolRequestStruct, overrides?: CallOverrides): Promise; + flashLoan(recipient: PromiseOrValue, tokens: PromiseOrValue[], amounts: PromiseOrValue[], userData: PromiseOrValue, overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getInternalBalance(user: PromiseOrValue, tokens: PromiseOrValue[], overrides?: CallOverrides): Promise; + getNextNonce(user: PromiseOrValue, overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPool(poolId: PromiseOrValue, overrides?: CallOverrides): Promise<[string, number]>; + getPoolTokenInfo(poolId: PromiseOrValue, token: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + string + ] & { + cash: BigNumber$1; + managed: BigNumber$1; + lastChangeBlock: BigNumber$1; + assetManager: string; + }>; + getPoolTokens(poolId: PromiseOrValue, overrides?: CallOverrides): Promise<[ + string[], + BigNumber$1[], + BigNumber$1 + ] & { + tokens: string[]; + balances: BigNumber$1[]; + lastChangeBlock: BigNumber$1; + }>; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + hasApprovedRelayer(user: PromiseOrValue, relayer: PromiseOrValue, overrides?: CallOverrides): Promise; + joinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault.JoinPoolRequestStruct, overrides?: CallOverrides): Promise; + managePoolBalance(ops: IVault.PoolBalanceOpStruct[], overrides?: CallOverrides): Promise; + manageUserBalance(ops: IVault.UserBalanceOpStruct[], overrides?: CallOverrides): Promise; + queryBatchSwap(kind: PromiseOrValue, swaps: IVault.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault.FundManagementStruct, overrides?: CallOverrides): Promise; + registerPool(specialization: PromiseOrValue, overrides?: CallOverrides): Promise; + registerTokens(poolId: PromiseOrValue, tokens: PromiseOrValue[], assetManagers: PromiseOrValue[], overrides?: CallOverrides): Promise; + setAuthorizer(newAuthorizer: PromiseOrValue, overrides?: CallOverrides): Promise; + setPaused(paused: PromiseOrValue, overrides?: CallOverrides): Promise; + setRelayerApproval(sender: PromiseOrValue, relayer: PromiseOrValue, approved: PromiseOrValue, overrides?: CallOverrides): Promise; + swap(singleSwap: IVault.SingleSwapStruct, funds: IVault.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + filters: { + "AuthorizerChanged(address)"(newAuthorizer?: PromiseOrValue | null): AuthorizerChangedEventFilter; + AuthorizerChanged(newAuthorizer?: PromiseOrValue | null): AuthorizerChangedEventFilter; + "ExternalBalanceTransfer(address,address,address,uint256)"(token?: PromiseOrValue | null, sender?: PromiseOrValue | null, recipient?: null, amount?: null): ExternalBalanceTransferEventFilter; + ExternalBalanceTransfer(token?: PromiseOrValue | null, sender?: PromiseOrValue | null, recipient?: null, amount?: null): ExternalBalanceTransferEventFilter; + "FlashLoan(address,address,uint256,uint256)"(recipient?: PromiseOrValue | null, token?: PromiseOrValue | null, amount?: null, feeAmount?: null): FlashLoanEventFilter; + FlashLoan(recipient?: PromiseOrValue | null, token?: PromiseOrValue | null, amount?: null, feeAmount?: null): FlashLoanEventFilter; + "InternalBalanceChanged(address,address,int256)"(user?: PromiseOrValue | null, token?: PromiseOrValue | null, delta?: null): InternalBalanceChangedEventFilter; + InternalBalanceChanged(user?: PromiseOrValue | null, token?: PromiseOrValue | null, delta?: null): InternalBalanceChangedEventFilter; + "PausedStateChanged(bool)"(paused?: null): PausedStateChangedEventFilter$3; + PausedStateChanged(paused?: null): PausedStateChangedEventFilter$3; + "PoolBalanceChanged(bytes32,address,address[],int256[],uint256[])"(poolId?: PromiseOrValue | null, liquidityProvider?: PromiseOrValue | null, tokens?: null, deltas?: null, protocolFeeAmounts?: null): PoolBalanceChangedEventFilter; + PoolBalanceChanged(poolId?: PromiseOrValue | null, liquidityProvider?: PromiseOrValue | null, tokens?: null, deltas?: null, protocolFeeAmounts?: null): PoolBalanceChangedEventFilter; + "PoolBalanceManaged(bytes32,address,address,int256,int256)"(poolId?: PromiseOrValue | null, assetManager?: PromiseOrValue | null, token?: PromiseOrValue | null, cashDelta?: null, managedDelta?: null): PoolBalanceManagedEventFilter; + PoolBalanceManaged(poolId?: PromiseOrValue | null, assetManager?: PromiseOrValue | null, token?: PromiseOrValue | null, cashDelta?: null, managedDelta?: null): PoolBalanceManagedEventFilter; + "PoolRegistered(bytes32,address,uint8)"(poolId?: PromiseOrValue | null, poolAddress?: PromiseOrValue | null, specialization?: null): PoolRegisteredEventFilter; + PoolRegistered(poolId?: PromiseOrValue | null, poolAddress?: PromiseOrValue | null, specialization?: null): PoolRegisteredEventFilter; + "RelayerApprovalChanged(address,address,bool)"(relayer?: PromiseOrValue | null, sender?: PromiseOrValue | null, approved?: null): RelayerApprovalChangedEventFilter; + RelayerApprovalChanged(relayer?: PromiseOrValue | null, sender?: PromiseOrValue | null, approved?: null): RelayerApprovalChangedEventFilter; + "Swap(bytes32,address,address,uint256,uint256)"(poolId?: PromiseOrValue | null, tokenIn?: PromiseOrValue | null, tokenOut?: PromiseOrValue | null, amountIn?: null, amountOut?: null): SwapEventFilter; + Swap(poolId?: PromiseOrValue | null, tokenIn?: PromiseOrValue | null, tokenOut?: PromiseOrValue | null, amountIn?: null, amountOut?: null): SwapEventFilter; + "TokensDeregistered(bytes32,address[])"(poolId?: PromiseOrValue | null, tokens?: null): TokensDeregisteredEventFilter; + TokensDeregistered(poolId?: PromiseOrValue | null, tokens?: null): TokensDeregisteredEventFilter; + "TokensRegistered(bytes32,address[],address[])"(poolId?: PromiseOrValue | null, tokens?: null, assetManagers?: null): TokensRegisteredEventFilter; + TokensRegistered(poolId?: PromiseOrValue | null, tokens?: null, assetManagers?: null): TokensRegisteredEventFilter; + }; + estimateGas: { + WETH(overrides?: CallOverrides): Promise; + batchSwap(kind: PromiseOrValue, swaps: IVault.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + deregisterTokens(poolId: PromiseOrValue, tokens: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + exitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault.ExitPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + flashLoan(recipient: PromiseOrValue, tokens: PromiseOrValue[], amounts: PromiseOrValue[], userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getInternalBalance(user: PromiseOrValue, tokens: PromiseOrValue[], overrides?: CallOverrides): Promise; + getNextNonce(user: PromiseOrValue, overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPool(poolId: PromiseOrValue, overrides?: CallOverrides): Promise; + getPoolTokenInfo(poolId: PromiseOrValue, token: PromiseOrValue, overrides?: CallOverrides): Promise; + getPoolTokens(poolId: PromiseOrValue, overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + hasApprovedRelayer(user: PromiseOrValue, relayer: PromiseOrValue, overrides?: CallOverrides): Promise; + joinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault.JoinPoolRequestStruct, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + managePoolBalance(ops: IVault.PoolBalanceOpStruct[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + manageUserBalance(ops: IVault.UserBalanceOpStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + queryBatchSwap(kind: PromiseOrValue, swaps: IVault.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault.FundManagementStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + registerPool(specialization: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + registerTokens(poolId: PromiseOrValue, tokens: PromiseOrValue[], assetManagers: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAuthorizer(newAuthorizer: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setRelayerApproval(sender: PromiseOrValue, relayer: PromiseOrValue, approved: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + swap(singleSwap: IVault.SingleSwapStruct, funds: IVault.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + WETH(overrides?: CallOverrides): Promise; + batchSwap(kind: PromiseOrValue, swaps: IVault.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault.FundManagementStruct, limits: PromiseOrValue[], deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + deregisterTokens(poolId: PromiseOrValue, tokens: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + exitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault.ExitPoolRequestStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + flashLoan(recipient: PromiseOrValue, tokens: PromiseOrValue[], amounts: PromiseOrValue[], userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getInternalBalance(user: PromiseOrValue, tokens: PromiseOrValue[], overrides?: CallOverrides): Promise; + getNextNonce(user: PromiseOrValue, overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPool(poolId: PromiseOrValue, overrides?: CallOverrides): Promise; + getPoolTokenInfo(poolId: PromiseOrValue, token: PromiseOrValue, overrides?: CallOverrides): Promise; + getPoolTokens(poolId: PromiseOrValue, overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + hasApprovedRelayer(user: PromiseOrValue, relayer: PromiseOrValue, overrides?: CallOverrides): Promise; + joinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, request: IVault.JoinPoolRequestStruct, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + managePoolBalance(ops: IVault.PoolBalanceOpStruct[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + manageUserBalance(ops: IVault.UserBalanceOpStruct[], overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + queryBatchSwap(kind: PromiseOrValue, swaps: IVault.BatchSwapStepStruct[], assets: PromiseOrValue[], funds: IVault.FundManagementStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + registerPool(specialization: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + registerTokens(poolId: PromiseOrValue, tokens: PromiseOrValue[], assetManagers: PromiseOrValue[], overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAuthorizer(newAuthorizer: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setRelayerApproval(sender: PromiseOrValue, relayer: PromiseOrValue, approved: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + swap(singleSwap: IVault.SingleSwapStruct, funds: IVault.FundManagementStruct, limit: PromiseOrValue, deadline: PromiseOrValue, overrides?: PayableOverrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +declare namespace IPoolSwapStructs$2 { + type SwapRequestStruct = { + kind: PromiseOrValue; + tokenIn: PromiseOrValue; + tokenOut: PromiseOrValue; + amount: PromiseOrValue; + poolId: PromiseOrValue; + lastChangeBlock: PromiseOrValue; + from: PromiseOrValue; + to: PromiseOrValue; + userData: PromiseOrValue; + }; + type SwapRequestStructOutput = [ + number, + string, + string, + BigNumber$1, + string, + BigNumber$1, + string, + string, + string + ] & { + kind: number; + tokenIn: string; + tokenOut: string; + amount: BigNumber$1; + poolId: string; + lastChangeBlock: BigNumber$1; + from: string; + to: string; + userData: string; + }; +} +interface WeightedPoolInterface extends utils.Interface { + functions: { + "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL()": FunctionFragment; + "DOMAIN_SEPARATOR()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "disableRecoveryMode()": FunctionFragment; + "enableRecoveryMode()": FunctionFragment; + "getATHRateProduct()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getActualSupply()": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getDomainSeparator()": FunctionFragment; + "getInvariant()": FunctionFragment; + "getLastPostJoinExitInvariant()": FunctionFragment; + "getNextNonce(address)": FunctionFragment; + "getNormalizedWeights()": FunctionFragment; + "getOwner()": FunctionFragment; + "getPausedState()": FunctionFragment; + "getPoolId()": FunctionFragment; + "getProtocolFeePercentageCache(uint256)": FunctionFragment; + "getProtocolFeesCollector()": FunctionFragment; + "getProtocolSwapFeeDelegation()": FunctionFragment; + "getRateProviders()": FunctionFragment; + "getScalingFactors()": FunctionFragment; + "getSwapFeePercentage()": FunctionFragment; + "getVault()": FunctionFragment; + "inRecoveryMode()": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "name()": FunctionFragment; + "nonces(address)": FunctionFragment; + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)": FunctionFragment; + "pause()": FunctionFragment; + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "setAssetManagerPoolConfig(address,bytes)": FunctionFragment; + "setSwapFeePercentage(uint256)": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "unpause()": FunctionFragment; + "updateProtocolFeePercentageCache()": FunctionFragment; + "version()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL" | "DOMAIN_SEPARATOR" | "allowance" | "approve" | "balanceOf" | "decimals" | "decreaseAllowance" | "disableRecoveryMode" | "enableRecoveryMode" | "getATHRateProduct" | "getActionId" | "getActualSupply" | "getAuthorizer" | "getDomainSeparator" | "getInvariant" | "getLastPostJoinExitInvariant" | "getNextNonce" | "getNormalizedWeights" | "getOwner" | "getPausedState" | "getPoolId" | "getProtocolFeePercentageCache" | "getProtocolFeesCollector" | "getProtocolSwapFeeDelegation" | "getRateProviders" | "getScalingFactors" | "getSwapFeePercentage" | "getVault" | "inRecoveryMode" | "increaseAllowance" | "name" | "nonces" | "onExitPool" | "onJoinPool" | "onSwap" | "pause" | "permit" | "queryExit" | "queryJoin" | "setAssetManagerPoolConfig" | "setSwapFeePercentage" | "symbol" | "totalSupply" | "transfer" | "transferFrom" | "unpause" | "updateProtocolFeePercentageCache" | "version"): FunctionFragment; + encodeFunctionData(functionFragment: "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL", values?: undefined): string; + encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string; + encodeFunctionData(functionFragment: "allowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "decreaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "disableRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "enableRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "getATHRateProduct", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getActualSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getDomainSeparator", values?: undefined): string; + encodeFunctionData(functionFragment: "getInvariant", values?: undefined): string; + encodeFunctionData(functionFragment: "getLastPostJoinExitInvariant", values?: undefined): string; + encodeFunctionData(functionFragment: "getNextNonce", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getNormalizedWeights", values?: undefined): string; + encodeFunctionData(functionFragment: "getOwner", values?: undefined): string; + encodeFunctionData(functionFragment: "getPausedState", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolId", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolFeePercentageCache", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getProtocolFeesCollector", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolSwapFeeDelegation", values?: undefined): string; + encodeFunctionData(functionFragment: "getRateProviders", values?: undefined): string; + encodeFunctionData(functionFragment: "getScalingFactors", values?: undefined): string; + encodeFunctionData(functionFragment: "getSwapFeePercentage", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "inRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "increaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "nonces", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "onExitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onJoinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap", values: [ + IPoolSwapStructs$2.SwapRequestStruct, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "pause", values?: undefined): string; + encodeFunctionData(functionFragment: "permit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryExit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryJoin", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "setAssetManagerPoolConfig", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setSwapFeePercentage", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "transfer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "transferFrom", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData(functionFragment: "updateProtocolFeePercentageCache", values?: undefined): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + decodeFunctionResult(functionFragment: "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decreaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "disableRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "enableRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getATHRateProduct", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActualSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDomainSeparator", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getInvariant", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getLastPostJoinExitInvariant", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNextNonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNormalizedWeights", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getOwner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPausedState", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeePercentageCache", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeesCollector", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolSwapFeeDelegation", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRateProviders", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getScalingFactors", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "inRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onExitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onJoinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryExit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryJoin", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setAssetManagerPoolConfig", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "updateProtocolFeePercentageCache", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + events: { + "Approval(address,address,uint256)": EventFragment; + "PausedStateChanged(bool)": EventFragment; + "ProtocolFeePercentageCacheUpdated(uint256,uint256)": EventFragment; + "RecoveryModeStateChanged(bool)": EventFragment; + "SwapFeePercentageChanged(uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PausedStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ProtocolFeePercentageCacheUpdated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RecoveryModeStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SwapFeePercentageChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} +interface ApprovalEventObject$2 { + owner: string; + spender: string; + value: BigNumber$1; +} +type ApprovalEvent$2 = TypedEvent<[ + string, + string, + BigNumber$1 +], ApprovalEventObject$2>; +type ApprovalEventFilter$2 = TypedEventFilter; +interface PausedStateChangedEventObject$2 { + paused: boolean; +} +type PausedStateChangedEvent$2 = TypedEvent<[ + boolean +], PausedStateChangedEventObject$2>; +type PausedStateChangedEventFilter$2 = TypedEventFilter; +interface ProtocolFeePercentageCacheUpdatedEventObject { + feeType: BigNumber$1; + protocolFeePercentage: BigNumber$1; +} +type ProtocolFeePercentageCacheUpdatedEvent = TypedEvent<[ + BigNumber$1, + BigNumber$1 +], ProtocolFeePercentageCacheUpdatedEventObject>; +type ProtocolFeePercentageCacheUpdatedEventFilter = TypedEventFilter; +interface RecoveryModeStateChangedEventObject$1 { + enabled: boolean; +} +type RecoveryModeStateChangedEvent$1 = TypedEvent<[ + boolean +], RecoveryModeStateChangedEventObject$1>; +type RecoveryModeStateChangedEventFilter$1 = TypedEventFilter; +interface SwapFeePercentageChangedEventObject$2 { + swapFeePercentage: BigNumber$1; +} +type SwapFeePercentageChangedEvent$2 = TypedEvent<[ + BigNumber$1 +], SwapFeePercentageChangedEventObject$2>; +type SwapFeePercentageChangedEventFilter$2 = TypedEventFilter; +interface TransferEventObject$2 { + from: string; + to: string; + value: BigNumber$1; +} +type TransferEvent$2 = TypedEvent<[ + string, + string, + BigNumber$1 +], TransferEventObject$2>; +type TransferEventFilter$2 = TypedEventFilter; +declare namespace WeightedPool { + type NewPoolParamsStruct = { + name: PromiseOrValue; + symbol: PromiseOrValue; + tokens: PromiseOrValue[]; + normalizedWeights: PromiseOrValue[]; + rateProviders: PromiseOrValue[]; + assetManagers: PromiseOrValue[]; + swapFeePercentage: PromiseOrValue; + }; + type NewPoolParamsStructOutput = [ + string, + string, + string[], + BigNumber$1[], + string[], + string[], + BigNumber$1 + ] & { + name: string; + symbol: string; + tokens: string[]; + normalizedWeights: BigNumber$1[]; + rateProviders: string[]; + assetManagers: string[]; + swapFeePercentage: BigNumber$1; + }; +} +interface WeightedPool extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: WeightedPoolInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL(overrides?: CallOverrides): Promise<[BigNumber$1]>; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + decimals(overrides?: CallOverrides): Promise<[number]>; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getATHRateProduct(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getActualSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getDomainSeparator(overrides?: CallOverrides): Promise<[string]>; + getInvariant(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getLastPostJoinExitInvariant(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + getNormalizedWeights(overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + getOwner(overrides?: CallOverrides): Promise<[string]>; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise<[string]>; + getProtocolFeePercentageCache(feeType: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + getProtocolFeesCollector(overrides?: CallOverrides): Promise<[string]>; + getProtocolSwapFeeDelegation(overrides?: CallOverrides): Promise<[boolean]>; + getRateProviders(overrides?: CallOverrides): Promise<[string[]]>; + getScalingFactors(overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + getSwapFeePercentage(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + inRecoveryMode(overrides?: CallOverrides): Promise<[boolean]>; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise<[string]>; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(request: IPoolSwapStructs$2.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise<[string]>; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + updateProtocolFeePercentageCache(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise<[string]>; + }; + DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL(overrides?: CallOverrides): Promise; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getATHRateProduct(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getActualSupply(overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getInvariant(overrides?: CallOverrides): Promise; + getLastPostJoinExitInvariant(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getNormalizedWeights(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeePercentageCache(feeType: PromiseOrValue, overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getProtocolSwapFeeDelegation(overrides?: CallOverrides): Promise; + getRateProviders(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(request: IPoolSwapStructs$2.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + updateProtocolFeePercentageCache(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + callStatic: { + DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL(overrides?: CallOverrides): Promise; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + disableRecoveryMode(overrides?: CallOverrides): Promise; + enableRecoveryMode(overrides?: CallOverrides): Promise; + getATHRateProduct(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getActualSupply(overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getInvariant(overrides?: CallOverrides): Promise; + getLastPostJoinExitInvariant(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getNormalizedWeights(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeePercentageCache(feeType: PromiseOrValue, overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getProtocolSwapFeeDelegation(overrides?: CallOverrides): Promise; + getRateProviders(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1[], BigNumber$1[]]>; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1[], BigNumber$1[]]>; + onSwap(request: IPoolSwapStructs$2.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: CallOverrides): Promise; + pause(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptIn: BigNumber$1; + amountsOut: BigNumber$1[]; + }>; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptOut: BigNumber$1; + amountsIn: BigNumber$1[]; + }>; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: CallOverrides): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + unpause(overrides?: CallOverrides): Promise; + updateProtocolFeePercentageCache(overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + filters: { + "Approval(address,address,uint256)"(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$2; + Approval(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$2; + "PausedStateChanged(bool)"(paused?: null): PausedStateChangedEventFilter$2; + PausedStateChanged(paused?: null): PausedStateChangedEventFilter$2; + "ProtocolFeePercentageCacheUpdated(uint256,uint256)"(feeType?: PromiseOrValue | null, protocolFeePercentage?: null): ProtocolFeePercentageCacheUpdatedEventFilter; + ProtocolFeePercentageCacheUpdated(feeType?: PromiseOrValue | null, protocolFeePercentage?: null): ProtocolFeePercentageCacheUpdatedEventFilter; + "RecoveryModeStateChanged(bool)"(enabled?: null): RecoveryModeStateChangedEventFilter$1; + RecoveryModeStateChanged(enabled?: null): RecoveryModeStateChangedEventFilter$1; + "SwapFeePercentageChanged(uint256)"(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$2; + SwapFeePercentageChanged(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$2; + "Transfer(address,address,uint256)"(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$2; + Transfer(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$2; + }; + estimateGas: { + DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL(overrides?: CallOverrides): Promise; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getATHRateProduct(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getActualSupply(overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getInvariant(overrides?: CallOverrides): Promise; + getLastPostJoinExitInvariant(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getNormalizedWeights(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeePercentageCache(feeType: PromiseOrValue, overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getProtocolSwapFeeDelegation(overrides?: CallOverrides): Promise; + getRateProviders(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(request: IPoolSwapStructs$2.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + updateProtocolFeePercentageCache(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL(overrides?: CallOverrides): Promise; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getATHRateProduct(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getActualSupply(overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getInvariant(overrides?: CallOverrides): Promise; + getLastPostJoinExitInvariant(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getNormalizedWeights(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeePercentageCache(feeType: PromiseOrValue, overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getProtocolSwapFeeDelegation(overrides?: CallOverrides): Promise; + getRateProviders(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(request: IPoolSwapStructs$2.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setAssetManagerPoolConfig(token: PromiseOrValue, poolConfig: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + updateProtocolFeePercentageCache(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + }; +} + +interface WeightedPoolFactoryInterface extends utils.Interface { + functions: { + "create(string,string,address[],uint256[],address[],uint256,address,bytes32)": FunctionFragment; + "disable()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getCreationCode()": FunctionFragment; + "getCreationCodeContracts()": FunctionFragment; + "getPauseConfiguration()": FunctionFragment; + "getPoolVersion()": FunctionFragment; + "getProtocolFeePercentagesProvider()": FunctionFragment; + "getVault()": FunctionFragment; + "isDisabled()": FunctionFragment; + "isPoolFromFactory(address)": FunctionFragment; + "version()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "create" | "disable" | "getActionId" | "getAuthorizer" | "getCreationCode" | "getCreationCodeContracts" | "getPauseConfiguration" | "getPoolVersion" | "getProtocolFeePercentagesProvider" | "getVault" | "isDisabled" | "isPoolFromFactory" | "version"): FunctionFragment; + encodeFunctionData(functionFragment: "create", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "disable", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getCreationCode", values?: undefined): string; + encodeFunctionData(functionFragment: "getCreationCodeContracts", values?: undefined): string; + encodeFunctionData(functionFragment: "getPauseConfiguration", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolVersion", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolFeePercentagesProvider", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "isDisabled", values?: undefined): string; + encodeFunctionData(functionFragment: "isPoolFromFactory", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + decodeFunctionResult(functionFragment: "create", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "disable", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCreationCode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCreationCodeContracts", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPauseConfiguration", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolVersion", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeePercentagesProvider", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isDisabled", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isPoolFromFactory", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + events: { + "FactoryDisabled()": EventFragment; + "PoolCreated(address)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "FactoryDisabled"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PoolCreated"): EventFragment; +} +interface FactoryDisabledEventObject$1 { +} +type FactoryDisabledEvent$1 = TypedEvent<[], FactoryDisabledEventObject$1>; +type FactoryDisabledEventFilter$1 = TypedEventFilter; +interface PoolCreatedEventObject$1 { + pool: string; +} +type PoolCreatedEvent$1 = TypedEvent<[string], PoolCreatedEventObject$1>; +type PoolCreatedEventFilter$1 = TypedEventFilter; +interface WeightedPoolFactory extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: WeightedPoolFactoryInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + create(name: PromiseOrValue, symbol: PromiseOrValue, tokens: PromiseOrValue[], normalizedWeights: PromiseOrValue[], rateProviders: PromiseOrValue[], swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getCreationCode(overrides?: CallOverrides): Promise<[string]>; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise<[string]>; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise<[string]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + isDisabled(overrides?: CallOverrides): Promise<[boolean]>; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + version(overrides?: CallOverrides): Promise<[string]>; + }; + create(name: PromiseOrValue, symbol: PromiseOrValue, tokens: PromiseOrValue[], normalizedWeights: PromiseOrValue[], rateProviders: PromiseOrValue[], swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + callStatic: { + create(name: PromiseOrValue, symbol: PromiseOrValue, tokens: PromiseOrValue[], normalizedWeights: PromiseOrValue[], rateProviders: PromiseOrValue[], swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides): Promise; + disable(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + filters: { + "FactoryDisabled()"(): FactoryDisabledEventFilter$1; + FactoryDisabled(): FactoryDisabledEventFilter$1; + "PoolCreated(address)"(pool?: PromiseOrValue | null): PoolCreatedEventFilter$1; + PoolCreated(pool?: PromiseOrValue | null): PoolCreatedEventFilter$1; + }; + estimateGas: { + create(name: PromiseOrValue, symbol: PromiseOrValue, tokens: PromiseOrValue[], normalizedWeights: PromiseOrValue[], rateProviders: PromiseOrValue[], swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + create(name: PromiseOrValue, symbol: PromiseOrValue, tokens: PromiseOrValue[], normalizedWeights: PromiseOrValue[], rateProviders: PromiseOrValue[], swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; +} + +declare namespace IPoolSwapStructs$1 { + type SwapRequestStruct = { + kind: PromiseOrValue; + tokenIn: PromiseOrValue; + tokenOut: PromiseOrValue; + amount: PromiseOrValue; + poolId: PromiseOrValue; + lastChangeBlock: PromiseOrValue; + from: PromiseOrValue; + to: PromiseOrValue; + userData: PromiseOrValue; + }; + type SwapRequestStructOutput = [ + number, + string, + string, + BigNumber$1, + string, + BigNumber$1, + string, + string, + string + ] & { + kind: number; + tokenIn: string; + tokenOut: string; + amount: BigNumber$1; + poolId: string; + lastChangeBlock: BigNumber$1; + from: string; + to: string; + userData: string; + }; +} +interface YearnLinearPoolInterface extends utils.Interface { + functions: { + "DOMAIN_SEPARATOR()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "disableRecoveryMode()": FunctionFragment; + "enableRecoveryMode()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getBptIndex()": FunctionFragment; + "getDomainSeparator()": FunctionFragment; + "getMainIndex()": FunctionFragment; + "getMainToken()": FunctionFragment; + "getNextNonce(address)": FunctionFragment; + "getOwner()": FunctionFragment; + "getPausedState()": FunctionFragment; + "getPoolId()": FunctionFragment; + "getProtocolFeesCollector()": FunctionFragment; + "getRate()": FunctionFragment; + "getScalingFactors()": FunctionFragment; + "getSwapFeePercentage()": FunctionFragment; + "getTargets()": FunctionFragment; + "getVault()": FunctionFragment; + "getVirtualSupply()": FunctionFragment; + "getWrappedIndex()": FunctionFragment; + "getWrappedToken()": FunctionFragment; + "getWrappedTokenRate()": FunctionFragment; + "inRecoveryMode()": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "initialize()": FunctionFragment; + "name()": FunctionFragment; + "nonces(address)": FunctionFragment; + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)": FunctionFragment; + "pause()": FunctionFragment; + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "setSwapFeePercentage(uint256)": FunctionFragment; + "setTargets(uint256,uint256)": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "unpause()": FunctionFragment; + "version()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "DOMAIN_SEPARATOR" | "allowance" | "approve" | "balanceOf" | "decimals" | "decreaseAllowance" | "disableRecoveryMode" | "enableRecoveryMode" | "getActionId" | "getAuthorizer" | "getBptIndex" | "getDomainSeparator" | "getMainIndex" | "getMainToken" | "getNextNonce" | "getOwner" | "getPausedState" | "getPoolId" | "getProtocolFeesCollector" | "getRate" | "getScalingFactors" | "getSwapFeePercentage" | "getTargets" | "getVault" | "getVirtualSupply" | "getWrappedIndex" | "getWrappedToken" | "getWrappedTokenRate" | "inRecoveryMode" | "increaseAllowance" | "initialize" | "name" | "nonces" | "onExitPool" | "onJoinPool" | "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)" | "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)" | "pause" | "permit" | "queryExit" | "queryJoin" | "setSwapFeePercentage" | "setTargets" | "symbol" | "totalSupply" | "transfer" | "transferFrom" | "unpause" | "version"): FunctionFragment; + encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string; + encodeFunctionData(functionFragment: "allowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "decreaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "disableRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "enableRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getBptIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getDomainSeparator", values?: undefined): string; + encodeFunctionData(functionFragment: "getMainIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getMainToken", values?: undefined): string; + encodeFunctionData(functionFragment: "getNextNonce", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getOwner", values?: undefined): string; + encodeFunctionData(functionFragment: "getPausedState", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolId", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolFeesCollector", values?: undefined): string; + encodeFunctionData(functionFragment: "getRate", values?: undefined): string; + encodeFunctionData(functionFragment: "getScalingFactors", values?: undefined): string; + encodeFunctionData(functionFragment: "getSwapFeePercentage", values?: undefined): string; + encodeFunctionData(functionFragment: "getTargets", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "getVirtualSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedIndex", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedToken", values?: undefined): string; + encodeFunctionData(functionFragment: "getWrappedTokenRate", values?: undefined): string; + encodeFunctionData(functionFragment: "inRecoveryMode", values?: undefined): string; + encodeFunctionData(functionFragment: "increaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "initialize", values?: undefined): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "nonces", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "onExitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onJoinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)", values: [ + IPoolSwapStructs$1.SwapRequestStruct, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)", values: [ + IPoolSwapStructs$1.SwapRequestStruct, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "pause", values?: undefined): string; + encodeFunctionData(functionFragment: "permit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryExit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryJoin", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "setSwapFeePercentage", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setTargets", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "transfer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "transferFrom", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decreaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "disableRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "enableRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getBptIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDomainSeparator", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMainIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMainToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNextNonce", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getOwner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPausedState", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeesCollector", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getScalingFactors", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTargets", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVirtualSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedIndex", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedToken", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getWrappedTokenRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "inRecoveryMode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onExitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onJoinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryExit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryJoin", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setTargets", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + events: { + "Approval(address,address,uint256)": EventFragment; + "PausedStateChanged(bool)": EventFragment; + "RecoveryModeStateChanged(bool)": EventFragment; + "SwapFeePercentageChanged(uint256)": EventFragment; + "TargetsSet(address,uint256,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PausedStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RecoveryModeStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SwapFeePercentageChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TargetsSet"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} +interface ApprovalEventObject$1 { + owner: string; + spender: string; + value: BigNumber$1; +} +type ApprovalEvent$1 = TypedEvent<[ + string, + string, + BigNumber$1 +], ApprovalEventObject$1>; +type ApprovalEventFilter$1 = TypedEventFilter; +interface PausedStateChangedEventObject$1 { + paused: boolean; +} +type PausedStateChangedEvent$1 = TypedEvent<[ + boolean +], PausedStateChangedEventObject$1>; +type PausedStateChangedEventFilter$1 = TypedEventFilter; +interface RecoveryModeStateChangedEventObject { + enabled: boolean; +} +type RecoveryModeStateChangedEvent = TypedEvent<[ + boolean +], RecoveryModeStateChangedEventObject>; +type RecoveryModeStateChangedEventFilter = TypedEventFilter; +interface SwapFeePercentageChangedEventObject$1 { + swapFeePercentage: BigNumber$1; +} +type SwapFeePercentageChangedEvent$1 = TypedEvent<[ + BigNumber$1 +], SwapFeePercentageChangedEventObject$1>; +type SwapFeePercentageChangedEventFilter$1 = TypedEventFilter; +interface TargetsSetEventObject { + token: string; + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; +} +type TargetsSetEvent = TypedEvent<[ + string, + BigNumber$1, + BigNumber$1 +], TargetsSetEventObject>; +type TargetsSetEventFilter = TypedEventFilter; +interface TransferEventObject$1 { + from: string; + to: string; + value: BigNumber$1; +} +type TransferEvent$1 = TypedEvent<[ + string, + string, + BigNumber$1 +], TransferEventObject$1>; +type TransferEventFilter$1 = TypedEventFilter; +declare namespace YearnLinearPool { + type ConstructorArgsStruct = { + vault: PromiseOrValue; + name: PromiseOrValue; + symbol: PromiseOrValue; + mainToken: PromiseOrValue; + wrappedToken: PromiseOrValue; + assetManager: PromiseOrValue; + upperTarget: PromiseOrValue; + swapFeePercentage: PromiseOrValue; + pauseWindowDuration: PromiseOrValue; + bufferPeriodDuration: PromiseOrValue; + owner: PromiseOrValue; + version: PromiseOrValue; + }; + type ConstructorArgsStructOutput = [ + string, + string, + string, + string, + string, + string, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + string, + string + ] & { + vault: string; + name: string; + symbol: string; + mainToken: string; + wrappedToken: string; + assetManager: string; + upperTarget: BigNumber$1; + swapFeePercentage: BigNumber$1; + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + owner: string; + version: string; + }; +} +interface YearnLinearPool extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: YearnLinearPoolInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + decimals(overrides?: CallOverrides): Promise<[number]>; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getBptIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getDomainSeparator(overrides?: CallOverrides): Promise<[string]>; + getMainIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getMainToken(overrides?: CallOverrides): Promise<[string]>; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + getOwner(overrides?: CallOverrides): Promise<[string]>; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise<[string]>; + getProtocolFeesCollector(overrides?: CallOverrides): Promise<[string]>; + getRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getScalingFactors(overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + getSwapFeePercentage(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise<[string]>; + getVirtualSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getWrappedIndex(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getWrappedToken(overrides?: CallOverrides): Promise<[string]>; + getWrappedTokenRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + inRecoveryMode(overrides?: CallOverrides): Promise<[boolean]>; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise<[string]>; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$1.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$1.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise<[string]>; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise<[string]>; + }; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$1.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$1.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + callStatic: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + disableRecoveryMode(overrides?: CallOverrides): Promise; + enableRecoveryMode(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + lowerTarget: BigNumber$1; + upperTarget: BigNumber$1; + }>; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: CallOverrides): Promise; + initialize(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsOut: BigNumber$1[]; + dueProtocolFees: BigNumber$1[]; + }>; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsIn: BigNumber$1[]; + dueProtocolFees: BigNumber$1[]; + }>; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$1.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: CallOverrides): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$1.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: CallOverrides): Promise; + pause(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptIn: BigNumber$1; + amountsOut: BigNumber$1[]; + }>; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptOut: BigNumber$1; + amountsIn: BigNumber$1[]; + }>; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: CallOverrides): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + unpause(overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + filters: { + "Approval(address,address,uint256)"(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$1; + Approval(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter$1; + "PausedStateChanged(bool)"(paused?: null): PausedStateChangedEventFilter$1; + PausedStateChanged(paused?: null): PausedStateChangedEventFilter$1; + "RecoveryModeStateChanged(bool)"(enabled?: null): RecoveryModeStateChangedEventFilter; + RecoveryModeStateChanged(enabled?: null): RecoveryModeStateChangedEventFilter; + "SwapFeePercentageChanged(uint256)"(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$1; + SwapFeePercentageChanged(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter$1; + "TargetsSet(address,uint256,uint256)"(token?: PromiseOrValue | null, lowerTarget?: null, upperTarget?: null): TargetsSetEventFilter; + TargetsSet(token?: PromiseOrValue | null, lowerTarget?: null, upperTarget?: null): TargetsSetEventFilter; + "Transfer(address,address,uint256)"(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$1; + Transfer(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter$1; + }; + estimateGas: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$1.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$1.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableRecoveryMode(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getBptIndex(overrides?: CallOverrides): Promise; + getDomainSeparator(overrides?: CallOverrides): Promise; + getMainIndex(overrides?: CallOverrides): Promise; + getMainToken(overrides?: CallOverrides): Promise; + getNextNonce(account: PromiseOrValue, overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getProtocolFeesCollector(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getScalingFactors(overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTargets(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVirtualSupply(overrides?: CallOverrides): Promise; + getWrappedIndex(overrides?: CallOverrides): Promise; + getWrappedToken(overrides?: CallOverrides): Promise; + getWrappedTokenRate(overrides?: CallOverrides): Promise; + inRecoveryMode(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + initialize(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)"(request: IPoolSwapStructs$1.SwapRequestStruct, balances: PromiseOrValue[], indexIn: PromiseOrValue, indexOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)"(request: IPoolSwapStructs$1.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryJoin(arg0: PromiseOrValue, sender: PromiseOrValue, arg2: PromiseOrValue, balances: PromiseOrValue[], arg4: PromiseOrValue, arg5: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setTargets(newLowerTarget: PromiseOrValue, newUpperTarget: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + version(overrides?: CallOverrides): Promise; + }; +} + +interface YearnLinearPoolFactoryInterface extends utils.Interface { + functions: { + "create(string,string,address,address,uint256,uint256,address,uint256,bytes32)": FunctionFragment; + "disable()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getCreationCode()": FunctionFragment; + "getCreationCodeContracts()": FunctionFragment; + "getLastCreatedPool()": FunctionFragment; + "getPauseConfiguration()": FunctionFragment; + "getPoolVersion()": FunctionFragment; + "getProtocolFeePercentagesProvider()": FunctionFragment; + "getVault()": FunctionFragment; + "isDisabled()": FunctionFragment; + "isPoolFromFactory(address)": FunctionFragment; + "version()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "create" | "disable" | "getActionId" | "getAuthorizer" | "getCreationCode" | "getCreationCodeContracts" | "getLastCreatedPool" | "getPauseConfiguration" | "getPoolVersion" | "getProtocolFeePercentagesProvider" | "getVault" | "isDisabled" | "isPoolFromFactory" | "version"): FunctionFragment; + encodeFunctionData(functionFragment: "create", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "disable", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getCreationCode", values?: undefined): string; + encodeFunctionData(functionFragment: "getCreationCodeContracts", values?: undefined): string; + encodeFunctionData(functionFragment: "getLastCreatedPool", values?: undefined): string; + encodeFunctionData(functionFragment: "getPauseConfiguration", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolVersion", values?: undefined): string; + encodeFunctionData(functionFragment: "getProtocolFeePercentagesProvider", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "isDisabled", values?: undefined): string; + encodeFunctionData(functionFragment: "isPoolFromFactory", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + decodeFunctionResult(functionFragment: "create", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "disable", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCreationCode", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getCreationCodeContracts", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getLastCreatedPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPauseConfiguration", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolVersion", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getProtocolFeePercentagesProvider", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isDisabled", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isPoolFromFactory", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + events: { + "FactoryDisabled()": EventFragment; + "PoolCreated(address)": EventFragment; + "YearnLinearPoolCreated(address,uint256)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "FactoryDisabled"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PoolCreated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "YearnLinearPoolCreated"): EventFragment; +} +interface FactoryDisabledEventObject { +} +type FactoryDisabledEvent = TypedEvent<[], FactoryDisabledEventObject>; +type FactoryDisabledEventFilter = TypedEventFilter; +interface PoolCreatedEventObject { + pool: string; +} +type PoolCreatedEvent = TypedEvent<[string], PoolCreatedEventObject>; +type PoolCreatedEventFilter = TypedEventFilter; +interface YearnLinearPoolCreatedEventObject { + pool: string; + protocolId: BigNumber$1; +} +type YearnLinearPoolCreatedEvent = TypedEvent<[ + string, + BigNumber$1 +], YearnLinearPoolCreatedEventObject>; +type YearnLinearPoolCreatedEventFilter = TypedEventFilter; +interface YearnLinearPoolFactory extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: YearnLinearPoolFactoryInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getCreationCode(overrides?: CallOverrides): Promise<[string]>; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise<[string]>; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise<[string]>; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise<[string]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + isDisabled(overrides?: CallOverrides): Promise<[boolean]>; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise<[boolean]>; + version(overrides?: CallOverrides): Promise<[string]>; + }; + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + callStatic: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: CallOverrides): Promise; + disable(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise<[string, string] & { + contractA: string; + contractB: string; + }>; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1 + ] & { + pauseWindowDuration: BigNumber$1; + bufferPeriodDuration: BigNumber$1; + }>; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + filters: { + "FactoryDisabled()"(): FactoryDisabledEventFilter; + FactoryDisabled(): FactoryDisabledEventFilter; + "PoolCreated(address)"(pool?: PromiseOrValue | null): PoolCreatedEventFilter; + PoolCreated(pool?: PromiseOrValue | null): PoolCreatedEventFilter; + "YearnLinearPoolCreated(address,uint256)"(pool?: PromiseOrValue | null, protocolId?: PromiseOrValue | null): YearnLinearPoolCreatedEventFilter; + YearnLinearPoolCreated(pool?: PromiseOrValue | null, protocolId?: PromiseOrValue | null): YearnLinearPoolCreatedEventFilter; + }; + estimateGas: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + create(name: PromiseOrValue, symbol: PromiseOrValue, mainToken: PromiseOrValue, wrappedToken: PromiseOrValue, upperTarget: PromiseOrValue, swapFeePercentage: PromiseOrValue, owner: PromiseOrValue, protocolId: PromiseOrValue, salt: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + disable(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getCreationCode(overrides?: CallOverrides): Promise; + getCreationCodeContracts(overrides?: CallOverrides): Promise; + getLastCreatedPool(overrides?: CallOverrides): Promise; + getPauseConfiguration(overrides?: CallOverrides): Promise; + getPoolVersion(overrides?: CallOverrides): Promise; + getProtocolFeePercentagesProvider(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + isDisabled(overrides?: CallOverrides): Promise; + isPoolFromFactory(pool: PromiseOrValue, overrides?: CallOverrides): Promise; + version(overrides?: CallOverrides): Promise; + }; +} + +declare namespace GyroECLPMath { + type ParamsStruct = { + alpha: PromiseOrValue; + beta: PromiseOrValue; + c: PromiseOrValue; + s: PromiseOrValue; + lambda: PromiseOrValue; + }; + type ParamsStructOutput = [ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + alpha: BigNumber$1; + beta: BigNumber$1; + c: BigNumber$1; + s: BigNumber$1; + lambda: BigNumber$1; + }; + type Vector2Struct = { + x: PromiseOrValue; + y: PromiseOrValue; + }; + type Vector2StructOutput = [BigNumber$1, BigNumber$1] & { + x: BigNumber$1; + y: BigNumber$1; + }; + type DerivedParamsStruct = { + tauAlpha: GyroECLPMath.Vector2Struct; + tauBeta: GyroECLPMath.Vector2Struct; + u: PromiseOrValue; + v: PromiseOrValue; + w: PromiseOrValue; + z: PromiseOrValue; + dSq: PromiseOrValue; + }; + type DerivedParamsStructOutput = [ + GyroECLPMath.Vector2StructOutput, + GyroECLPMath.Vector2StructOutput, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + tauAlpha: GyroECLPMath.Vector2StructOutput; + tauBeta: GyroECLPMath.Vector2StructOutput; + u: BigNumber$1; + v: BigNumber$1; + w: BigNumber$1; + z: BigNumber$1; + dSq: BigNumber$1; + }; +} +declare namespace ICappedLiquidity { + type CapParamsStruct = { + capEnabled: PromiseOrValue; + perAddressCap: PromiseOrValue; + globalCap: PromiseOrValue; + }; + type CapParamsStructOutput = [boolean, BigNumber$1, BigNumber$1] & { + capEnabled: boolean; + perAddressCap: BigNumber$1; + globalCap: BigNumber$1; + }; +} +declare namespace IPriceOracle { + type OracleAccumulatorQueryStruct = { + variable: PromiseOrValue; + ago: PromiseOrValue; + }; + type OracleAccumulatorQueryStructOutput = [number, BigNumber$1] & { + variable: number; + ago: BigNumber$1; + }; + type OracleAverageQueryStruct = { + variable: PromiseOrValue; + secs: PromiseOrValue; + ago: PromiseOrValue; + }; + type OracleAverageQueryStructOutput = [ + number, + BigNumber$1, + BigNumber$1 + ] & { + variable: number; + secs: BigNumber$1; + ago: BigNumber$1; + }; +} +declare namespace IPoolSwapStructs { + type SwapRequestStruct = { + kind: PromiseOrValue; + tokenIn: PromiseOrValue; + tokenOut: PromiseOrValue; + amount: PromiseOrValue; + poolId: PromiseOrValue; + lastChangeBlock: PromiseOrValue; + from: PromiseOrValue; + to: PromiseOrValue; + userData: PromiseOrValue; + }; + type SwapRequestStructOutput = [ + number, + string, + string, + BigNumber$1, + string, + BigNumber$1, + string, + string, + string + ] & { + kind: number; + tokenIn: string; + tokenOut: string; + amount: BigNumber$1; + poolId: string; + lastChangeBlock: BigNumber$1; + from: string; + to: string; + userData: string; + }; +} +interface GyroEV2Interface extends utils.Interface { + functions: { + "DOMAIN_SEPARATOR()": FunctionFragment; + "_dSq()": FunctionFragment; + "_paramsAlpha()": FunctionFragment; + "_paramsBeta()": FunctionFragment; + "_paramsC()": FunctionFragment; + "_paramsLambda()": FunctionFragment; + "_paramsS()": FunctionFragment; + "_tauAlphaX()": FunctionFragment; + "_tauAlphaY()": FunctionFragment; + "_tauBetaX()": FunctionFragment; + "_tauBetaY()": FunctionFragment; + "_u()": FunctionFragment; + "_v()": FunctionFragment; + "_w()": FunctionFragment; + "_z()": FunctionFragment; + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "capManager()": FunctionFragment; + "capParams()": FunctionFragment; + "changePauseManager(address)": FunctionFragment; + "decimals()": FunctionFragment; + "decreaseAllowance(address,uint256)": FunctionFragment; + "dirtyUninitializedOracleSamples(uint256,uint256)": FunctionFragment; + "enableOracle()": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getECLPParams()": FunctionFragment; + "getInvariant()": FunctionFragment; + "getLargestSafeQueryWindow()": FunctionFragment; + "getLastInvariant()": FunctionFragment; + "getLatest(uint8)": FunctionFragment; + "getMiscData()": FunctionFragment; + "getNormalizedWeights()": FunctionFragment; + "getOwner()": FunctionFragment; + "getPastAccumulators((uint8,uint256)[])": FunctionFragment; + "getPausedState()": FunctionFragment; + "getPoolId()": FunctionFragment; + "getPrice()": FunctionFragment; + "getRate()": FunctionFragment; + "getSample(uint256)": FunctionFragment; + "getSwapFeePercentage()": FunctionFragment; + "getTimeWeightedAverage((uint8,uint256,uint256)[])": FunctionFragment; + "getTokenRates()": FunctionFragment; + "getTotalSamples()": FunctionFragment; + "getVault()": FunctionFragment; + "gyroConfig()": FunctionFragment; + "increaseAllowance(address,uint256)": FunctionFragment; + "name()": FunctionFragment; + "nonces(address)": FunctionFragment; + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256,uint256)": FunctionFragment; + "pause()": FunctionFragment; + "pauseManager()": FunctionFragment; + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment; + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": FunctionFragment; + "rateProvider0()": FunctionFragment; + "rateProvider1()": FunctionFragment; + "setCapManager(address)": FunctionFragment; + "setCapParams((bool,uint120,uint128))": FunctionFragment; + "setPaused(bool)": FunctionFragment; + "setSwapFeePercentage(uint256)": FunctionFragment; + "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "unpause()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "DOMAIN_SEPARATOR" | "_dSq" | "_paramsAlpha" | "_paramsBeta" | "_paramsC" | "_paramsLambda" | "_paramsS" | "_tauAlphaX" | "_tauAlphaY" | "_tauBetaX" | "_tauBetaY" | "_u" | "_v" | "_w" | "_z" | "allowance" | "approve" | "balanceOf" | "capManager" | "capParams" | "changePauseManager" | "decimals" | "decreaseAllowance" | "dirtyUninitializedOracleSamples" | "enableOracle" | "getActionId" | "getAuthorizer" | "getECLPParams" | "getInvariant" | "getLargestSafeQueryWindow" | "getLastInvariant" | "getLatest" | "getMiscData" | "getNormalizedWeights" | "getOwner" | "getPastAccumulators" | "getPausedState" | "getPoolId" | "getPrice" | "getRate" | "getSample" | "getSwapFeePercentage" | "getTimeWeightedAverage" | "getTokenRates" | "getTotalSamples" | "getVault" | "gyroConfig" | "increaseAllowance" | "name" | "nonces" | "onExitPool" | "onJoinPool" | "onSwap" | "pause" | "pauseManager" | "permit" | "queryExit" | "queryJoin" | "rateProvider0" | "rateProvider1" | "setCapManager" | "setCapParams" | "setPaused" | "setSwapFeePercentage" | "symbol" | "totalSupply" | "transfer" | "transferFrom" | "unpause"): FunctionFragment; + encodeFunctionData(functionFragment: "DOMAIN_SEPARATOR", values?: undefined): string; + encodeFunctionData(functionFragment: "_dSq", values?: undefined): string; + encodeFunctionData(functionFragment: "_paramsAlpha", values?: undefined): string; + encodeFunctionData(functionFragment: "_paramsBeta", values?: undefined): string; + encodeFunctionData(functionFragment: "_paramsC", values?: undefined): string; + encodeFunctionData(functionFragment: "_paramsLambda", values?: undefined): string; + encodeFunctionData(functionFragment: "_paramsS", values?: undefined): string; + encodeFunctionData(functionFragment: "_tauAlphaX", values?: undefined): string; + encodeFunctionData(functionFragment: "_tauAlphaY", values?: undefined): string; + encodeFunctionData(functionFragment: "_tauBetaX", values?: undefined): string; + encodeFunctionData(functionFragment: "_tauBetaY", values?: undefined): string; + encodeFunctionData(functionFragment: "_u", values?: undefined): string; + encodeFunctionData(functionFragment: "_v", values?: undefined): string; + encodeFunctionData(functionFragment: "_w", values?: undefined): string; + encodeFunctionData(functionFragment: "_z", values?: undefined): string; + encodeFunctionData(functionFragment: "allowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "capManager", values?: undefined): string; + encodeFunctionData(functionFragment: "capParams", values?: undefined): string; + encodeFunctionData(functionFragment: "changePauseManager", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "decreaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "dirtyUninitializedOracleSamples", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "enableOracle", values?: undefined): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getECLPParams", values?: undefined): string; + encodeFunctionData(functionFragment: "getInvariant", values?: undefined): string; + encodeFunctionData(functionFragment: "getLargestSafeQueryWindow", values?: undefined): string; + encodeFunctionData(functionFragment: "getLastInvariant", values?: undefined): string; + encodeFunctionData(functionFragment: "getLatest", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getMiscData", values?: undefined): string; + encodeFunctionData(functionFragment: "getNormalizedWeights", values?: undefined): string; + encodeFunctionData(functionFragment: "getOwner", values?: undefined): string; + encodeFunctionData(functionFragment: "getPastAccumulators", values: [IPriceOracle.OracleAccumulatorQueryStruct[]]): string; + encodeFunctionData(functionFragment: "getPausedState", values?: undefined): string; + encodeFunctionData(functionFragment: "getPoolId", values?: undefined): string; + encodeFunctionData(functionFragment: "getPrice", values?: undefined): string; + encodeFunctionData(functionFragment: "getRate", values?: undefined): string; + encodeFunctionData(functionFragment: "getSample", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getSwapFeePercentage", values?: undefined): string; + encodeFunctionData(functionFragment: "getTimeWeightedAverage", values: [IPriceOracle.OracleAverageQueryStruct[]]): string; + encodeFunctionData(functionFragment: "getTokenRates", values?: undefined): string; + encodeFunctionData(functionFragment: "getTotalSamples", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "gyroConfig", values?: undefined): string; + encodeFunctionData(functionFragment: "increaseAllowance", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "nonces", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "onExitPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onJoinPool", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "onSwap", values: [ + IPoolSwapStructs.SwapRequestStruct, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "pause", values?: undefined): string; + encodeFunctionData(functionFragment: "pauseManager", values?: undefined): string; + encodeFunctionData(functionFragment: "permit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryExit", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "queryJoin", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "rateProvider0", values?: undefined): string; + encodeFunctionData(functionFragment: "rateProvider1", values?: undefined): string; + encodeFunctionData(functionFragment: "setCapManager", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setCapParams", values: [ICappedLiquidity.CapParamsStruct]): string; + encodeFunctionData(functionFragment: "setPaused", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "setSwapFeePercentage", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string; + encodeFunctionData(functionFragment: "transfer", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "transferFrom", values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ]): string; + encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + decodeFunctionResult(functionFragment: "DOMAIN_SEPARATOR", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_dSq", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_paramsAlpha", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_paramsBeta", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_paramsC", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_paramsLambda", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_paramsS", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_tauAlphaX", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_tauAlphaY", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_tauBetaX", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_tauBetaY", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_u", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_v", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_w", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "_z", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "capManager", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "capParams", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "changePauseManager", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decreaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "dirtyUninitializedOracleSamples", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "enableOracle", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getECLPParams", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getInvariant", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getLargestSafeQueryWindow", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getLastInvariant", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getLatest", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getMiscData", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNormalizedWeights", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getOwner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPastAccumulators", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPausedState", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPoolId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getPrice", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getRate", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getSample", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTimeWeightedAverage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTokenRates", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getTotalSamples", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "gyroConfig", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increaseAllowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onExitPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onJoinPool", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "onSwap", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "pauseManager", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "permit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryExit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "queryJoin", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "rateProvider0", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "rateProvider1", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setCapManager", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setCapParams", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setPaused", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setSwapFeePercentage", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + events: { + "Approval(address,address,uint256)": EventFragment; + "CapManagerUpdated(address)": EventFragment; + "CapParamsUpdated(tuple)": EventFragment; + "ECLPDerivedParamsValidated(bool)": EventFragment; + "ECLPParamsValidated(bool)": EventFragment; + "InvariantAterInitializeJoin(uint256)": EventFragment; + "InvariantOldAndNew(uint256,uint256)": EventFragment; + "OracleEnabledChanged(bool)": EventFragment; + "OracleIndexUpdated(uint256)": EventFragment; + "PauseManagerChanged(address,address)": EventFragment; + "PausedLocally()": EventFragment; + "PausedStateChanged(bool)": EventFragment; + "SwapFeePercentageChanged(uint256)": EventFragment; + "SwapParams(uint256[],tuple,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + "UnpausedLocally()": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "CapManagerUpdated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "CapParamsUpdated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ECLPDerivedParamsValidated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ECLPParamsValidated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "InvariantAterInitializeJoin"): EventFragment; + getEvent(nameOrSignatureOrTopic: "InvariantOldAndNew"): EventFragment; + getEvent(nameOrSignatureOrTopic: "OracleEnabledChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "OracleIndexUpdated"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PauseManagerChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PausedLocally"): EventFragment; + getEvent(nameOrSignatureOrTopic: "PausedStateChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SwapFeePercentageChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "SwapParams"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UnpausedLocally"): EventFragment; +} +interface ApprovalEventObject { + owner: string; + spender: string; + value: BigNumber$1; +} +type ApprovalEvent = TypedEvent<[ + string, + string, + BigNumber$1 +], ApprovalEventObject>; +type ApprovalEventFilter = TypedEventFilter; +interface CapManagerUpdatedEventObject { + capManager: string; +} +type CapManagerUpdatedEvent = TypedEvent<[ + string +], CapManagerUpdatedEventObject>; +type CapManagerUpdatedEventFilter = TypedEventFilter; +interface CapParamsUpdatedEventObject { + params: ICappedLiquidity.CapParamsStructOutput; +} +type CapParamsUpdatedEvent = TypedEvent<[ + ICappedLiquidity.CapParamsStructOutput +], CapParamsUpdatedEventObject>; +type CapParamsUpdatedEventFilter = TypedEventFilter; +interface ECLPDerivedParamsValidatedEventObject { + derivedParamsValidated: boolean; +} +type ECLPDerivedParamsValidatedEvent = TypedEvent<[ + boolean +], ECLPDerivedParamsValidatedEventObject>; +type ECLPDerivedParamsValidatedEventFilter = TypedEventFilter; +interface ECLPParamsValidatedEventObject { + paramsValidated: boolean; +} +type ECLPParamsValidatedEvent = TypedEvent<[ + boolean +], ECLPParamsValidatedEventObject>; +type ECLPParamsValidatedEventFilter = TypedEventFilter; +interface InvariantAterInitializeJoinEventObject { + invariantAfterJoin: BigNumber$1; +} +type InvariantAterInitializeJoinEvent = TypedEvent<[ + BigNumber$1 +], InvariantAterInitializeJoinEventObject>; +type InvariantAterInitializeJoinEventFilter = TypedEventFilter; +interface InvariantOldAndNewEventObject { + oldInvariant: BigNumber$1; + newInvariant: BigNumber$1; +} +type InvariantOldAndNewEvent = TypedEvent<[ + BigNumber$1, + BigNumber$1 +], InvariantOldAndNewEventObject>; +type InvariantOldAndNewEventFilter = TypedEventFilter; +interface OracleEnabledChangedEventObject { + enabled: boolean; +} +type OracleEnabledChangedEvent = TypedEvent<[ + boolean +], OracleEnabledChangedEventObject>; +type OracleEnabledChangedEventFilter = TypedEventFilter; +interface OracleIndexUpdatedEventObject { + oracleUpdatedIndex: BigNumber$1; +} +type OracleIndexUpdatedEvent = TypedEvent<[ + BigNumber$1 +], OracleIndexUpdatedEventObject>; +type OracleIndexUpdatedEventFilter = TypedEventFilter; +interface PauseManagerChangedEventObject { + oldPauseManager: string; + newPauseManager: string; +} +type PauseManagerChangedEvent = TypedEvent<[ + string, + string +], PauseManagerChangedEventObject>; +type PauseManagerChangedEventFilter = TypedEventFilter; +interface PausedLocallyEventObject { +} +type PausedLocallyEvent = TypedEvent<[], PausedLocallyEventObject>; +type PausedLocallyEventFilter = TypedEventFilter; +interface PausedStateChangedEventObject { + paused: boolean; +} +type PausedStateChangedEvent = TypedEvent<[ + boolean +], PausedStateChangedEventObject>; +type PausedStateChangedEventFilter = TypedEventFilter; +interface SwapFeePercentageChangedEventObject { + swapFeePercentage: BigNumber$1; +} +type SwapFeePercentageChangedEvent = TypedEvent<[ + BigNumber$1 +], SwapFeePercentageChangedEventObject>; +type SwapFeePercentageChangedEventFilter = TypedEventFilter; +interface SwapParamsEventObject { + balances: BigNumber$1[]; + invariant: GyroECLPMath.Vector2StructOutput; + amount: BigNumber$1; +} +type SwapParamsEvent = TypedEvent<[ + BigNumber$1[], + GyroECLPMath.Vector2StructOutput, + BigNumber$1 +], SwapParamsEventObject>; +type SwapParamsEventFilter = TypedEventFilter; +interface TransferEventObject { + from: string; + to: string; + value: BigNumber$1; +} +type TransferEvent = TypedEvent<[ + string, + string, + BigNumber$1 +], TransferEventObject>; +type TransferEventFilter = TypedEventFilter; +interface UnpausedLocallyEventObject { +} +type UnpausedLocallyEvent = TypedEvent<[], UnpausedLocallyEventObject>; +type UnpausedLocallyEventFilter = TypedEventFilter; +interface GyroEV2 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: GyroEV2Interface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise<[string]>; + _dSq(overrides?: CallOverrides): Promise<[BigNumber$1]>; + _paramsAlpha(overrides?: CallOverrides): Promise<[BigNumber$1]>; + _paramsBeta(overrides?: CallOverrides): Promise<[BigNumber$1]>; + _paramsC(overrides?: CallOverrides): Promise<[BigNumber$1]>; + _paramsLambda(overrides?: CallOverrides): Promise<[BigNumber$1]>; + _paramsS(overrides?: CallOverrides): Promise<[BigNumber$1]>; + _tauAlphaX(overrides?: CallOverrides): Promise<[BigNumber$1]>; + _tauAlphaY(overrides?: CallOverrides): Promise<[BigNumber$1]>; + _tauBetaX(overrides?: CallOverrides): Promise<[BigNumber$1]>; + _tauBetaY(overrides?: CallOverrides): Promise<[BigNumber$1]>; + _u(overrides?: CallOverrides): Promise<[BigNumber$1]>; + _v(overrides?: CallOverrides): Promise<[BigNumber$1]>; + _w(overrides?: CallOverrides): Promise<[BigNumber$1]>; + _z(overrides?: CallOverrides): Promise<[BigNumber$1]>; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + capManager(overrides?: CallOverrides): Promise<[string]>; + capParams(overrides?: CallOverrides): Promise<[ICappedLiquidity.CapParamsStructOutput]>; + changePauseManager(_pauseManager: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + decimals(overrides?: CallOverrides): Promise<[number]>; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + dirtyUninitializedOracleSamples(startIndex: PromiseOrValue, endIndex: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableOracle(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getECLPParams(overrides?: CallOverrides): Promise<[ + GyroECLPMath.ParamsStructOutput, + GyroECLPMath.DerivedParamsStructOutput + ] & { + params: GyroECLPMath.ParamsStructOutput; + d: GyroECLPMath.DerivedParamsStructOutput; + }>; + getInvariant(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getLargestSafeQueryWindow(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getLastInvariant(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getLatest(variable: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + getMiscData(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + boolean, + BigNumber$1 + ] & { + logInvariant: BigNumber$1; + logTotalSupply: BigNumber$1; + oracleSampleCreationTimestamp: BigNumber$1; + oracleIndex: BigNumber$1; + oracleEnabled: boolean; + swapFeePercentage: BigNumber$1; + }>; + getNormalizedWeights(overrides?: CallOverrides): Promise<[BigNumber$1[]]>; + getOwner(overrides?: CallOverrides): Promise<[string]>; + getPastAccumulators(queries: IPriceOracle.OracleAccumulatorQueryStruct[], overrides?: CallOverrides): Promise<[BigNumber$1[]] & { + results: BigNumber$1[]; + }>; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise<[string]>; + getPrice(overrides?: CallOverrides): Promise<[BigNumber$1] & { + spotPrice: BigNumber$1; + }>; + getRate(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getSample(index: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + logPairPrice: BigNumber$1; + accLogPairPrice: BigNumber$1; + logBptPrice: BigNumber$1; + accLogBptPrice: BigNumber$1; + logInvariant: BigNumber$1; + accLogInvariant: BigNumber$1; + timestamp: BigNumber$1; + }>; + getSwapFeePercentage(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getTimeWeightedAverage(queries: IPriceOracle.OracleAverageQueryStruct[], overrides?: CallOverrides): Promise<[BigNumber$1[]] & { + results: BigNumber$1[]; + }>; + getTokenRates(overrides?: CallOverrides): Promise<[BigNumber$1, BigNumber$1] & { + rate0: BigNumber$1; + rate1: BigNumber$1; + }>; + getTotalSamples(overrides?: CallOverrides): Promise<[BigNumber$1]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + gyroConfig(overrides?: CallOverrides): Promise<[string]>; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise<[string]>; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(request: IPoolSwapStructs.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pauseManager(overrides?: CallOverrides): Promise<[string]>; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptIn: BigNumber$1; + amountsOut: BigNumber$1[]; + }>; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptOut: BigNumber$1; + amountsIn: BigNumber$1[]; + }>; + rateProvider0(overrides?: CallOverrides): Promise<[string]>; + rateProvider1(overrides?: CallOverrides): Promise<[string]>; + setCapManager(_capManager: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setCapParams(params: ICappedLiquidity.CapParamsStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise<[string]>; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + _dSq(overrides?: CallOverrides): Promise; + _paramsAlpha(overrides?: CallOverrides): Promise; + _paramsBeta(overrides?: CallOverrides): Promise; + _paramsC(overrides?: CallOverrides): Promise; + _paramsLambda(overrides?: CallOverrides): Promise; + _paramsS(overrides?: CallOverrides): Promise; + _tauAlphaX(overrides?: CallOverrides): Promise; + _tauAlphaY(overrides?: CallOverrides): Promise; + _tauBetaX(overrides?: CallOverrides): Promise; + _tauBetaY(overrides?: CallOverrides): Promise; + _u(overrides?: CallOverrides): Promise; + _v(overrides?: CallOverrides): Promise; + _w(overrides?: CallOverrides): Promise; + _z(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + capManager(overrides?: CallOverrides): Promise; + capParams(overrides?: CallOverrides): Promise; + changePauseManager(_pauseManager: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + dirtyUninitializedOracleSamples(startIndex: PromiseOrValue, endIndex: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableOracle(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getECLPParams(overrides?: CallOverrides): Promise<[ + GyroECLPMath.ParamsStructOutput, + GyroECLPMath.DerivedParamsStructOutput + ] & { + params: GyroECLPMath.ParamsStructOutput; + d: GyroECLPMath.DerivedParamsStructOutput; + }>; + getInvariant(overrides?: CallOverrides): Promise; + getLargestSafeQueryWindow(overrides?: CallOverrides): Promise; + getLastInvariant(overrides?: CallOverrides): Promise; + getLatest(variable: PromiseOrValue, overrides?: CallOverrides): Promise; + getMiscData(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + boolean, + BigNumber$1 + ] & { + logInvariant: BigNumber$1; + logTotalSupply: BigNumber$1; + oracleSampleCreationTimestamp: BigNumber$1; + oracleIndex: BigNumber$1; + oracleEnabled: boolean; + swapFeePercentage: BigNumber$1; + }>; + getNormalizedWeights(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPastAccumulators(queries: IPriceOracle.OracleAccumulatorQueryStruct[], overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getPrice(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getSample(index: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + logPairPrice: BigNumber$1; + accLogPairPrice: BigNumber$1; + logBptPrice: BigNumber$1; + accLogBptPrice: BigNumber$1; + logInvariant: BigNumber$1; + accLogInvariant: BigNumber$1; + timestamp: BigNumber$1; + }>; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTimeWeightedAverage(queries: IPriceOracle.OracleAverageQueryStruct[], overrides?: CallOverrides): Promise; + getTokenRates(overrides?: CallOverrides): Promise<[BigNumber$1, BigNumber$1] & { + rate0: BigNumber$1; + rate1: BigNumber$1; + }>; + getTotalSamples(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + gyroConfig(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(request: IPoolSwapStructs.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pauseManager(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptIn: BigNumber$1; + amountsOut: BigNumber$1[]; + }>; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptOut: BigNumber$1; + amountsIn: BigNumber$1[]; + }>; + rateProvider0(overrides?: CallOverrides): Promise; + rateProvider1(overrides?: CallOverrides): Promise; + setCapManager(_capManager: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setCapParams(params: ICappedLiquidity.CapParamsStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + _dSq(overrides?: CallOverrides): Promise; + _paramsAlpha(overrides?: CallOverrides): Promise; + _paramsBeta(overrides?: CallOverrides): Promise; + _paramsC(overrides?: CallOverrides): Promise; + _paramsLambda(overrides?: CallOverrides): Promise; + _paramsS(overrides?: CallOverrides): Promise; + _tauAlphaX(overrides?: CallOverrides): Promise; + _tauAlphaY(overrides?: CallOverrides): Promise; + _tauBetaX(overrides?: CallOverrides): Promise; + _tauBetaY(overrides?: CallOverrides): Promise; + _u(overrides?: CallOverrides): Promise; + _v(overrides?: CallOverrides): Promise; + _w(overrides?: CallOverrides): Promise; + _z(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + capManager(overrides?: CallOverrides): Promise; + capParams(overrides?: CallOverrides): Promise; + changePauseManager(_pauseManager: PromiseOrValue, overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + dirtyUninitializedOracleSamples(startIndex: PromiseOrValue, endIndex: PromiseOrValue, overrides?: CallOverrides): Promise; + enableOracle(overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getECLPParams(overrides?: CallOverrides): Promise<[ + GyroECLPMath.ParamsStructOutput, + GyroECLPMath.DerivedParamsStructOutput + ] & { + params: GyroECLPMath.ParamsStructOutput; + d: GyroECLPMath.DerivedParamsStructOutput; + }>; + getInvariant(overrides?: CallOverrides): Promise; + getLargestSafeQueryWindow(overrides?: CallOverrides): Promise; + getLastInvariant(overrides?: CallOverrides): Promise; + getLatest(variable: PromiseOrValue, overrides?: CallOverrides): Promise; + getMiscData(overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + boolean, + BigNumber$1 + ] & { + logInvariant: BigNumber$1; + logTotalSupply: BigNumber$1; + oracleSampleCreationTimestamp: BigNumber$1; + oracleIndex: BigNumber$1; + oracleEnabled: boolean; + swapFeePercentage: BigNumber$1; + }>; + getNormalizedWeights(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPastAccumulators(queries: IPriceOracle.OracleAccumulatorQueryStruct[], overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise<[ + boolean, + BigNumber$1, + BigNumber$1 + ] & { + paused: boolean; + pauseWindowEndTime: BigNumber$1; + bufferPeriodEndTime: BigNumber$1; + }>; + getPoolId(overrides?: CallOverrides): Promise; + getPrice(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getSample(index: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + logPairPrice: BigNumber$1; + accLogPairPrice: BigNumber$1; + logBptPrice: BigNumber$1; + accLogBptPrice: BigNumber$1; + logInvariant: BigNumber$1; + accLogInvariant: BigNumber$1; + timestamp: BigNumber$1; + }>; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTimeWeightedAverage(queries: IPriceOracle.OracleAverageQueryStruct[], overrides?: CallOverrides): Promise; + getTokenRates(overrides?: CallOverrides): Promise<[BigNumber$1, BigNumber$1] & { + rate0: BigNumber$1; + rate1: BigNumber$1; + }>; + getTotalSamples(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + gyroConfig(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1[], BigNumber$1[]]>; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1[], + BigNumber$1[] + ] & { + amountsIn: BigNumber$1[]; + dueProtocolFeeAmounts: BigNumber$1[]; + }>; + onSwap(request: IPoolSwapStructs.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: CallOverrides): Promise; + pause(overrides?: CallOverrides): Promise; + pauseManager(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: CallOverrides): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptIn: BigNumber$1; + amountsOut: BigNumber$1[]; + }>; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1[] + ] & { + bptOut: BigNumber$1; + amountsIn: BigNumber$1[]; + }>; + rateProvider0(overrides?: CallOverrides): Promise; + rateProvider1(overrides?: CallOverrides): Promise; + setCapManager(_capManager: PromiseOrValue, overrides?: CallOverrides): Promise; + setCapParams(params: ICappedLiquidity.CapParamsStruct, overrides?: CallOverrides): Promise; + setPaused(paused: PromiseOrValue, overrides?: CallOverrides): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: CallOverrides): Promise; + unpause(overrides?: CallOverrides): Promise; + }; + filters: { + "Approval(address,address,uint256)"(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter; + Approval(owner?: PromiseOrValue | null, spender?: PromiseOrValue | null, value?: null): ApprovalEventFilter; + "CapManagerUpdated(address)"(capManager?: null): CapManagerUpdatedEventFilter; + CapManagerUpdated(capManager?: null): CapManagerUpdatedEventFilter; + "CapParamsUpdated(tuple)"(params?: null): CapParamsUpdatedEventFilter; + CapParamsUpdated(params?: null): CapParamsUpdatedEventFilter; + "ECLPDerivedParamsValidated(bool)"(derivedParamsValidated?: null): ECLPDerivedParamsValidatedEventFilter; + ECLPDerivedParamsValidated(derivedParamsValidated?: null): ECLPDerivedParamsValidatedEventFilter; + "ECLPParamsValidated(bool)"(paramsValidated?: null): ECLPParamsValidatedEventFilter; + ECLPParamsValidated(paramsValidated?: null): ECLPParamsValidatedEventFilter; + "InvariantAterInitializeJoin(uint256)"(invariantAfterJoin?: null): InvariantAterInitializeJoinEventFilter; + InvariantAterInitializeJoin(invariantAfterJoin?: null): InvariantAterInitializeJoinEventFilter; + "InvariantOldAndNew(uint256,uint256)"(oldInvariant?: null, newInvariant?: null): InvariantOldAndNewEventFilter; + InvariantOldAndNew(oldInvariant?: null, newInvariant?: null): InvariantOldAndNewEventFilter; + "OracleEnabledChanged(bool)"(enabled?: null): OracleEnabledChangedEventFilter; + OracleEnabledChanged(enabled?: null): OracleEnabledChangedEventFilter; + "OracleIndexUpdated(uint256)"(oracleUpdatedIndex?: null): OracleIndexUpdatedEventFilter; + OracleIndexUpdated(oracleUpdatedIndex?: null): OracleIndexUpdatedEventFilter; + "PauseManagerChanged(address,address)"(oldPauseManager?: null, newPauseManager?: null): PauseManagerChangedEventFilter; + PauseManagerChanged(oldPauseManager?: null, newPauseManager?: null): PauseManagerChangedEventFilter; + "PausedLocally()"(): PausedLocallyEventFilter; + PausedLocally(): PausedLocallyEventFilter; + "PausedStateChanged(bool)"(paused?: null): PausedStateChangedEventFilter; + PausedStateChanged(paused?: null): PausedStateChangedEventFilter; + "SwapFeePercentageChanged(uint256)"(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter; + SwapFeePercentageChanged(swapFeePercentage?: null): SwapFeePercentageChangedEventFilter; + "SwapParams(uint256[],tuple,uint256)"(balances?: null, invariant?: null, amount?: null): SwapParamsEventFilter; + SwapParams(balances?: null, invariant?: null, amount?: null): SwapParamsEventFilter; + "Transfer(address,address,uint256)"(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter; + Transfer(from?: PromiseOrValue | null, to?: PromiseOrValue | null, value?: null): TransferEventFilter; + "UnpausedLocally()"(): UnpausedLocallyEventFilter; + UnpausedLocally(): UnpausedLocallyEventFilter; + }; + estimateGas: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + _dSq(overrides?: CallOverrides): Promise; + _paramsAlpha(overrides?: CallOverrides): Promise; + _paramsBeta(overrides?: CallOverrides): Promise; + _paramsC(overrides?: CallOverrides): Promise; + _paramsLambda(overrides?: CallOverrides): Promise; + _paramsS(overrides?: CallOverrides): Promise; + _tauAlphaX(overrides?: CallOverrides): Promise; + _tauAlphaY(overrides?: CallOverrides): Promise; + _tauBetaX(overrides?: CallOverrides): Promise; + _tauBetaY(overrides?: CallOverrides): Promise; + _u(overrides?: CallOverrides): Promise; + _v(overrides?: CallOverrides): Promise; + _w(overrides?: CallOverrides): Promise; + _z(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + capManager(overrides?: CallOverrides): Promise; + capParams(overrides?: CallOverrides): Promise; + changePauseManager(_pauseManager: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + dirtyUninitializedOracleSamples(startIndex: PromiseOrValue, endIndex: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableOracle(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getECLPParams(overrides?: CallOverrides): Promise; + getInvariant(overrides?: CallOverrides): Promise; + getLargestSafeQueryWindow(overrides?: CallOverrides): Promise; + getLastInvariant(overrides?: CallOverrides): Promise; + getLatest(variable: PromiseOrValue, overrides?: CallOverrides): Promise; + getMiscData(overrides?: CallOverrides): Promise; + getNormalizedWeights(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPastAccumulators(queries: IPriceOracle.OracleAccumulatorQueryStruct[], overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getPrice(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getSample(index: PromiseOrValue, overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTimeWeightedAverage(queries: IPriceOracle.OracleAverageQueryStruct[], overrides?: CallOverrides): Promise; + getTokenRates(overrides?: CallOverrides): Promise; + getTotalSamples(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + gyroConfig(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(request: IPoolSwapStructs.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pauseManager(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise; + rateProvider0(overrides?: CallOverrides): Promise; + rateProvider1(overrides?: CallOverrides): Promise; + setCapManager(_capManager: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setCapParams(params: ICappedLiquidity.CapParamsStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + DOMAIN_SEPARATOR(overrides?: CallOverrides): Promise; + _dSq(overrides?: CallOverrides): Promise; + _paramsAlpha(overrides?: CallOverrides): Promise; + _paramsBeta(overrides?: CallOverrides): Promise; + _paramsC(overrides?: CallOverrides): Promise; + _paramsLambda(overrides?: CallOverrides): Promise; + _paramsS(overrides?: CallOverrides): Promise; + _tauAlphaX(overrides?: CallOverrides): Promise; + _tauAlphaY(overrides?: CallOverrides): Promise; + _tauBetaX(overrides?: CallOverrides): Promise; + _tauBetaY(overrides?: CallOverrides): Promise; + _u(overrides?: CallOverrides): Promise; + _v(overrides?: CallOverrides): Promise; + _w(overrides?: CallOverrides): Promise; + _z(overrides?: CallOverrides): Promise; + allowance(owner: PromiseOrValue, spender: PromiseOrValue, overrides?: CallOverrides): Promise; + approve(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + balanceOf(account: PromiseOrValue, overrides?: CallOverrides): Promise; + capManager(overrides?: CallOverrides): Promise; + capParams(overrides?: CallOverrides): Promise; + changePauseManager(_pauseManager: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + decimals(overrides?: CallOverrides): Promise; + decreaseAllowance(spender: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + dirtyUninitializedOracleSamples(startIndex: PromiseOrValue, endIndex: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + enableOracle(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getECLPParams(overrides?: CallOverrides): Promise; + getInvariant(overrides?: CallOverrides): Promise; + getLargestSafeQueryWindow(overrides?: CallOverrides): Promise; + getLastInvariant(overrides?: CallOverrides): Promise; + getLatest(variable: PromiseOrValue, overrides?: CallOverrides): Promise; + getMiscData(overrides?: CallOverrides): Promise; + getNormalizedWeights(overrides?: CallOverrides): Promise; + getOwner(overrides?: CallOverrides): Promise; + getPastAccumulators(queries: IPriceOracle.OracleAccumulatorQueryStruct[], overrides?: CallOverrides): Promise; + getPausedState(overrides?: CallOverrides): Promise; + getPoolId(overrides?: CallOverrides): Promise; + getPrice(overrides?: CallOverrides): Promise; + getRate(overrides?: CallOverrides): Promise; + getSample(index: PromiseOrValue, overrides?: CallOverrides): Promise; + getSwapFeePercentage(overrides?: CallOverrides): Promise; + getTimeWeightedAverage(queries: IPriceOracle.OracleAverageQueryStruct[], overrides?: CallOverrides): Promise; + getTokenRates(overrides?: CallOverrides): Promise; + getTotalSamples(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + gyroConfig(overrides?: CallOverrides): Promise; + increaseAllowance(spender: PromiseOrValue, addedValue: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + name(overrides?: CallOverrides): Promise; + nonces(owner: PromiseOrValue, overrides?: CallOverrides): Promise; + onExitPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onJoinPool(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + onSwap(request: IPoolSwapStructs.SwapRequestStruct, balanceTokenIn: PromiseOrValue, balanceTokenOut: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + pauseManager(overrides?: CallOverrides): Promise; + permit(owner: PromiseOrValue, spender: PromiseOrValue, value: PromiseOrValue, deadline: PromiseOrValue, v: PromiseOrValue, r: PromiseOrValue, s: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + queryExit(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise; + queryJoin(poolId: PromiseOrValue, sender: PromiseOrValue, recipient: PromiseOrValue, balances: PromiseOrValue[], lastChangeBlock: PromiseOrValue, protocolSwapFeePercentage: PromiseOrValue, userData: PromiseOrValue, overrides?: CallOverrides): Promise; + rateProvider0(overrides?: CallOverrides): Promise; + rateProvider1(overrides?: CallOverrides): Promise; + setCapManager(_capManager: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setCapParams(params: ICappedLiquidity.CapParamsStruct, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setPaused(paused: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setSwapFeePercentage(swapFeePercentage: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer(recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + transferFrom(sender: PromiseOrValue, recipient: PromiseOrValue, amount: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + unpause(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +interface VeBalInterface extends utils.Interface { + functions: { + "token()": FunctionFragment; + "name()": FunctionFragment; + "symbol()": FunctionFragment; + "decimals()": FunctionFragment; + "admin()": FunctionFragment; + "commit_smart_wallet_checker(address)": FunctionFragment; + "apply_smart_wallet_checker()": FunctionFragment; + "get_last_user_slope(address)": FunctionFragment; + "user_point_history__ts(address,uint256)": FunctionFragment; + "locked__end(address)": FunctionFragment; + "checkpoint()": FunctionFragment; + "deposit_for(address,uint256)": FunctionFragment; + "create_lock(uint256,uint256)": FunctionFragment; + "increase_amount(uint256)": FunctionFragment; + "increase_unlock_time(uint256)": FunctionFragment; + "withdraw()": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "balanceOf(address,uint256)": FunctionFragment; + "balanceOfAt(address,uint256)": FunctionFragment; + "totalSupply()": FunctionFragment; + "totalSupply(uint256)": FunctionFragment; + "totalSupplyAt(uint256)": FunctionFragment; + "supply()": FunctionFragment; + "locked(address)": FunctionFragment; + "epoch()": FunctionFragment; + "point_history(uint256)": FunctionFragment; + "user_point_history(address,uint256)": FunctionFragment; + "user_point_epoch(address)": FunctionFragment; + "slope_changes(uint256)": FunctionFragment; + "future_smart_wallet_checker()": FunctionFragment; + "smart_wallet_checker()": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "token" | "name" | "symbol" | "decimals" | "admin" | "commit_smart_wallet_checker" | "apply_smart_wallet_checker" | "get_last_user_slope" | "user_point_history__ts" | "locked__end" | "checkpoint" | "deposit_for" | "create_lock" | "increase_amount" | "increase_unlock_time" | "withdraw" | "balanceOf(address)" | "balanceOf(address,uint256)" | "balanceOfAt" | "totalSupply()" | "totalSupply(uint256)" | "totalSupplyAt" | "supply" | "locked" | "epoch" | "point_history" | "user_point_history" | "user_point_epoch" | "slope_changes" | "future_smart_wallet_checker" | "smart_wallet_checker"): FunctionFragment; + encodeFunctionData(functionFragment: "token", values?: undefined): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "admin", values?: undefined): string; + encodeFunctionData(functionFragment: "commit_smart_wallet_checker", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "apply_smart_wallet_checker", values?: undefined): string; + encodeFunctionData(functionFragment: "get_last_user_slope", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "user_point_history__ts", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "locked__end", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "checkpoint", values?: undefined): string; + encodeFunctionData(functionFragment: "deposit_for", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "create_lock", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "increase_amount", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "increase_unlock_time", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "withdraw", values?: undefined): string; + encodeFunctionData(functionFragment: "balanceOf(address)", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOf(address,uint256)", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "balanceOfAt", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "totalSupply()", values?: undefined): string; + encodeFunctionData(functionFragment: "totalSupply(uint256)", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "totalSupplyAt", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "supply", values?: undefined): string; + encodeFunctionData(functionFragment: "locked", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "epoch", values?: undefined): string; + encodeFunctionData(functionFragment: "point_history", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "user_point_history", values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: "user_point_epoch", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "slope_changes", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "future_smart_wallet_checker", values?: undefined): string; + encodeFunctionData(functionFragment: "smart_wallet_checker", values?: undefined): string; + decodeFunctionResult(functionFragment: "token", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "admin", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "commit_smart_wallet_checker", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "apply_smart_wallet_checker", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "get_last_user_slope", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "user_point_history__ts", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "locked__end", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "checkpoint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "deposit_for", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "create_lock", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increase_amount", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "increase_unlock_time", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf(address)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf(address,uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOfAt", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply()", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupply(uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "totalSupplyAt", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "supply", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "locked", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "epoch", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "point_history", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "user_point_history", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "user_point_epoch", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "slope_changes", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "future_smart_wallet_checker", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "smart_wallet_checker", data: BytesLike): Result; + events: { + "Deposit(address,uint256,uint256,int128,uint256)": EventFragment; + "Withdraw(address,uint256,uint256)": EventFragment; + "Supply(uint256,uint256)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "Deposit"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Withdraw"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Supply"): EventFragment; +} +interface DepositEventObject { + provider: string; + value: BigNumber$1; + locktime: BigNumber$1; + type: BigNumber$1; + ts: BigNumber$1; +} +type DepositEvent = TypedEvent<[ + string, + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 +], DepositEventObject>; +type DepositEventFilter = TypedEventFilter; +interface WithdrawEventObject { + provider: string; + value: BigNumber$1; + ts: BigNumber$1; +} +type WithdrawEvent = TypedEvent<[ + string, + BigNumber$1, + BigNumber$1 +], WithdrawEventObject>; +type WithdrawEventFilter = TypedEventFilter; +interface SupplyEventObject { + prevSupply: BigNumber$1; + supply: BigNumber$1; +} +type SupplyEvent = TypedEvent<[BigNumber$1, BigNumber$1], SupplyEventObject>; +type SupplyEventFilter = TypedEventFilter; +interface VeBal$1 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: VeBalInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + token(overrides?: CallOverrides): Promise<[string]>; + name(overrides?: CallOverrides): Promise<[string]>; + symbol(overrides?: CallOverrides): Promise<[string]>; + decimals(overrides?: CallOverrides): Promise<[BigNumber$1]>; + admin(overrides?: CallOverrides): Promise<[string]>; + commit_smart_wallet_checker(addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + apply_smart_wallet_checker(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + get_last_user_slope(addr: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + user_point_history__ts(_addr: PromiseOrValue, _idx: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + locked__end(_addr: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + checkpoint(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + deposit_for(_addr: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + create_lock(_value: PromiseOrValue, _unlock_time: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + increase_amount(_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + increase_unlock_time(_unlock_time: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + withdraw(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "balanceOf(address)"(addr: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + "balanceOf(address,uint256)"(addr: PromiseOrValue, _t: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + balanceOfAt(addr: PromiseOrValue, _block: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + "totalSupply()"(overrides?: CallOverrides): Promise<[BigNumber$1]>; + "totalSupply(uint256)"(t: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + totalSupplyAt(_block: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + supply(overrides?: CallOverrides): Promise<[BigNumber$1]>; + locked(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[ + [BigNumber$1, BigNumber$1] & { + amount: BigNumber$1; + end: BigNumber$1; + } + ]>; + epoch(overrides?: CallOverrides): Promise<[BigNumber$1]>; + point_history(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[ + [ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + bias: BigNumber$1; + slope: BigNumber$1; + ts: BigNumber$1; + blk: BigNumber$1; + } + ]>; + user_point_history(arg0: PromiseOrValue, arg1: PromiseOrValue, overrides?: CallOverrides): Promise<[ + [ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + bias: BigNumber$1; + slope: BigNumber$1; + ts: BigNumber$1; + blk: BigNumber$1; + } + ]>; + user_point_epoch(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + slope_changes(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + future_smart_wallet_checker(overrides?: CallOverrides): Promise<[string]>; + smart_wallet_checker(overrides?: CallOverrides): Promise<[string]>; + }; + token(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + admin(overrides?: CallOverrides): Promise; + commit_smart_wallet_checker(addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + apply_smart_wallet_checker(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + get_last_user_slope(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + user_point_history__ts(_addr: PromiseOrValue, _idx: PromiseOrValue, overrides?: CallOverrides): Promise; + locked__end(_addr: PromiseOrValue, overrides?: CallOverrides): Promise; + checkpoint(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + deposit_for(_addr: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + create_lock(_value: PromiseOrValue, _unlock_time: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + increase_amount(_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + increase_unlock_time(_unlock_time: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + withdraw(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "balanceOf(address)"(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + "balanceOf(address,uint256)"(addr: PromiseOrValue, _t: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOfAt(addr: PromiseOrValue, _block: PromiseOrValue, overrides?: CallOverrides): Promise; + "totalSupply()"(overrides?: CallOverrides): Promise; + "totalSupply(uint256)"(t: PromiseOrValue, overrides?: CallOverrides): Promise; + totalSupplyAt(_block: PromiseOrValue, overrides?: CallOverrides): Promise; + supply(overrides?: CallOverrides): Promise; + locked(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1, BigNumber$1] & { + amount: BigNumber$1; + end: BigNumber$1; + }>; + epoch(overrides?: CallOverrides): Promise; + point_history(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + bias: BigNumber$1; + slope: BigNumber$1; + ts: BigNumber$1; + blk: BigNumber$1; + }>; + user_point_history(arg0: PromiseOrValue, arg1: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + bias: BigNumber$1; + slope: BigNumber$1; + ts: BigNumber$1; + blk: BigNumber$1; + }>; + user_point_epoch(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + slope_changes(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + future_smart_wallet_checker(overrides?: CallOverrides): Promise; + smart_wallet_checker(overrides?: CallOverrides): Promise; + callStatic: { + token(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + admin(overrides?: CallOverrides): Promise; + commit_smart_wallet_checker(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + apply_smart_wallet_checker(overrides?: CallOverrides): Promise; + get_last_user_slope(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + user_point_history__ts(_addr: PromiseOrValue, _idx: PromiseOrValue, overrides?: CallOverrides): Promise; + locked__end(_addr: PromiseOrValue, overrides?: CallOverrides): Promise; + checkpoint(overrides?: CallOverrides): Promise; + deposit_for(_addr: PromiseOrValue, _value: PromiseOrValue, overrides?: CallOverrides): Promise; + create_lock(_value: PromiseOrValue, _unlock_time: PromiseOrValue, overrides?: CallOverrides): Promise; + increase_amount(_value: PromiseOrValue, overrides?: CallOverrides): Promise; + increase_unlock_time(_unlock_time: PromiseOrValue, overrides?: CallOverrides): Promise; + withdraw(overrides?: CallOverrides): Promise; + "balanceOf(address)"(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + "balanceOf(address,uint256)"(addr: PromiseOrValue, _t: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOfAt(addr: PromiseOrValue, _block: PromiseOrValue, overrides?: CallOverrides): Promise; + "totalSupply()"(overrides?: CallOverrides): Promise; + "totalSupply(uint256)"(t: PromiseOrValue, overrides?: CallOverrides): Promise; + totalSupplyAt(_block: PromiseOrValue, overrides?: CallOverrides): Promise; + supply(overrides?: CallOverrides): Promise; + locked(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1, BigNumber$1] & { + amount: BigNumber$1; + end: BigNumber$1; + }>; + epoch(overrides?: CallOverrides): Promise; + point_history(arg0: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + bias: BigNumber$1; + slope: BigNumber$1; + ts: BigNumber$1; + blk: BigNumber$1; + }>; + user_point_history(arg0: PromiseOrValue, arg1: PromiseOrValue, overrides?: CallOverrides): Promise<[ + BigNumber$1, + BigNumber$1, + BigNumber$1, + BigNumber$1 + ] & { + bias: BigNumber$1; + slope: BigNumber$1; + ts: BigNumber$1; + blk: BigNumber$1; + }>; + user_point_epoch(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + slope_changes(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + future_smart_wallet_checker(overrides?: CallOverrides): Promise; + smart_wallet_checker(overrides?: CallOverrides): Promise; + }; + filters: { + "Deposit(address,uint256,uint256,int128,uint256)"(provider?: PromiseOrValue | null, value?: null, locktime?: PromiseOrValue | null, type?: null, ts?: null): DepositEventFilter; + Deposit(provider?: PromiseOrValue | null, value?: null, locktime?: PromiseOrValue | null, type?: null, ts?: null): DepositEventFilter; + "Withdraw(address,uint256,uint256)"(provider?: PromiseOrValue | null, value?: null, ts?: null): WithdrawEventFilter; + Withdraw(provider?: PromiseOrValue | null, value?: null, ts?: null): WithdrawEventFilter; + "Supply(uint256,uint256)"(prevSupply?: null, supply?: null): SupplyEventFilter; + Supply(prevSupply?: null, supply?: null): SupplyEventFilter; + }; + estimateGas: { + token(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + admin(overrides?: CallOverrides): Promise; + commit_smart_wallet_checker(addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + apply_smart_wallet_checker(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + get_last_user_slope(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + user_point_history__ts(_addr: PromiseOrValue, _idx: PromiseOrValue, overrides?: CallOverrides): Promise; + locked__end(_addr: PromiseOrValue, overrides?: CallOverrides): Promise; + checkpoint(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + deposit_for(_addr: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + create_lock(_value: PromiseOrValue, _unlock_time: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + increase_amount(_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + increase_unlock_time(_unlock_time: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + withdraw(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "balanceOf(address)"(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + "balanceOf(address,uint256)"(addr: PromiseOrValue, _t: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOfAt(addr: PromiseOrValue, _block: PromiseOrValue, overrides?: CallOverrides): Promise; + "totalSupply()"(overrides?: CallOverrides): Promise; + "totalSupply(uint256)"(t: PromiseOrValue, overrides?: CallOverrides): Promise; + totalSupplyAt(_block: PromiseOrValue, overrides?: CallOverrides): Promise; + supply(overrides?: CallOverrides): Promise; + locked(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + epoch(overrides?: CallOverrides): Promise; + point_history(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + user_point_history(arg0: PromiseOrValue, arg1: PromiseOrValue, overrides?: CallOverrides): Promise; + user_point_epoch(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + slope_changes(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + future_smart_wallet_checker(overrides?: CallOverrides): Promise; + smart_wallet_checker(overrides?: CallOverrides): Promise; + }; + populateTransaction: { + token(overrides?: CallOverrides): Promise; + name(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + decimals(overrides?: CallOverrides): Promise; + admin(overrides?: CallOverrides): Promise; + commit_smart_wallet_checker(addr: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + apply_smart_wallet_checker(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + get_last_user_slope(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + user_point_history__ts(_addr: PromiseOrValue, _idx: PromiseOrValue, overrides?: CallOverrides): Promise; + locked__end(_addr: PromiseOrValue, overrides?: CallOverrides): Promise; + checkpoint(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + deposit_for(_addr: PromiseOrValue, _value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + create_lock(_value: PromiseOrValue, _unlock_time: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + increase_amount(_value: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + increase_unlock_time(_unlock_time: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + withdraw(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + "balanceOf(address)"(addr: PromiseOrValue, overrides?: CallOverrides): Promise; + "balanceOf(address,uint256)"(addr: PromiseOrValue, _t: PromiseOrValue, overrides?: CallOverrides): Promise; + balanceOfAt(addr: PromiseOrValue, _block: PromiseOrValue, overrides?: CallOverrides): Promise; + "totalSupply()"(overrides?: CallOverrides): Promise; + "totalSupply(uint256)"(t: PromiseOrValue, overrides?: CallOverrides): Promise; + totalSupplyAt(_block: PromiseOrValue, overrides?: CallOverrides): Promise; + supply(overrides?: CallOverrides): Promise; + locked(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + epoch(overrides?: CallOverrides): Promise; + point_history(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + user_point_history(arg0: PromiseOrValue, arg1: PromiseOrValue, overrides?: CallOverrides): Promise; + user_point_epoch(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + slope_changes(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + future_smart_wallet_checker(overrides?: CallOverrides): Promise; + smart_wallet_checker(overrides?: CallOverrides): Promise; + }; +} + +interface VeDelegationProxyInterface extends utils.Interface { + functions: { + "adjustedBalanceOf(address)": FunctionFragment; + "adjusted_balance_of(address)": FunctionFragment; + "getActionId(bytes4)": FunctionFragment; + "getAuthorizer()": FunctionFragment; + "getDelegationImplementation()": FunctionFragment; + "getVault()": FunctionFragment; + "getVotingEscrow()": FunctionFragment; + "killDelegation()": FunctionFragment; + "setDelegation(address)": FunctionFragment; + }; + getFunction(nameOrSignatureOrTopic: "adjustedBalanceOf" | "adjusted_balance_of" | "getActionId" | "getAuthorizer" | "getDelegationImplementation" | "getVault" | "getVotingEscrow" | "killDelegation" | "setDelegation"): FunctionFragment; + encodeFunctionData(functionFragment: "adjustedBalanceOf", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "adjusted_balance_of", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getActionId", values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: "getAuthorizer", values?: undefined): string; + encodeFunctionData(functionFragment: "getDelegationImplementation", values?: undefined): string; + encodeFunctionData(functionFragment: "getVault", values?: undefined): string; + encodeFunctionData(functionFragment: "getVotingEscrow", values?: undefined): string; + encodeFunctionData(functionFragment: "killDelegation", values?: undefined): string; + encodeFunctionData(functionFragment: "setDelegation", values: [PromiseOrValue]): string; + decodeFunctionResult(functionFragment: "adjustedBalanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "adjusted_balance_of", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getActionId", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getAuthorizer", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getDelegationImplementation", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVault", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getVotingEscrow", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "killDelegation", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setDelegation", data: BytesLike): Result; + events: { + "DelegationImplementationUpdated(address)": EventFragment; + }; + getEvent(nameOrSignatureOrTopic: "DelegationImplementationUpdated"): EventFragment; +} +interface DelegationImplementationUpdatedEventObject { + newImplementation: string; +} +type DelegationImplementationUpdatedEvent = TypedEvent<[ + string +], DelegationImplementationUpdatedEventObject>; +type DelegationImplementationUpdatedEventFilter = TypedEventFilter; +interface VeDelegationProxy extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + interface: VeDelegationProxyInterface; + queryFilter(event: TypedEventFilter, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise>; + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + functions: { + adjustedBalanceOf(user: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + adjusted_balance_of(user: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber$1]>; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + getAuthorizer(overrides?: CallOverrides): Promise<[string]>; + getDelegationImplementation(overrides?: CallOverrides): Promise<[string]>; + getVault(overrides?: CallOverrides): Promise<[string]>; + getVotingEscrow(overrides?: CallOverrides): Promise<[string]>; + killDelegation(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setDelegation(delegation: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + adjustedBalanceOf(user: PromiseOrValue, overrides?: CallOverrides): Promise; + adjusted_balance_of(user: PromiseOrValue, overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getDelegationImplementation(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVotingEscrow(overrides?: CallOverrides): Promise; + killDelegation(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setDelegation(delegation: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + callStatic: { + adjustedBalanceOf(user: PromiseOrValue, overrides?: CallOverrides): Promise; + adjusted_balance_of(user: PromiseOrValue, overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getDelegationImplementation(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVotingEscrow(overrides?: CallOverrides): Promise; + killDelegation(overrides?: CallOverrides): Promise; + setDelegation(delegation: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + filters: { + "DelegationImplementationUpdated(address)"(newImplementation?: PromiseOrValue | null): DelegationImplementationUpdatedEventFilter; + DelegationImplementationUpdated(newImplementation?: PromiseOrValue | null): DelegationImplementationUpdatedEventFilter; + }; + estimateGas: { + adjustedBalanceOf(user: PromiseOrValue, overrides?: CallOverrides): Promise; + adjusted_balance_of(user: PromiseOrValue, overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getDelegationImplementation(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVotingEscrow(overrides?: CallOverrides): Promise; + killDelegation(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setDelegation(delegation: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; + populateTransaction: { + adjustedBalanceOf(user: PromiseOrValue, overrides?: CallOverrides): Promise; + adjusted_balance_of(user: PromiseOrValue, overrides?: CallOverrides): Promise; + getActionId(selector: PromiseOrValue, overrides?: CallOverrides): Promise; + getAuthorizer(overrides?: CallOverrides): Promise; + getDelegationImplementation(overrides?: CallOverrides): Promise; + getVault(overrides?: CallOverrides): Promise; + getVotingEscrow(overrides?: CallOverrides): Promise; + killDelegation(overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + setDelegation(delegation: PromiseOrValue, overrides?: Overrides & { + from?: PromiseOrValue; + }): Promise; + }; +} + +declare class AaveLinearPool__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "mainToken"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "assetManager"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "version"; + readonly type: "string"; + }]; + readonly internalType: "struct AaveLinearPool.ConstructorArgs"; + readonly name: "args"; + readonly type: "tuple"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Approval"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "PausedStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "enabled"; + readonly type: "bool"; + }]; + readonly name: "RecoveryModeStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "SwapFeePercentageChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "lowerTarget"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }]; + readonly name: "TargetsSet"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Transfer"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "DOMAIN_SEPARATOR"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }]; + readonly name: "allowance"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "approve"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "balanceOf"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "decimals"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "decreaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "disableRecoveryMode"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "enableRecoveryMode"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getBptIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "pure"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getDomainSeparator"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getMainIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getMainToken"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "getNextNonce"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getOwner"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPausedState"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowEndTime"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodEndTime"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeesCollector"; + readonly outputs: readonly [{ + readonly internalType: "contract IProtocolFeesCollector"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getScalingFactors"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getSwapFeePercentage"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getTargets"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "lowerTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVirtualSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedToken"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedTokenRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "inRecoveryMode"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "addedValue"; + readonly type: "uint256"; + }]; + readonly name: "increaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "initialize"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "name"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly name: "nonces"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onExitPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFees"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onJoinPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFees"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "indexIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "indexOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "pause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "permit"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryExit"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryJoin"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptOut"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "setSwapFeePercentage"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "newLowerTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "newUpperTarget"; + readonly type: "uint256"; + }]; + readonly name: "setTargets"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "symbol"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "totalSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transfer"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transferFrom"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "unpause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "version"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): AaveLinearPoolInterface; + static connect(address: string, signerOrProvider: Signer | Provider): AaveLinearPool; +} + +declare class AaveLinearPoolFactory__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: "protocolFeeProvider"; + readonly type: "address"; + }, { + readonly internalType: "contract IBalancerQueries"; + readonly name: "queries"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "factoryVersion"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "poolVersion"; + readonly type: "string"; + }, { + readonly internalType: "uint256"; + readonly name: "initialPauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "uint256"; + readonly name: "protocolId"; + readonly type: "uint256"; + }]; + readonly name: "AaveLinearPoolCreated"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly []; + readonly name: "FactoryDisabled"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }]; + readonly name: "PoolCreated"; + readonly type: "event"; + }, { + readonly inputs: readonly [{ + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "mainToken"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolId"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "salt"; + readonly type: "bytes32"; + }]; + readonly name: "create"; + readonly outputs: readonly [{ + readonly internalType: "contract AaveLinearPool"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "disable"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCreationCode"; + readonly outputs: readonly [{ + readonly internalType: "bytes"; + readonly name: ""; + readonly type: "bytes"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCreationCodeContracts"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: "contractA"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "contractB"; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getLastCreatedPool"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPauseConfiguration"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolVersion"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeePercentagesProvider"; + readonly outputs: readonly [{ + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "isDisabled"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }]; + readonly name: "isPoolFromFactory"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "version"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): AaveLinearPoolFactoryInterface; + static connect(address: string, signerOrProvider: Signer | Provider): AaveLinearPoolFactory; +} + +declare class AaveWrapping__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "approveVault"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IStaticATokenLM"; + readonly name: "staticToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bool"; + readonly name: "toUnderlying"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "unwrapAaveStaticToken"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IStaticATokenLM"; + readonly name: "staticToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bool"; + readonly name: "fromUnderlying"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "wrapAaveDynamicToken"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }]; + static createInterface(): AaveWrappingInterface; + static connect(address: string, signerOrProvider: Signer | Provider): AaveWrapping; +} + +declare class Authoriser__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "admin"; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "bytes32"; + readonly name: "role"; + readonly type: "bytes32"; + }, { + readonly indexed: true; + readonly internalType: "bytes32"; + readonly name: "previousAdminRole"; + readonly type: "bytes32"; + }, { + readonly indexed: true; + readonly internalType: "bytes32"; + readonly name: "newAdminRole"; + readonly type: "bytes32"; + }]; + readonly name: "RoleAdminChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "bytes32"; + readonly name: "role"; + readonly type: "bytes32"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }]; + readonly name: "RoleGranted"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "bytes32"; + readonly name: "role"; + readonly type: "bytes32"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }]; + readonly name: "RoleRevoked"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "DEFAULT_ADMIN_ROLE"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "actionId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly name: "canPerform"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "role"; + readonly type: "bytes32"; + }]; + readonly name: "getRoleAdmin"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "role"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "index"; + readonly type: "uint256"; + }]; + readonly name: "getRoleMember"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "role"; + readonly type: "bytes32"; + }]; + readonly name: "getRoleMemberCount"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "role"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "grantRole"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32[]"; + readonly name: "roles"; + readonly type: "bytes32[]"; + }, { + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "grantRoles"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32[]"; + readonly name: "roles"; + readonly type: "bytes32[]"; + }, { + readonly internalType: "address[]"; + readonly name: "accounts"; + readonly type: "address[]"; + }]; + readonly name: "grantRolesToMany"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "role"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "hasRole"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "role"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "renounceRole"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "role"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "revokeRole"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32[]"; + readonly name: "roles"; + readonly type: "bytes32[]"; + }, { + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "revokeRoles"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32[]"; + readonly name: "roles"; + readonly type: "bytes32[]"; + }, { + readonly internalType: "address[]"; + readonly name: "accounts"; + readonly type: "address[]"; + }]; + readonly name: "revokeRolesFromMany"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }]; + static createInterface(): AuthoriserInterface; + static connect(address: string, signerOrProvider: Signer | Provider): Authoriser; +} + +declare class BalancerHelpers__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "_vault"; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly components: readonly [{ + readonly internalType: "contract IAsset[]"; + readonly name: "assets"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "minAmountsOut"; + readonly type: "uint256[]"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }, { + readonly internalType: "bool"; + readonly name: "toInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.ExitPoolRequest"; + readonly name: "request"; + readonly type: "tuple"; + }]; + readonly name: "queryExit"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly components: readonly [{ + readonly internalType: "contract IAsset[]"; + readonly name: "assets"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "maxAmountsIn"; + readonly type: "uint256[]"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }, { + readonly internalType: "bool"; + readonly name: "fromInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.JoinPoolRequest"; + readonly name: "request"; + readonly type: "tuple"; + }]; + readonly name: "queryJoin"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptOut"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "vault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): BalancerHelpersInterface; + static connect(address: string, signerOrProvider: Signer | Provider): BalancerHelpers; +} + +declare class BalancerMinter__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IBalancerTokenAdmin"; + readonly name: "tokenAdmin"; + readonly type: "address"; + }, { + readonly internalType: "contract IGaugeController"; + readonly name: "gaugeController"; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "address"; + readonly name: "gauge"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "minted"; + readonly type: "uint256"; + }]; + readonly name: "Minted"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "minter"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "approval"; + readonly type: "bool"; + }]; + readonly name: "MinterApprovalSet"; + readonly type: "event"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "minter"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }]; + readonly name: "allowed_to_mint_for"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getBalancerToken"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getBalancerTokenAdmin"; + readonly outputs: readonly [{ + readonly internalType: "contract IBalancerTokenAdmin"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getDomainSeparator"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getGaugeController"; + readonly outputs: readonly [{ + readonly internalType: "contract IGaugeController"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "minter"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }]; + readonly name: "getMinterApproval"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }]; + readonly name: "getNextNonce"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "gauge"; + readonly type: "address"; + }]; + readonly name: "mint"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "gauge"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }]; + readonly name: "mintFor"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "gauges"; + readonly type: "address[]"; + }]; + readonly name: "mintMany"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "gauges"; + readonly type: "address[]"; + }, { + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }]; + readonly name: "mintManyFor"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "gauge"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }]; + readonly name: "mint_for"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[8]"; + readonly name: "gauges"; + readonly type: "address[8]"; + }]; + readonly name: "mint_many"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "gauge"; + readonly type: "address"; + }]; + readonly name: "minted"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "minter"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "approval"; + readonly type: "bool"; + }]; + readonly name: "setMinterApproval"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "minter"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "approval"; + readonly type: "bool"; + }, { + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "setMinterApprovalWithSignature"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "minter"; + readonly type: "address"; + }]; + readonly name: "toggle_approve_mint"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }]; + static createInterface(): BalancerMinterInterface; + static connect(address: string, signerOrProvider: Signer | Provider): BalancerMinter; +} + +declare class BalancerPoolDataQueries__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "_vault"; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "poolAddresses"; + readonly type: "address[]"; + }]; + readonly name: "getAmpForPools"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "poolAddresses"; + readonly type: "address[]"; + }]; + readonly name: "getInRecoveryModeForPools"; + readonly outputs: readonly [{ + readonly internalType: "bool[]"; + readonly name: ""; + readonly type: "bool[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "poolAddresses"; + readonly type: "address[]"; + }]; + readonly name: "getIsPausedForPools"; + readonly outputs: readonly [{ + readonly internalType: "bool[]"; + readonly name: ""; + readonly type: "bool[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "poolAddresses"; + readonly type: "address[]"; + }]; + readonly name: "getLinearTargetsForPools"; + readonly outputs: readonly [{ + readonly internalType: "uint256[][]"; + readonly name: ""; + readonly type: "uint256[][]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "poolAddresses"; + readonly type: "address[]"; + }]; + readonly name: "getNormalizedWeightsForPools"; + readonly outputs: readonly [{ + readonly internalType: "uint256[][]"; + readonly name: ""; + readonly type: "uint256[][]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32[]"; + readonly name: "poolIds"; + readonly type: "bytes32[]"; + }, { + readonly components: readonly [{ + readonly internalType: "bool"; + readonly name: "loadTokenBalanceUpdatesAfterBlock"; + readonly type: "bool"; + }, { + readonly internalType: "bool"; + readonly name: "loadTotalSupply"; + readonly type: "bool"; + }, { + readonly internalType: "bool"; + readonly name: "loadSwapFees"; + readonly type: "bool"; + }, { + readonly internalType: "bool"; + readonly name: "loadLinearWrappedTokenRates"; + readonly type: "bool"; + }, { + readonly internalType: "bool"; + readonly name: "loadLinearTargets"; + readonly type: "bool"; + }, { + readonly internalType: "bool"; + readonly name: "loadNormalizedWeights"; + readonly type: "bool"; + }, { + readonly internalType: "bool"; + readonly name: "loadScalingFactors"; + readonly type: "bool"; + }, { + readonly internalType: "bool"; + readonly name: "loadAmps"; + readonly type: "bool"; + }, { + readonly internalType: "bool"; + readonly name: "loadRates"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "blockNumber"; + readonly type: "uint256"; + }, { + readonly internalType: "enum TotalSupplyType[]"; + readonly name: "totalSupplyTypes"; + readonly type: "uint8[]"; + }, { + readonly internalType: "enum SwapFeeType[]"; + readonly name: "swapFeeTypes"; + readonly type: "uint8[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "linearPoolIdxs"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "weightedPoolIdxs"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "scalingFactorPoolIdxs"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "ampPoolIdxs"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "ratePoolIdxs"; + readonly type: "uint256[]"; + }]; + readonly internalType: "struct PoolDataQueryConfig"; + readonly name: "config"; + readonly type: "tuple"; + }]; + readonly name: "getPoolData"; + readonly outputs: readonly [{ + readonly internalType: "uint256[][]"; + readonly name: "balances"; + readonly type: "uint256[][]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "totalSupplies"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "swapFees"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "linearWrappedTokenRates"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[][]"; + readonly name: "linearTargets"; + readonly type: "uint256[][]"; + }, { + readonly internalType: "uint256[][]"; + readonly name: "weights"; + readonly type: "uint256[][]"; + }, { + readonly internalType: "uint256[][]"; + readonly name: "scalingFactors"; + readonly type: "uint256[][]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amps"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "rates"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "ignoreIdxs"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32[]"; + readonly name: "poolIds"; + readonly type: "bytes32[]"; + }, { + readonly components: readonly [{ + readonly internalType: "bool"; + readonly name: "loadInRecoveryMode"; + readonly type: "bool"; + }, { + readonly internalType: "bool"; + readonly name: "loadIsPaused"; + readonly type: "bool"; + }]; + readonly internalType: "struct PoolStatusQueryConfig"; + readonly name: "config"; + readonly type: "tuple"; + }]; + readonly name: "getPoolStatus"; + readonly outputs: readonly [{ + readonly internalType: "bool[]"; + readonly name: "isPaused"; + readonly type: "bool[]"; + }, { + readonly internalType: "bool[]"; + readonly name: "inRecoveryMode"; + readonly type: "bool[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32[]"; + readonly name: "poolIds"; + readonly type: "bytes32[]"; + }, { + readonly internalType: "uint256"; + readonly name: "blockNumber"; + readonly type: "uint256"; + }]; + readonly name: "getPoolTokenBalancesWithUpdatesAfterBlock"; + readonly outputs: readonly [{ + readonly internalType: "uint256[][]"; + readonly name: ""; + readonly type: "uint256[][]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "poolAddresses"; + readonly type: "address[]"; + }]; + readonly name: "getRateForPools"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "poolAddresses"; + readonly type: "address[]"; + }]; + readonly name: "getScalingFactorsForPools"; + readonly outputs: readonly [{ + readonly internalType: "uint256[][]"; + readonly name: ""; + readonly type: "uint256[][]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "poolAddresses"; + readonly type: "address[]"; + }, { + readonly internalType: "enum SwapFeeType[]"; + readonly name: "swapFeeTypes"; + readonly type: "uint8[]"; + }]; + readonly name: "getSwapFeePercentageForPools"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "poolAddresses"; + readonly type: "address[]"; + }, { + readonly internalType: "enum TotalSupplyType[]"; + readonly name: "totalSupplyTypes"; + readonly type: "uint8[]"; + }]; + readonly name: "getTotalSupplyForPools"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "poolAddresses"; + readonly type: "address[]"; + }]; + readonly name: "getWrappedTokenRateForLinearPools"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "vault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): BalancerPoolDataQueriesInterface; + static connect(address: string, signerOrProvider: Signer | Provider): BalancerPoolDataQueries; +} + +declare class BalancerRelayer__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "libraryAddress"; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly inputs: readonly []; + readonly name: "getLibrary"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes[]"; + readonly name: "data"; + readonly type: "bytes[]"; + }]; + readonly name: "multicall"; + readonly outputs: readonly [{ + readonly internalType: "bytes[]"; + readonly name: "results"; + readonly type: "bytes[]"; + }]; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly stateMutability: "payable"; + readonly type: "receive"; + }]; + static createInterface(): BalancerRelayerInterface; + static connect(address: string, signerOrProvider: Signer | Provider): BalancerRelayer; +} + +declare class BatchRelayerLibrary__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "wstETH"; + readonly type: "address"; + }, { + readonly internalType: "contract IBalancerMinter"; + readonly name: "minter"; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "approveVault"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly components: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "assetInIndex"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "assetOutIndex"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IVault.BatchSwapStep[]"; + readonly name: "swaps"; + readonly type: "tuple[]"; + }, { + readonly internalType: "contract IAsset[]"; + readonly name: "assets"; + readonly type: "address[]"; + }, { + readonly components: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "fromInternalBalance"; + readonly type: "bool"; + }, { + readonly internalType: "address payable"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "toInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.FundManagement"; + readonly name: "funds"; + readonly type: "tuple"; + }, { + readonly internalType: "int256[]"; + readonly name: "limits"; + readonly type: "int256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly components: readonly [{ + readonly internalType: "uint256"; + readonly name: "index"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "key"; + readonly type: "uint256"; + }]; + readonly internalType: "struct VaultActions.OutputReference[]"; + readonly name: "outputReferences"; + readonly type: "tuple[]"; + }]; + readonly name: "batchSwap"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "enum VaultActions.PoolKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address payable"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly components: readonly [{ + readonly internalType: "contract IAsset[]"; + readonly name: "assets"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "minAmountsOut"; + readonly type: "uint256[]"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }, { + readonly internalType: "bool"; + readonly name: "toInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.ExitPoolRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly components: readonly [{ + readonly internalType: "uint256"; + readonly name: "index"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "key"; + readonly type: "uint256"; + }]; + readonly internalType: "struct VaultActions.OutputReference[]"; + readonly name: "outputReferences"; + readonly type: "tuple[]"; + }]; + readonly name: "exitPool"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IStakingLiquidityGauge[]"; + readonly name: "gauges"; + readonly type: "address[]"; + }]; + readonly name: "gaugeClaimRewards"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IStakingLiquidityGauge"; + readonly name: "gauge"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "gaugeDeposit"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "gauges"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "gaugeMint"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bool"; + readonly name: "approval"; + readonly type: "bool"; + }, { + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "gaugeSetMinterApproval"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IStakingLiquidityGauge"; + readonly name: "gauge"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "gaugeWithdraw"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getEntrypoint"; + readonly outputs: readonly [{ + readonly internalType: "contract IBalancerRelayer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "enum VaultActions.PoolKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly components: readonly [{ + readonly internalType: "contract IAsset[]"; + readonly name: "assets"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "maxAmountsIn"; + readonly type: "uint256[]"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }, { + readonly internalType: "bool"; + readonly name: "fromInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.JoinPoolRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "joinPool"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.UserBalanceOpKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IAsset"; + readonly name: "asset"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address payable"; + readonly name: "recipient"; + readonly type: "address"; + }]; + readonly internalType: "struct IVault.UserBalanceOp[]"; + readonly name: "ops"; + readonly type: "tuple[]"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "manageUserBalance"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "ref"; + readonly type: "uint256"; + }]; + readonly name: "peekChainedReferenceValue"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "relayer"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "approved"; + readonly type: "bool"; + }, { + readonly internalType: "bytes"; + readonly name: "authorisation"; + readonly type: "bytes"; + }]; + readonly name: "setRelayerApproval"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "stakeETH"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "stakeETHAndWrap"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IAsset"; + readonly name: "assetIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IAsset"; + readonly name: "assetOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IVault.SingleSwap"; + readonly name: "singleSwap"; + readonly type: "tuple"; + }, { + readonly components: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "fromInternalBalance"; + readonly type: "bool"; + }, { + readonly internalType: "address payable"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "toInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.FundManagement"; + readonly name: "funds"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256"; + readonly name: "limit"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "swap"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IStaticATokenLM"; + readonly name: "staticToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bool"; + readonly name: "toUnderlying"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "unwrapAaveStaticToken"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract ICToken"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "unwrapCompoundV2"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IERC4626"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "unwrapERC4626"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IEulerToken"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "unwrapEuler"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IGearboxDieselToken"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "dieselAmount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "unwrapGearbox"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IReaperTokenVault"; + readonly name: "vaultToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "unwrapReaperVaultToken"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IShareToken"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "unwrapShareToken"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract ITetuSmartVault"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "unwrapTetu"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IUnbuttonToken"; + readonly name: "wrapperToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "unwrapUnbuttonToken"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "unwrapWstETH"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IYearnTokenVault"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "unwrapYearn"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IERC20Permit"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "vaultPermit"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IERC20PermitDAI"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "holder"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "nonce"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "expiry"; + readonly type: "uint256"; + }, { + readonly internalType: "bool"; + readonly name: "allowed"; + readonly type: "bool"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "vaultPermitDAI"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IStaticATokenLM"; + readonly name: "staticToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bool"; + readonly name: "fromUnderlying"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "wrapAaveDynamicToken"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract ICToken"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "wrapCompoundV2"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IERC4626"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "wrapERC4626"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IEulerToken"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "eulerProtocol"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "wrapEuler"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IGearboxDieselToken"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "mainAmount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "wrapGearbox"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IReaperTokenVault"; + readonly name: "vaultToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "wrapReaperVaultToken"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IShareToken"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "wrapShareToken"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "wrapStETH"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract ITetuSmartVault"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "wrapTetu"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IUnbuttonToken"; + readonly name: "wrapperToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "uAmount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "wrapUnbuttonToken"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IYearnTokenVault"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "outputReference"; + readonly type: "uint256"; + }]; + readonly name: "wrapYearn"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }]; + static createInterface(): BatchRelayerLibraryInterface; + static connect(address: string, signerOrProvider: Signer | Provider): BatchRelayerLibrary; +} + +declare class ComposableStablePool__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: "protocolFeeProvider"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20[]"; + readonly name: "tokens"; + readonly type: "address[]"; + }, { + readonly internalType: "contract IRateProvider[]"; + readonly name: "rateProviders"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "tokenRateCacheDurations"; + readonly type: "uint256[]"; + }, { + readonly internalType: "bool[]"; + readonly name: "exemptFromYieldProtocolFeeFlags"; + readonly type: "bool[]"; + }, { + readonly internalType: "uint256"; + readonly name: "amplificationParameter"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly internalType: "struct ComposableStablePool.NewPoolParams"; + readonly name: "params"; + readonly type: "tuple"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "startValue"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "endValue"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "startTime"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "endTime"; + readonly type: "uint256"; + }]; + readonly name: "AmpUpdateStarted"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "currentValue"; + readonly type: "uint256"; + }]; + readonly name: "AmpUpdateStopped"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Approval"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "PausedStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "uint256"; + readonly name: "feeType"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "protocolFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "ProtocolFeePercentageCacheUpdated"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "enabled"; + readonly type: "bool"; + }]; + readonly name: "RecoveryModeStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "SwapFeePercentageChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "uint256"; + readonly name: "tokenIndex"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "rate"; + readonly type: "uint256"; + }]; + readonly name: "TokenRateCacheUpdated"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "uint256"; + readonly name: "tokenIndex"; + readonly type: "uint256"; + }, { + readonly indexed: true; + readonly internalType: "contract IRateProvider"; + readonly name: "provider"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "cacheDuration"; + readonly type: "uint256"; + }]; + readonly name: "TokenRateProviderSet"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Transfer"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "DOMAIN_SEPARATOR"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }]; + readonly name: "allowance"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "approve"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "balanceOf"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "decimals"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "decreaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "disableRecoveryMode"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "enableRecoveryMode"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getActualSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAmplificationParameter"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "bool"; + readonly name: "isUpdating"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "precision"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getBptIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getDomainSeparator"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getLastJoinExitData"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "lastJoinExitAmplification"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "lastPostJoinExitInvariant"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getMinimumBpt"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "pure"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "getNextNonce"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getOwner"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPausedState"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowEndTime"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodEndTime"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "feeType"; + readonly type: "uint256"; + }]; + readonly name: "getProtocolFeePercentageCache"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeesCollector"; + readonly outputs: readonly [{ + readonly internalType: "contract IProtocolFeesCollector"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolSwapFeeDelegation"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getRateProviders"; + readonly outputs: readonly [{ + readonly internalType: "contract IRateProvider[]"; + readonly name: ""; + readonly type: "address[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getScalingFactors"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getSwapFeePercentage"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }]; + readonly name: "getTokenRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }]; + readonly name: "getTokenRateCache"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "rate"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "oldRate"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "duration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "expires"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "inRecoveryMode"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "addedValue"; + readonly type: "uint256"; + }]; + readonly name: "increaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }]; + readonly name: "isTokenExemptFromYieldProtocolFee"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "name"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly name: "nonces"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onExitPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onJoinPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "swapRequest"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "indexIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "indexOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "pause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "permit"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryExit"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryJoin"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptOut"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "poolConfig"; + readonly type: "bytes"; + }]; + readonly name: "setAssetManagerPoolConfig"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "setSwapFeePercentage"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "duration"; + readonly type: "uint256"; + }]; + readonly name: "setTokenRateCacheDuration"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "rawEndValue"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "endTime"; + readonly type: "uint256"; + }]; + readonly name: "startAmplificationParameterUpdate"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "stopAmplificationParameterUpdate"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "symbol"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "totalSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transfer"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transferFrom"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "unpause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "updateProtocolFeePercentageCache"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }]; + readonly name: "updateTokenRateCache"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }]; + static createInterface(): ComposableStablePoolInterface; + static connect(address: string, signerOrProvider: Signer | Provider): ComposableStablePool; +} + +declare class ComposableStablePoolFactory__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: "protocolFeeProvider"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "factoryVersion"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "poolVersion"; + readonly type: "string"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly []; + readonly name: "FactoryDisabled"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }]; + readonly name: "PoolCreated"; + readonly type: "event"; + }, { + readonly inputs: readonly [{ + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20[]"; + readonly name: "tokens"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256"; + readonly name: "amplificationParameter"; + readonly type: "uint256"; + }, { + readonly internalType: "contract IRateProvider[]"; + readonly name: "rateProviders"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "tokenRateCacheDurations"; + readonly type: "uint256[]"; + }, { + readonly internalType: "bool[]"; + readonly name: "exemptFromYieldProtocolFeeFlags"; + readonly type: "bool[]"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "bytes32"; + readonly name: "salt"; + readonly type: "bytes32"; + }]; + readonly name: "create"; + readonly outputs: readonly [{ + readonly internalType: "contract ComposableStablePool"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "disable"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCreationCode"; + readonly outputs: readonly [{ + readonly internalType: "bytes"; + readonly name: ""; + readonly type: "bytes"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCreationCodeContracts"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: "contractA"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "contractB"; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPauseConfiguration"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolVersion"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeePercentagesProvider"; + readonly outputs: readonly [{ + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "isDisabled"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }]; + readonly name: "isPoolFromFactory"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "version"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): ComposableStablePoolFactoryInterface; + static connect(address: string, signerOrProvider: Signer | Provider): ComposableStablePoolFactory; +} + +declare class ConvergentCurvePool__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: "_underlying"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "_bond"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "_expiration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "_unitSeconds"; + readonly type: "uint256"; + }, { + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "_percentFee"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "_percentFeeGov"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "_governance"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Approval"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "collectedBase"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "collectedBond"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "remainingBase"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "remainingBond"; + readonly type: "uint256"; + }]; + readonly name: "FeeCollection"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Transfer"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "DOMAIN_SEPARATOR"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "FEE_BOUND"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }]; + readonly name: "allowance"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "approve"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "balanceOf"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "bond"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "bondDecimals"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "decimals"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "pure"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "decreaseApproval"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "expiration"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "feesBond"; + readonly outputs: readonly [{ + readonly internalType: "uint128"; + readonly name: ""; + readonly type: "uint128"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "feesUnderlying"; + readonly outputs: readonly [{ + readonly internalType: "uint128"; + readonly name: ""; + readonly type: "uint128"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "governance"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "increaseApproval"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "name"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly name: "nonces"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "currentBalances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFee"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onExitPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFeeAmounts"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "currentBalances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFee"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onJoinPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFeeAmounts"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "swapRequest"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256"; + readonly name: "currentBalanceTokenIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "currentBalanceTokenOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "percentFee"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "percentFeeGov"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "permit"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "amountX"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "reserveX"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "reserveY"; + readonly type: "uint256"; + }, { + readonly internalType: "bool"; + readonly name: "out"; + readonly type: "bool"; + }]; + readonly name: "solveTradeInvariant"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "symbol"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "totalSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transfer"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transferFrom"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "underlying"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "underlyingDecimals"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "unitSeconds"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): ConvergentCurvePoolInterface; + static connect(address: string, signerOrProvider: Signer | Provider): ConvergentCurvePool; +} + +declare class ERC20__factory { + static readonly abi: readonly [{ + readonly constant: true; + readonly inputs: readonly []; + readonly name: "name"; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "string"; + }]; + readonly payable: false; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly constant: false; + readonly inputs: readonly [{ + readonly name: "_spender"; + readonly type: "address"; + }, { + readonly name: "_value"; + readonly type: "uint256"; + }]; + readonly name: "approve"; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "bool"; + }]; + readonly payable: false; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly constant: true; + readonly inputs: readonly []; + readonly name: "totalSupply"; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + readonly payable: false; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly constant: false; + readonly inputs: readonly [{ + readonly name: "_from"; + readonly type: "address"; + }, { + readonly name: "_to"; + readonly type: "address"; + }, { + readonly name: "_value"; + readonly type: "uint256"; + }]; + readonly name: "transferFrom"; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "bool"; + }]; + readonly payable: false; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly constant: true; + readonly inputs: readonly []; + readonly name: "decimals"; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint8"; + }]; + readonly payable: false; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly constant: true; + readonly inputs: readonly [{ + readonly name: "_owner"; + readonly type: "address"; + }]; + readonly name: "balanceOf"; + readonly outputs: readonly [{ + readonly name: "balance"; + readonly type: "uint256"; + }]; + readonly payable: false; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly constant: true; + readonly inputs: readonly []; + readonly name: "symbol"; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "string"; + }]; + readonly payable: false; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly constant: false; + readonly inputs: readonly [{ + readonly name: "_to"; + readonly type: "address"; + }, { + readonly name: "_value"; + readonly type: "uint256"; + }]; + readonly name: "transfer"; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "bool"; + }]; + readonly payable: false; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly constant: true; + readonly inputs: readonly [{ + readonly name: "_owner"; + readonly type: "address"; + }, { + readonly name: "_spender"; + readonly type: "address"; + }]; + readonly name: "allowance"; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + readonly payable: false; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly payable: true; + readonly stateMutability: "payable"; + readonly type: "fallback"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Approval"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly name: "from"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly name: "to"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Transfer"; + readonly type: "event"; + }]; + static createInterface(): ERC20Interface; + static connect(address: string, signerOrProvider: Signer | Provider): ERC20; +} + +declare class ERC4626LinearPool__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "mainToken"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "assetManager"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "version"; + readonly type: "string"; + }]; + readonly internalType: "struct ERC4626LinearPool.ConstructorArgs"; + readonly name: "args"; + readonly type: "tuple"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Approval"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "PausedStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "enabled"; + readonly type: "bool"; + }]; + readonly name: "RecoveryModeStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "SwapFeePercentageChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "lowerTarget"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }]; + readonly name: "TargetsSet"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Transfer"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "DOMAIN_SEPARATOR"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }]; + readonly name: "allowance"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "approve"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "balanceOf"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "decimals"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "decreaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "disableRecoveryMode"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "enableRecoveryMode"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getBptIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "pure"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getDomainSeparator"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getMainIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getMainToken"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "getNextNonce"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getOwner"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPausedState"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowEndTime"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodEndTime"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeesCollector"; + readonly outputs: readonly [{ + readonly internalType: "contract IProtocolFeesCollector"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getScalingFactors"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getSwapFeePercentage"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getTargets"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "lowerTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVirtualSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedToken"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedTokenRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "inRecoveryMode"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "addedValue"; + readonly type: "uint256"; + }]; + readonly name: "increaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "initialize"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "name"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly name: "nonces"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onExitPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFees"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onJoinPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFees"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "indexIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "indexOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "pause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "permit"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryExit"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryJoin"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptOut"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "setSwapFeePercentage"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "newLowerTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "newUpperTarget"; + readonly type: "uint256"; + }]; + readonly name: "setTargets"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "symbol"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "totalSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transfer"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transferFrom"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "unpause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "version"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): ERC4626LinearPoolInterface; + static connect(address: string, signerOrProvider: Signer | Provider): ERC4626LinearPool; +} + +declare class ERC4626LinearPoolFactory__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: "protocolFeeProvider"; + readonly type: "address"; + }, { + readonly internalType: "contract IBalancerQueries"; + readonly name: "queries"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "factoryVersion"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "poolVersion"; + readonly type: "string"; + }, { + readonly internalType: "uint256"; + readonly name: "initialPauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "uint256"; + readonly name: "protocolId"; + readonly type: "uint256"; + }]; + readonly name: "Erc4626LinearPoolCreated"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly []; + readonly name: "FactoryDisabled"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }]; + readonly name: "PoolCreated"; + readonly type: "event"; + }, { + readonly inputs: readonly [{ + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "mainToken"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolId"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "salt"; + readonly type: "bytes32"; + }]; + readonly name: "create"; + readonly outputs: readonly [{ + readonly internalType: "contract LinearPool"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "disable"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCreationCode"; + readonly outputs: readonly [{ + readonly internalType: "bytes"; + readonly name: ""; + readonly type: "bytes"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCreationCodeContracts"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: "contractA"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "contractB"; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getLastCreatedPool"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPauseConfiguration"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolVersion"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeePercentagesProvider"; + readonly outputs: readonly [{ + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "isDisabled"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }]; + readonly name: "isPoolFromFactory"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "version"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): ERC4626LinearPoolFactoryInterface; + static connect(address: string, signerOrProvider: Signer | Provider): ERC4626LinearPoolFactory; +} + +declare class EulerLinearPool__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "mainToken"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "assetManager"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "version"; + readonly type: "string"; + }]; + readonly internalType: "struct EulerLinearPool.ConstructorArgs"; + readonly name: "args"; + readonly type: "tuple"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Approval"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "PausedStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "enabled"; + readonly type: "bool"; + }]; + readonly name: "RecoveryModeStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "SwapFeePercentageChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "lowerTarget"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }]; + readonly name: "TargetsSet"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Transfer"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "DOMAIN_SEPARATOR"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }]; + readonly name: "allowance"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "approve"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "balanceOf"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "decimals"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "decreaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "disableRecoveryMode"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "enableRecoveryMode"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getBptIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "pure"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getDomainSeparator"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getMainIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getMainToken"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "getNextNonce"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getOwner"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPausedState"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowEndTime"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodEndTime"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeesCollector"; + readonly outputs: readonly [{ + readonly internalType: "contract IProtocolFeesCollector"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getScalingFactors"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getSwapFeePercentage"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getTargets"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "lowerTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVirtualSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedToken"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedTokenRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "inRecoveryMode"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "addedValue"; + readonly type: "uint256"; + }]; + readonly name: "increaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "initialize"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "name"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly name: "nonces"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onExitPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFees"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onJoinPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFees"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "indexIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "indexOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "pause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "permit"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryExit"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryJoin"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptOut"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "setSwapFeePercentage"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "newLowerTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "newUpperTarget"; + readonly type: "uint256"; + }]; + readonly name: "setTargets"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "symbol"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "totalSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transfer"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transferFrom"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "unpause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "version"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): EulerLinearPoolInterface; + static connect(address: string, signerOrProvider: Signer | Provider): EulerLinearPool; +} + +declare class EulerLinearPoolFactory__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: "protocolFeeProvider"; + readonly type: "address"; + }, { + readonly internalType: "contract IBalancerQueries"; + readonly name: "queries"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "factoryVersion"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "poolVersion"; + readonly type: "string"; + }, { + readonly internalType: "uint256"; + readonly name: "initialPauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "_eulerProtocol"; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "uint256"; + readonly name: "protocolId"; + readonly type: "uint256"; + }]; + readonly name: "EulerLinearPoolCreated"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly []; + readonly name: "FactoryDisabled"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }]; + readonly name: "PoolCreated"; + readonly type: "event"; + }, { + readonly inputs: readonly [{ + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "mainToken"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolId"; + readonly type: "uint256"; + }]; + readonly name: "create"; + readonly outputs: readonly [{ + readonly internalType: "contract LinearPool"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "disable"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "eulerProtocol"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCreationCode"; + readonly outputs: readonly [{ + readonly internalType: "bytes"; + readonly name: ""; + readonly type: "bytes"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCreationCodeContracts"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: "contractA"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "contractB"; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getLastCreatedPool"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPauseConfiguration"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolVersion"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeePercentagesProvider"; + readonly outputs: readonly [{ + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "isDisabled"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }]; + readonly name: "isPoolFromFactory"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "version"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): EulerLinearPoolFactoryInterface; + static connect(address: string, signerOrProvider: Signer | Provider): EulerLinearPoolFactory; +} + +declare class FXPool__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "_assetsToRegister"; + readonly type: "address[]"; + }, { + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "_protocolPercentFee"; + readonly type: "uint256"; + }, { + readonly internalType: "string"; + readonly name: "_name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "_symbol"; + readonly type: "string"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Approval"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "numeraire"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "reserve"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "weight"; + readonly type: "uint256"; + }]; + readonly name: "AssetIncluded"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "derivative"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "numeraire"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "reserve"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "address"; + readonly name: "assimilator"; + readonly type: "address"; + }]; + readonly name: "AssimilatorIncluded"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "address"; + readonly name: "newCollector"; + readonly type: "address"; + }]; + readonly name: "ChangeCollectorAddress"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "isEmergency"; + readonly type: "bool"; + }]; + readonly name: "EmergencyAlarm"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "lptAmountBurned"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256[]"; + readonly name: "amountsWithdrawn"; + readonly type: "uint256[]"; + }]; + readonly name: "EmergencyWithdraw"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "feesCollected"; + readonly type: "uint256"; + }]; + readonly name: "FeesAccrued"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "feesCollected"; + readonly type: "uint256"; + }]; + readonly name: "FeesCollected"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "lptAmountBurned"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256[]"; + readonly name: "amountsWithdrawn"; + readonly type: "uint256[]"; + }]; + readonly name: "OnExitPool"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "lptAmountMinted"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256[]"; + readonly name: "amountsDeposited"; + readonly type: "uint256[]"; + }]; + readonly name: "OnJoinPool"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "previousOwner"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "newOwner"; + readonly type: "address"; + }]; + readonly name: "OwnershipTransferred"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "alpha"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "beta"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "delta"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "epsilon"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "lambda"; + readonly type: "uint256"; + }]; + readonly name: "ParametersSet"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "Paused"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "address"; + readonly name: "updater"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "newProtocolPercentage"; + readonly type: "uint256"; + }]; + readonly name: "ProtocolFeeShareUpdated"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "trader"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "origin"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "target"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "originAmount"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "targetAmount"; + readonly type: "uint256"; + }]; + readonly name: "Trade"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Transfer"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "Unpaused"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "DOMAIN_SEPARATOR"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }]; + readonly name: "allowance"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "approve"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "_derivative"; + readonly type: "address"; + }]; + readonly name: "assimilator"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: "assimilator_"; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "balanceOf"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "collectorAddress"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "curve"; + readonly outputs: readonly [{ + readonly internalType: "int128"; + readonly name: "alpha"; + readonly type: "int128"; + }, { + readonly internalType: "int128"; + readonly name: "beta"; + readonly type: "int128"; + }, { + readonly internalType: "int128"; + readonly name: "delta"; + readonly type: "int128"; + }, { + readonly internalType: "int128"; + readonly name: "epsilon"; + readonly type: "int128"; + }, { + readonly internalType: "int128"; + readonly name: "lambda"; + readonly type: "int128"; + }, { + readonly internalType: "uint256"; + readonly name: "cap"; + readonly type: "uint256"; + }, { + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "fxPoolAddress"; + readonly type: "address"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "decimals"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "decreaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly name: "derivatives"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "emergency"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "addedValue"; + readonly type: "uint256"; + }]; + readonly name: "increaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address[]"; + readonly name: "_assets"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "_assetWeights"; + readonly type: "uint256[]"; + }]; + readonly name: "initialize"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "liquidity"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "total_"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "individual_"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "name"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly name: "nonces"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly name: "numeraires"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onExitPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFeeAmounts"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onJoinPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFeeAmounts"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "swapRequest"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "owner"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "paused"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "permit"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "protocolPercentFee"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "renounceOwnership"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly name: "reserves"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "_cap"; + readonly type: "uint256"; + }]; + readonly name: "setCap"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "_collectorAddress"; + readonly type: "address"; + }]; + readonly name: "setCollectorAddress"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bool"; + readonly name: "_emergency"; + readonly type: "bool"; + }]; + readonly name: "setEmergency"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "_alpha"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "_beta"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "_feeAtHalt"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "_epsilon"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "_lambda"; + readonly type: "uint256"; + }]; + readonly name: "setParams"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "setPaused"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "_protocolPercentFee"; + readonly type: "uint256"; + }]; + readonly name: "setProtocolPercentFee"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "symbol"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "totalSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "totalUnclaimedFeesInNumeraire"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transfer"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transferFrom"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "newOwner"; + readonly type: "address"; + }]; + readonly name: "transferOwnership"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "totalDepositNumeraire"; + readonly type: "uint256"; + }]; + readonly name: "viewDeposit"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "viewParameters"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "alpha_"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "beta_"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "delta_"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "epsilon_"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "lambda_"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "_curvesToBurn"; + readonly type: "uint256"; + }]; + readonly name: "viewWithdraw"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): FXPoolInterface; + static connect(address: string, signerOrProvider: Signer | Provider): FXPool; +} + +declare class GaugeClaimHelper__factory { + static readonly abi: readonly [{ + readonly inputs: readonly []; + readonly name: "CLAIM_FREQUENCY"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IRewardsOnlyGauge"; + readonly name: "gauge"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }]; + readonly name: "claimRewardsFromGauge"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IRewardsOnlyGauge[]"; + readonly name: "gauges"; + readonly type: "address[]"; + }, { + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }]; + readonly name: "claimRewardsFromGauges"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IRewardsOnlyGauge"; + readonly name: "gauge"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "token"; + readonly type: "address"; + }]; + readonly name: "getPendingRewards"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }]; + static createInterface(): GaugeClaimHelperInterface; + static connect(address: string, signerOrProvider: Signer | Provider): GaugeClaimHelper; +} + +declare class GearboxLinearPool__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "mainToken"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "assetManager"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "version"; + readonly type: "string"; + }]; + readonly internalType: "struct GearboxLinearPool.ConstructorArgs"; + readonly name: "args"; + readonly type: "tuple"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Approval"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "PausedStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "enabled"; + readonly type: "bool"; + }]; + readonly name: "RecoveryModeStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "SwapFeePercentageChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "lowerTarget"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }]; + readonly name: "TargetsSet"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Transfer"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "DOMAIN_SEPARATOR"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }]; + readonly name: "allowance"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "approve"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "balanceOf"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "decimals"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "decreaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "disableRecoveryMode"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "enableRecoveryMode"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getBptIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "pure"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getDomainSeparator"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getMainIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getMainToken"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "getNextNonce"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getOwner"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPausedState"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowEndTime"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodEndTime"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeesCollector"; + readonly outputs: readonly [{ + readonly internalType: "contract IProtocolFeesCollector"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getScalingFactors"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getSwapFeePercentage"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getTargets"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "lowerTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVirtualSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedToken"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedTokenRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "inRecoveryMode"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "addedValue"; + readonly type: "uint256"; + }]; + readonly name: "increaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "initialize"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "name"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly name: "nonces"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onExitPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFees"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onJoinPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFees"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "indexIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "indexOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "pause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "permit"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryExit"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryJoin"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptOut"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "setSwapFeePercentage"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "newLowerTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "newUpperTarget"; + readonly type: "uint256"; + }]; + readonly name: "setTargets"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "symbol"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "totalSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transfer"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transferFrom"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "unpause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "version"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): GearboxLinearPoolInterface; + static connect(address: string, signerOrProvider: Signer | Provider): GearboxLinearPool; +} + +declare class GearboxLinearPoolFactory__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: "protocolFeeProvider"; + readonly type: "address"; + }, { + readonly internalType: "contract IBalancerQueries"; + readonly name: "queries"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "factoryVersion"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "poolVersion"; + readonly type: "string"; + }, { + readonly internalType: "uint256"; + readonly name: "initialPauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly []; + readonly name: "FactoryDisabled"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "uint256"; + readonly name: "protocolId"; + readonly type: "uint256"; + }]; + readonly name: "GearboxLinearPoolCreated"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }]; + readonly name: "PoolCreated"; + readonly type: "event"; + }, { + readonly inputs: readonly [{ + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "mainToken"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolId"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "salt"; + readonly type: "bytes32"; + }]; + readonly name: "create"; + readonly outputs: readonly [{ + readonly internalType: "contract GearboxLinearPool"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "disable"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCreationCode"; + readonly outputs: readonly [{ + readonly internalType: "bytes"; + readonly name: ""; + readonly type: "bytes"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCreationCodeContracts"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: "contractA"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "contractB"; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getLastCreatedPool"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPauseConfiguration"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolVersion"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeePercentagesProvider"; + readonly outputs: readonly [{ + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "isDisabled"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }]; + readonly name: "isPoolFromFactory"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "version"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): GearboxLinearPoolFactoryInterface; + static connect(address: string, signerOrProvider: Signer | Provider): GearboxLinearPoolFactory; +} + +declare class GyroConfig__factory { + static readonly abi: readonly [{ + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bytes32"; + readonly name: "key"; + readonly type: "bytes32"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "previousValue"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "newValue"; + readonly type: "uint256"; + }]; + readonly name: "ConfigChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bytes32"; + readonly name: "key"; + readonly type: "bytes32"; + }]; + readonly name: "ConfigFrozen"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bytes32"; + readonly name: "key"; + readonly type: "bytes32"; + }]; + readonly name: "ConfigUnset"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "address"; + readonly name: "newGovernor"; + readonly type: "address"; + }]; + readonly name: "GovernorChangeRequested"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "address"; + readonly name: "oldGovernor"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "address"; + readonly name: "newGovernor"; + readonly type: "address"; + }]; + readonly name: "GovernorChanged"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "acceptGovernance"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "newGovernor"; + readonly type: "address"; + }]; + readonly name: "changeGovernor"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "key"; + readonly type: "bytes32"; + }]; + readonly name: "freeze"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "key"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "defaultValue"; + readonly type: "address"; + }]; + readonly name: "getAddress"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "key"; + readonly type: "bytes32"; + }]; + readonly name: "getAddress"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "key"; + readonly type: "bytes32"; + }]; + readonly name: "getConfigMeta"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }, { + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "key"; + readonly type: "bytes32"; + }]; + readonly name: "getUint"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "governor"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "key"; + readonly type: "bytes32"; + }]; + readonly name: "hasKey"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "_governor"; + readonly type: "address"; + }]; + readonly name: "initialize"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "listKeys"; + readonly outputs: readonly [{ + readonly internalType: "bytes32[]"; + readonly name: ""; + readonly type: "bytes32[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "pendingGovernor"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "key"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "newValue"; + readonly type: "address"; + }]; + readonly name: "setAddress"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "key"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "newValue"; + readonly type: "uint256"; + }]; + readonly name: "setUint"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "key"; + readonly type: "bytes32"; + }]; + readonly name: "unset"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }]; + static createInterface(): GyroConfigInterface; + static connect(address: string, signerOrProvider: Signer | Provider): GyroConfig; +} + +declare class LidoRelayer__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "contract IwstETH"; + readonly name: "wstETH"; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly inputs: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly components: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "assetInIndex"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "assetOutIndex"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IVault.BatchSwapStep[]"; + readonly name: "swaps"; + readonly type: "tuple[]"; + }, { + readonly internalType: "contract IAsset[]"; + readonly name: "assets"; + readonly type: "address[]"; + }, { + readonly components: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "fromInternalBalance"; + readonly type: "bool"; + }, { + readonly internalType: "address payable"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "toInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.FundManagement"; + readonly name: "funds"; + readonly type: "tuple"; + }, { + readonly internalType: "int256[]"; + readonly name: "limits"; + readonly type: "int256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }]; + readonly name: "batchSwap"; + readonly outputs: readonly [{ + readonly internalType: "int256[]"; + readonly name: "swapAmounts"; + readonly type: "int256[]"; + }]; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address payable"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly components: readonly [{ + readonly internalType: "contract IAsset[]"; + readonly name: "assets"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "minAmountsOut"; + readonly type: "uint256[]"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }, { + readonly internalType: "bool"; + readonly name: "toInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.ExitPoolRequest"; + readonly name: "request"; + readonly type: "tuple"; + }]; + readonly name: "exitPool"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getStETH"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWstETH"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly components: readonly [{ + readonly internalType: "contract IAsset[]"; + readonly name: "assets"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "maxAmountsIn"; + readonly type: "uint256[]"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }, { + readonly internalType: "bool"; + readonly name: "fromInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.JoinPoolRequest"; + readonly name: "request"; + readonly type: "tuple"; + }]; + readonly name: "joinPool"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IAsset"; + readonly name: "assetIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IAsset"; + readonly name: "assetOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IVault.SingleSwap"; + readonly name: "singleSwap"; + readonly type: "tuple"; + }, { + readonly components: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "fromInternalBalance"; + readonly type: "bool"; + }, { + readonly internalType: "address payable"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "toInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.FundManagement"; + readonly name: "funds"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256"; + readonly name: "limit"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }]; + readonly name: "swap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "swapAmount"; + readonly type: "uint256"; + }]; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly stateMutability: "payable"; + readonly type: "receive"; + }]; + static createInterface(): LidoRelayerInterface; + static connect(address: string, signerOrProvider: Signer | Provider): LidoRelayer; +} + +declare class LinearPool__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "mainToken"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Approval"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "PausedStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "SwapFeePercentageChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "lowerTarget"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }]; + readonly name: "TargetsSet"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Transfer"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "DOMAIN_SEPARATOR"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }]; + readonly name: "allowance"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "approve"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "balanceOf"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "decimals"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "decreaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getBptIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getMainIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getMainToken"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getOwner"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPausedState"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowEndTime"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodEndTime"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getScalingFactors"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getSwapFeePercentage"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getTargets"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "lowerTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVirtualSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedToken"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedTokenRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "addedValue"; + readonly type: "uint256"; + }]; + readonly name: "increaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "initialize"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "name"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly name: "nonces"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onExitPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onJoinPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "indexIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "indexOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "permit"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryExit"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryJoin"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptOut"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "poolConfig"; + readonly type: "bytes"; + }]; + readonly name: "setAssetManagerPoolConfig"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "setPaused"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "setSwapFeePercentage"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "newLowerTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "newUpperTarget"; + readonly type: "uint256"; + }]; + readonly name: "setTargets"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "symbol"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "totalSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transfer"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transferFrom"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }]; + static createInterface(): LinearPoolInterface$1; + static connect(address: string, signerOrProvider: Signer | Provider): LinearPool; +} + +declare class LiquidityGaugeV5__factory { + static readonly abi: readonly [{ + readonly name: "Deposit"; + readonly inputs: readonly [{ + readonly name: "provider"; + readonly type: "address"; + readonly indexed: true; + }, { + readonly name: "value"; + readonly type: "uint256"; + readonly indexed: false; + }]; + readonly anonymous: false; + readonly type: "event"; + }, { + readonly name: "Withdraw"; + readonly inputs: readonly [{ + readonly name: "provider"; + readonly type: "address"; + readonly indexed: true; + }, { + readonly name: "value"; + readonly type: "uint256"; + readonly indexed: false; + }]; + readonly anonymous: false; + readonly type: "event"; + }, { + readonly name: "UpdateLiquidityLimit"; + readonly inputs: readonly [{ + readonly name: "user"; + readonly type: "address"; + readonly indexed: true; + }, { + readonly name: "original_balance"; + readonly type: "uint256"; + readonly indexed: false; + }, { + readonly name: "original_supply"; + readonly type: "uint256"; + readonly indexed: false; + }, { + readonly name: "working_balance"; + readonly type: "uint256"; + readonly indexed: false; + }, { + readonly name: "working_supply"; + readonly type: "uint256"; + readonly indexed: false; + }]; + readonly anonymous: false; + readonly type: "event"; + }, { + readonly name: "Transfer"; + readonly inputs: readonly [{ + readonly name: "_from"; + readonly type: "address"; + readonly indexed: true; + }, { + readonly name: "_to"; + readonly type: "address"; + readonly indexed: true; + }, { + readonly name: "_value"; + readonly type: "uint256"; + readonly indexed: false; + }]; + readonly anonymous: false; + readonly type: "event"; + }, { + readonly name: "Approval"; + readonly inputs: readonly [{ + readonly name: "_owner"; + readonly type: "address"; + readonly indexed: true; + }, { + readonly name: "_spender"; + readonly type: "address"; + readonly indexed: true; + }, { + readonly name: "_value"; + readonly type: "uint256"; + readonly indexed: false; + }]; + readonly anonymous: false; + readonly type: "event"; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + readonly inputs: readonly [{ + readonly name: "minter"; + readonly type: "address"; + }, { + readonly name: "veBoostProxy"; + readonly type: "address"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "deposit"; + readonly inputs: readonly [{ + readonly name: "_value"; + readonly type: "uint256"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "deposit"; + readonly inputs: readonly [{ + readonly name: "_value"; + readonly type: "uint256"; + }, { + readonly name: "_addr"; + readonly type: "address"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "deposit"; + readonly inputs: readonly [{ + readonly name: "_value"; + readonly type: "uint256"; + }, { + readonly name: "_addr"; + readonly type: "address"; + }, { + readonly name: "_claim_rewards"; + readonly type: "bool"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "withdraw"; + readonly inputs: readonly [{ + readonly name: "_value"; + readonly type: "uint256"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "withdraw"; + readonly inputs: readonly [{ + readonly name: "_value"; + readonly type: "uint256"; + }, { + readonly name: "_claim_rewards"; + readonly type: "bool"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "claim_rewards"; + readonly inputs: readonly []; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "claim_rewards"; + readonly inputs: readonly [{ + readonly name: "_addr"; + readonly type: "address"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "claim_rewards"; + readonly inputs: readonly [{ + readonly name: "_addr"; + readonly type: "address"; + }, { + readonly name: "_receiver"; + readonly type: "address"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "transferFrom"; + readonly inputs: readonly [{ + readonly name: "_from"; + readonly type: "address"; + }, { + readonly name: "_to"; + readonly type: "address"; + }, { + readonly name: "_value"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "bool"; + }]; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "transfer"; + readonly inputs: readonly [{ + readonly name: "_to"; + readonly type: "address"; + }, { + readonly name: "_value"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "bool"; + }]; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "approve"; + readonly inputs: readonly [{ + readonly name: "_spender"; + readonly type: "address"; + }, { + readonly name: "_value"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "bool"; + }]; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "permit"; + readonly inputs: readonly [{ + readonly name: "_owner"; + readonly type: "address"; + }, { + readonly name: "_spender"; + readonly type: "address"; + }, { + readonly name: "_value"; + readonly type: "uint256"; + }, { + readonly name: "_deadline"; + readonly type: "uint256"; + }, { + readonly name: "_v"; + readonly type: "uint8"; + }, { + readonly name: "_r"; + readonly type: "bytes32"; + }, { + readonly name: "_s"; + readonly type: "bytes32"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "bool"; + }]; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "increaseAllowance"; + readonly inputs: readonly [{ + readonly name: "_spender"; + readonly type: "address"; + }, { + readonly name: "_added_value"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "bool"; + }]; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "decreaseAllowance"; + readonly inputs: readonly [{ + readonly name: "_spender"; + readonly type: "address"; + }, { + readonly name: "_subtracted_value"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "bool"; + }]; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "user_checkpoint"; + readonly inputs: readonly [{ + readonly name: "addr"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "bool"; + }]; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "set_rewards_receiver"; + readonly inputs: readonly [{ + readonly name: "_receiver"; + readonly type: "address"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "kick"; + readonly inputs: readonly [{ + readonly name: "addr"; + readonly type: "address"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "deposit_reward_token"; + readonly inputs: readonly [{ + readonly name: "_reward_token"; + readonly type: "address"; + }, { + readonly name: "_amount"; + readonly type: "uint256"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "add_reward"; + readonly inputs: readonly [{ + readonly name: "_reward_token"; + readonly type: "address"; + }, { + readonly name: "_distributor"; + readonly type: "address"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "set_reward_distributor"; + readonly inputs: readonly [{ + readonly name: "_reward_token"; + readonly type: "address"; + }, { + readonly name: "_distributor"; + readonly type: "address"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "set_killed"; + readonly inputs: readonly [{ + readonly name: "_is_killed"; + readonly type: "bool"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "claimed_reward"; + readonly inputs: readonly [{ + readonly name: "_addr"; + readonly type: "address"; + }, { + readonly name: "_token"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "claimable_reward"; + readonly inputs: readonly [{ + readonly name: "_user"; + readonly type: "address"; + }, { + readonly name: "_reward_token"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "claimable_reward_write"; + readonly inputs: readonly [{ + readonly name: "_addr"; + readonly type: "address"; + }, { + readonly name: "_token"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "claimable_tokens"; + readonly inputs: readonly [{ + readonly name: "addr"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "integrate_checkpoint"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "future_epoch_time"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "inflation_rate"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "decimals"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "version"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "string"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "allowance"; + readonly inputs: readonly [{ + readonly name: "owner"; + readonly type: "address"; + }, { + readonly name: "spender"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "initialize"; + readonly inputs: readonly [{ + readonly name: "_lp_token"; + readonly type: "address"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "balanceOf"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "totalSupply"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "name"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "string"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "symbol"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "string"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "DOMAIN_SEPARATOR"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "bytes32"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "nonces"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "factory"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "address"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "lp_token"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "address"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "is_killed"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "bool"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "reward_count"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "reward_data"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "tuple"; + readonly components: readonly [{ + readonly name: "token"; + readonly type: "address"; + }, { + readonly name: "distributor"; + readonly type: "address"; + }, { + readonly name: "period_finish"; + readonly type: "uint256"; + }, { + readonly name: "rate"; + readonly type: "uint256"; + }, { + readonly name: "last_update"; + readonly type: "uint256"; + }, { + readonly name: "integral"; + readonly type: "uint256"; + }]; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "rewards_receiver"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "address"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "reward_integral_for"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "address"; + }, { + readonly name: "arg1"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "working_balances"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "working_supply"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "integrate_inv_supply_of"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "integrate_checkpoint_of"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "integrate_fraction"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "period"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "int128"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "reward_tokens"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "address"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "period_timestamp"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "integrate_inv_supply"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }]; + static createInterface(): LiquidityGaugeV5Interface; + static connect(address: string, signerOrProvider: Signer | Provider): LiquidityGaugeV5; +} + +declare class Multicall__factory { + static readonly abi: readonly [{ + readonly constant: false; + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly name: "target"; + readonly type: "address"; + }, { + readonly name: "callData"; + readonly type: "bytes"; + }]; + readonly name: "calls"; + readonly type: "tuple[]"; + }]; + readonly name: "aggregate"; + readonly outputs: readonly [{ + readonly name: "blockNumber"; + readonly type: "uint256"; + }, { + readonly name: "returnData"; + readonly type: "bytes[]"; + }]; + readonly payable: false; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }]; + static createInterface(): MulticallInterface; + static connect(address: string, signerOrProvider: Signer | Provider): Multicall; +} + +declare class Multicall3__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "address"; + readonly name: "target"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "callData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct Multicall3.Call[]"; + readonly name: "calls"; + readonly type: "tuple[]"; + }]; + readonly name: "aggregate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "blockNumber"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes[]"; + readonly name: "returnData"; + readonly type: "bytes[]"; + }]; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "address"; + readonly name: "target"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "allowFailure"; + readonly type: "bool"; + }, { + readonly internalType: "bytes"; + readonly name: "callData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct Multicall3.Call3[]"; + readonly name: "calls"; + readonly type: "tuple[]"; + }]; + readonly name: "aggregate3"; + readonly outputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "bool"; + readonly name: "success"; + readonly type: "bool"; + }, { + readonly internalType: "bytes"; + readonly name: "returnData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct Multicall3.Result[]"; + readonly name: "returnData"; + readonly type: "tuple[]"; + }]; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "address"; + readonly name: "target"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "allowFailure"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "callData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct Multicall3.Call3Value[]"; + readonly name: "calls"; + readonly type: "tuple[]"; + }]; + readonly name: "aggregate3Value"; + readonly outputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "bool"; + readonly name: "success"; + readonly type: "bool"; + }, { + readonly internalType: "bytes"; + readonly name: "returnData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct Multicall3.Result[]"; + readonly name: "returnData"; + readonly type: "tuple[]"; + }]; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "address"; + readonly name: "target"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "callData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct Multicall3.Call[]"; + readonly name: "calls"; + readonly type: "tuple[]"; + }]; + readonly name: "blockAndAggregate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "blockNumber"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "blockHash"; + readonly type: "bytes32"; + }, { + readonly components: readonly [{ + readonly internalType: "bool"; + readonly name: "success"; + readonly type: "bool"; + }, { + readonly internalType: "bytes"; + readonly name: "returnData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct Multicall3.Result[]"; + readonly name: "returnData"; + readonly type: "tuple[]"; + }]; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getBasefee"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "basefee"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "blockNumber"; + readonly type: "uint256"; + }]; + readonly name: "getBlockHash"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "blockHash"; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getBlockNumber"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "blockNumber"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getChainId"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "chainid"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCurrentBlockCoinbase"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: "coinbase"; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCurrentBlockDifficulty"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "difficulty"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCurrentBlockGasLimit"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "gaslimit"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCurrentBlockTimestamp"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "timestamp"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "addr"; + readonly type: "address"; + }]; + readonly name: "getEthBalance"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "balance"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getLastBlockHash"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "blockHash"; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bool"; + readonly name: "requireSuccess"; + readonly type: "bool"; + }, { + readonly components: readonly [{ + readonly internalType: "address"; + readonly name: "target"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "callData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct Multicall3.Call[]"; + readonly name: "calls"; + readonly type: "tuple[]"; + }]; + readonly name: "tryAggregate"; + readonly outputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "bool"; + readonly name: "success"; + readonly type: "bool"; + }, { + readonly internalType: "bytes"; + readonly name: "returnData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct Multicall3.Result[]"; + readonly name: "returnData"; + readonly type: "tuple[]"; + }]; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bool"; + readonly name: "requireSuccess"; + readonly type: "bool"; + }, { + readonly components: readonly [{ + readonly internalType: "address"; + readonly name: "target"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "callData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct Multicall3.Call[]"; + readonly name: "calls"; + readonly type: "tuple[]"; + }]; + readonly name: "tryBlockAndAggregate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "blockNumber"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "blockHash"; + readonly type: "bytes32"; + }, { + readonly components: readonly [{ + readonly internalType: "bool"; + readonly name: "success"; + readonly type: "bool"; + }, { + readonly internalType: "bytes"; + readonly name: "returnData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct Multicall3.Result[]"; + readonly name: "returnData"; + readonly type: "tuple[]"; + }]; + readonly stateMutability: "payable"; + readonly type: "function"; + }]; + static createInterface(): Multicall3Interface; + static connect(address: string, signerOrProvider: Signer | Provider): Multicall3; +} + +declare class StablePool__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20[]"; + readonly name: "tokens"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256"; + readonly name: "amplificationParameter"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "startValue"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "endValue"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "startTime"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "endTime"; + readonly type: "uint256"; + }]; + readonly name: "AmpUpdateStarted"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "currentValue"; + readonly type: "uint256"; + }]; + readonly name: "AmpUpdateStopped"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Approval"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "PausedStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "SwapFeePercentageChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Transfer"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "DOMAIN_SEPARATOR"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }]; + readonly name: "allowance"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "approve"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "balanceOf"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "decimals"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "decreaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAmplificationParameter"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "bool"; + readonly name: "isUpdating"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "precision"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getOwner"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPausedState"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowEndTime"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodEndTime"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getSwapFeePercentage"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "addedValue"; + readonly type: "uint256"; + }]; + readonly name: "increaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "name"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly name: "nonces"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onExitPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onJoinPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "swapRequest"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "indexIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "indexOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "permit"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryExit"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryJoin"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptOut"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "poolConfig"; + readonly type: "bytes"; + }]; + readonly name: "setAssetManagerPoolConfig"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "setPaused"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "setSwapFeePercentage"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "rawEndValue"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "endTime"; + readonly type: "uint256"; + }]; + readonly name: "startAmplificationParameterUpdate"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "stopAmplificationParameterUpdate"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "symbol"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "totalSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transfer"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transferFrom"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }]; + static createInterface(): StablePoolInterface; + static connect(address: string, signerOrProvider: Signer | Provider): StablePool; +} + +declare class StaticATokenRateProvider__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IStaticAToken"; + readonly name: "_waToken"; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly inputs: readonly []; + readonly name: "getRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "waToken"; + readonly outputs: readonly [{ + readonly internalType: "contract IStaticAToken"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): StaticATokenRateProviderInterface; + static connect(address: string, signerOrProvider: Signer | Provider): StaticATokenRateProvider; +} + +declare class Vault__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: "authorizer"; + readonly type: "address"; + }, { + readonly internalType: "contract IWETH"; + readonly name: "weth"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "contract IAuthorizer"; + readonly name: "newAuthorizer"; + readonly type: "address"; + }]; + readonly name: "AuthorizerChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "ExternalBalanceTransfer"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "contract IFlashLoanRecipient"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "feeAmount"; + readonly type: "uint256"; + }]; + readonly name: "FlashLoan"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "int256"; + readonly name: "delta"; + readonly type: "int256"; + }]; + readonly name: "InternalBalanceChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "PausedStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "liquidityProvider"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "contract IERC20[]"; + readonly name: "tokens"; + readonly type: "address[]"; + }, { + readonly indexed: false; + readonly internalType: "int256[]"; + readonly name: "deltas"; + readonly type: "int256[]"; + }, { + readonly indexed: false; + readonly internalType: "uint256[]"; + readonly name: "protocolFeeAmounts"; + readonly type: "uint256[]"; + }]; + readonly name: "PoolBalanceChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "assetManager"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "int256"; + readonly name: "cashDelta"; + readonly type: "int256"; + }, { + readonly indexed: false; + readonly internalType: "int256"; + readonly name: "managedDelta"; + readonly type: "int256"; + }]; + readonly name: "PoolBalanceManaged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "poolAddress"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "enum IVault.PoolSpecialization"; + readonly name: "specialization"; + readonly type: "uint8"; + }]; + readonly name: "PoolRegistered"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "relayer"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "approved"; + readonly type: "bool"; + }]; + readonly name: "RelayerApprovalChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly indexed: true; + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "amountIn"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "amountOut"; + readonly type: "uint256"; + }]; + readonly name: "Swap"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly indexed: false; + readonly internalType: "contract IERC20[]"; + readonly name: "tokens"; + readonly type: "address[]"; + }]; + readonly name: "TokensDeregistered"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly indexed: false; + readonly internalType: "contract IERC20[]"; + readonly name: "tokens"; + readonly type: "address[]"; + }, { + readonly indexed: false; + readonly internalType: "address[]"; + readonly name: "assetManagers"; + readonly type: "address[]"; + }]; + readonly name: "TokensRegistered"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "WETH"; + readonly outputs: readonly [{ + readonly internalType: "contract IWETH"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly components: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "assetInIndex"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "assetOutIndex"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IVault.BatchSwapStep[]"; + readonly name: "swaps"; + readonly type: "tuple[]"; + }, { + readonly internalType: "contract IAsset[]"; + readonly name: "assets"; + readonly type: "address[]"; + }, { + readonly components: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "fromInternalBalance"; + readonly type: "bool"; + }, { + readonly internalType: "address payable"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "toInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.FundManagement"; + readonly name: "funds"; + readonly type: "tuple"; + }, { + readonly internalType: "int256[]"; + readonly name: "limits"; + readonly type: "int256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }]; + readonly name: "batchSwap"; + readonly outputs: readonly [{ + readonly internalType: "int256[]"; + readonly name: "assetDeltas"; + readonly type: "int256[]"; + }]; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "contract IERC20[]"; + readonly name: "tokens"; + readonly type: "address[]"; + }]; + readonly name: "deregisterTokens"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address payable"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly components: readonly [{ + readonly internalType: "contract IAsset[]"; + readonly name: "assets"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "minAmountsOut"; + readonly type: "uint256[]"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }, { + readonly internalType: "bool"; + readonly name: "toInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.ExitPoolRequest"; + readonly name: "request"; + readonly type: "tuple"; + }]; + readonly name: "exitPool"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IFlashLoanRecipient"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20[]"; + readonly name: "tokens"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amounts"; + readonly type: "uint256[]"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "flashLoan"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getDomainSeparator"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20[]"; + readonly name: "tokens"; + readonly type: "address[]"; + }]; + readonly name: "getInternalBalance"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }]; + readonly name: "getNextNonce"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPausedState"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowEndTime"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodEndTime"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }]; + readonly name: "getPool"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "enum IVault.PoolSpecialization"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }]; + readonly name: "getPoolTokenInfo"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "cash"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "managed"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "assetManager"; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }]; + readonly name: "getPoolTokens"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20[]"; + readonly name: "tokens"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeesCollector"; + readonly outputs: readonly [{ + readonly internalType: "contract ProtocolFeesCollector"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "relayer"; + readonly type: "address"; + }]; + readonly name: "hasApprovedRelayer"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly components: readonly [{ + readonly internalType: "contract IAsset[]"; + readonly name: "assets"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "maxAmountsIn"; + readonly type: "uint256[]"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }, { + readonly internalType: "bool"; + readonly name: "fromInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.JoinPoolRequest"; + readonly name: "request"; + readonly type: "tuple"; + }]; + readonly name: "joinPool"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.PoolBalanceOpKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly internalType: "struct IVault.PoolBalanceOp[]"; + readonly name: "ops"; + readonly type: "tuple[]"; + }]; + readonly name: "managePoolBalance"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.UserBalanceOpKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IAsset"; + readonly name: "asset"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address payable"; + readonly name: "recipient"; + readonly type: "address"; + }]; + readonly internalType: "struct IVault.UserBalanceOp[]"; + readonly name: "ops"; + readonly type: "tuple[]"; + }]; + readonly name: "manageUserBalance"; + readonly outputs: readonly []; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly components: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "assetInIndex"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "assetOutIndex"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IVault.BatchSwapStep[]"; + readonly name: "swaps"; + readonly type: "tuple[]"; + }, { + readonly internalType: "contract IAsset[]"; + readonly name: "assets"; + readonly type: "address[]"; + }, { + readonly components: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "fromInternalBalance"; + readonly type: "bool"; + }, { + readonly internalType: "address payable"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "toInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.FundManagement"; + readonly name: "funds"; + readonly type: "tuple"; + }]; + readonly name: "queryBatchSwap"; + readonly outputs: readonly [{ + readonly internalType: "int256[]"; + readonly name: ""; + readonly type: "int256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "enum IVault.PoolSpecialization"; + readonly name: "specialization"; + readonly type: "uint8"; + }]; + readonly name: "registerPool"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "contract IERC20[]"; + readonly name: "tokens"; + readonly type: "address[]"; + }, { + readonly internalType: "address[]"; + readonly name: "assetManagers"; + readonly type: "address[]"; + }]; + readonly name: "registerTokens"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: "newAuthorizer"; + readonly type: "address"; + }]; + readonly name: "setAuthorizer"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "setPaused"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "relayer"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "approved"; + readonly type: "bool"; + }]; + readonly name: "setRelayerApproval"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IAsset"; + readonly name: "assetIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IAsset"; + readonly name: "assetOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IVault.SingleSwap"; + readonly name: "singleSwap"; + readonly type: "tuple"; + }, { + readonly components: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "fromInternalBalance"; + readonly type: "bool"; + }, { + readonly internalType: "address payable"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "bool"; + readonly name: "toInternalBalance"; + readonly type: "bool"; + }]; + readonly internalType: "struct IVault.FundManagement"; + readonly name: "funds"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256"; + readonly name: "limit"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }]; + readonly name: "swap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "amountCalculated"; + readonly type: "uint256"; + }]; + readonly stateMutability: "payable"; + readonly type: "function"; + }, { + readonly stateMutability: "payable"; + readonly type: "receive"; + }]; + static createInterface(): VaultInterface; + static connect(address: string, signerOrProvider: Signer | Provider): Vault; +} + +declare class WeightedPool__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20[]"; + readonly name: "tokens"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "normalizedWeights"; + readonly type: "uint256[]"; + }, { + readonly internalType: "contract IRateProvider[]"; + readonly name: "rateProviders"; + readonly type: "address[]"; + }, { + readonly internalType: "address[]"; + readonly name: "assetManagers"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly internalType: "struct WeightedPool.NewPoolParams"; + readonly name: "params"; + readonly type: "tuple"; + }, { + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: "protocolFeeProvider"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "version"; + readonly type: "string"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Approval"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "PausedStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "uint256"; + readonly name: "feeType"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "protocolFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "ProtocolFeePercentageCacheUpdated"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "enabled"; + readonly type: "bool"; + }]; + readonly name: "RecoveryModeStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "SwapFeePercentageChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Transfer"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "DOMAIN_SEPARATOR"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }]; + readonly name: "allowance"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "approve"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "balanceOf"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "decimals"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "decreaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "disableRecoveryMode"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "enableRecoveryMode"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getATHRateProduct"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getActualSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getDomainSeparator"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getInvariant"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getLastPostJoinExitInvariant"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "getNextNonce"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getNormalizedWeights"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getOwner"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPausedState"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowEndTime"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodEndTime"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "feeType"; + readonly type: "uint256"; + }]; + readonly name: "getProtocolFeePercentageCache"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeesCollector"; + readonly outputs: readonly [{ + readonly internalType: "contract IProtocolFeesCollector"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolSwapFeeDelegation"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getRateProviders"; + readonly outputs: readonly [{ + readonly internalType: "contract IRateProvider[]"; + readonly name: ""; + readonly type: "address[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getScalingFactors"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getSwapFeePercentage"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "inRecoveryMode"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "addedValue"; + readonly type: "uint256"; + }]; + readonly name: "increaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "name"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly name: "nonces"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onExitPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onJoinPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "pause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "permit"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryExit"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryJoin"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptOut"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "poolConfig"; + readonly type: "bytes"; + }]; + readonly name: "setAssetManagerPoolConfig"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "setSwapFeePercentage"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "symbol"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "totalSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transfer"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transferFrom"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "unpause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "updateProtocolFeePercentageCache"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "version"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): WeightedPoolInterface; + static connect(address: string, signerOrProvider: Signer | Provider): WeightedPool; +} + +declare class WeightedPoolFactory__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: "protocolFeeProvider"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "factoryVersion"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "poolVersion"; + readonly type: "string"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly []; + readonly name: "FactoryDisabled"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }]; + readonly name: "PoolCreated"; + readonly type: "event"; + }, { + readonly inputs: readonly [{ + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20[]"; + readonly name: "tokens"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "normalizedWeights"; + readonly type: "uint256[]"; + }, { + readonly internalType: "contract IRateProvider[]"; + readonly name: "rateProviders"; + readonly type: "address[]"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "bytes32"; + readonly name: "salt"; + readonly type: "bytes32"; + }]; + readonly name: "create"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "disable"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCreationCode"; + readonly outputs: readonly [{ + readonly internalType: "bytes"; + readonly name: ""; + readonly type: "bytes"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCreationCodeContracts"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: "contractA"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "contractB"; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPauseConfiguration"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolVersion"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeePercentagesProvider"; + readonly outputs: readonly [{ + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "isDisabled"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }]; + readonly name: "isPoolFromFactory"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "version"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): WeightedPoolFactoryInterface; + static connect(address: string, signerOrProvider: Signer | Provider): WeightedPoolFactory; +} + +declare class YearnLinearPool__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "mainToken"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "assetManager"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "version"; + readonly type: "string"; + }]; + readonly internalType: "struct YearnLinearPool.ConstructorArgs"; + readonly name: "args"; + readonly type: "tuple"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Approval"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "PausedStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "enabled"; + readonly type: "bool"; + }]; + readonly name: "RecoveryModeStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "SwapFeePercentageChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "contract IERC20"; + readonly name: "token"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "lowerTarget"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }]; + readonly name: "TargetsSet"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Transfer"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "DOMAIN_SEPARATOR"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }]; + readonly name: "allowance"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "approve"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "balanceOf"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "decimals"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "decreaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "disableRecoveryMode"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "enableRecoveryMode"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getBptIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "pure"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getDomainSeparator"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getMainIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getMainToken"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "getNextNonce"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getOwner"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPausedState"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowEndTime"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodEndTime"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeesCollector"; + readonly outputs: readonly [{ + readonly internalType: "contract IProtocolFeesCollector"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getScalingFactors"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getSwapFeePercentage"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getTargets"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "lowerTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVirtualSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedIndex"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedToken"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getWrappedTokenRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "inRecoveryMode"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "addedValue"; + readonly type: "uint256"; + }]; + readonly name: "increaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "initialize"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "name"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly name: "nonces"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onExitPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFees"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onJoinPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFees"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "indexIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "indexOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "pause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "permit"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryExit"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryJoin"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptOut"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "setSwapFeePercentage"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "newLowerTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "newUpperTarget"; + readonly type: "uint256"; + }]; + readonly name: "setTargets"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "symbol"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "totalSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transfer"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transferFrom"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "unpause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "version"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): YearnLinearPoolInterface; + static connect(address: string, signerOrProvider: Signer | Provider): YearnLinearPool; +} + +declare class YearnLinearPoolFactory__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: "protocolFeeProvider"; + readonly type: "address"; + }, { + readonly internalType: "contract IBalancerQueries"; + readonly name: "queries"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "factoryVersion"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "poolVersion"; + readonly type: "string"; + }, { + readonly internalType: "uint256"; + readonly name: "initialPauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly []; + readonly name: "FactoryDisabled"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }]; + readonly name: "PoolCreated"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "uint256"; + readonly name: "protocolId"; + readonly type: "uint256"; + }]; + readonly name: "YearnLinearPoolCreated"; + readonly type: "event"; + }, { + readonly inputs: readonly [{ + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "mainToken"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "wrappedToken"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "upperTarget"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolId"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "salt"; + readonly type: "bytes32"; + }]; + readonly name: "create"; + readonly outputs: readonly [{ + readonly internalType: "contract LinearPool"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "disable"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCreationCode"; + readonly outputs: readonly [{ + readonly internalType: "bytes"; + readonly name: ""; + readonly type: "bytes"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getCreationCodeContracts"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: "contractA"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "contractB"; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getLastCreatedPool"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPauseConfiguration"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolVersion"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getProtocolFeePercentagesProvider"; + readonly outputs: readonly [{ + readonly internalType: "contract IProtocolFeePercentagesProvider"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "isDisabled"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "pool"; + readonly type: "address"; + }]; + readonly name: "isPoolFromFactory"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "version"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }]; + static createInterface(): YearnLinearPoolFactoryInterface; + static connect(address: string, signerOrProvider: Signer | Provider): YearnLinearPoolFactory; +} + +declare class GyroEV2__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly components: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "string"; + readonly name: "name"; + readonly type: "string"; + }, { + readonly internalType: "string"; + readonly name: "symbol"; + readonly type: "string"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "token0"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "token1"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodDuration"; + readonly type: "uint256"; + }, { + readonly internalType: "bool"; + readonly name: "oracleEnabled"; + readonly type: "bool"; + }, { + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly internalType: "struct ExtensibleWeightedPool2Tokens.NewPoolParams"; + readonly name: "baseParams"; + readonly type: "tuple"; + }, { + readonly components: readonly [{ + readonly internalType: "int256"; + readonly name: "alpha"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "beta"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "c"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "s"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "lambda"; + readonly type: "int256"; + }]; + readonly internalType: "struct GyroECLPMath.Params"; + readonly name: "eclpParams"; + readonly type: "tuple"; + }, { + readonly components: readonly [{ + readonly components: readonly [{ + readonly internalType: "int256"; + readonly name: "x"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "y"; + readonly type: "int256"; + }]; + readonly internalType: "struct GyroECLPMath.Vector2"; + readonly name: "tauAlpha"; + readonly type: "tuple"; + }, { + readonly components: readonly [{ + readonly internalType: "int256"; + readonly name: "x"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "y"; + readonly type: "int256"; + }]; + readonly internalType: "struct GyroECLPMath.Vector2"; + readonly name: "tauBeta"; + readonly type: "tuple"; + }, { + readonly internalType: "int256"; + readonly name: "u"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "v"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "w"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "z"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "dSq"; + readonly type: "int256"; + }]; + readonly internalType: "struct GyroECLPMath.DerivedParams"; + readonly name: "derivedEclpParams"; + readonly type: "tuple"; + }, { + readonly internalType: "address"; + readonly name: "rateProvider0"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "rateProvider1"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "capManager"; + readonly type: "address"; + }, { + readonly components: readonly [{ + readonly internalType: "bool"; + readonly name: "capEnabled"; + readonly type: "bool"; + }, { + readonly internalType: "uint120"; + readonly name: "perAddressCap"; + readonly type: "uint120"; + }, { + readonly internalType: "uint128"; + readonly name: "globalCap"; + readonly type: "uint128"; + }]; + readonly internalType: "struct ICappedLiquidity.CapParams"; + readonly name: "capParams"; + readonly type: "tuple"; + }, { + readonly internalType: "address"; + readonly name: "pauseManager"; + readonly type: "address"; + }]; + readonly internalType: "struct GyroECLPPool.GyroParams"; + readonly name: "params"; + readonly type: "tuple"; + }, { + readonly internalType: "address"; + readonly name: "configAddress"; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Approval"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "address"; + readonly name: "capManager"; + readonly type: "address"; + }]; + readonly name: "CapManagerUpdated"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "bool"; + readonly name: "capEnabled"; + readonly type: "bool"; + }, { + readonly internalType: "uint120"; + readonly name: "perAddressCap"; + readonly type: "uint120"; + }, { + readonly internalType: "uint128"; + readonly name: "globalCap"; + readonly type: "uint128"; + }]; + readonly indexed: false; + readonly internalType: "struct ICappedLiquidity.CapParams"; + readonly name: "params"; + readonly type: "tuple"; + }]; + readonly name: "CapParamsUpdated"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "derivedParamsValidated"; + readonly type: "bool"; + }]; + readonly name: "ECLPDerivedParamsValidated"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "paramsValidated"; + readonly type: "bool"; + }]; + readonly name: "ECLPParamsValidated"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "invariantAfterJoin"; + readonly type: "uint256"; + }]; + readonly name: "InvariantAterInitializeJoin"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "oldInvariant"; + readonly type: "uint256"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "newInvariant"; + readonly type: "uint256"; + }]; + readonly name: "InvariantOldAndNew"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "enabled"; + readonly type: "bool"; + }]; + readonly name: "OracleEnabledChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "oracleUpdatedIndex"; + readonly type: "uint256"; + }]; + readonly name: "OracleIndexUpdated"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "address"; + readonly name: "oldPauseManager"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "address"; + readonly name: "newPauseManager"; + readonly type: "address"; + }]; + readonly name: "PauseManagerChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly []; + readonly name: "PausedLocally"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "PausedStateChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "SwapFeePercentageChanged"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: false; + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly components: readonly [{ + readonly internalType: "int256"; + readonly name: "x"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "y"; + readonly type: "int256"; + }]; + readonly indexed: false; + readonly internalType: "struct GyroECLPMath.Vector2"; + readonly name: "invariant"; + readonly type: "tuple"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "SwapParams"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly indexed: true; + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly indexed: false; + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }]; + readonly name: "Transfer"; + readonly type: "event"; + }, { + readonly anonymous: false; + readonly inputs: readonly []; + readonly name: "UnpausedLocally"; + readonly type: "event"; + }, { + readonly inputs: readonly []; + readonly name: "DOMAIN_SEPARATOR"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "_dSq"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: ""; + readonly type: "int256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "_paramsAlpha"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: ""; + readonly type: "int256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "_paramsBeta"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: ""; + readonly type: "int256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "_paramsC"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: ""; + readonly type: "int256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "_paramsLambda"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: ""; + readonly type: "int256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "_paramsS"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: ""; + readonly type: "int256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "_tauAlphaX"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: ""; + readonly type: "int256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "_tauAlphaY"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: ""; + readonly type: "int256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "_tauBetaX"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: ""; + readonly type: "int256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "_tauBetaY"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: ""; + readonly type: "int256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "_u"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: ""; + readonly type: "int256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "_v"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: ""; + readonly type: "int256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "_w"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: ""; + readonly type: "int256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "_z"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: ""; + readonly type: "int256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }]; + readonly name: "allowance"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "approve"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "account"; + readonly type: "address"; + }]; + readonly name: "balanceOf"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "capManager"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "capParams"; + readonly outputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "bool"; + readonly name: "capEnabled"; + readonly type: "bool"; + }, { + readonly internalType: "uint120"; + readonly name: "perAddressCap"; + readonly type: "uint120"; + }, { + readonly internalType: "uint128"; + readonly name: "globalCap"; + readonly type: "uint128"; + }]; + readonly internalType: "struct ICappedLiquidity.CapParams"; + readonly name: ""; + readonly type: "tuple"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "_pauseManager"; + readonly type: "address"; + }]; + readonly name: "changePauseManager"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "decimals"; + readonly outputs: readonly [{ + readonly internalType: "uint8"; + readonly name: ""; + readonly type: "uint8"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "decreaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "startIndex"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "endIndex"; + readonly type: "uint256"; + }]; + readonly name: "dirtyUninitializedOracleSamples"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "enableOracle"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getECLPParams"; + readonly outputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "int256"; + readonly name: "alpha"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "beta"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "c"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "s"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "lambda"; + readonly type: "int256"; + }]; + readonly internalType: "struct GyroECLPMath.Params"; + readonly name: "params"; + readonly type: "tuple"; + }, { + readonly components: readonly [{ + readonly components: readonly [{ + readonly internalType: "int256"; + readonly name: "x"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "y"; + readonly type: "int256"; + }]; + readonly internalType: "struct GyroECLPMath.Vector2"; + readonly name: "tauAlpha"; + readonly type: "tuple"; + }, { + readonly components: readonly [{ + readonly internalType: "int256"; + readonly name: "x"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "y"; + readonly type: "int256"; + }]; + readonly internalType: "struct GyroECLPMath.Vector2"; + readonly name: "tauBeta"; + readonly type: "tuple"; + }, { + readonly internalType: "int256"; + readonly name: "u"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "v"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "w"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "z"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "dSq"; + readonly type: "int256"; + }]; + readonly internalType: "struct GyroECLPMath.DerivedParams"; + readonly name: "d"; + readonly type: "tuple"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getInvariant"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getLargestSafeQueryWindow"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "pure"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getLastInvariant"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "enum IPriceOracle.Variable"; + readonly name: "variable"; + readonly type: "uint8"; + }]; + readonly name: "getLatest"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getMiscData"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: "logInvariant"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "logTotalSupply"; + readonly type: "int256"; + }, { + readonly internalType: "uint256"; + readonly name: "oracleSampleCreationTimestamp"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "oracleIndex"; + readonly type: "uint256"; + }, { + readonly internalType: "bool"; + readonly name: "oracleEnabled"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getNormalizedWeights"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getOwner"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IPriceOracle.Variable"; + readonly name: "variable"; + readonly type: "uint8"; + }, { + readonly internalType: "uint256"; + readonly name: "ago"; + readonly type: "uint256"; + }]; + readonly internalType: "struct IPriceOracle.OracleAccumulatorQuery[]"; + readonly name: "queries"; + readonly type: "tuple[]"; + }]; + readonly name: "getPastAccumulators"; + readonly outputs: readonly [{ + readonly internalType: "int256[]"; + readonly name: "results"; + readonly type: "int256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPausedState"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }, { + readonly internalType: "uint256"; + readonly name: "pauseWindowEndTime"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "bufferPeriodEndTime"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPoolId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getPrice"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "spotPrice"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getRate"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "index"; + readonly type: "uint256"; + }]; + readonly name: "getSample"; + readonly outputs: readonly [{ + readonly internalType: "int256"; + readonly name: "logPairPrice"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "accLogPairPrice"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "logBptPrice"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "accLogBptPrice"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "logInvariant"; + readonly type: "int256"; + }, { + readonly internalType: "int256"; + readonly name: "accLogInvariant"; + readonly type: "int256"; + }, { + readonly internalType: "uint256"; + readonly name: "timestamp"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getSwapFeePercentage"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IPriceOracle.Variable"; + readonly name: "variable"; + readonly type: "uint8"; + }, { + readonly internalType: "uint256"; + readonly name: "secs"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "ago"; + readonly type: "uint256"; + }]; + readonly internalType: "struct IPriceOracle.OracleAverageQuery[]"; + readonly name: "queries"; + readonly type: "tuple[]"; + }]; + readonly name: "getTimeWeightedAverage"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "results"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getTokenRates"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "rate0"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "rate1"; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getTotalSamples"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "pure"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "gyroConfig"; + readonly outputs: readonly [{ + readonly internalType: "contract IGyroConfig"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "addedValue"; + readonly type: "uint256"; + }]; + readonly name: "increaseAllowance"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "name"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }]; + readonly name: "nonces"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onExitPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: ""; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "onJoinPool"; + readonly outputs: readonly [{ + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256[]"; + readonly name: "dueProtocolFeeAmounts"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "enum IVault.SwapKind"; + readonly name: "kind"; + readonly type: "uint8"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenIn"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "tokenOut"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "address"; + readonly name: "from"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "to"; + readonly type: "address"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly internalType: "struct IPoolSwapStructs.SwapRequest"; + readonly name: "request"; + readonly type: "tuple"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "balanceTokenOut"; + readonly type: "uint256"; + }]; + readonly name: "onSwap"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "pause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "pauseManager"; + readonly outputs: readonly [{ + readonly internalType: "address"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "owner"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "spender"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "value"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "deadline"; + readonly type: "uint256"; + }, { + readonly internalType: "uint8"; + readonly name: "v"; + readonly type: "uint8"; + }, { + readonly internalType: "bytes32"; + readonly name: "r"; + readonly type: "bytes32"; + }, { + readonly internalType: "bytes32"; + readonly name: "s"; + readonly type: "bytes32"; + }]; + readonly name: "permit"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryExit"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptIn"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsOut"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: "poolId"; + readonly type: "bytes32"; + }, { + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256[]"; + readonly name: "balances"; + readonly type: "uint256[]"; + }, { + readonly internalType: "uint256"; + readonly name: "lastChangeBlock"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256"; + readonly name: "protocolSwapFeePercentage"; + readonly type: "uint256"; + }, { + readonly internalType: "bytes"; + readonly name: "userData"; + readonly type: "bytes"; + }]; + readonly name: "queryJoin"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "bptOut"; + readonly type: "uint256"; + }, { + readonly internalType: "uint256[]"; + readonly name: "amountsIn"; + readonly type: "uint256[]"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "rateProvider0"; + readonly outputs: readonly [{ + readonly internalType: "contract IRateProvider"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "rateProvider1"; + readonly outputs: readonly [{ + readonly internalType: "contract IRateProvider"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "_capManager"; + readonly type: "address"; + }]; + readonly name: "setCapManager"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly components: readonly [{ + readonly internalType: "bool"; + readonly name: "capEnabled"; + readonly type: "bool"; + }, { + readonly internalType: "uint120"; + readonly name: "perAddressCap"; + readonly type: "uint120"; + }, { + readonly internalType: "uint128"; + readonly name: "globalCap"; + readonly type: "uint128"; + }]; + readonly internalType: "struct ICappedLiquidity.CapParams"; + readonly name: "params"; + readonly type: "tuple"; + }]; + readonly name: "setCapParams"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bool"; + readonly name: "paused"; + readonly type: "bool"; + }]; + readonly name: "setPaused"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "uint256"; + readonly name: "swapFeePercentage"; + readonly type: "uint256"; + }]; + readonly name: "setSwapFeePercentage"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "symbol"; + readonly outputs: readonly [{ + readonly internalType: "string"; + readonly name: ""; + readonly type: "string"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "totalSupply"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transfer"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "sender"; + readonly type: "address"; + }, { + readonly internalType: "address"; + readonly name: "recipient"; + readonly type: "address"; + }, { + readonly internalType: "uint256"; + readonly name: "amount"; + readonly type: "uint256"; + }]; + readonly name: "transferFrom"; + readonly outputs: readonly [{ + readonly internalType: "bool"; + readonly name: ""; + readonly type: "bool"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "unpause"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }]; + static createInterface(): GyroEV2Interface; + static connect(address: string, signerOrProvider: Signer | Provider): GyroEV2; +} + +declare class VeBal__factory { + static readonly abi: readonly [{ + readonly name: "Deposit"; + readonly inputs: readonly [{ + readonly name: "provider"; + readonly type: "address"; + readonly indexed: true; + }, { + readonly name: "value"; + readonly type: "uint256"; + readonly indexed: false; + }, { + readonly name: "locktime"; + readonly type: "uint256"; + readonly indexed: true; + }, { + readonly name: "type"; + readonly type: "int128"; + readonly indexed: false; + }, { + readonly name: "ts"; + readonly type: "uint256"; + readonly indexed: false; + }]; + readonly anonymous: false; + readonly type: "event"; + }, { + readonly name: "Withdraw"; + readonly inputs: readonly [{ + readonly name: "provider"; + readonly type: "address"; + readonly indexed: true; + }, { + readonly name: "value"; + readonly type: "uint256"; + readonly indexed: false; + }, { + readonly name: "ts"; + readonly type: "uint256"; + readonly indexed: false; + }]; + readonly anonymous: false; + readonly type: "event"; + }, { + readonly name: "Supply"; + readonly inputs: readonly [{ + readonly name: "prevSupply"; + readonly type: "uint256"; + readonly indexed: false; + }, { + readonly name: "supply"; + readonly type: "uint256"; + readonly indexed: false; + }]; + readonly anonymous: false; + readonly type: "event"; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + readonly inputs: readonly [{ + readonly name: "token_addr"; + readonly type: "address"; + }, { + readonly name: "_name"; + readonly type: "string"; + }, { + readonly name: "_symbol"; + readonly type: "string"; + }, { + readonly name: "_authorizer_adaptor"; + readonly type: "address"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "token"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "address"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "name"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "string"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "symbol"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "string"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "decimals"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "admin"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "address"; + }]; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "commit_smart_wallet_checker"; + readonly inputs: readonly [{ + readonly name: "addr"; + readonly type: "address"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "apply_smart_wallet_checker"; + readonly inputs: readonly []; + readonly outputs: readonly []; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "get_last_user_slope"; + readonly inputs: readonly [{ + readonly name: "addr"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "int128"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "user_point_history__ts"; + readonly inputs: readonly [{ + readonly name: "_addr"; + readonly type: "address"; + }, { + readonly name: "_idx"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "locked__end"; + readonly inputs: readonly [{ + readonly name: "_addr"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "checkpoint"; + readonly inputs: readonly []; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "deposit_for"; + readonly inputs: readonly [{ + readonly name: "_addr"; + readonly type: "address"; + }, { + readonly name: "_value"; + readonly type: "uint256"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "create_lock"; + readonly inputs: readonly [{ + readonly name: "_value"; + readonly type: "uint256"; + }, { + readonly name: "_unlock_time"; + readonly type: "uint256"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "increase_amount"; + readonly inputs: readonly [{ + readonly name: "_value"; + readonly type: "uint256"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "increase_unlock_time"; + readonly inputs: readonly [{ + readonly name: "_unlock_time"; + readonly type: "uint256"; + }]; + readonly outputs: readonly []; + }, { + readonly stateMutability: "nonpayable"; + readonly type: "function"; + readonly name: "withdraw"; + readonly inputs: readonly []; + readonly outputs: readonly []; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "balanceOf"; + readonly inputs: readonly [{ + readonly name: "addr"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "balanceOf"; + readonly inputs: readonly [{ + readonly name: "addr"; + readonly type: "address"; + }, { + readonly name: "_t"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "balanceOfAt"; + readonly inputs: readonly [{ + readonly name: "addr"; + readonly type: "address"; + }, { + readonly name: "_block"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "totalSupply"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "totalSupply"; + readonly inputs: readonly [{ + readonly name: "t"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "totalSupplyAt"; + readonly inputs: readonly [{ + readonly name: "_block"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "supply"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "locked"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "tuple"; + readonly components: readonly [{ + readonly name: "amount"; + readonly type: "int128"; + }, { + readonly name: "end"; + readonly type: "uint256"; + }]; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "epoch"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "point_history"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "tuple"; + readonly components: readonly [{ + readonly name: "bias"; + readonly type: "int128"; + }, { + readonly name: "slope"; + readonly type: "int128"; + }, { + readonly name: "ts"; + readonly type: "uint256"; + }, { + readonly name: "blk"; + readonly type: "uint256"; + }]; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "user_point_history"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "address"; + }, { + readonly name: "arg1"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "tuple"; + readonly components: readonly [{ + readonly name: "bias"; + readonly type: "int128"; + }, { + readonly name: "slope"; + readonly type: "int128"; + }, { + readonly name: "ts"; + readonly type: "uint256"; + }, { + readonly name: "blk"; + readonly type: "uint256"; + }]; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "user_point_epoch"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "address"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "uint256"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "slope_changes"; + readonly inputs: readonly [{ + readonly name: "arg0"; + readonly type: "uint256"; + }]; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "int128"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "future_smart_wallet_checker"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "address"; + }]; + }, { + readonly stateMutability: "view"; + readonly type: "function"; + readonly name: "smart_wallet_checker"; + readonly inputs: readonly []; + readonly outputs: readonly [{ + readonly name: ""; + readonly type: "address"; + }]; + }]; + static createInterface(): VeBalInterface; + static connect(address: string, signerOrProvider: Signer | Provider): VeBal$1; +} + +declare class VeDelegationProxy__factory { + static readonly abi: readonly [{ + readonly inputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: "vault"; + readonly type: "address"; + }, { + readonly internalType: "contract IERC20"; + readonly name: "votingEscrow"; + readonly type: "address"; + }, { + readonly internalType: "contract IVeDelegation"; + readonly name: "delegation"; + readonly type: "address"; + }]; + readonly stateMutability: "nonpayable"; + readonly type: "constructor"; + }, { + readonly anonymous: false; + readonly inputs: readonly [{ + readonly indexed: true; + readonly internalType: "address"; + readonly name: "newImplementation"; + readonly type: "address"; + }]; + readonly name: "DelegationImplementationUpdated"; + readonly type: "event"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }]; + readonly name: "adjustedBalanceOf"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "address"; + readonly name: "user"; + readonly type: "address"; + }]; + readonly name: "adjusted_balance_of"; + readonly outputs: readonly [{ + readonly internalType: "uint256"; + readonly name: ""; + readonly type: "uint256"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "bytes4"; + readonly name: "selector"; + readonly type: "bytes4"; + }]; + readonly name: "getActionId"; + readonly outputs: readonly [{ + readonly internalType: "bytes32"; + readonly name: ""; + readonly type: "bytes32"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getAuthorizer"; + readonly outputs: readonly [{ + readonly internalType: "contract IAuthorizer"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getDelegationImplementation"; + readonly outputs: readonly [{ + readonly internalType: "contract IVeDelegation"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVault"; + readonly outputs: readonly [{ + readonly internalType: "contract IVault"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "getVotingEscrow"; + readonly outputs: readonly [{ + readonly internalType: "contract IERC20"; + readonly name: ""; + readonly type: "address"; + }]; + readonly stateMutability: "view"; + readonly type: "function"; + }, { + readonly inputs: readonly []; + readonly name: "killDelegation"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }, { + readonly inputs: readonly [{ + readonly internalType: "contract IVeDelegation"; + readonly name: "delegation"; + readonly type: "address"; + }]; + readonly name: "setDelegation"; + readonly outputs: readonly []; + readonly stateMutability: "nonpayable"; + readonly type: "function"; + }]; + static createInterface(): VeDelegationProxyInterface; + static connect(address: string, signerOrProvider: Signer | Provider): VeDelegationProxy; +} + +type index_AaveLinearPool__factory = AaveLinearPool__factory; +declare const index_AaveLinearPool__factory: typeof AaveLinearPool__factory; +type index_AaveLinearPoolFactory__factory = AaveLinearPoolFactory__factory; +declare const index_AaveLinearPoolFactory__factory: typeof AaveLinearPoolFactory__factory; +type index_AaveWrapping__factory = AaveWrapping__factory; +declare const index_AaveWrapping__factory: typeof AaveWrapping__factory; +type index_Authoriser__factory = Authoriser__factory; +declare const index_Authoriser__factory: typeof Authoriser__factory; +type index_BalancerHelpers__factory = BalancerHelpers__factory; +declare const index_BalancerHelpers__factory: typeof BalancerHelpers__factory; +type index_BalancerMinter__factory = BalancerMinter__factory; +declare const index_BalancerMinter__factory: typeof BalancerMinter__factory; +type index_BalancerPoolDataQueries__factory = BalancerPoolDataQueries__factory; +declare const index_BalancerPoolDataQueries__factory: typeof BalancerPoolDataQueries__factory; +type index_BalancerRelayer__factory = BalancerRelayer__factory; +declare const index_BalancerRelayer__factory: typeof BalancerRelayer__factory; +type index_BatchRelayerLibrary__factory = BatchRelayerLibrary__factory; +declare const index_BatchRelayerLibrary__factory: typeof BatchRelayerLibrary__factory; +type index_ComposableStablePool__factory = ComposableStablePool__factory; +declare const index_ComposableStablePool__factory: typeof ComposableStablePool__factory; +type index_ComposableStablePoolFactory__factory = ComposableStablePoolFactory__factory; +declare const index_ComposableStablePoolFactory__factory: typeof ComposableStablePoolFactory__factory; +type index_ConvergentCurvePool__factory = ConvergentCurvePool__factory; +declare const index_ConvergentCurvePool__factory: typeof ConvergentCurvePool__factory; +type index_ERC20__factory = ERC20__factory; +declare const index_ERC20__factory: typeof ERC20__factory; +type index_ERC4626LinearPool__factory = ERC4626LinearPool__factory; +declare const index_ERC4626LinearPool__factory: typeof ERC4626LinearPool__factory; +type index_ERC4626LinearPoolFactory__factory = ERC4626LinearPoolFactory__factory; +declare const index_ERC4626LinearPoolFactory__factory: typeof ERC4626LinearPoolFactory__factory; +type index_EulerLinearPool__factory = EulerLinearPool__factory; +declare const index_EulerLinearPool__factory: typeof EulerLinearPool__factory; +type index_EulerLinearPoolFactory__factory = EulerLinearPoolFactory__factory; +declare const index_EulerLinearPoolFactory__factory: typeof EulerLinearPoolFactory__factory; +type index_FXPool__factory = FXPool__factory; +declare const index_FXPool__factory: typeof FXPool__factory; +type index_GaugeClaimHelper__factory = GaugeClaimHelper__factory; +declare const index_GaugeClaimHelper__factory: typeof GaugeClaimHelper__factory; +type index_GearboxLinearPool__factory = GearboxLinearPool__factory; +declare const index_GearboxLinearPool__factory: typeof GearboxLinearPool__factory; +type index_GearboxLinearPoolFactory__factory = GearboxLinearPoolFactory__factory; +declare const index_GearboxLinearPoolFactory__factory: typeof GearboxLinearPoolFactory__factory; +type index_GyroConfig__factory = GyroConfig__factory; +declare const index_GyroConfig__factory: typeof GyroConfig__factory; +type index_LidoRelayer__factory = LidoRelayer__factory; +declare const index_LidoRelayer__factory: typeof LidoRelayer__factory; +type index_LinearPool__factory = LinearPool__factory; +declare const index_LinearPool__factory: typeof LinearPool__factory; +type index_LiquidityGaugeV5__factory = LiquidityGaugeV5__factory; +declare const index_LiquidityGaugeV5__factory: typeof LiquidityGaugeV5__factory; +type index_Multicall__factory = Multicall__factory; +declare const index_Multicall__factory: typeof Multicall__factory; +type index_Multicall3__factory = Multicall3__factory; +declare const index_Multicall3__factory: typeof Multicall3__factory; +type index_StablePool__factory = StablePool__factory; +declare const index_StablePool__factory: typeof StablePool__factory; +type index_StaticATokenRateProvider__factory = StaticATokenRateProvider__factory; +declare const index_StaticATokenRateProvider__factory: typeof StaticATokenRateProvider__factory; +type index_Vault__factory = Vault__factory; +declare const index_Vault__factory: typeof Vault__factory; +type index_WeightedPool__factory = WeightedPool__factory; +declare const index_WeightedPool__factory: typeof WeightedPool__factory; +type index_WeightedPoolFactory__factory = WeightedPoolFactory__factory; +declare const index_WeightedPoolFactory__factory: typeof WeightedPoolFactory__factory; +type index_YearnLinearPool__factory = YearnLinearPool__factory; +declare const index_YearnLinearPool__factory: typeof YearnLinearPool__factory; +type index_YearnLinearPoolFactory__factory = YearnLinearPoolFactory__factory; +declare const index_YearnLinearPoolFactory__factory: typeof YearnLinearPoolFactory__factory; +type index_GyroEV2__factory = GyroEV2__factory; +declare const index_GyroEV2__factory: typeof GyroEV2__factory; +type index_VeBal__factory = VeBal__factory; +declare const index_VeBal__factory: typeof VeBal__factory; +type index_VeDelegationProxy__factory = VeDelegationProxy__factory; +declare const index_VeDelegationProxy__factory: typeof VeDelegationProxy__factory; +declare namespace index { + export { + index_AaveLinearPool__factory as AaveLinearPool__factory, + index_AaveLinearPoolFactory__factory as AaveLinearPoolFactory__factory, + index_AaveWrapping__factory as AaveWrapping__factory, + index_Authoriser__factory as Authoriser__factory, + index_BalancerHelpers__factory as BalancerHelpers__factory, + index_BalancerMinter__factory as BalancerMinter__factory, + index_BalancerPoolDataQueries__factory as BalancerPoolDataQueries__factory, + index_BalancerRelayer__factory as BalancerRelayer__factory, + index_BatchRelayerLibrary__factory as BatchRelayerLibrary__factory, + index_ComposableStablePool__factory as ComposableStablePool__factory, + index_ComposableStablePoolFactory__factory as ComposableStablePoolFactory__factory, + index_ConvergentCurvePool__factory as ConvergentCurvePool__factory, + index_ERC20__factory as ERC20__factory, + index_ERC4626LinearPool__factory as ERC4626LinearPool__factory, + index_ERC4626LinearPoolFactory__factory as ERC4626LinearPoolFactory__factory, + index_EulerLinearPool__factory as EulerLinearPool__factory, + index_EulerLinearPoolFactory__factory as EulerLinearPoolFactory__factory, + index_FXPool__factory as FXPool__factory, + index_GaugeClaimHelper__factory as GaugeClaimHelper__factory, + index_GearboxLinearPool__factory as GearboxLinearPool__factory, + index_GearboxLinearPoolFactory__factory as GearboxLinearPoolFactory__factory, + index_GyroConfig__factory as GyroConfig__factory, + index_LidoRelayer__factory as LidoRelayer__factory, + index_LinearPool__factory as LinearPool__factory, + index_LiquidityGaugeV5__factory as LiquidityGaugeV5__factory, + index_Multicall__factory as Multicall__factory, + index_Multicall3__factory as Multicall3__factory, + index_StablePool__factory as StablePool__factory, + index_StaticATokenRateProvider__factory as StaticATokenRateProvider__factory, + index_Vault__factory as Vault__factory, + index_WeightedPool__factory as WeightedPool__factory, + index_WeightedPoolFactory__factory as WeightedPoolFactory__factory, + index_YearnLinearPool__factory as YearnLinearPool__factory, + index_YearnLinearPoolFactory__factory as YearnLinearPoolFactory__factory, + index_GyroEV2__factory as GyroEV2__factory, + index_VeBal__factory as VeBal__factory, + index_VeDelegationProxy__factory as VeDelegationProxy__factory, + }; +} + +declare class GaugeControllerMulticallRepository { + private multicall; + private gaugeControllerAddress; + private gaugeControllerCheckpointerAddress?; + constructor(multicall: Multicall, gaugeControllerAddress: string, gaugeControllerCheckpointerAddress?: string | undefined); + getRelativeWeights(gaugeAddresses: string[], timestamp?: number): Promise<{ + [gaugeAddress: string]: number; + }>; +} + +interface RewardData { + token: string; + distributor: string; + period_finish: BigNumber; + rate: BigNumber; + last_update: BigNumber; + integral: BigNumber; + decimals?: number; +} +/** + * A lot of code to get liquidity gauge state via RPC multicall. + * TODO: reseach helper contracts or extend subgraph + */ +declare class LiquidityGaugesMulticallRepository { + private multicall; + private chainId; + constructor(multicall: Multicall, chainId: Network); + getTotalSupplies(gaugeAddresses: string[]): Promise<{ + [gaugeAddress: string]: number; + }>; + getWorkingSupplies(gaugeAddresses: string[]): Promise<{ + [gaugeAddress: string]: number; + }>; + getInflationRates(gaugeAddresses: string[]): Promise<{ + [gaugeAddress: string]: number; + }>; + getRewardCounts(gaugeAddresses: string[]): Promise<{ + [gaugeAddress: string]: number; + }>; + getRewardTokens(gaugeAddresses: string[], passingRewardCounts?: { + [gaugeAddress: string]: number; + }): Promise<{ + [gaugeAddress: string]: string[]; + }>; + getRewardData(gaugeAddresses: string[], passingRewardTokens?: { + [gaugeAddress: string]: string[]; + }): Promise<{ + [gaugeAddress: string]: { + [rewardTokenAddress: string]: RewardData; + }; + }>; +} + +type Maybe$1 = T | null; +type InputMaybe$1 = Maybe$1; +type Exact$1 = { + [K in keyof T]: T[K]; +}; +/** All built-in and custom scalars, mapped to their actual values */ +type Scalars$1 = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + BigDecimal: string; + BigInt: string; + Bytes: string; + Int8: any; +}; +type AmpUpdate_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + and?: InputMaybe$1>>; + endAmp?: InputMaybe$1; + endAmp_gt?: InputMaybe$1; + endAmp_gte?: InputMaybe$1; + endAmp_in?: InputMaybe$1>; + endAmp_lt?: InputMaybe$1; + endAmp_lte?: InputMaybe$1; + endAmp_not?: InputMaybe$1; + endAmp_not_in?: InputMaybe$1>; + endTimestamp?: InputMaybe$1; + endTimestamp_gt?: InputMaybe$1; + endTimestamp_gte?: InputMaybe$1; + endTimestamp_in?: InputMaybe$1>; + endTimestamp_lt?: InputMaybe$1; + endTimestamp_lte?: InputMaybe$1; + endTimestamp_not?: InputMaybe$1; + endTimestamp_not_in?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + poolId?: InputMaybe$1; + poolId_?: InputMaybe$1; + poolId_contains?: InputMaybe$1; + poolId_contains_nocase?: InputMaybe$1; + poolId_ends_with?: InputMaybe$1; + poolId_ends_with_nocase?: InputMaybe$1; + poolId_gt?: InputMaybe$1; + poolId_gte?: InputMaybe$1; + poolId_in?: InputMaybe$1>; + poolId_lt?: InputMaybe$1; + poolId_lte?: InputMaybe$1; + poolId_not?: InputMaybe$1; + poolId_not_contains?: InputMaybe$1; + poolId_not_contains_nocase?: InputMaybe$1; + poolId_not_ends_with?: InputMaybe$1; + poolId_not_ends_with_nocase?: InputMaybe$1; + poolId_not_in?: InputMaybe$1>; + poolId_not_starts_with?: InputMaybe$1; + poolId_not_starts_with_nocase?: InputMaybe$1; + poolId_starts_with?: InputMaybe$1; + poolId_starts_with_nocase?: InputMaybe$1; + scheduledTimestamp?: InputMaybe$1; + scheduledTimestamp_gt?: InputMaybe$1; + scheduledTimestamp_gte?: InputMaybe$1; + scheduledTimestamp_in?: InputMaybe$1>; + scheduledTimestamp_lt?: InputMaybe$1; + scheduledTimestamp_lte?: InputMaybe$1; + scheduledTimestamp_not?: InputMaybe$1; + scheduledTimestamp_not_in?: InputMaybe$1>; + startAmp?: InputMaybe$1; + startAmp_gt?: InputMaybe$1; + startAmp_gte?: InputMaybe$1; + startAmp_in?: InputMaybe$1>; + startAmp_lt?: InputMaybe$1; + startAmp_lte?: InputMaybe$1; + startAmp_not?: InputMaybe$1; + startAmp_not_in?: InputMaybe$1>; + startTimestamp?: InputMaybe$1; + startTimestamp_gt?: InputMaybe$1; + startTimestamp_gte?: InputMaybe$1; + startTimestamp_in?: InputMaybe$1>; + startTimestamp_lt?: InputMaybe$1; + startTimestamp_lte?: InputMaybe$1; + startTimestamp_not?: InputMaybe$1; + startTimestamp_not_in?: InputMaybe$1>; +}; +type Balancer_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + and?: InputMaybe$1>>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + poolCount?: InputMaybe$1; + poolCount_gt?: InputMaybe$1; + poolCount_gte?: InputMaybe$1; + poolCount_in?: InputMaybe$1>; + poolCount_lt?: InputMaybe$1; + poolCount_lte?: InputMaybe$1; + poolCount_not?: InputMaybe$1; + poolCount_not_in?: InputMaybe$1>; + pools_?: InputMaybe$1; + protocolFeesCollector?: InputMaybe$1; + protocolFeesCollector_contains?: InputMaybe$1; + protocolFeesCollector_gt?: InputMaybe$1; + protocolFeesCollector_gte?: InputMaybe$1; + protocolFeesCollector_in?: InputMaybe$1>; + protocolFeesCollector_lt?: InputMaybe$1; + protocolFeesCollector_lte?: InputMaybe$1; + protocolFeesCollector_not?: InputMaybe$1; + protocolFeesCollector_not_contains?: InputMaybe$1; + protocolFeesCollector_not_in?: InputMaybe$1>; + totalLiquidity?: InputMaybe$1; + totalLiquidity_gt?: InputMaybe$1; + totalLiquidity_gte?: InputMaybe$1; + totalLiquidity_in?: InputMaybe$1>; + totalLiquidity_lt?: InputMaybe$1; + totalLiquidity_lte?: InputMaybe$1; + totalLiquidity_not?: InputMaybe$1; + totalLiquidity_not_in?: InputMaybe$1>; + totalProtocolFee?: InputMaybe$1; + totalProtocolFee_gt?: InputMaybe$1; + totalProtocolFee_gte?: InputMaybe$1; + totalProtocolFee_in?: InputMaybe$1>; + totalProtocolFee_lt?: InputMaybe$1; + totalProtocolFee_lte?: InputMaybe$1; + totalProtocolFee_not?: InputMaybe$1; + totalProtocolFee_not_in?: InputMaybe$1>; + totalSwapCount?: InputMaybe$1; + totalSwapCount_gt?: InputMaybe$1; + totalSwapCount_gte?: InputMaybe$1; + totalSwapCount_in?: InputMaybe$1>; + totalSwapCount_lt?: InputMaybe$1; + totalSwapCount_lte?: InputMaybe$1; + totalSwapCount_not?: InputMaybe$1; + totalSwapCount_not_in?: InputMaybe$1>; + totalSwapFee?: InputMaybe$1; + totalSwapFee_gt?: InputMaybe$1; + totalSwapFee_gte?: InputMaybe$1; + totalSwapFee_in?: InputMaybe$1>; + totalSwapFee_lt?: InputMaybe$1; + totalSwapFee_lte?: InputMaybe$1; + totalSwapFee_not?: InputMaybe$1; + totalSwapFee_not_in?: InputMaybe$1>; + totalSwapVolume?: InputMaybe$1; + totalSwapVolume_gt?: InputMaybe$1; + totalSwapVolume_gte?: InputMaybe$1; + totalSwapVolume_in?: InputMaybe$1>; + totalSwapVolume_lt?: InputMaybe$1; + totalSwapVolume_lte?: InputMaybe$1; + totalSwapVolume_not?: InputMaybe$1; + totalSwapVolume_not_in?: InputMaybe$1>; +}; +declare enum Balancer_OrderBy { + Id = "id", + PoolCount = "poolCount", + Pools = "pools", + ProtocolFeesCollector = "protocolFeesCollector", + TotalLiquidity = "totalLiquidity", + TotalProtocolFee = "totalProtocolFee", + TotalSwapCount = "totalSwapCount", + TotalSwapFee = "totalSwapFee", + TotalSwapVolume = "totalSwapVolume" +} +type BlockChangedFilter$1 = { + number_gte: Scalars$1['Int']; +}; +type Block_Height$1 = { + hash?: InputMaybe$1; + number?: InputMaybe$1; + number_gte?: InputMaybe$1; +}; +type CircuitBreaker_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + and?: InputMaybe$1>>; + bptPrice?: InputMaybe$1; + bptPrice_gt?: InputMaybe$1; + bptPrice_gte?: InputMaybe$1; + bptPrice_in?: InputMaybe$1>; + bptPrice_lt?: InputMaybe$1; + bptPrice_lte?: InputMaybe$1; + bptPrice_not?: InputMaybe$1; + bptPrice_not_in?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + lowerBoundPercentage?: InputMaybe$1; + lowerBoundPercentage_gt?: InputMaybe$1; + lowerBoundPercentage_gte?: InputMaybe$1; + lowerBoundPercentage_in?: InputMaybe$1>; + lowerBoundPercentage_lt?: InputMaybe$1; + lowerBoundPercentage_lte?: InputMaybe$1; + lowerBoundPercentage_not?: InputMaybe$1; + lowerBoundPercentage_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + pool?: InputMaybe$1; + pool_?: InputMaybe$1; + pool_contains?: InputMaybe$1; + pool_contains_nocase?: InputMaybe$1; + pool_ends_with?: InputMaybe$1; + pool_ends_with_nocase?: InputMaybe$1; + pool_gt?: InputMaybe$1; + pool_gte?: InputMaybe$1; + pool_in?: InputMaybe$1>; + pool_lt?: InputMaybe$1; + pool_lte?: InputMaybe$1; + pool_not?: InputMaybe$1; + pool_not_contains?: InputMaybe$1; + pool_not_contains_nocase?: InputMaybe$1; + pool_not_ends_with?: InputMaybe$1; + pool_not_ends_with_nocase?: InputMaybe$1; + pool_not_in?: InputMaybe$1>; + pool_not_starts_with?: InputMaybe$1; + pool_not_starts_with_nocase?: InputMaybe$1; + pool_starts_with?: InputMaybe$1; + pool_starts_with_nocase?: InputMaybe$1; + token?: InputMaybe$1; + token_?: InputMaybe$1; + token_contains?: InputMaybe$1; + token_contains_nocase?: InputMaybe$1; + token_ends_with?: InputMaybe$1; + token_ends_with_nocase?: InputMaybe$1; + token_gt?: InputMaybe$1; + token_gte?: InputMaybe$1; + token_in?: InputMaybe$1>; + token_lt?: InputMaybe$1; + token_lte?: InputMaybe$1; + token_not?: InputMaybe$1; + token_not_contains?: InputMaybe$1; + token_not_contains_nocase?: InputMaybe$1; + token_not_ends_with?: InputMaybe$1; + token_not_ends_with_nocase?: InputMaybe$1; + token_not_in?: InputMaybe$1>; + token_not_starts_with?: InputMaybe$1; + token_not_starts_with_nocase?: InputMaybe$1; + token_starts_with?: InputMaybe$1; + token_starts_with_nocase?: InputMaybe$1; + upperBoundPercentage?: InputMaybe$1; + upperBoundPercentage_gt?: InputMaybe$1; + upperBoundPercentage_gte?: InputMaybe$1; + upperBoundPercentage_in?: InputMaybe$1>; + upperBoundPercentage_lt?: InputMaybe$1; + upperBoundPercentage_lte?: InputMaybe$1; + upperBoundPercentage_not?: InputMaybe$1; + upperBoundPercentage_not_in?: InputMaybe$1>; +}; +type GradualWeightUpdate_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + and?: InputMaybe$1>>; + endTimestamp?: InputMaybe$1; + endTimestamp_gt?: InputMaybe$1; + endTimestamp_gte?: InputMaybe$1; + endTimestamp_in?: InputMaybe$1>; + endTimestamp_lt?: InputMaybe$1; + endTimestamp_lte?: InputMaybe$1; + endTimestamp_not?: InputMaybe$1; + endTimestamp_not_in?: InputMaybe$1>; + endWeights?: InputMaybe$1>; + endWeights_contains?: InputMaybe$1>; + endWeights_contains_nocase?: InputMaybe$1>; + endWeights_not?: InputMaybe$1>; + endWeights_not_contains?: InputMaybe$1>; + endWeights_not_contains_nocase?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + poolId?: InputMaybe$1; + poolId_?: InputMaybe$1; + poolId_contains?: InputMaybe$1; + poolId_contains_nocase?: InputMaybe$1; + poolId_ends_with?: InputMaybe$1; + poolId_ends_with_nocase?: InputMaybe$1; + poolId_gt?: InputMaybe$1; + poolId_gte?: InputMaybe$1; + poolId_in?: InputMaybe$1>; + poolId_lt?: InputMaybe$1; + poolId_lte?: InputMaybe$1; + poolId_not?: InputMaybe$1; + poolId_not_contains?: InputMaybe$1; + poolId_not_contains_nocase?: InputMaybe$1; + poolId_not_ends_with?: InputMaybe$1; + poolId_not_ends_with_nocase?: InputMaybe$1; + poolId_not_in?: InputMaybe$1>; + poolId_not_starts_with?: InputMaybe$1; + poolId_not_starts_with_nocase?: InputMaybe$1; + poolId_starts_with?: InputMaybe$1; + poolId_starts_with_nocase?: InputMaybe$1; + scheduledTimestamp?: InputMaybe$1; + scheduledTimestamp_gt?: InputMaybe$1; + scheduledTimestamp_gte?: InputMaybe$1; + scheduledTimestamp_in?: InputMaybe$1>; + scheduledTimestamp_lt?: InputMaybe$1; + scheduledTimestamp_lte?: InputMaybe$1; + scheduledTimestamp_not?: InputMaybe$1; + scheduledTimestamp_not_in?: InputMaybe$1>; + startTimestamp?: InputMaybe$1; + startTimestamp_gt?: InputMaybe$1; + startTimestamp_gte?: InputMaybe$1; + startTimestamp_in?: InputMaybe$1>; + startTimestamp_lt?: InputMaybe$1; + startTimestamp_lte?: InputMaybe$1; + startTimestamp_not?: InputMaybe$1; + startTimestamp_not_in?: InputMaybe$1>; + startWeights?: InputMaybe$1>; + startWeights_contains?: InputMaybe$1>; + startWeights_contains_nocase?: InputMaybe$1>; + startWeights_not?: InputMaybe$1>; + startWeights_not_contains?: InputMaybe$1>; + startWeights_not_contains_nocase?: InputMaybe$1>; +}; +declare enum InvestType { + Exit = "Exit", + Join = "Join" +} +type JoinExit_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + amounts?: InputMaybe$1>; + amounts_contains?: InputMaybe$1>; + amounts_contains_nocase?: InputMaybe$1>; + amounts_not?: InputMaybe$1>; + amounts_not_contains?: InputMaybe$1>; + amounts_not_contains_nocase?: InputMaybe$1>; + and?: InputMaybe$1>>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + pool?: InputMaybe$1; + pool_?: InputMaybe$1; + pool_contains?: InputMaybe$1; + pool_contains_nocase?: InputMaybe$1; + pool_ends_with?: InputMaybe$1; + pool_ends_with_nocase?: InputMaybe$1; + pool_gt?: InputMaybe$1; + pool_gte?: InputMaybe$1; + pool_in?: InputMaybe$1>; + pool_lt?: InputMaybe$1; + pool_lte?: InputMaybe$1; + pool_not?: InputMaybe$1; + pool_not_contains?: InputMaybe$1; + pool_not_contains_nocase?: InputMaybe$1; + pool_not_ends_with?: InputMaybe$1; + pool_not_ends_with_nocase?: InputMaybe$1; + pool_not_in?: InputMaybe$1>; + pool_not_starts_with?: InputMaybe$1; + pool_not_starts_with_nocase?: InputMaybe$1; + pool_starts_with?: InputMaybe$1; + pool_starts_with_nocase?: InputMaybe$1; + sender?: InputMaybe$1; + sender_contains?: InputMaybe$1; + sender_gt?: InputMaybe$1; + sender_gte?: InputMaybe$1; + sender_in?: InputMaybe$1>; + sender_lt?: InputMaybe$1; + sender_lte?: InputMaybe$1; + sender_not?: InputMaybe$1; + sender_not_contains?: InputMaybe$1; + sender_not_in?: InputMaybe$1>; + timestamp?: InputMaybe$1; + timestamp_gt?: InputMaybe$1; + timestamp_gte?: InputMaybe$1; + timestamp_in?: InputMaybe$1>; + timestamp_lt?: InputMaybe$1; + timestamp_lte?: InputMaybe$1; + timestamp_not?: InputMaybe$1; + timestamp_not_in?: InputMaybe$1>; + tx?: InputMaybe$1; + tx_contains?: InputMaybe$1; + tx_gt?: InputMaybe$1; + tx_gte?: InputMaybe$1; + tx_in?: InputMaybe$1>; + tx_lt?: InputMaybe$1; + tx_lte?: InputMaybe$1; + tx_not?: InputMaybe$1; + tx_not_contains?: InputMaybe$1; + tx_not_in?: InputMaybe$1>; + type?: InputMaybe$1; + type_in?: InputMaybe$1>; + type_not?: InputMaybe$1; + type_not_in?: InputMaybe$1>; + user?: InputMaybe$1; + user_?: InputMaybe$1; + user_contains?: InputMaybe$1; + user_contains_nocase?: InputMaybe$1; + user_ends_with?: InputMaybe$1; + user_ends_with_nocase?: InputMaybe$1; + user_gt?: InputMaybe$1; + user_gte?: InputMaybe$1; + user_in?: InputMaybe$1>; + user_lt?: InputMaybe$1; + user_lte?: InputMaybe$1; + user_not?: InputMaybe$1; + user_not_contains?: InputMaybe$1; + user_not_contains_nocase?: InputMaybe$1; + user_not_ends_with?: InputMaybe$1; + user_not_ends_with_nocase?: InputMaybe$1; + user_not_in?: InputMaybe$1>; + user_not_starts_with?: InputMaybe$1; + user_not_starts_with_nocase?: InputMaybe$1; + user_starts_with?: InputMaybe$1; + user_starts_with_nocase?: InputMaybe$1; + valueUSD?: InputMaybe$1; + valueUSD_gt?: InputMaybe$1; + valueUSD_gte?: InputMaybe$1; + valueUSD_in?: InputMaybe$1>; + valueUSD_lt?: InputMaybe$1; + valueUSD_lte?: InputMaybe$1; + valueUSD_not?: InputMaybe$1; + valueUSD_not_in?: InputMaybe$1>; +}; +declare enum JoinExit_OrderBy { + Amounts = "amounts", + Id = "id", + Pool = "pool", + PoolAddress = "pool__address", + PoolAlpha = "pool__alpha", + PoolAmp = "pool__amp", + PoolBaseToken = "pool__baseToken", + PoolBeta = "pool__beta", + PoolC = "pool__c", + PoolCreateTime = "pool__createTime", + PoolDSq = "pool__dSq", + PoolDelta = "pool__delta", + PoolEpsilon = "pool__epsilon", + PoolExpiryTime = "pool__expiryTime", + PoolFactory = "pool__factory", + PoolHoldersCount = "pool__holdersCount", + PoolId = "pool__id", + PoolIsInRecoveryMode = "pool__isInRecoveryMode", + PoolIsPaused = "pool__isPaused", + PoolJoinExitEnabled = "pool__joinExitEnabled", + PoolLambda = "pool__lambda", + PoolLastJoinExitAmp = "pool__lastJoinExitAmp", + PoolLastPostJoinExitInvariant = "pool__lastPostJoinExitInvariant", + PoolLowerTarget = "pool__lowerTarget", + PoolMainIndex = "pool__mainIndex", + PoolManagementAumFee = "pool__managementAumFee", + PoolManagementFee = "pool__managementFee", + PoolMustAllowlistLPs = "pool__mustAllowlistLPs", + PoolName = "pool__name", + PoolOracleEnabled = "pool__oracleEnabled", + PoolOwner = "pool__owner", + PoolPoolType = "pool__poolType", + PoolPoolTypeVersion = "pool__poolTypeVersion", + PoolPrincipalToken = "pool__principalToken", + PoolProtocolAumFeeCache = "pool__protocolAumFeeCache", + PoolProtocolId = "pool__protocolId", + PoolProtocolSwapFeeCache = "pool__protocolSwapFeeCache", + PoolProtocolYieldFeeCache = "pool__protocolYieldFeeCache", + PoolRoot3Alpha = "pool__root3Alpha", + PoolS = "pool__s", + PoolSqrtAlpha = "pool__sqrtAlpha", + PoolSqrtBeta = "pool__sqrtBeta", + PoolStrategyType = "pool__strategyType", + PoolSwapEnabled = "pool__swapEnabled", + PoolSwapEnabledCurationSignal = "pool__swapEnabledCurationSignal", + PoolSwapEnabledInternal = "pool__swapEnabledInternal", + PoolSwapFee = "pool__swapFee", + PoolSwapsCount = "pool__swapsCount", + PoolSymbol = "pool__symbol", + PoolTauAlphaX = "pool__tauAlphaX", + PoolTauAlphaY = "pool__tauAlphaY", + PoolTauBetaX = "pool__tauBetaX", + PoolTauBetaY = "pool__tauBetaY", + PoolTotalAumFeeCollectedInBpt = "pool__totalAumFeeCollectedInBPT", + PoolTotalLiquidity = "pool__totalLiquidity", + PoolTotalLiquiditySansBpt = "pool__totalLiquiditySansBPT", + PoolTotalProtocolFee = "pool__totalProtocolFee", + PoolTotalProtocolFeePaidInBpt = "pool__totalProtocolFeePaidInBPT", + PoolTotalShares = "pool__totalShares", + PoolTotalSwapFee = "pool__totalSwapFee", + PoolTotalSwapVolume = "pool__totalSwapVolume", + PoolTotalWeight = "pool__totalWeight", + PoolTx = "pool__tx", + PoolU = "pool__u", + PoolUnitSeconds = "pool__unitSeconds", + PoolUpperTarget = "pool__upperTarget", + PoolV = "pool__v", + PoolW = "pool__w", + PoolWrappedIndex = "pool__wrappedIndex", + PoolZ = "pool__z", + Sender = "sender", + Timestamp = "timestamp", + Tx = "tx", + Type = "type", + User = "user", + UserId = "user__id", + ValueUsd = "valueUSD" +} +type LatestPrice_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + and?: InputMaybe$1>>; + asset?: InputMaybe$1; + asset_contains?: InputMaybe$1; + asset_gt?: InputMaybe$1; + asset_gte?: InputMaybe$1; + asset_in?: InputMaybe$1>; + asset_lt?: InputMaybe$1; + asset_lte?: InputMaybe$1; + asset_not?: InputMaybe$1; + asset_not_contains?: InputMaybe$1; + asset_not_in?: InputMaybe$1>; + block?: InputMaybe$1; + block_gt?: InputMaybe$1; + block_gte?: InputMaybe$1; + block_in?: InputMaybe$1>; + block_lt?: InputMaybe$1; + block_lte?: InputMaybe$1; + block_not?: InputMaybe$1; + block_not_in?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + poolId?: InputMaybe$1; + poolId_?: InputMaybe$1; + poolId_contains?: InputMaybe$1; + poolId_contains_nocase?: InputMaybe$1; + poolId_ends_with?: InputMaybe$1; + poolId_ends_with_nocase?: InputMaybe$1; + poolId_gt?: InputMaybe$1; + poolId_gte?: InputMaybe$1; + poolId_in?: InputMaybe$1>; + poolId_lt?: InputMaybe$1; + poolId_lte?: InputMaybe$1; + poolId_not?: InputMaybe$1; + poolId_not_contains?: InputMaybe$1; + poolId_not_contains_nocase?: InputMaybe$1; + poolId_not_ends_with?: InputMaybe$1; + poolId_not_ends_with_nocase?: InputMaybe$1; + poolId_not_in?: InputMaybe$1>; + poolId_not_starts_with?: InputMaybe$1; + poolId_not_starts_with_nocase?: InputMaybe$1; + poolId_starts_with?: InputMaybe$1; + poolId_starts_with_nocase?: InputMaybe$1; + price?: InputMaybe$1; + price_gt?: InputMaybe$1; + price_gte?: InputMaybe$1; + price_in?: InputMaybe$1>; + price_lt?: InputMaybe$1; + price_lte?: InputMaybe$1; + price_not?: InputMaybe$1; + price_not_in?: InputMaybe$1>; + pricingAsset?: InputMaybe$1; + pricingAsset_contains?: InputMaybe$1; + pricingAsset_gt?: InputMaybe$1; + pricingAsset_gte?: InputMaybe$1; + pricingAsset_in?: InputMaybe$1>; + pricingAsset_lt?: InputMaybe$1; + pricingAsset_lte?: InputMaybe$1; + pricingAsset_not?: InputMaybe$1; + pricingAsset_not_contains?: InputMaybe$1; + pricingAsset_not_in?: InputMaybe$1>; +}; +declare enum LatestPrice_OrderBy { + Asset = "asset", + Block = "block", + Id = "id", + PoolId = "poolId", + PoolIdAddress = "poolId__address", + PoolIdAlpha = "poolId__alpha", + PoolIdAmp = "poolId__amp", + PoolIdBaseToken = "poolId__baseToken", + PoolIdBeta = "poolId__beta", + PoolIdC = "poolId__c", + PoolIdCreateTime = "poolId__createTime", + PoolIdDSq = "poolId__dSq", + PoolIdDelta = "poolId__delta", + PoolIdEpsilon = "poolId__epsilon", + PoolIdExpiryTime = "poolId__expiryTime", + PoolIdFactory = "poolId__factory", + PoolIdHoldersCount = "poolId__holdersCount", + PoolIdId = "poolId__id", + PoolIdIsInRecoveryMode = "poolId__isInRecoveryMode", + PoolIdIsPaused = "poolId__isPaused", + PoolIdJoinExitEnabled = "poolId__joinExitEnabled", + PoolIdLambda = "poolId__lambda", + PoolIdLastJoinExitAmp = "poolId__lastJoinExitAmp", + PoolIdLastPostJoinExitInvariant = "poolId__lastPostJoinExitInvariant", + PoolIdLowerTarget = "poolId__lowerTarget", + PoolIdMainIndex = "poolId__mainIndex", + PoolIdManagementAumFee = "poolId__managementAumFee", + PoolIdManagementFee = "poolId__managementFee", + PoolIdMustAllowlistLPs = "poolId__mustAllowlistLPs", + PoolIdName = "poolId__name", + PoolIdOracleEnabled = "poolId__oracleEnabled", + PoolIdOwner = "poolId__owner", + PoolIdPoolType = "poolId__poolType", + PoolIdPoolTypeVersion = "poolId__poolTypeVersion", + PoolIdPrincipalToken = "poolId__principalToken", + PoolIdProtocolAumFeeCache = "poolId__protocolAumFeeCache", + PoolIdProtocolId = "poolId__protocolId", + PoolIdProtocolSwapFeeCache = "poolId__protocolSwapFeeCache", + PoolIdProtocolYieldFeeCache = "poolId__protocolYieldFeeCache", + PoolIdRoot3Alpha = "poolId__root3Alpha", + PoolIdS = "poolId__s", + PoolIdSqrtAlpha = "poolId__sqrtAlpha", + PoolIdSqrtBeta = "poolId__sqrtBeta", + PoolIdStrategyType = "poolId__strategyType", + PoolIdSwapEnabled = "poolId__swapEnabled", + PoolIdSwapEnabledCurationSignal = "poolId__swapEnabledCurationSignal", + PoolIdSwapEnabledInternal = "poolId__swapEnabledInternal", + PoolIdSwapFee = "poolId__swapFee", + PoolIdSwapsCount = "poolId__swapsCount", + PoolIdSymbol = "poolId__symbol", + PoolIdTauAlphaX = "poolId__tauAlphaX", + PoolIdTauAlphaY = "poolId__tauAlphaY", + PoolIdTauBetaX = "poolId__tauBetaX", + PoolIdTauBetaY = "poolId__tauBetaY", + PoolIdTotalAumFeeCollectedInBpt = "poolId__totalAumFeeCollectedInBPT", + PoolIdTotalLiquidity = "poolId__totalLiquidity", + PoolIdTotalLiquiditySansBpt = "poolId__totalLiquiditySansBPT", + PoolIdTotalProtocolFee = "poolId__totalProtocolFee", + PoolIdTotalProtocolFeePaidInBpt = "poolId__totalProtocolFeePaidInBPT", + PoolIdTotalShares = "poolId__totalShares", + PoolIdTotalSwapFee = "poolId__totalSwapFee", + PoolIdTotalSwapVolume = "poolId__totalSwapVolume", + PoolIdTotalWeight = "poolId__totalWeight", + PoolIdTx = "poolId__tx", + PoolIdU = "poolId__u", + PoolIdUnitSeconds = "poolId__unitSeconds", + PoolIdUpperTarget = "poolId__upperTarget", + PoolIdV = "poolId__v", + PoolIdW = "poolId__w", + PoolIdWrappedIndex = "poolId__wrappedIndex", + PoolIdZ = "poolId__z", + Price = "price", + PricingAsset = "pricingAsset" +} +type ManagementOperation_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + and?: InputMaybe$1>>; + cashDelta?: InputMaybe$1; + cashDelta_gt?: InputMaybe$1; + cashDelta_gte?: InputMaybe$1; + cashDelta_in?: InputMaybe$1>; + cashDelta_lt?: InputMaybe$1; + cashDelta_lte?: InputMaybe$1; + cashDelta_not?: InputMaybe$1; + cashDelta_not_in?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + managedDelta?: InputMaybe$1; + managedDelta_gt?: InputMaybe$1; + managedDelta_gte?: InputMaybe$1; + managedDelta_in?: InputMaybe$1>; + managedDelta_lt?: InputMaybe$1; + managedDelta_lte?: InputMaybe$1; + managedDelta_not?: InputMaybe$1; + managedDelta_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + poolTokenId?: InputMaybe$1; + poolTokenId_?: InputMaybe$1; + poolTokenId_contains?: InputMaybe$1; + poolTokenId_contains_nocase?: InputMaybe$1; + poolTokenId_ends_with?: InputMaybe$1; + poolTokenId_ends_with_nocase?: InputMaybe$1; + poolTokenId_gt?: InputMaybe$1; + poolTokenId_gte?: InputMaybe$1; + poolTokenId_in?: InputMaybe$1>; + poolTokenId_lt?: InputMaybe$1; + poolTokenId_lte?: InputMaybe$1; + poolTokenId_not?: InputMaybe$1; + poolTokenId_not_contains?: InputMaybe$1; + poolTokenId_not_contains_nocase?: InputMaybe$1; + poolTokenId_not_ends_with?: InputMaybe$1; + poolTokenId_not_ends_with_nocase?: InputMaybe$1; + poolTokenId_not_in?: InputMaybe$1>; + poolTokenId_not_starts_with?: InputMaybe$1; + poolTokenId_not_starts_with_nocase?: InputMaybe$1; + poolTokenId_starts_with?: InputMaybe$1; + poolTokenId_starts_with_nocase?: InputMaybe$1; + timestamp?: InputMaybe$1; + timestamp_gt?: InputMaybe$1; + timestamp_gte?: InputMaybe$1; + timestamp_in?: InputMaybe$1>; + timestamp_lt?: InputMaybe$1; + timestamp_lte?: InputMaybe$1; + timestamp_not?: InputMaybe$1; + timestamp_not_in?: InputMaybe$1>; + type?: InputMaybe$1; + type_in?: InputMaybe$1>; + type_not?: InputMaybe$1; + type_not_in?: InputMaybe$1>; +}; +declare enum OperationType { + Deposit = "Deposit", + Update = "Update", + Withdraw = "Withdraw" +} +/** Defines the order direction, either ascending or descending */ +declare enum OrderDirection$1 { + Asc = "asc", + Desc = "desc" +} +type PoolHistoricalLiquidity_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + and?: InputMaybe$1>>; + block?: InputMaybe$1; + block_gt?: InputMaybe$1; + block_gte?: InputMaybe$1; + block_in?: InputMaybe$1>; + block_lt?: InputMaybe$1; + block_lte?: InputMaybe$1; + block_not?: InputMaybe$1; + block_not_in?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + poolId?: InputMaybe$1; + poolId_?: InputMaybe$1; + poolId_contains?: InputMaybe$1; + poolId_contains_nocase?: InputMaybe$1; + poolId_ends_with?: InputMaybe$1; + poolId_ends_with_nocase?: InputMaybe$1; + poolId_gt?: InputMaybe$1; + poolId_gte?: InputMaybe$1; + poolId_in?: InputMaybe$1>; + poolId_lt?: InputMaybe$1; + poolId_lte?: InputMaybe$1; + poolId_not?: InputMaybe$1; + poolId_not_contains?: InputMaybe$1; + poolId_not_contains_nocase?: InputMaybe$1; + poolId_not_ends_with?: InputMaybe$1; + poolId_not_ends_with_nocase?: InputMaybe$1; + poolId_not_in?: InputMaybe$1>; + poolId_not_starts_with?: InputMaybe$1; + poolId_not_starts_with_nocase?: InputMaybe$1; + poolId_starts_with?: InputMaybe$1; + poolId_starts_with_nocase?: InputMaybe$1; + poolLiquidity?: InputMaybe$1; + poolLiquidity_gt?: InputMaybe$1; + poolLiquidity_gte?: InputMaybe$1; + poolLiquidity_in?: InputMaybe$1>; + poolLiquidity_lt?: InputMaybe$1; + poolLiquidity_lte?: InputMaybe$1; + poolLiquidity_not?: InputMaybe$1; + poolLiquidity_not_in?: InputMaybe$1>; + poolShareValue?: InputMaybe$1; + poolShareValue_gt?: InputMaybe$1; + poolShareValue_gte?: InputMaybe$1; + poolShareValue_in?: InputMaybe$1>; + poolShareValue_lt?: InputMaybe$1; + poolShareValue_lte?: InputMaybe$1; + poolShareValue_not?: InputMaybe$1; + poolShareValue_not_in?: InputMaybe$1>; + poolTotalShares?: InputMaybe$1; + poolTotalShares_gt?: InputMaybe$1; + poolTotalShares_gte?: InputMaybe$1; + poolTotalShares_in?: InputMaybe$1>; + poolTotalShares_lt?: InputMaybe$1; + poolTotalShares_lte?: InputMaybe$1; + poolTotalShares_not?: InputMaybe$1; + poolTotalShares_not_in?: InputMaybe$1>; + pricingAsset?: InputMaybe$1; + pricingAsset_contains?: InputMaybe$1; + pricingAsset_gt?: InputMaybe$1; + pricingAsset_gte?: InputMaybe$1; + pricingAsset_in?: InputMaybe$1>; + pricingAsset_lt?: InputMaybe$1; + pricingAsset_lte?: InputMaybe$1; + pricingAsset_not?: InputMaybe$1; + pricingAsset_not_contains?: InputMaybe$1; + pricingAsset_not_in?: InputMaybe$1>; +}; +declare enum PoolHistoricalLiquidity_OrderBy { + Block = "block", + Id = "id", + PoolId = "poolId", + PoolIdAddress = "poolId__address", + PoolIdAlpha = "poolId__alpha", + PoolIdAmp = "poolId__amp", + PoolIdBaseToken = "poolId__baseToken", + PoolIdBeta = "poolId__beta", + PoolIdC = "poolId__c", + PoolIdCreateTime = "poolId__createTime", + PoolIdDSq = "poolId__dSq", + PoolIdDelta = "poolId__delta", + PoolIdEpsilon = "poolId__epsilon", + PoolIdExpiryTime = "poolId__expiryTime", + PoolIdFactory = "poolId__factory", + PoolIdHoldersCount = "poolId__holdersCount", + PoolIdId = "poolId__id", + PoolIdIsInRecoveryMode = "poolId__isInRecoveryMode", + PoolIdIsPaused = "poolId__isPaused", + PoolIdJoinExitEnabled = "poolId__joinExitEnabled", + PoolIdLambda = "poolId__lambda", + PoolIdLastJoinExitAmp = "poolId__lastJoinExitAmp", + PoolIdLastPostJoinExitInvariant = "poolId__lastPostJoinExitInvariant", + PoolIdLowerTarget = "poolId__lowerTarget", + PoolIdMainIndex = "poolId__mainIndex", + PoolIdManagementAumFee = "poolId__managementAumFee", + PoolIdManagementFee = "poolId__managementFee", + PoolIdMustAllowlistLPs = "poolId__mustAllowlistLPs", + PoolIdName = "poolId__name", + PoolIdOracleEnabled = "poolId__oracleEnabled", + PoolIdOwner = "poolId__owner", + PoolIdPoolType = "poolId__poolType", + PoolIdPoolTypeVersion = "poolId__poolTypeVersion", + PoolIdPrincipalToken = "poolId__principalToken", + PoolIdProtocolAumFeeCache = "poolId__protocolAumFeeCache", + PoolIdProtocolId = "poolId__protocolId", + PoolIdProtocolSwapFeeCache = "poolId__protocolSwapFeeCache", + PoolIdProtocolYieldFeeCache = "poolId__protocolYieldFeeCache", + PoolIdRoot3Alpha = "poolId__root3Alpha", + PoolIdS = "poolId__s", + PoolIdSqrtAlpha = "poolId__sqrtAlpha", + PoolIdSqrtBeta = "poolId__sqrtBeta", + PoolIdStrategyType = "poolId__strategyType", + PoolIdSwapEnabled = "poolId__swapEnabled", + PoolIdSwapEnabledCurationSignal = "poolId__swapEnabledCurationSignal", + PoolIdSwapEnabledInternal = "poolId__swapEnabledInternal", + PoolIdSwapFee = "poolId__swapFee", + PoolIdSwapsCount = "poolId__swapsCount", + PoolIdSymbol = "poolId__symbol", + PoolIdTauAlphaX = "poolId__tauAlphaX", + PoolIdTauAlphaY = "poolId__tauAlphaY", + PoolIdTauBetaX = "poolId__tauBetaX", + PoolIdTauBetaY = "poolId__tauBetaY", + PoolIdTotalAumFeeCollectedInBpt = "poolId__totalAumFeeCollectedInBPT", + PoolIdTotalLiquidity = "poolId__totalLiquidity", + PoolIdTotalLiquiditySansBpt = "poolId__totalLiquiditySansBPT", + PoolIdTotalProtocolFee = "poolId__totalProtocolFee", + PoolIdTotalProtocolFeePaidInBpt = "poolId__totalProtocolFeePaidInBPT", + PoolIdTotalShares = "poolId__totalShares", + PoolIdTotalSwapFee = "poolId__totalSwapFee", + PoolIdTotalSwapVolume = "poolId__totalSwapVolume", + PoolIdTotalWeight = "poolId__totalWeight", + PoolIdTx = "poolId__tx", + PoolIdU = "poolId__u", + PoolIdUnitSeconds = "poolId__unitSeconds", + PoolIdUpperTarget = "poolId__upperTarget", + PoolIdV = "poolId__v", + PoolIdW = "poolId__w", + PoolIdWrappedIndex = "poolId__wrappedIndex", + PoolIdZ = "poolId__z", + PoolLiquidity = "poolLiquidity", + PoolShareValue = "poolShareValue", + PoolTotalShares = "poolTotalShares", + PricingAsset = "pricingAsset" +} +type PoolShare_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + and?: InputMaybe$1>>; + balance?: InputMaybe$1; + balance_gt?: InputMaybe$1; + balance_gte?: InputMaybe$1; + balance_in?: InputMaybe$1>; + balance_lt?: InputMaybe$1; + balance_lte?: InputMaybe$1; + balance_not?: InputMaybe$1; + balance_not_in?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + poolId?: InputMaybe$1; + poolId_?: InputMaybe$1; + poolId_contains?: InputMaybe$1; + poolId_contains_nocase?: InputMaybe$1; + poolId_ends_with?: InputMaybe$1; + poolId_ends_with_nocase?: InputMaybe$1; + poolId_gt?: InputMaybe$1; + poolId_gte?: InputMaybe$1; + poolId_in?: InputMaybe$1>; + poolId_lt?: InputMaybe$1; + poolId_lte?: InputMaybe$1; + poolId_not?: InputMaybe$1; + poolId_not_contains?: InputMaybe$1; + poolId_not_contains_nocase?: InputMaybe$1; + poolId_not_ends_with?: InputMaybe$1; + poolId_not_ends_with_nocase?: InputMaybe$1; + poolId_not_in?: InputMaybe$1>; + poolId_not_starts_with?: InputMaybe$1; + poolId_not_starts_with_nocase?: InputMaybe$1; + poolId_starts_with?: InputMaybe$1; + poolId_starts_with_nocase?: InputMaybe$1; + userAddress?: InputMaybe$1; + userAddress_?: InputMaybe$1; + userAddress_contains?: InputMaybe$1; + userAddress_contains_nocase?: InputMaybe$1; + userAddress_ends_with?: InputMaybe$1; + userAddress_ends_with_nocase?: InputMaybe$1; + userAddress_gt?: InputMaybe$1; + userAddress_gte?: InputMaybe$1; + userAddress_in?: InputMaybe$1>; + userAddress_lt?: InputMaybe$1; + userAddress_lte?: InputMaybe$1; + userAddress_not?: InputMaybe$1; + userAddress_not_contains?: InputMaybe$1; + userAddress_not_contains_nocase?: InputMaybe$1; + userAddress_not_ends_with?: InputMaybe$1; + userAddress_not_ends_with_nocase?: InputMaybe$1; + userAddress_not_in?: InputMaybe$1>; + userAddress_not_starts_with?: InputMaybe$1; + userAddress_not_starts_with_nocase?: InputMaybe$1; + userAddress_starts_with?: InputMaybe$1; + userAddress_starts_with_nocase?: InputMaybe$1; +}; +declare enum PoolShare_OrderBy { + Balance = "balance", + Id = "id", + PoolId = "poolId", + PoolIdAddress = "poolId__address", + PoolIdAlpha = "poolId__alpha", + PoolIdAmp = "poolId__amp", + PoolIdBaseToken = "poolId__baseToken", + PoolIdBeta = "poolId__beta", + PoolIdC = "poolId__c", + PoolIdCreateTime = "poolId__createTime", + PoolIdDSq = "poolId__dSq", + PoolIdDelta = "poolId__delta", + PoolIdEpsilon = "poolId__epsilon", + PoolIdExpiryTime = "poolId__expiryTime", + PoolIdFactory = "poolId__factory", + PoolIdHoldersCount = "poolId__holdersCount", + PoolIdId = "poolId__id", + PoolIdIsInRecoveryMode = "poolId__isInRecoveryMode", + PoolIdIsPaused = "poolId__isPaused", + PoolIdJoinExitEnabled = "poolId__joinExitEnabled", + PoolIdLambda = "poolId__lambda", + PoolIdLastJoinExitAmp = "poolId__lastJoinExitAmp", + PoolIdLastPostJoinExitInvariant = "poolId__lastPostJoinExitInvariant", + PoolIdLowerTarget = "poolId__lowerTarget", + PoolIdMainIndex = "poolId__mainIndex", + PoolIdManagementAumFee = "poolId__managementAumFee", + PoolIdManagementFee = "poolId__managementFee", + PoolIdMustAllowlistLPs = "poolId__mustAllowlistLPs", + PoolIdName = "poolId__name", + PoolIdOracleEnabled = "poolId__oracleEnabled", + PoolIdOwner = "poolId__owner", + PoolIdPoolType = "poolId__poolType", + PoolIdPoolTypeVersion = "poolId__poolTypeVersion", + PoolIdPrincipalToken = "poolId__principalToken", + PoolIdProtocolAumFeeCache = "poolId__protocolAumFeeCache", + PoolIdProtocolId = "poolId__protocolId", + PoolIdProtocolSwapFeeCache = "poolId__protocolSwapFeeCache", + PoolIdProtocolYieldFeeCache = "poolId__protocolYieldFeeCache", + PoolIdRoot3Alpha = "poolId__root3Alpha", + PoolIdS = "poolId__s", + PoolIdSqrtAlpha = "poolId__sqrtAlpha", + PoolIdSqrtBeta = "poolId__sqrtBeta", + PoolIdStrategyType = "poolId__strategyType", + PoolIdSwapEnabled = "poolId__swapEnabled", + PoolIdSwapEnabledCurationSignal = "poolId__swapEnabledCurationSignal", + PoolIdSwapEnabledInternal = "poolId__swapEnabledInternal", + PoolIdSwapFee = "poolId__swapFee", + PoolIdSwapsCount = "poolId__swapsCount", + PoolIdSymbol = "poolId__symbol", + PoolIdTauAlphaX = "poolId__tauAlphaX", + PoolIdTauAlphaY = "poolId__tauAlphaY", + PoolIdTauBetaX = "poolId__tauBetaX", + PoolIdTauBetaY = "poolId__tauBetaY", + PoolIdTotalAumFeeCollectedInBpt = "poolId__totalAumFeeCollectedInBPT", + PoolIdTotalLiquidity = "poolId__totalLiquidity", + PoolIdTotalLiquiditySansBpt = "poolId__totalLiquiditySansBPT", + PoolIdTotalProtocolFee = "poolId__totalProtocolFee", + PoolIdTotalProtocolFeePaidInBpt = "poolId__totalProtocolFeePaidInBPT", + PoolIdTotalShares = "poolId__totalShares", + PoolIdTotalSwapFee = "poolId__totalSwapFee", + PoolIdTotalSwapVolume = "poolId__totalSwapVolume", + PoolIdTotalWeight = "poolId__totalWeight", + PoolIdTx = "poolId__tx", + PoolIdU = "poolId__u", + PoolIdUnitSeconds = "poolId__unitSeconds", + PoolIdUpperTarget = "poolId__upperTarget", + PoolIdV = "poolId__v", + PoolIdW = "poolId__w", + PoolIdWrappedIndex = "poolId__wrappedIndex", + PoolIdZ = "poolId__z", + UserAddress = "userAddress", + UserAddressId = "userAddress__id" +} +type PoolSnapshot_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + amounts?: InputMaybe$1>; + amounts_contains?: InputMaybe$1>; + amounts_contains_nocase?: InputMaybe$1>; + amounts_not?: InputMaybe$1>; + amounts_not_contains?: InputMaybe$1>; + amounts_not_contains_nocase?: InputMaybe$1>; + and?: InputMaybe$1>>; + holdersCount?: InputMaybe$1; + holdersCount_gt?: InputMaybe$1; + holdersCount_gte?: InputMaybe$1; + holdersCount_in?: InputMaybe$1>; + holdersCount_lt?: InputMaybe$1; + holdersCount_lte?: InputMaybe$1; + holdersCount_not?: InputMaybe$1; + holdersCount_not_in?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + liquidity?: InputMaybe$1; + liquidity_gt?: InputMaybe$1; + liquidity_gte?: InputMaybe$1; + liquidity_in?: InputMaybe$1>; + liquidity_lt?: InputMaybe$1; + liquidity_lte?: InputMaybe$1; + liquidity_not?: InputMaybe$1; + liquidity_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + pool?: InputMaybe$1; + pool_?: InputMaybe$1; + pool_contains?: InputMaybe$1; + pool_contains_nocase?: InputMaybe$1; + pool_ends_with?: InputMaybe$1; + pool_ends_with_nocase?: InputMaybe$1; + pool_gt?: InputMaybe$1; + pool_gte?: InputMaybe$1; + pool_in?: InputMaybe$1>; + pool_lt?: InputMaybe$1; + pool_lte?: InputMaybe$1; + pool_not?: InputMaybe$1; + pool_not_contains?: InputMaybe$1; + pool_not_contains_nocase?: InputMaybe$1; + pool_not_ends_with?: InputMaybe$1; + pool_not_ends_with_nocase?: InputMaybe$1; + pool_not_in?: InputMaybe$1>; + pool_not_starts_with?: InputMaybe$1; + pool_not_starts_with_nocase?: InputMaybe$1; + pool_starts_with?: InputMaybe$1; + pool_starts_with_nocase?: InputMaybe$1; + protocolFee?: InputMaybe$1; + protocolFee_gt?: InputMaybe$1; + protocolFee_gte?: InputMaybe$1; + protocolFee_in?: InputMaybe$1>; + protocolFee_lt?: InputMaybe$1; + protocolFee_lte?: InputMaybe$1; + protocolFee_not?: InputMaybe$1; + protocolFee_not_in?: InputMaybe$1>; + swapFees?: InputMaybe$1; + swapFees_gt?: InputMaybe$1; + swapFees_gte?: InputMaybe$1; + swapFees_in?: InputMaybe$1>; + swapFees_lt?: InputMaybe$1; + swapFees_lte?: InputMaybe$1; + swapFees_not?: InputMaybe$1; + swapFees_not_in?: InputMaybe$1>; + swapVolume?: InputMaybe$1; + swapVolume_gt?: InputMaybe$1; + swapVolume_gte?: InputMaybe$1; + swapVolume_in?: InputMaybe$1>; + swapVolume_lt?: InputMaybe$1; + swapVolume_lte?: InputMaybe$1; + swapVolume_not?: InputMaybe$1; + swapVolume_not_in?: InputMaybe$1>; + swapsCount?: InputMaybe$1; + swapsCount_gt?: InputMaybe$1; + swapsCount_gte?: InputMaybe$1; + swapsCount_in?: InputMaybe$1>; + swapsCount_lt?: InputMaybe$1; + swapsCount_lte?: InputMaybe$1; + swapsCount_not?: InputMaybe$1; + swapsCount_not_in?: InputMaybe$1>; + timestamp?: InputMaybe$1; + timestamp_gt?: InputMaybe$1; + timestamp_gte?: InputMaybe$1; + timestamp_in?: InputMaybe$1>; + timestamp_lt?: InputMaybe$1; + timestamp_lte?: InputMaybe$1; + timestamp_not?: InputMaybe$1; + timestamp_not_in?: InputMaybe$1>; + totalShares?: InputMaybe$1; + totalShares_gt?: InputMaybe$1; + totalShares_gte?: InputMaybe$1; + totalShares_in?: InputMaybe$1>; + totalShares_lt?: InputMaybe$1; + totalShares_lte?: InputMaybe$1; + totalShares_not?: InputMaybe$1; + totalShares_not_in?: InputMaybe$1>; +}; +declare enum PoolSnapshot_OrderBy { + Amounts = "amounts", + HoldersCount = "holdersCount", + Id = "id", + Liquidity = "liquidity", + Pool = "pool", + PoolAddress = "pool__address", + PoolAlpha = "pool__alpha", + PoolAmp = "pool__amp", + PoolBaseToken = "pool__baseToken", + PoolBeta = "pool__beta", + PoolC = "pool__c", + PoolCreateTime = "pool__createTime", + PoolDSq = "pool__dSq", + PoolDelta = "pool__delta", + PoolEpsilon = "pool__epsilon", + PoolExpiryTime = "pool__expiryTime", + PoolFactory = "pool__factory", + PoolHoldersCount = "pool__holdersCount", + PoolId = "pool__id", + PoolIsInRecoveryMode = "pool__isInRecoveryMode", + PoolIsPaused = "pool__isPaused", + PoolJoinExitEnabled = "pool__joinExitEnabled", + PoolLambda = "pool__lambda", + PoolLastJoinExitAmp = "pool__lastJoinExitAmp", + PoolLastPostJoinExitInvariant = "pool__lastPostJoinExitInvariant", + PoolLowerTarget = "pool__lowerTarget", + PoolMainIndex = "pool__mainIndex", + PoolManagementAumFee = "pool__managementAumFee", + PoolManagementFee = "pool__managementFee", + PoolMustAllowlistLPs = "pool__mustAllowlistLPs", + PoolName = "pool__name", + PoolOracleEnabled = "pool__oracleEnabled", + PoolOwner = "pool__owner", + PoolPoolType = "pool__poolType", + PoolPoolTypeVersion = "pool__poolTypeVersion", + PoolPrincipalToken = "pool__principalToken", + PoolProtocolAumFeeCache = "pool__protocolAumFeeCache", + PoolProtocolId = "pool__protocolId", + PoolProtocolSwapFeeCache = "pool__protocolSwapFeeCache", + PoolProtocolYieldFeeCache = "pool__protocolYieldFeeCache", + PoolRoot3Alpha = "pool__root3Alpha", + PoolS = "pool__s", + PoolSqrtAlpha = "pool__sqrtAlpha", + PoolSqrtBeta = "pool__sqrtBeta", + PoolStrategyType = "pool__strategyType", + PoolSwapEnabled = "pool__swapEnabled", + PoolSwapEnabledCurationSignal = "pool__swapEnabledCurationSignal", + PoolSwapEnabledInternal = "pool__swapEnabledInternal", + PoolSwapFee = "pool__swapFee", + PoolSwapsCount = "pool__swapsCount", + PoolSymbol = "pool__symbol", + PoolTauAlphaX = "pool__tauAlphaX", + PoolTauAlphaY = "pool__tauAlphaY", + PoolTauBetaX = "pool__tauBetaX", + PoolTauBetaY = "pool__tauBetaY", + PoolTotalAumFeeCollectedInBpt = "pool__totalAumFeeCollectedInBPT", + PoolTotalLiquidity = "pool__totalLiquidity", + PoolTotalLiquiditySansBpt = "pool__totalLiquiditySansBPT", + PoolTotalProtocolFee = "pool__totalProtocolFee", + PoolTotalProtocolFeePaidInBpt = "pool__totalProtocolFeePaidInBPT", + PoolTotalShares = "pool__totalShares", + PoolTotalSwapFee = "pool__totalSwapFee", + PoolTotalSwapVolume = "pool__totalSwapVolume", + PoolTotalWeight = "pool__totalWeight", + PoolTx = "pool__tx", + PoolU = "pool__u", + PoolUnitSeconds = "pool__unitSeconds", + PoolUpperTarget = "pool__upperTarget", + PoolV = "pool__v", + PoolW = "pool__w", + PoolWrappedIndex = "pool__wrappedIndex", + PoolZ = "pool__z", + ProtocolFee = "protocolFee", + SwapFees = "swapFees", + SwapVolume = "swapVolume", + SwapsCount = "swapsCount", + Timestamp = "timestamp", + TotalShares = "totalShares" +} +type PoolToken_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + address?: InputMaybe$1; + address_contains?: InputMaybe$1; + address_contains_nocase?: InputMaybe$1; + address_ends_with?: InputMaybe$1; + address_ends_with_nocase?: InputMaybe$1; + address_gt?: InputMaybe$1; + address_gte?: InputMaybe$1; + address_in?: InputMaybe$1>; + address_lt?: InputMaybe$1; + address_lte?: InputMaybe$1; + address_not?: InputMaybe$1; + address_not_contains?: InputMaybe$1; + address_not_contains_nocase?: InputMaybe$1; + address_not_ends_with?: InputMaybe$1; + address_not_ends_with_nocase?: InputMaybe$1; + address_not_in?: InputMaybe$1>; + address_not_starts_with?: InputMaybe$1; + address_not_starts_with_nocase?: InputMaybe$1; + address_starts_with?: InputMaybe$1; + address_starts_with_nocase?: InputMaybe$1; + and?: InputMaybe$1>>; + assetManager?: InputMaybe$1; + assetManager_contains?: InputMaybe$1; + assetManager_gt?: InputMaybe$1; + assetManager_gte?: InputMaybe$1; + assetManager_in?: InputMaybe$1>; + assetManager_lt?: InputMaybe$1; + assetManager_lte?: InputMaybe$1; + assetManager_not?: InputMaybe$1; + assetManager_not_contains?: InputMaybe$1; + assetManager_not_in?: InputMaybe$1>; + balance?: InputMaybe$1; + balance_gt?: InputMaybe$1; + balance_gte?: InputMaybe$1; + balance_in?: InputMaybe$1>; + balance_lt?: InputMaybe$1; + balance_lte?: InputMaybe$1; + balance_not?: InputMaybe$1; + balance_not_in?: InputMaybe$1>; + cashBalance?: InputMaybe$1; + cashBalance_gt?: InputMaybe$1; + cashBalance_gte?: InputMaybe$1; + cashBalance_in?: InputMaybe$1>; + cashBalance_lt?: InputMaybe$1; + cashBalance_lte?: InputMaybe$1; + cashBalance_not?: InputMaybe$1; + cashBalance_not_in?: InputMaybe$1>; + circuitBreaker?: InputMaybe$1; + circuitBreaker_?: InputMaybe$1; + circuitBreaker_contains?: InputMaybe$1; + circuitBreaker_contains_nocase?: InputMaybe$1; + circuitBreaker_ends_with?: InputMaybe$1; + circuitBreaker_ends_with_nocase?: InputMaybe$1; + circuitBreaker_gt?: InputMaybe$1; + circuitBreaker_gte?: InputMaybe$1; + circuitBreaker_in?: InputMaybe$1>; + circuitBreaker_lt?: InputMaybe$1; + circuitBreaker_lte?: InputMaybe$1; + circuitBreaker_not?: InputMaybe$1; + circuitBreaker_not_contains?: InputMaybe$1; + circuitBreaker_not_contains_nocase?: InputMaybe$1; + circuitBreaker_not_ends_with?: InputMaybe$1; + circuitBreaker_not_ends_with_nocase?: InputMaybe$1; + circuitBreaker_not_in?: InputMaybe$1>; + circuitBreaker_not_starts_with?: InputMaybe$1; + circuitBreaker_not_starts_with_nocase?: InputMaybe$1; + circuitBreaker_starts_with?: InputMaybe$1; + circuitBreaker_starts_with_nocase?: InputMaybe$1; + decimals?: InputMaybe$1; + decimals_gt?: InputMaybe$1; + decimals_gte?: InputMaybe$1; + decimals_in?: InputMaybe$1>; + decimals_lt?: InputMaybe$1; + decimals_lte?: InputMaybe$1; + decimals_not?: InputMaybe$1; + decimals_not_in?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + index?: InputMaybe$1; + index_gt?: InputMaybe$1; + index_gte?: InputMaybe$1; + index_in?: InputMaybe$1>; + index_lt?: InputMaybe$1; + index_lte?: InputMaybe$1; + index_not?: InputMaybe$1; + index_not_in?: InputMaybe$1>; + isExemptFromYieldProtocolFee?: InputMaybe$1; + isExemptFromYieldProtocolFee_in?: InputMaybe$1>; + isExemptFromYieldProtocolFee_not?: InputMaybe$1; + isExemptFromYieldProtocolFee_not_in?: InputMaybe$1>; + managedBalance?: InputMaybe$1; + managedBalance_gt?: InputMaybe$1; + managedBalance_gte?: InputMaybe$1; + managedBalance_in?: InputMaybe$1>; + managedBalance_lt?: InputMaybe$1; + managedBalance_lte?: InputMaybe$1; + managedBalance_not?: InputMaybe$1; + managedBalance_not_in?: InputMaybe$1>; + managements_?: InputMaybe$1; + name?: InputMaybe$1; + name_contains?: InputMaybe$1; + name_contains_nocase?: InputMaybe$1; + name_ends_with?: InputMaybe$1; + name_ends_with_nocase?: InputMaybe$1; + name_gt?: InputMaybe$1; + name_gte?: InputMaybe$1; + name_in?: InputMaybe$1>; + name_lt?: InputMaybe$1; + name_lte?: InputMaybe$1; + name_not?: InputMaybe$1; + name_not_contains?: InputMaybe$1; + name_not_contains_nocase?: InputMaybe$1; + name_not_ends_with?: InputMaybe$1; + name_not_ends_with_nocase?: InputMaybe$1; + name_not_in?: InputMaybe$1>; + name_not_starts_with?: InputMaybe$1; + name_not_starts_with_nocase?: InputMaybe$1; + name_starts_with?: InputMaybe$1; + name_starts_with_nocase?: InputMaybe$1; + oldPriceRate?: InputMaybe$1; + oldPriceRate_gt?: InputMaybe$1; + oldPriceRate_gte?: InputMaybe$1; + oldPriceRate_in?: InputMaybe$1>; + oldPriceRate_lt?: InputMaybe$1; + oldPriceRate_lte?: InputMaybe$1; + oldPriceRate_not?: InputMaybe$1; + oldPriceRate_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + paidProtocolFees?: InputMaybe$1; + paidProtocolFees_gt?: InputMaybe$1; + paidProtocolFees_gte?: InputMaybe$1; + paidProtocolFees_in?: InputMaybe$1>; + paidProtocolFees_lt?: InputMaybe$1; + paidProtocolFees_lte?: InputMaybe$1; + paidProtocolFees_not?: InputMaybe$1; + paidProtocolFees_not_in?: InputMaybe$1>; + poolId?: InputMaybe$1; + poolId_?: InputMaybe$1; + poolId_contains?: InputMaybe$1; + poolId_contains_nocase?: InputMaybe$1; + poolId_ends_with?: InputMaybe$1; + poolId_ends_with_nocase?: InputMaybe$1; + poolId_gt?: InputMaybe$1; + poolId_gte?: InputMaybe$1; + poolId_in?: InputMaybe$1>; + poolId_lt?: InputMaybe$1; + poolId_lte?: InputMaybe$1; + poolId_not?: InputMaybe$1; + poolId_not_contains?: InputMaybe$1; + poolId_not_contains_nocase?: InputMaybe$1; + poolId_not_ends_with?: InputMaybe$1; + poolId_not_ends_with_nocase?: InputMaybe$1; + poolId_not_in?: InputMaybe$1>; + poolId_not_starts_with?: InputMaybe$1; + poolId_not_starts_with_nocase?: InputMaybe$1; + poolId_starts_with?: InputMaybe$1; + poolId_starts_with_nocase?: InputMaybe$1; + priceRate?: InputMaybe$1; + priceRate_gt?: InputMaybe$1; + priceRate_gte?: InputMaybe$1; + priceRate_in?: InputMaybe$1>; + priceRate_lt?: InputMaybe$1; + priceRate_lte?: InputMaybe$1; + priceRate_not?: InputMaybe$1; + priceRate_not_in?: InputMaybe$1>; + symbol?: InputMaybe$1; + symbol_contains?: InputMaybe$1; + symbol_contains_nocase?: InputMaybe$1; + symbol_ends_with?: InputMaybe$1; + symbol_ends_with_nocase?: InputMaybe$1; + symbol_gt?: InputMaybe$1; + symbol_gte?: InputMaybe$1; + symbol_in?: InputMaybe$1>; + symbol_lt?: InputMaybe$1; + symbol_lte?: InputMaybe$1; + symbol_not?: InputMaybe$1; + symbol_not_contains?: InputMaybe$1; + symbol_not_contains_nocase?: InputMaybe$1; + symbol_not_ends_with?: InputMaybe$1; + symbol_not_ends_with_nocase?: InputMaybe$1; + symbol_not_in?: InputMaybe$1>; + symbol_not_starts_with?: InputMaybe$1; + symbol_not_starts_with_nocase?: InputMaybe$1; + symbol_starts_with?: InputMaybe$1; + symbol_starts_with_nocase?: InputMaybe$1; + token?: InputMaybe$1; + token_?: InputMaybe$1; + token_contains?: InputMaybe$1; + token_contains_nocase?: InputMaybe$1; + token_ends_with?: InputMaybe$1; + token_ends_with_nocase?: InputMaybe$1; + token_gt?: InputMaybe$1; + token_gte?: InputMaybe$1; + token_in?: InputMaybe$1>; + token_lt?: InputMaybe$1; + token_lte?: InputMaybe$1; + token_not?: InputMaybe$1; + token_not_contains?: InputMaybe$1; + token_not_contains_nocase?: InputMaybe$1; + token_not_ends_with?: InputMaybe$1; + token_not_ends_with_nocase?: InputMaybe$1; + token_not_in?: InputMaybe$1>; + token_not_starts_with?: InputMaybe$1; + token_not_starts_with_nocase?: InputMaybe$1; + token_starts_with?: InputMaybe$1; + token_starts_with_nocase?: InputMaybe$1; + weight?: InputMaybe$1; + weight_gt?: InputMaybe$1; + weight_gte?: InputMaybe$1; + weight_in?: InputMaybe$1>; + weight_lt?: InputMaybe$1; + weight_lte?: InputMaybe$1; + weight_not?: InputMaybe$1; + weight_not_in?: InputMaybe$1>; +}; +type Pool_Filter$1 = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + address?: InputMaybe$1; + address_contains?: InputMaybe$1; + address_gt?: InputMaybe$1; + address_gte?: InputMaybe$1; + address_in?: InputMaybe$1>; + address_lt?: InputMaybe$1; + address_lte?: InputMaybe$1; + address_not?: InputMaybe$1; + address_not_contains?: InputMaybe$1; + address_not_in?: InputMaybe$1>; + alpha?: InputMaybe$1; + alpha_gt?: InputMaybe$1; + alpha_gte?: InputMaybe$1; + alpha_in?: InputMaybe$1>; + alpha_lt?: InputMaybe$1; + alpha_lte?: InputMaybe$1; + alpha_not?: InputMaybe$1; + alpha_not_in?: InputMaybe$1>; + amp?: InputMaybe$1; + ampUpdates_?: InputMaybe$1; + amp_gt?: InputMaybe$1; + amp_gte?: InputMaybe$1; + amp_in?: InputMaybe$1>; + amp_lt?: InputMaybe$1; + amp_lte?: InputMaybe$1; + amp_not?: InputMaybe$1; + amp_not_in?: InputMaybe$1>; + and?: InputMaybe$1>>; + baseToken?: InputMaybe$1; + baseToken_contains?: InputMaybe$1; + baseToken_gt?: InputMaybe$1; + baseToken_gte?: InputMaybe$1; + baseToken_in?: InputMaybe$1>; + baseToken_lt?: InputMaybe$1; + baseToken_lte?: InputMaybe$1; + baseToken_not?: InputMaybe$1; + baseToken_not_contains?: InputMaybe$1; + baseToken_not_in?: InputMaybe$1>; + beta?: InputMaybe$1; + beta_gt?: InputMaybe$1; + beta_gte?: InputMaybe$1; + beta_in?: InputMaybe$1>; + beta_lt?: InputMaybe$1; + beta_lte?: InputMaybe$1; + beta_not?: InputMaybe$1; + beta_not_in?: InputMaybe$1>; + c?: InputMaybe$1; + c_gt?: InputMaybe$1; + c_gte?: InputMaybe$1; + c_in?: InputMaybe$1>; + c_lt?: InputMaybe$1; + c_lte?: InputMaybe$1; + c_not?: InputMaybe$1; + c_not_in?: InputMaybe$1>; + circuitBreakers_?: InputMaybe$1; + createTime?: InputMaybe$1; + createTime_gt?: InputMaybe$1; + createTime_gte?: InputMaybe$1; + createTime_in?: InputMaybe$1>; + createTime_lt?: InputMaybe$1; + createTime_lte?: InputMaybe$1; + createTime_not?: InputMaybe$1; + createTime_not_in?: InputMaybe$1>; + dSq?: InputMaybe$1; + dSq_gt?: InputMaybe$1; + dSq_gte?: InputMaybe$1; + dSq_in?: InputMaybe$1>; + dSq_lt?: InputMaybe$1; + dSq_lte?: InputMaybe$1; + dSq_not?: InputMaybe$1; + dSq_not_in?: InputMaybe$1>; + delta?: InputMaybe$1; + delta_gt?: InputMaybe$1; + delta_gte?: InputMaybe$1; + delta_in?: InputMaybe$1>; + delta_lt?: InputMaybe$1; + delta_lte?: InputMaybe$1; + delta_not?: InputMaybe$1; + delta_not_in?: InputMaybe$1>; + epsilon?: InputMaybe$1; + epsilon_gt?: InputMaybe$1; + epsilon_gte?: InputMaybe$1; + epsilon_in?: InputMaybe$1>; + epsilon_lt?: InputMaybe$1; + epsilon_lte?: InputMaybe$1; + epsilon_not?: InputMaybe$1; + epsilon_not_in?: InputMaybe$1>; + expiryTime?: InputMaybe$1; + expiryTime_gt?: InputMaybe$1; + expiryTime_gte?: InputMaybe$1; + expiryTime_in?: InputMaybe$1>; + expiryTime_lt?: InputMaybe$1; + expiryTime_lte?: InputMaybe$1; + expiryTime_not?: InputMaybe$1; + expiryTime_not_in?: InputMaybe$1>; + factory?: InputMaybe$1; + factory_contains?: InputMaybe$1; + factory_gt?: InputMaybe$1; + factory_gte?: InputMaybe$1; + factory_in?: InputMaybe$1>; + factory_lt?: InputMaybe$1; + factory_lte?: InputMaybe$1; + factory_not?: InputMaybe$1; + factory_not_contains?: InputMaybe$1; + factory_not_in?: InputMaybe$1>; + historicalValues_?: InputMaybe$1; + holdersCount?: InputMaybe$1; + holdersCount_gt?: InputMaybe$1; + holdersCount_gte?: InputMaybe$1; + holdersCount_in?: InputMaybe$1>; + holdersCount_lt?: InputMaybe$1; + holdersCount_lte?: InputMaybe$1; + holdersCount_not?: InputMaybe$1; + holdersCount_not_in?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + isInRecoveryMode?: InputMaybe$1; + isInRecoveryMode_in?: InputMaybe$1>; + isInRecoveryMode_not?: InputMaybe$1; + isInRecoveryMode_not_in?: InputMaybe$1>; + isPaused?: InputMaybe$1; + isPaused_in?: InputMaybe$1>; + isPaused_not?: InputMaybe$1; + isPaused_not_in?: InputMaybe$1>; + joinExitEnabled?: InputMaybe$1; + joinExitEnabled_in?: InputMaybe$1>; + joinExitEnabled_not?: InputMaybe$1; + joinExitEnabled_not_in?: InputMaybe$1>; + lambda?: InputMaybe$1; + lambda_gt?: InputMaybe$1; + lambda_gte?: InputMaybe$1; + lambda_in?: InputMaybe$1>; + lambda_lt?: InputMaybe$1; + lambda_lte?: InputMaybe$1; + lambda_not?: InputMaybe$1; + lambda_not_in?: InputMaybe$1>; + lastJoinExitAmp?: InputMaybe$1; + lastJoinExitAmp_gt?: InputMaybe$1; + lastJoinExitAmp_gte?: InputMaybe$1; + lastJoinExitAmp_in?: InputMaybe$1>; + lastJoinExitAmp_lt?: InputMaybe$1; + lastJoinExitAmp_lte?: InputMaybe$1; + lastJoinExitAmp_not?: InputMaybe$1; + lastJoinExitAmp_not_in?: InputMaybe$1>; + lastPostJoinExitInvariant?: InputMaybe$1; + lastPostJoinExitInvariant_gt?: InputMaybe$1; + lastPostJoinExitInvariant_gte?: InputMaybe$1; + lastPostJoinExitInvariant_in?: InputMaybe$1>; + lastPostJoinExitInvariant_lt?: InputMaybe$1; + lastPostJoinExitInvariant_lte?: InputMaybe$1; + lastPostJoinExitInvariant_not?: InputMaybe$1; + lastPostJoinExitInvariant_not_in?: InputMaybe$1>; + latestAmpUpdate?: InputMaybe$1; + latestAmpUpdate_?: InputMaybe$1; + latestAmpUpdate_contains?: InputMaybe$1; + latestAmpUpdate_contains_nocase?: InputMaybe$1; + latestAmpUpdate_ends_with?: InputMaybe$1; + latestAmpUpdate_ends_with_nocase?: InputMaybe$1; + latestAmpUpdate_gt?: InputMaybe$1; + latestAmpUpdate_gte?: InputMaybe$1; + latestAmpUpdate_in?: InputMaybe$1>; + latestAmpUpdate_lt?: InputMaybe$1; + latestAmpUpdate_lte?: InputMaybe$1; + latestAmpUpdate_not?: InputMaybe$1; + latestAmpUpdate_not_contains?: InputMaybe$1; + latestAmpUpdate_not_contains_nocase?: InputMaybe$1; + latestAmpUpdate_not_ends_with?: InputMaybe$1; + latestAmpUpdate_not_ends_with_nocase?: InputMaybe$1; + latestAmpUpdate_not_in?: InputMaybe$1>; + latestAmpUpdate_not_starts_with?: InputMaybe$1; + latestAmpUpdate_not_starts_with_nocase?: InputMaybe$1; + latestAmpUpdate_starts_with?: InputMaybe$1; + latestAmpUpdate_starts_with_nocase?: InputMaybe$1; + lowerTarget?: InputMaybe$1; + lowerTarget_gt?: InputMaybe$1; + lowerTarget_gte?: InputMaybe$1; + lowerTarget_in?: InputMaybe$1>; + lowerTarget_lt?: InputMaybe$1; + lowerTarget_lte?: InputMaybe$1; + lowerTarget_not?: InputMaybe$1; + lowerTarget_not_in?: InputMaybe$1>; + mainIndex?: InputMaybe$1; + mainIndex_gt?: InputMaybe$1; + mainIndex_gte?: InputMaybe$1; + mainIndex_in?: InputMaybe$1>; + mainIndex_lt?: InputMaybe$1; + mainIndex_lte?: InputMaybe$1; + mainIndex_not?: InputMaybe$1; + mainIndex_not_in?: InputMaybe$1>; + managementAumFee?: InputMaybe$1; + managementAumFee_gt?: InputMaybe$1; + managementAumFee_gte?: InputMaybe$1; + managementAumFee_in?: InputMaybe$1>; + managementAumFee_lt?: InputMaybe$1; + managementAumFee_lte?: InputMaybe$1; + managementAumFee_not?: InputMaybe$1; + managementAumFee_not_in?: InputMaybe$1>; + managementFee?: InputMaybe$1; + managementFee_gt?: InputMaybe$1; + managementFee_gte?: InputMaybe$1; + managementFee_in?: InputMaybe$1>; + managementFee_lt?: InputMaybe$1; + managementFee_lte?: InputMaybe$1; + managementFee_not?: InputMaybe$1; + managementFee_not_in?: InputMaybe$1>; + mustAllowlistLPs?: InputMaybe$1; + mustAllowlistLPs_in?: InputMaybe$1>; + mustAllowlistLPs_not?: InputMaybe$1; + mustAllowlistLPs_not_in?: InputMaybe$1>; + name?: InputMaybe$1; + name_contains?: InputMaybe$1; + name_contains_nocase?: InputMaybe$1; + name_ends_with?: InputMaybe$1; + name_ends_with_nocase?: InputMaybe$1; + name_gt?: InputMaybe$1; + name_gte?: InputMaybe$1; + name_in?: InputMaybe$1>; + name_lt?: InputMaybe$1; + name_lte?: InputMaybe$1; + name_not?: InputMaybe$1; + name_not_contains?: InputMaybe$1; + name_not_contains_nocase?: InputMaybe$1; + name_not_ends_with?: InputMaybe$1; + name_not_ends_with_nocase?: InputMaybe$1; + name_not_in?: InputMaybe$1>; + name_not_starts_with?: InputMaybe$1; + name_not_starts_with_nocase?: InputMaybe$1; + name_starts_with?: InputMaybe$1; + name_starts_with_nocase?: InputMaybe$1; + or?: InputMaybe$1>>; + oracleEnabled?: InputMaybe$1; + oracleEnabled_in?: InputMaybe$1>; + oracleEnabled_not?: InputMaybe$1; + oracleEnabled_not_in?: InputMaybe$1>; + owner?: InputMaybe$1; + owner_contains?: InputMaybe$1; + owner_gt?: InputMaybe$1; + owner_gte?: InputMaybe$1; + owner_in?: InputMaybe$1>; + owner_lt?: InputMaybe$1; + owner_lte?: InputMaybe$1; + owner_not?: InputMaybe$1; + owner_not_contains?: InputMaybe$1; + owner_not_in?: InputMaybe$1>; + poolType?: InputMaybe$1; + poolTypeVersion?: InputMaybe$1; + poolTypeVersion_gt?: InputMaybe$1; + poolTypeVersion_gte?: InputMaybe$1; + poolTypeVersion_in?: InputMaybe$1>; + poolTypeVersion_lt?: InputMaybe$1; + poolTypeVersion_lte?: InputMaybe$1; + poolTypeVersion_not?: InputMaybe$1; + poolTypeVersion_not_in?: InputMaybe$1>; + poolType_contains?: InputMaybe$1; + poolType_contains_nocase?: InputMaybe$1; + poolType_ends_with?: InputMaybe$1; + poolType_ends_with_nocase?: InputMaybe$1; + poolType_gt?: InputMaybe$1; + poolType_gte?: InputMaybe$1; + poolType_in?: InputMaybe$1>; + poolType_lt?: InputMaybe$1; + poolType_lte?: InputMaybe$1; + poolType_not?: InputMaybe$1; + poolType_not_contains?: InputMaybe$1; + poolType_not_contains_nocase?: InputMaybe$1; + poolType_not_ends_with?: InputMaybe$1; + poolType_not_ends_with_nocase?: InputMaybe$1; + poolType_not_in?: InputMaybe$1>; + poolType_not_starts_with?: InputMaybe$1; + poolType_not_starts_with_nocase?: InputMaybe$1; + poolType_starts_with?: InputMaybe$1; + poolType_starts_with_nocase?: InputMaybe$1; + priceRateProviders_?: InputMaybe$1; + principalToken?: InputMaybe$1; + principalToken_contains?: InputMaybe$1; + principalToken_gt?: InputMaybe$1; + principalToken_gte?: InputMaybe$1; + principalToken_in?: InputMaybe$1>; + principalToken_lt?: InputMaybe$1; + principalToken_lte?: InputMaybe$1; + principalToken_not?: InputMaybe$1; + principalToken_not_contains?: InputMaybe$1; + principalToken_not_in?: InputMaybe$1>; + protocolAumFeeCache?: InputMaybe$1; + protocolAumFeeCache_gt?: InputMaybe$1; + protocolAumFeeCache_gte?: InputMaybe$1; + protocolAumFeeCache_in?: InputMaybe$1>; + protocolAumFeeCache_lt?: InputMaybe$1; + protocolAumFeeCache_lte?: InputMaybe$1; + protocolAumFeeCache_not?: InputMaybe$1; + protocolAumFeeCache_not_in?: InputMaybe$1>; + protocolId?: InputMaybe$1; + protocolIdData?: InputMaybe$1; + protocolIdData_?: InputMaybe$1; + protocolIdData_contains?: InputMaybe$1; + protocolIdData_contains_nocase?: InputMaybe$1; + protocolIdData_ends_with?: InputMaybe$1; + protocolIdData_ends_with_nocase?: InputMaybe$1; + protocolIdData_gt?: InputMaybe$1; + protocolIdData_gte?: InputMaybe$1; + protocolIdData_in?: InputMaybe$1>; + protocolIdData_lt?: InputMaybe$1; + protocolIdData_lte?: InputMaybe$1; + protocolIdData_not?: InputMaybe$1; + protocolIdData_not_contains?: InputMaybe$1; + protocolIdData_not_contains_nocase?: InputMaybe$1; + protocolIdData_not_ends_with?: InputMaybe$1; + protocolIdData_not_ends_with_nocase?: InputMaybe$1; + protocolIdData_not_in?: InputMaybe$1>; + protocolIdData_not_starts_with?: InputMaybe$1; + protocolIdData_not_starts_with_nocase?: InputMaybe$1; + protocolIdData_starts_with?: InputMaybe$1; + protocolIdData_starts_with_nocase?: InputMaybe$1; + protocolId_gt?: InputMaybe$1; + protocolId_gte?: InputMaybe$1; + protocolId_in?: InputMaybe$1>; + protocolId_lt?: InputMaybe$1; + protocolId_lte?: InputMaybe$1; + protocolId_not?: InputMaybe$1; + protocolId_not_in?: InputMaybe$1>; + protocolSwapFeeCache?: InputMaybe$1; + protocolSwapFeeCache_gt?: InputMaybe$1; + protocolSwapFeeCache_gte?: InputMaybe$1; + protocolSwapFeeCache_in?: InputMaybe$1>; + protocolSwapFeeCache_lt?: InputMaybe$1; + protocolSwapFeeCache_lte?: InputMaybe$1; + protocolSwapFeeCache_not?: InputMaybe$1; + protocolSwapFeeCache_not_in?: InputMaybe$1>; + protocolYieldFeeCache?: InputMaybe$1; + protocolYieldFeeCache_gt?: InputMaybe$1; + protocolYieldFeeCache_gte?: InputMaybe$1; + protocolYieldFeeCache_in?: InputMaybe$1>; + protocolYieldFeeCache_lt?: InputMaybe$1; + protocolYieldFeeCache_lte?: InputMaybe$1; + protocolYieldFeeCache_not?: InputMaybe$1; + protocolYieldFeeCache_not_in?: InputMaybe$1>; + root3Alpha?: InputMaybe$1; + root3Alpha_gt?: InputMaybe$1; + root3Alpha_gte?: InputMaybe$1; + root3Alpha_in?: InputMaybe$1>; + root3Alpha_lt?: InputMaybe$1; + root3Alpha_lte?: InputMaybe$1; + root3Alpha_not?: InputMaybe$1; + root3Alpha_not_in?: InputMaybe$1>; + s?: InputMaybe$1; + s_gt?: InputMaybe$1; + s_gte?: InputMaybe$1; + s_in?: InputMaybe$1>; + s_lt?: InputMaybe$1; + s_lte?: InputMaybe$1; + s_not?: InputMaybe$1; + s_not_in?: InputMaybe$1>; + shares_?: InputMaybe$1; + snapshots_?: InputMaybe$1; + sqrtAlpha?: InputMaybe$1; + sqrtAlpha_gt?: InputMaybe$1; + sqrtAlpha_gte?: InputMaybe$1; + sqrtAlpha_in?: InputMaybe$1>; + sqrtAlpha_lt?: InputMaybe$1; + sqrtAlpha_lte?: InputMaybe$1; + sqrtAlpha_not?: InputMaybe$1; + sqrtAlpha_not_in?: InputMaybe$1>; + sqrtBeta?: InputMaybe$1; + sqrtBeta_gt?: InputMaybe$1; + sqrtBeta_gte?: InputMaybe$1; + sqrtBeta_in?: InputMaybe$1>; + sqrtBeta_lt?: InputMaybe$1; + sqrtBeta_lte?: InputMaybe$1; + sqrtBeta_not?: InputMaybe$1; + sqrtBeta_not_in?: InputMaybe$1>; + strategyType?: InputMaybe$1; + strategyType_gt?: InputMaybe$1; + strategyType_gte?: InputMaybe$1; + strategyType_in?: InputMaybe$1>; + strategyType_lt?: InputMaybe$1; + strategyType_lte?: InputMaybe$1; + strategyType_not?: InputMaybe$1; + strategyType_not_in?: InputMaybe$1>; + swapEnabled?: InputMaybe$1; + swapEnabledCurationSignal?: InputMaybe$1; + swapEnabledCurationSignal_in?: InputMaybe$1>; + swapEnabledCurationSignal_not?: InputMaybe$1; + swapEnabledCurationSignal_not_in?: InputMaybe$1>; + swapEnabledInternal?: InputMaybe$1; + swapEnabledInternal_in?: InputMaybe$1>; + swapEnabledInternal_not?: InputMaybe$1; + swapEnabledInternal_not_in?: InputMaybe$1>; + swapEnabled_in?: InputMaybe$1>; + swapEnabled_not?: InputMaybe$1; + swapEnabled_not_in?: InputMaybe$1>; + swapFee?: InputMaybe$1; + swapFee_gt?: InputMaybe$1; + swapFee_gte?: InputMaybe$1; + swapFee_in?: InputMaybe$1>; + swapFee_lt?: InputMaybe$1; + swapFee_lte?: InputMaybe$1; + swapFee_not?: InputMaybe$1; + swapFee_not_in?: InputMaybe$1>; + swapsCount?: InputMaybe$1; + swapsCount_gt?: InputMaybe$1; + swapsCount_gte?: InputMaybe$1; + swapsCount_in?: InputMaybe$1>; + swapsCount_lt?: InputMaybe$1; + swapsCount_lte?: InputMaybe$1; + swapsCount_not?: InputMaybe$1; + swapsCount_not_in?: InputMaybe$1>; + swaps_?: InputMaybe$1; + symbol?: InputMaybe$1; + symbol_contains?: InputMaybe$1; + symbol_contains_nocase?: InputMaybe$1; + symbol_ends_with?: InputMaybe$1; + symbol_ends_with_nocase?: InputMaybe$1; + symbol_gt?: InputMaybe$1; + symbol_gte?: InputMaybe$1; + symbol_in?: InputMaybe$1>; + symbol_lt?: InputMaybe$1; + symbol_lte?: InputMaybe$1; + symbol_not?: InputMaybe$1; + symbol_not_contains?: InputMaybe$1; + symbol_not_contains_nocase?: InputMaybe$1; + symbol_not_ends_with?: InputMaybe$1; + symbol_not_ends_with_nocase?: InputMaybe$1; + symbol_not_in?: InputMaybe$1>; + symbol_not_starts_with?: InputMaybe$1; + symbol_not_starts_with_nocase?: InputMaybe$1; + symbol_starts_with?: InputMaybe$1; + symbol_starts_with_nocase?: InputMaybe$1; + tauAlphaX?: InputMaybe$1; + tauAlphaX_gt?: InputMaybe$1; + tauAlphaX_gte?: InputMaybe$1; + tauAlphaX_in?: InputMaybe$1>; + tauAlphaX_lt?: InputMaybe$1; + tauAlphaX_lte?: InputMaybe$1; + tauAlphaX_not?: InputMaybe$1; + tauAlphaX_not_in?: InputMaybe$1>; + tauAlphaY?: InputMaybe$1; + tauAlphaY_gt?: InputMaybe$1; + tauAlphaY_gte?: InputMaybe$1; + tauAlphaY_in?: InputMaybe$1>; + tauAlphaY_lt?: InputMaybe$1; + tauAlphaY_lte?: InputMaybe$1; + tauAlphaY_not?: InputMaybe$1; + tauAlphaY_not_in?: InputMaybe$1>; + tauBetaX?: InputMaybe$1; + tauBetaX_gt?: InputMaybe$1; + tauBetaX_gte?: InputMaybe$1; + tauBetaX_in?: InputMaybe$1>; + tauBetaX_lt?: InputMaybe$1; + tauBetaX_lte?: InputMaybe$1; + tauBetaX_not?: InputMaybe$1; + tauBetaX_not_in?: InputMaybe$1>; + tauBetaY?: InputMaybe$1; + tauBetaY_gt?: InputMaybe$1; + tauBetaY_gte?: InputMaybe$1; + tauBetaY_in?: InputMaybe$1>; + tauBetaY_lt?: InputMaybe$1; + tauBetaY_lte?: InputMaybe$1; + tauBetaY_not?: InputMaybe$1; + tauBetaY_not_in?: InputMaybe$1>; + tokensList?: InputMaybe$1>; + tokensList_contains?: InputMaybe$1>; + tokensList_contains_nocase?: InputMaybe$1>; + tokensList_not?: InputMaybe$1>; + tokensList_not_contains?: InputMaybe$1>; + tokensList_not_contains_nocase?: InputMaybe$1>; + tokens_?: InputMaybe$1; + totalAumFeeCollectedInBPT?: InputMaybe$1; + totalAumFeeCollectedInBPT_gt?: InputMaybe$1; + totalAumFeeCollectedInBPT_gte?: InputMaybe$1; + totalAumFeeCollectedInBPT_in?: InputMaybe$1>; + totalAumFeeCollectedInBPT_lt?: InputMaybe$1; + totalAumFeeCollectedInBPT_lte?: InputMaybe$1; + totalAumFeeCollectedInBPT_not?: InputMaybe$1; + totalAumFeeCollectedInBPT_not_in?: InputMaybe$1>; + totalLiquidity?: InputMaybe$1; + totalLiquiditySansBPT?: InputMaybe$1; + totalLiquiditySansBPT_gt?: InputMaybe$1; + totalLiquiditySansBPT_gte?: InputMaybe$1; + totalLiquiditySansBPT_in?: InputMaybe$1>; + totalLiquiditySansBPT_lt?: InputMaybe$1; + totalLiquiditySansBPT_lte?: InputMaybe$1; + totalLiquiditySansBPT_not?: InputMaybe$1; + totalLiquiditySansBPT_not_in?: InputMaybe$1>; + totalLiquidity_gt?: InputMaybe$1; + totalLiquidity_gte?: InputMaybe$1; + totalLiquidity_in?: InputMaybe$1>; + totalLiquidity_lt?: InputMaybe$1; + totalLiquidity_lte?: InputMaybe$1; + totalLiquidity_not?: InputMaybe$1; + totalLiquidity_not_in?: InputMaybe$1>; + totalProtocolFee?: InputMaybe$1; + totalProtocolFeePaidInBPT?: InputMaybe$1; + totalProtocolFeePaidInBPT_gt?: InputMaybe$1; + totalProtocolFeePaidInBPT_gte?: InputMaybe$1; + totalProtocolFeePaidInBPT_in?: InputMaybe$1>; + totalProtocolFeePaidInBPT_lt?: InputMaybe$1; + totalProtocolFeePaidInBPT_lte?: InputMaybe$1; + totalProtocolFeePaidInBPT_not?: InputMaybe$1; + totalProtocolFeePaidInBPT_not_in?: InputMaybe$1>; + totalProtocolFee_gt?: InputMaybe$1; + totalProtocolFee_gte?: InputMaybe$1; + totalProtocolFee_in?: InputMaybe$1>; + totalProtocolFee_lt?: InputMaybe$1; + totalProtocolFee_lte?: InputMaybe$1; + totalProtocolFee_not?: InputMaybe$1; + totalProtocolFee_not_in?: InputMaybe$1>; + totalShares?: InputMaybe$1; + totalShares_gt?: InputMaybe$1; + totalShares_gte?: InputMaybe$1; + totalShares_in?: InputMaybe$1>; + totalShares_lt?: InputMaybe$1; + totalShares_lte?: InputMaybe$1; + totalShares_not?: InputMaybe$1; + totalShares_not_in?: InputMaybe$1>; + totalSwapFee?: InputMaybe$1; + totalSwapFee_gt?: InputMaybe$1; + totalSwapFee_gte?: InputMaybe$1; + totalSwapFee_in?: InputMaybe$1>; + totalSwapFee_lt?: InputMaybe$1; + totalSwapFee_lte?: InputMaybe$1; + totalSwapFee_not?: InputMaybe$1; + totalSwapFee_not_in?: InputMaybe$1>; + totalSwapVolume?: InputMaybe$1; + totalSwapVolume_gt?: InputMaybe$1; + totalSwapVolume_gte?: InputMaybe$1; + totalSwapVolume_in?: InputMaybe$1>; + totalSwapVolume_lt?: InputMaybe$1; + totalSwapVolume_lte?: InputMaybe$1; + totalSwapVolume_not?: InputMaybe$1; + totalSwapVolume_not_in?: InputMaybe$1>; + totalWeight?: InputMaybe$1; + totalWeight_gt?: InputMaybe$1; + totalWeight_gte?: InputMaybe$1; + totalWeight_in?: InputMaybe$1>; + totalWeight_lt?: InputMaybe$1; + totalWeight_lte?: InputMaybe$1; + totalWeight_not?: InputMaybe$1; + totalWeight_not_in?: InputMaybe$1>; + tx?: InputMaybe$1; + tx_contains?: InputMaybe$1; + tx_gt?: InputMaybe$1; + tx_gte?: InputMaybe$1; + tx_in?: InputMaybe$1>; + tx_lt?: InputMaybe$1; + tx_lte?: InputMaybe$1; + tx_not?: InputMaybe$1; + tx_not_contains?: InputMaybe$1; + tx_not_in?: InputMaybe$1>; + u?: InputMaybe$1; + u_gt?: InputMaybe$1; + u_gte?: InputMaybe$1; + u_in?: InputMaybe$1>; + u_lt?: InputMaybe$1; + u_lte?: InputMaybe$1; + u_not?: InputMaybe$1; + u_not_in?: InputMaybe$1>; + unitSeconds?: InputMaybe$1; + unitSeconds_gt?: InputMaybe$1; + unitSeconds_gte?: InputMaybe$1; + unitSeconds_in?: InputMaybe$1>; + unitSeconds_lt?: InputMaybe$1; + unitSeconds_lte?: InputMaybe$1; + unitSeconds_not?: InputMaybe$1; + unitSeconds_not_in?: InputMaybe$1>; + upperTarget?: InputMaybe$1; + upperTarget_gt?: InputMaybe$1; + upperTarget_gte?: InputMaybe$1; + upperTarget_in?: InputMaybe$1>; + upperTarget_lt?: InputMaybe$1; + upperTarget_lte?: InputMaybe$1; + upperTarget_not?: InputMaybe$1; + upperTarget_not_in?: InputMaybe$1>; + v?: InputMaybe$1; + v_gt?: InputMaybe$1; + v_gte?: InputMaybe$1; + v_in?: InputMaybe$1>; + v_lt?: InputMaybe$1; + v_lte?: InputMaybe$1; + v_not?: InputMaybe$1; + v_not_in?: InputMaybe$1>; + vaultID?: InputMaybe$1; + vaultID_?: InputMaybe$1; + vaultID_contains?: InputMaybe$1; + vaultID_contains_nocase?: InputMaybe$1; + vaultID_ends_with?: InputMaybe$1; + vaultID_ends_with_nocase?: InputMaybe$1; + vaultID_gt?: InputMaybe$1; + vaultID_gte?: InputMaybe$1; + vaultID_in?: InputMaybe$1>; + vaultID_lt?: InputMaybe$1; + vaultID_lte?: InputMaybe$1; + vaultID_not?: InputMaybe$1; + vaultID_not_contains?: InputMaybe$1; + vaultID_not_contains_nocase?: InputMaybe$1; + vaultID_not_ends_with?: InputMaybe$1; + vaultID_not_ends_with_nocase?: InputMaybe$1; + vaultID_not_in?: InputMaybe$1>; + vaultID_not_starts_with?: InputMaybe$1; + vaultID_not_starts_with_nocase?: InputMaybe$1; + vaultID_starts_with?: InputMaybe$1; + vaultID_starts_with_nocase?: InputMaybe$1; + w?: InputMaybe$1; + w_gt?: InputMaybe$1; + w_gte?: InputMaybe$1; + w_in?: InputMaybe$1>; + w_lt?: InputMaybe$1; + w_lte?: InputMaybe$1; + w_not?: InputMaybe$1; + w_not_in?: InputMaybe$1>; + weightUpdates_?: InputMaybe$1; + wrappedIndex?: InputMaybe$1; + wrappedIndex_gt?: InputMaybe$1; + wrappedIndex_gte?: InputMaybe$1; + wrappedIndex_in?: InputMaybe$1>; + wrappedIndex_lt?: InputMaybe$1; + wrappedIndex_lte?: InputMaybe$1; + wrappedIndex_not?: InputMaybe$1; + wrappedIndex_not_in?: InputMaybe$1>; + z?: InputMaybe$1; + z_gt?: InputMaybe$1; + z_gte?: InputMaybe$1; + z_in?: InputMaybe$1>; + z_lt?: InputMaybe$1; + z_lte?: InputMaybe$1; + z_not?: InputMaybe$1; + z_not_in?: InputMaybe$1>; +}; +declare enum Pool_OrderBy$1 { + Address = "address", + Alpha = "alpha", + Amp = "amp", + AmpUpdates = "ampUpdates", + BaseToken = "baseToken", + Beta = "beta", + C = "c", + CircuitBreakers = "circuitBreakers", + CreateTime = "createTime", + DSq = "dSq", + Delta = "delta", + Epsilon = "epsilon", + ExpiryTime = "expiryTime", + Factory = "factory", + HistoricalValues = "historicalValues", + HoldersCount = "holdersCount", + Id = "id", + IsInRecoveryMode = "isInRecoveryMode", + IsPaused = "isPaused", + JoinExitEnabled = "joinExitEnabled", + Lambda = "lambda", + LastJoinExitAmp = "lastJoinExitAmp", + LastPostJoinExitInvariant = "lastPostJoinExitInvariant", + LatestAmpUpdate = "latestAmpUpdate", + LatestAmpUpdateEndAmp = "latestAmpUpdate__endAmp", + LatestAmpUpdateEndTimestamp = "latestAmpUpdate__endTimestamp", + LatestAmpUpdateId = "latestAmpUpdate__id", + LatestAmpUpdateScheduledTimestamp = "latestAmpUpdate__scheduledTimestamp", + LatestAmpUpdateStartAmp = "latestAmpUpdate__startAmp", + LatestAmpUpdateStartTimestamp = "latestAmpUpdate__startTimestamp", + LowerTarget = "lowerTarget", + MainIndex = "mainIndex", + ManagementAumFee = "managementAumFee", + ManagementFee = "managementFee", + MustAllowlistLPs = "mustAllowlistLPs", + Name = "name", + OracleEnabled = "oracleEnabled", + Owner = "owner", + PoolType = "poolType", + PoolTypeVersion = "poolTypeVersion", + PriceRateProviders = "priceRateProviders", + PrincipalToken = "principalToken", + ProtocolAumFeeCache = "protocolAumFeeCache", + ProtocolId = "protocolId", + ProtocolIdData = "protocolIdData", + ProtocolIdDataId = "protocolIdData__id", + ProtocolIdDataName = "protocolIdData__name", + ProtocolSwapFeeCache = "protocolSwapFeeCache", + ProtocolYieldFeeCache = "protocolYieldFeeCache", + Root3Alpha = "root3Alpha", + S = "s", + Shares = "shares", + Snapshots = "snapshots", + SqrtAlpha = "sqrtAlpha", + SqrtBeta = "sqrtBeta", + StrategyType = "strategyType", + SwapEnabled = "swapEnabled", + SwapEnabledCurationSignal = "swapEnabledCurationSignal", + SwapEnabledInternal = "swapEnabledInternal", + SwapFee = "swapFee", + Swaps = "swaps", + SwapsCount = "swapsCount", + Symbol = "symbol", + TauAlphaX = "tauAlphaX", + TauAlphaY = "tauAlphaY", + TauBetaX = "tauBetaX", + TauBetaY = "tauBetaY", + Tokens = "tokens", + TokensList = "tokensList", + TotalAumFeeCollectedInBpt = "totalAumFeeCollectedInBPT", + TotalLiquidity = "totalLiquidity", + TotalLiquiditySansBpt = "totalLiquiditySansBPT", + TotalProtocolFee = "totalProtocolFee", + TotalProtocolFeePaidInBpt = "totalProtocolFeePaidInBPT", + TotalShares = "totalShares", + TotalSwapFee = "totalSwapFee", + TotalSwapVolume = "totalSwapVolume", + TotalWeight = "totalWeight", + Tx = "tx", + U = "u", + UnitSeconds = "unitSeconds", + UpperTarget = "upperTarget", + V = "v", + VaultId = "vaultID", + VaultIdId = "vaultID__id", + VaultIdPoolCount = "vaultID__poolCount", + VaultIdProtocolFeesCollector = "vaultID__protocolFeesCollector", + VaultIdTotalLiquidity = "vaultID__totalLiquidity", + VaultIdTotalProtocolFee = "vaultID__totalProtocolFee", + VaultIdTotalSwapCount = "vaultID__totalSwapCount", + VaultIdTotalSwapFee = "vaultID__totalSwapFee", + VaultIdTotalSwapVolume = "vaultID__totalSwapVolume", + W = "w", + WeightUpdates = "weightUpdates", + WrappedIndex = "wrappedIndex", + Z = "z" +} +type PriceRateProvider_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + address?: InputMaybe$1; + address_contains?: InputMaybe$1; + address_gt?: InputMaybe$1; + address_gte?: InputMaybe$1; + address_in?: InputMaybe$1>; + address_lt?: InputMaybe$1; + address_lte?: InputMaybe$1; + address_not?: InputMaybe$1; + address_not_contains?: InputMaybe$1; + address_not_in?: InputMaybe$1>; + and?: InputMaybe$1>>; + cacheDuration?: InputMaybe$1; + cacheDuration_gt?: InputMaybe$1; + cacheDuration_gte?: InputMaybe$1; + cacheDuration_in?: InputMaybe$1>; + cacheDuration_lt?: InputMaybe$1; + cacheDuration_lte?: InputMaybe$1; + cacheDuration_not?: InputMaybe$1; + cacheDuration_not_in?: InputMaybe$1>; + cacheExpiry?: InputMaybe$1; + cacheExpiry_gt?: InputMaybe$1; + cacheExpiry_gte?: InputMaybe$1; + cacheExpiry_in?: InputMaybe$1>; + cacheExpiry_lt?: InputMaybe$1; + cacheExpiry_lte?: InputMaybe$1; + cacheExpiry_not?: InputMaybe$1; + cacheExpiry_not_in?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + lastCached?: InputMaybe$1; + lastCached_gt?: InputMaybe$1; + lastCached_gte?: InputMaybe$1; + lastCached_in?: InputMaybe$1>; + lastCached_lt?: InputMaybe$1; + lastCached_lte?: InputMaybe$1; + lastCached_not?: InputMaybe$1; + lastCached_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + poolId?: InputMaybe$1; + poolId_?: InputMaybe$1; + poolId_contains?: InputMaybe$1; + poolId_contains_nocase?: InputMaybe$1; + poolId_ends_with?: InputMaybe$1; + poolId_ends_with_nocase?: InputMaybe$1; + poolId_gt?: InputMaybe$1; + poolId_gte?: InputMaybe$1; + poolId_in?: InputMaybe$1>; + poolId_lt?: InputMaybe$1; + poolId_lte?: InputMaybe$1; + poolId_not?: InputMaybe$1; + poolId_not_contains?: InputMaybe$1; + poolId_not_contains_nocase?: InputMaybe$1; + poolId_not_ends_with?: InputMaybe$1; + poolId_not_ends_with_nocase?: InputMaybe$1; + poolId_not_in?: InputMaybe$1>; + poolId_not_starts_with?: InputMaybe$1; + poolId_not_starts_with_nocase?: InputMaybe$1; + poolId_starts_with?: InputMaybe$1; + poolId_starts_with_nocase?: InputMaybe$1; + rate?: InputMaybe$1; + rate_gt?: InputMaybe$1; + rate_gte?: InputMaybe$1; + rate_in?: InputMaybe$1>; + rate_lt?: InputMaybe$1; + rate_lte?: InputMaybe$1; + rate_not?: InputMaybe$1; + rate_not_in?: InputMaybe$1>; + token?: InputMaybe$1; + token_?: InputMaybe$1; + token_contains?: InputMaybe$1; + token_contains_nocase?: InputMaybe$1; + token_ends_with?: InputMaybe$1; + token_ends_with_nocase?: InputMaybe$1; + token_gt?: InputMaybe$1; + token_gte?: InputMaybe$1; + token_in?: InputMaybe$1>; + token_lt?: InputMaybe$1; + token_lte?: InputMaybe$1; + token_not?: InputMaybe$1; + token_not_contains?: InputMaybe$1; + token_not_contains_nocase?: InputMaybe$1; + token_not_ends_with?: InputMaybe$1; + token_not_ends_with_nocase?: InputMaybe$1; + token_not_in?: InputMaybe$1>; + token_not_starts_with?: InputMaybe$1; + token_not_starts_with_nocase?: InputMaybe$1; + token_starts_with?: InputMaybe$1; + token_starts_with_nocase?: InputMaybe$1; +}; +type ProtocolIdData_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + and?: InputMaybe$1>>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + name?: InputMaybe$1; + name_contains?: InputMaybe$1; + name_contains_nocase?: InputMaybe$1; + name_ends_with?: InputMaybe$1; + name_ends_with_nocase?: InputMaybe$1; + name_gt?: InputMaybe$1; + name_gte?: InputMaybe$1; + name_in?: InputMaybe$1>; + name_lt?: InputMaybe$1; + name_lte?: InputMaybe$1; + name_not?: InputMaybe$1; + name_not_contains?: InputMaybe$1; + name_not_contains_nocase?: InputMaybe$1; + name_not_ends_with?: InputMaybe$1; + name_not_ends_with_nocase?: InputMaybe$1; + name_not_in?: InputMaybe$1>; + name_not_starts_with?: InputMaybe$1; + name_not_starts_with_nocase?: InputMaybe$1; + name_starts_with?: InputMaybe$1; + name_starts_with_nocase?: InputMaybe$1; + or?: InputMaybe$1>>; +}; +type Swap_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + and?: InputMaybe$1>>; + caller?: InputMaybe$1; + caller_contains?: InputMaybe$1; + caller_gt?: InputMaybe$1; + caller_gte?: InputMaybe$1; + caller_in?: InputMaybe$1>; + caller_lt?: InputMaybe$1; + caller_lte?: InputMaybe$1; + caller_not?: InputMaybe$1; + caller_not_contains?: InputMaybe$1; + caller_not_in?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + poolId?: InputMaybe$1; + poolId_?: InputMaybe$1; + poolId_contains?: InputMaybe$1; + poolId_contains_nocase?: InputMaybe$1; + poolId_ends_with?: InputMaybe$1; + poolId_ends_with_nocase?: InputMaybe$1; + poolId_gt?: InputMaybe$1; + poolId_gte?: InputMaybe$1; + poolId_in?: InputMaybe$1>; + poolId_lt?: InputMaybe$1; + poolId_lte?: InputMaybe$1; + poolId_not?: InputMaybe$1; + poolId_not_contains?: InputMaybe$1; + poolId_not_contains_nocase?: InputMaybe$1; + poolId_not_ends_with?: InputMaybe$1; + poolId_not_ends_with_nocase?: InputMaybe$1; + poolId_not_in?: InputMaybe$1>; + poolId_not_starts_with?: InputMaybe$1; + poolId_not_starts_with_nocase?: InputMaybe$1; + poolId_starts_with?: InputMaybe$1; + poolId_starts_with_nocase?: InputMaybe$1; + timestamp?: InputMaybe$1; + timestamp_gt?: InputMaybe$1; + timestamp_gte?: InputMaybe$1; + timestamp_in?: InputMaybe$1>; + timestamp_lt?: InputMaybe$1; + timestamp_lte?: InputMaybe$1; + timestamp_not?: InputMaybe$1; + timestamp_not_in?: InputMaybe$1>; + tokenAmountIn?: InputMaybe$1; + tokenAmountIn_gt?: InputMaybe$1; + tokenAmountIn_gte?: InputMaybe$1; + tokenAmountIn_in?: InputMaybe$1>; + tokenAmountIn_lt?: InputMaybe$1; + tokenAmountIn_lte?: InputMaybe$1; + tokenAmountIn_not?: InputMaybe$1; + tokenAmountIn_not_in?: InputMaybe$1>; + tokenAmountOut?: InputMaybe$1; + tokenAmountOut_gt?: InputMaybe$1; + tokenAmountOut_gte?: InputMaybe$1; + tokenAmountOut_in?: InputMaybe$1>; + tokenAmountOut_lt?: InputMaybe$1; + tokenAmountOut_lte?: InputMaybe$1; + tokenAmountOut_not?: InputMaybe$1; + tokenAmountOut_not_in?: InputMaybe$1>; + tokenIn?: InputMaybe$1; + tokenInSym?: InputMaybe$1; + tokenInSym_contains?: InputMaybe$1; + tokenInSym_contains_nocase?: InputMaybe$1; + tokenInSym_ends_with?: InputMaybe$1; + tokenInSym_ends_with_nocase?: InputMaybe$1; + tokenInSym_gt?: InputMaybe$1; + tokenInSym_gte?: InputMaybe$1; + tokenInSym_in?: InputMaybe$1>; + tokenInSym_lt?: InputMaybe$1; + tokenInSym_lte?: InputMaybe$1; + tokenInSym_not?: InputMaybe$1; + tokenInSym_not_contains?: InputMaybe$1; + tokenInSym_not_contains_nocase?: InputMaybe$1; + tokenInSym_not_ends_with?: InputMaybe$1; + tokenInSym_not_ends_with_nocase?: InputMaybe$1; + tokenInSym_not_in?: InputMaybe$1>; + tokenInSym_not_starts_with?: InputMaybe$1; + tokenInSym_not_starts_with_nocase?: InputMaybe$1; + tokenInSym_starts_with?: InputMaybe$1; + tokenInSym_starts_with_nocase?: InputMaybe$1; + tokenIn_contains?: InputMaybe$1; + tokenIn_gt?: InputMaybe$1; + tokenIn_gte?: InputMaybe$1; + tokenIn_in?: InputMaybe$1>; + tokenIn_lt?: InputMaybe$1; + tokenIn_lte?: InputMaybe$1; + tokenIn_not?: InputMaybe$1; + tokenIn_not_contains?: InputMaybe$1; + tokenIn_not_in?: InputMaybe$1>; + tokenOut?: InputMaybe$1; + tokenOutSym?: InputMaybe$1; + tokenOutSym_contains?: InputMaybe$1; + tokenOutSym_contains_nocase?: InputMaybe$1; + tokenOutSym_ends_with?: InputMaybe$1; + tokenOutSym_ends_with_nocase?: InputMaybe$1; + tokenOutSym_gt?: InputMaybe$1; + tokenOutSym_gte?: InputMaybe$1; + tokenOutSym_in?: InputMaybe$1>; + tokenOutSym_lt?: InputMaybe$1; + tokenOutSym_lte?: InputMaybe$1; + tokenOutSym_not?: InputMaybe$1; + tokenOutSym_not_contains?: InputMaybe$1; + tokenOutSym_not_contains_nocase?: InputMaybe$1; + tokenOutSym_not_ends_with?: InputMaybe$1; + tokenOutSym_not_ends_with_nocase?: InputMaybe$1; + tokenOutSym_not_in?: InputMaybe$1>; + tokenOutSym_not_starts_with?: InputMaybe$1; + tokenOutSym_not_starts_with_nocase?: InputMaybe$1; + tokenOutSym_starts_with?: InputMaybe$1; + tokenOutSym_starts_with_nocase?: InputMaybe$1; + tokenOut_contains?: InputMaybe$1; + tokenOut_gt?: InputMaybe$1; + tokenOut_gte?: InputMaybe$1; + tokenOut_in?: InputMaybe$1>; + tokenOut_lt?: InputMaybe$1; + tokenOut_lte?: InputMaybe$1; + tokenOut_not?: InputMaybe$1; + tokenOut_not_contains?: InputMaybe$1; + tokenOut_not_in?: InputMaybe$1>; + tx?: InputMaybe$1; + tx_contains?: InputMaybe$1; + tx_gt?: InputMaybe$1; + tx_gte?: InputMaybe$1; + tx_in?: InputMaybe$1>; + tx_lt?: InputMaybe$1; + tx_lte?: InputMaybe$1; + tx_not?: InputMaybe$1; + tx_not_contains?: InputMaybe$1; + tx_not_in?: InputMaybe$1>; + userAddress?: InputMaybe$1; + userAddress_?: InputMaybe$1; + userAddress_contains?: InputMaybe$1; + userAddress_contains_nocase?: InputMaybe$1; + userAddress_ends_with?: InputMaybe$1; + userAddress_ends_with_nocase?: InputMaybe$1; + userAddress_gt?: InputMaybe$1; + userAddress_gte?: InputMaybe$1; + userAddress_in?: InputMaybe$1>; + userAddress_lt?: InputMaybe$1; + userAddress_lte?: InputMaybe$1; + userAddress_not?: InputMaybe$1; + userAddress_not_contains?: InputMaybe$1; + userAddress_not_contains_nocase?: InputMaybe$1; + userAddress_not_ends_with?: InputMaybe$1; + userAddress_not_ends_with_nocase?: InputMaybe$1; + userAddress_not_in?: InputMaybe$1>; + userAddress_not_starts_with?: InputMaybe$1; + userAddress_not_starts_with_nocase?: InputMaybe$1; + userAddress_starts_with?: InputMaybe$1; + userAddress_starts_with_nocase?: InputMaybe$1; + valueUSD?: InputMaybe$1; + valueUSD_gt?: InputMaybe$1; + valueUSD_gte?: InputMaybe$1; + valueUSD_in?: InputMaybe$1>; + valueUSD_lt?: InputMaybe$1; + valueUSD_lte?: InputMaybe$1; + valueUSD_not?: InputMaybe$1; + valueUSD_not_in?: InputMaybe$1>; +}; +type TokenPrice_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + amount?: InputMaybe$1; + amount_gt?: InputMaybe$1; + amount_gte?: InputMaybe$1; + amount_in?: InputMaybe$1>; + amount_lt?: InputMaybe$1; + amount_lte?: InputMaybe$1; + amount_not?: InputMaybe$1; + amount_not_in?: InputMaybe$1>; + and?: InputMaybe$1>>; + asset?: InputMaybe$1; + asset_contains?: InputMaybe$1; + asset_gt?: InputMaybe$1; + asset_gte?: InputMaybe$1; + asset_in?: InputMaybe$1>; + asset_lt?: InputMaybe$1; + asset_lte?: InputMaybe$1; + asset_not?: InputMaybe$1; + asset_not_contains?: InputMaybe$1; + asset_not_in?: InputMaybe$1>; + block?: InputMaybe$1; + block_gt?: InputMaybe$1; + block_gte?: InputMaybe$1; + block_in?: InputMaybe$1>; + block_lt?: InputMaybe$1; + block_lte?: InputMaybe$1; + block_not?: InputMaybe$1; + block_not_in?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + poolId?: InputMaybe$1; + poolId_?: InputMaybe$1; + poolId_contains?: InputMaybe$1; + poolId_contains_nocase?: InputMaybe$1; + poolId_ends_with?: InputMaybe$1; + poolId_ends_with_nocase?: InputMaybe$1; + poolId_gt?: InputMaybe$1; + poolId_gte?: InputMaybe$1; + poolId_in?: InputMaybe$1>; + poolId_lt?: InputMaybe$1; + poolId_lte?: InputMaybe$1; + poolId_not?: InputMaybe$1; + poolId_not_contains?: InputMaybe$1; + poolId_not_contains_nocase?: InputMaybe$1; + poolId_not_ends_with?: InputMaybe$1; + poolId_not_ends_with_nocase?: InputMaybe$1; + poolId_not_in?: InputMaybe$1>; + poolId_not_starts_with?: InputMaybe$1; + poolId_not_starts_with_nocase?: InputMaybe$1; + poolId_starts_with?: InputMaybe$1; + poolId_starts_with_nocase?: InputMaybe$1; + price?: InputMaybe$1; + price_gt?: InputMaybe$1; + price_gte?: InputMaybe$1; + price_in?: InputMaybe$1>; + price_lt?: InputMaybe$1; + price_lte?: InputMaybe$1; + price_not?: InputMaybe$1; + price_not_in?: InputMaybe$1>; + pricingAsset?: InputMaybe$1; + pricingAsset_contains?: InputMaybe$1; + pricingAsset_gt?: InputMaybe$1; + pricingAsset_gte?: InputMaybe$1; + pricingAsset_in?: InputMaybe$1>; + pricingAsset_lt?: InputMaybe$1; + pricingAsset_lte?: InputMaybe$1; + pricingAsset_not?: InputMaybe$1; + pricingAsset_not_contains?: InputMaybe$1; + pricingAsset_not_in?: InputMaybe$1>; + timestamp?: InputMaybe$1; + timestamp_gt?: InputMaybe$1; + timestamp_gte?: InputMaybe$1; + timestamp_in?: InputMaybe$1>; + timestamp_lt?: InputMaybe$1; + timestamp_lte?: InputMaybe$1; + timestamp_not?: InputMaybe$1; + timestamp_not_in?: InputMaybe$1>; +}; +declare enum TokenPrice_OrderBy { + Amount = "amount", + Asset = "asset", + Block = "block", + Id = "id", + PoolId = "poolId", + PoolIdAddress = "poolId__address", + PoolIdAlpha = "poolId__alpha", + PoolIdAmp = "poolId__amp", + PoolIdBaseToken = "poolId__baseToken", + PoolIdBeta = "poolId__beta", + PoolIdC = "poolId__c", + PoolIdCreateTime = "poolId__createTime", + PoolIdDSq = "poolId__dSq", + PoolIdDelta = "poolId__delta", + PoolIdEpsilon = "poolId__epsilon", + PoolIdExpiryTime = "poolId__expiryTime", + PoolIdFactory = "poolId__factory", + PoolIdHoldersCount = "poolId__holdersCount", + PoolIdId = "poolId__id", + PoolIdIsInRecoveryMode = "poolId__isInRecoveryMode", + PoolIdIsPaused = "poolId__isPaused", + PoolIdJoinExitEnabled = "poolId__joinExitEnabled", + PoolIdLambda = "poolId__lambda", + PoolIdLastJoinExitAmp = "poolId__lastJoinExitAmp", + PoolIdLastPostJoinExitInvariant = "poolId__lastPostJoinExitInvariant", + PoolIdLowerTarget = "poolId__lowerTarget", + PoolIdMainIndex = "poolId__mainIndex", + PoolIdManagementAumFee = "poolId__managementAumFee", + PoolIdManagementFee = "poolId__managementFee", + PoolIdMustAllowlistLPs = "poolId__mustAllowlistLPs", + PoolIdName = "poolId__name", + PoolIdOracleEnabled = "poolId__oracleEnabled", + PoolIdOwner = "poolId__owner", + PoolIdPoolType = "poolId__poolType", + PoolIdPoolTypeVersion = "poolId__poolTypeVersion", + PoolIdPrincipalToken = "poolId__principalToken", + PoolIdProtocolAumFeeCache = "poolId__protocolAumFeeCache", + PoolIdProtocolId = "poolId__protocolId", + PoolIdProtocolSwapFeeCache = "poolId__protocolSwapFeeCache", + PoolIdProtocolYieldFeeCache = "poolId__protocolYieldFeeCache", + PoolIdRoot3Alpha = "poolId__root3Alpha", + PoolIdS = "poolId__s", + PoolIdSqrtAlpha = "poolId__sqrtAlpha", + PoolIdSqrtBeta = "poolId__sqrtBeta", + PoolIdStrategyType = "poolId__strategyType", + PoolIdSwapEnabled = "poolId__swapEnabled", + PoolIdSwapEnabledCurationSignal = "poolId__swapEnabledCurationSignal", + PoolIdSwapEnabledInternal = "poolId__swapEnabledInternal", + PoolIdSwapFee = "poolId__swapFee", + PoolIdSwapsCount = "poolId__swapsCount", + PoolIdSymbol = "poolId__symbol", + PoolIdTauAlphaX = "poolId__tauAlphaX", + PoolIdTauAlphaY = "poolId__tauAlphaY", + PoolIdTauBetaX = "poolId__tauBetaX", + PoolIdTauBetaY = "poolId__tauBetaY", + PoolIdTotalAumFeeCollectedInBpt = "poolId__totalAumFeeCollectedInBPT", + PoolIdTotalLiquidity = "poolId__totalLiquidity", + PoolIdTotalLiquiditySansBpt = "poolId__totalLiquiditySansBPT", + PoolIdTotalProtocolFee = "poolId__totalProtocolFee", + PoolIdTotalProtocolFeePaidInBpt = "poolId__totalProtocolFeePaidInBPT", + PoolIdTotalShares = "poolId__totalShares", + PoolIdTotalSwapFee = "poolId__totalSwapFee", + PoolIdTotalSwapVolume = "poolId__totalSwapVolume", + PoolIdTotalWeight = "poolId__totalWeight", + PoolIdTx = "poolId__tx", + PoolIdU = "poolId__u", + PoolIdUnitSeconds = "poolId__unitSeconds", + PoolIdUpperTarget = "poolId__upperTarget", + PoolIdV = "poolId__v", + PoolIdW = "poolId__w", + PoolIdWrappedIndex = "poolId__wrappedIndex", + PoolIdZ = "poolId__z", + Price = "price", + PricingAsset = "pricingAsset", + Timestamp = "timestamp" +} +type Token_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + address?: InputMaybe$1; + address_contains?: InputMaybe$1; + address_contains_nocase?: InputMaybe$1; + address_ends_with?: InputMaybe$1; + address_ends_with_nocase?: InputMaybe$1; + address_gt?: InputMaybe$1; + address_gte?: InputMaybe$1; + address_in?: InputMaybe$1>; + address_lt?: InputMaybe$1; + address_lte?: InputMaybe$1; + address_not?: InputMaybe$1; + address_not_contains?: InputMaybe$1; + address_not_contains_nocase?: InputMaybe$1; + address_not_ends_with?: InputMaybe$1; + address_not_ends_with_nocase?: InputMaybe$1; + address_not_in?: InputMaybe$1>; + address_not_starts_with?: InputMaybe$1; + address_not_starts_with_nocase?: InputMaybe$1; + address_starts_with?: InputMaybe$1; + address_starts_with_nocase?: InputMaybe$1; + and?: InputMaybe$1>>; + decimals?: InputMaybe$1; + decimals_gt?: InputMaybe$1; + decimals_gte?: InputMaybe$1; + decimals_in?: InputMaybe$1>; + decimals_lt?: InputMaybe$1; + decimals_lte?: InputMaybe$1; + decimals_not?: InputMaybe$1; + decimals_not_in?: InputMaybe$1>; + fxOracleDecimals?: InputMaybe$1; + fxOracleDecimals_gt?: InputMaybe$1; + fxOracleDecimals_gte?: InputMaybe$1; + fxOracleDecimals_in?: InputMaybe$1>; + fxOracleDecimals_lt?: InputMaybe$1; + fxOracleDecimals_lte?: InputMaybe$1; + fxOracleDecimals_not?: InputMaybe$1; + fxOracleDecimals_not_in?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + latestFXPrice?: InputMaybe$1; + latestFXPrice_gt?: InputMaybe$1; + latestFXPrice_gte?: InputMaybe$1; + latestFXPrice_in?: InputMaybe$1>; + latestFXPrice_lt?: InputMaybe$1; + latestFXPrice_lte?: InputMaybe$1; + latestFXPrice_not?: InputMaybe$1; + latestFXPrice_not_in?: InputMaybe$1>; + latestPrice?: InputMaybe$1; + latestPrice_?: InputMaybe$1; + latestPrice_contains?: InputMaybe$1; + latestPrice_contains_nocase?: InputMaybe$1; + latestPrice_ends_with?: InputMaybe$1; + latestPrice_ends_with_nocase?: InputMaybe$1; + latestPrice_gt?: InputMaybe$1; + latestPrice_gte?: InputMaybe$1; + latestPrice_in?: InputMaybe$1>; + latestPrice_lt?: InputMaybe$1; + latestPrice_lte?: InputMaybe$1; + latestPrice_not?: InputMaybe$1; + latestPrice_not_contains?: InputMaybe$1; + latestPrice_not_contains_nocase?: InputMaybe$1; + latestPrice_not_ends_with?: InputMaybe$1; + latestPrice_not_ends_with_nocase?: InputMaybe$1; + latestPrice_not_in?: InputMaybe$1>; + latestPrice_not_starts_with?: InputMaybe$1; + latestPrice_not_starts_with_nocase?: InputMaybe$1; + latestPrice_starts_with?: InputMaybe$1; + latestPrice_starts_with_nocase?: InputMaybe$1; + latestUSDPrice?: InputMaybe$1; + latestUSDPriceTimestamp?: InputMaybe$1; + latestUSDPriceTimestamp_gt?: InputMaybe$1; + latestUSDPriceTimestamp_gte?: InputMaybe$1; + latestUSDPriceTimestamp_in?: InputMaybe$1>; + latestUSDPriceTimestamp_lt?: InputMaybe$1; + latestUSDPriceTimestamp_lte?: InputMaybe$1; + latestUSDPriceTimestamp_not?: InputMaybe$1; + latestUSDPriceTimestamp_not_in?: InputMaybe$1>; + latestUSDPrice_gt?: InputMaybe$1; + latestUSDPrice_gte?: InputMaybe$1; + latestUSDPrice_in?: InputMaybe$1>; + latestUSDPrice_lt?: InputMaybe$1; + latestUSDPrice_lte?: InputMaybe$1; + latestUSDPrice_not?: InputMaybe$1; + latestUSDPrice_not_in?: InputMaybe$1>; + name?: InputMaybe$1; + name_contains?: InputMaybe$1; + name_contains_nocase?: InputMaybe$1; + name_ends_with?: InputMaybe$1; + name_ends_with_nocase?: InputMaybe$1; + name_gt?: InputMaybe$1; + name_gte?: InputMaybe$1; + name_in?: InputMaybe$1>; + name_lt?: InputMaybe$1; + name_lte?: InputMaybe$1; + name_not?: InputMaybe$1; + name_not_contains?: InputMaybe$1; + name_not_contains_nocase?: InputMaybe$1; + name_not_ends_with?: InputMaybe$1; + name_not_ends_with_nocase?: InputMaybe$1; + name_not_in?: InputMaybe$1>; + name_not_starts_with?: InputMaybe$1; + name_not_starts_with_nocase?: InputMaybe$1; + name_starts_with?: InputMaybe$1; + name_starts_with_nocase?: InputMaybe$1; + or?: InputMaybe$1>>; + pool?: InputMaybe$1; + pool_?: InputMaybe$1; + pool_contains?: InputMaybe$1; + pool_contains_nocase?: InputMaybe$1; + pool_ends_with?: InputMaybe$1; + pool_ends_with_nocase?: InputMaybe$1; + pool_gt?: InputMaybe$1; + pool_gte?: InputMaybe$1; + pool_in?: InputMaybe$1>; + pool_lt?: InputMaybe$1; + pool_lte?: InputMaybe$1; + pool_not?: InputMaybe$1; + pool_not_contains?: InputMaybe$1; + pool_not_contains_nocase?: InputMaybe$1; + pool_not_ends_with?: InputMaybe$1; + pool_not_ends_with_nocase?: InputMaybe$1; + pool_not_in?: InputMaybe$1>; + pool_not_starts_with?: InputMaybe$1; + pool_not_starts_with_nocase?: InputMaybe$1; + pool_starts_with?: InputMaybe$1; + pool_starts_with_nocase?: InputMaybe$1; + symbol?: InputMaybe$1; + symbol_contains?: InputMaybe$1; + symbol_contains_nocase?: InputMaybe$1; + symbol_ends_with?: InputMaybe$1; + symbol_ends_with_nocase?: InputMaybe$1; + symbol_gt?: InputMaybe$1; + symbol_gte?: InputMaybe$1; + symbol_in?: InputMaybe$1>; + symbol_lt?: InputMaybe$1; + symbol_lte?: InputMaybe$1; + symbol_not?: InputMaybe$1; + symbol_not_contains?: InputMaybe$1; + symbol_not_contains_nocase?: InputMaybe$1; + symbol_not_ends_with?: InputMaybe$1; + symbol_not_ends_with_nocase?: InputMaybe$1; + symbol_not_in?: InputMaybe$1>; + symbol_not_starts_with?: InputMaybe$1; + symbol_not_starts_with_nocase?: InputMaybe$1; + symbol_starts_with?: InputMaybe$1; + symbol_starts_with_nocase?: InputMaybe$1; + totalBalanceNotional?: InputMaybe$1; + totalBalanceNotional_gt?: InputMaybe$1; + totalBalanceNotional_gte?: InputMaybe$1; + totalBalanceNotional_in?: InputMaybe$1>; + totalBalanceNotional_lt?: InputMaybe$1; + totalBalanceNotional_lte?: InputMaybe$1; + totalBalanceNotional_not?: InputMaybe$1; + totalBalanceNotional_not_in?: InputMaybe$1>; + totalBalanceUSD?: InputMaybe$1; + totalBalanceUSD_gt?: InputMaybe$1; + totalBalanceUSD_gte?: InputMaybe$1; + totalBalanceUSD_in?: InputMaybe$1>; + totalBalanceUSD_lt?: InputMaybe$1; + totalBalanceUSD_lte?: InputMaybe$1; + totalBalanceUSD_not?: InputMaybe$1; + totalBalanceUSD_not_in?: InputMaybe$1>; + totalSwapCount?: InputMaybe$1; + totalSwapCount_gt?: InputMaybe$1; + totalSwapCount_gte?: InputMaybe$1; + totalSwapCount_in?: InputMaybe$1>; + totalSwapCount_lt?: InputMaybe$1; + totalSwapCount_lte?: InputMaybe$1; + totalSwapCount_not?: InputMaybe$1; + totalSwapCount_not_in?: InputMaybe$1>; + totalVolumeNotional?: InputMaybe$1; + totalVolumeNotional_gt?: InputMaybe$1; + totalVolumeNotional_gte?: InputMaybe$1; + totalVolumeNotional_in?: InputMaybe$1>; + totalVolumeNotional_lt?: InputMaybe$1; + totalVolumeNotional_lte?: InputMaybe$1; + totalVolumeNotional_not?: InputMaybe$1; + totalVolumeNotional_not_in?: InputMaybe$1>; + totalVolumeUSD?: InputMaybe$1; + totalVolumeUSD_gt?: InputMaybe$1; + totalVolumeUSD_gte?: InputMaybe$1; + totalVolumeUSD_in?: InputMaybe$1>; + totalVolumeUSD_lt?: InputMaybe$1; + totalVolumeUSD_lte?: InputMaybe$1; + totalVolumeUSD_not?: InputMaybe$1; + totalVolumeUSD_not_in?: InputMaybe$1>; +}; +type UserInternalBalance_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + and?: InputMaybe$1>>; + balance?: InputMaybe$1; + balance_gt?: InputMaybe$1; + balance_gte?: InputMaybe$1; + balance_in?: InputMaybe$1>; + balance_lt?: InputMaybe$1; + balance_lte?: InputMaybe$1; + balance_not?: InputMaybe$1; + balance_not_in?: InputMaybe$1>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + token?: InputMaybe$1; + tokenInfo?: InputMaybe$1; + tokenInfo_?: InputMaybe$1; + tokenInfo_contains?: InputMaybe$1; + tokenInfo_contains_nocase?: InputMaybe$1; + tokenInfo_ends_with?: InputMaybe$1; + tokenInfo_ends_with_nocase?: InputMaybe$1; + tokenInfo_gt?: InputMaybe$1; + tokenInfo_gte?: InputMaybe$1; + tokenInfo_in?: InputMaybe$1>; + tokenInfo_lt?: InputMaybe$1; + tokenInfo_lte?: InputMaybe$1; + tokenInfo_not?: InputMaybe$1; + tokenInfo_not_contains?: InputMaybe$1; + tokenInfo_not_contains_nocase?: InputMaybe$1; + tokenInfo_not_ends_with?: InputMaybe$1; + tokenInfo_not_ends_with_nocase?: InputMaybe$1; + tokenInfo_not_in?: InputMaybe$1>; + tokenInfo_not_starts_with?: InputMaybe$1; + tokenInfo_not_starts_with_nocase?: InputMaybe$1; + tokenInfo_starts_with?: InputMaybe$1; + tokenInfo_starts_with_nocase?: InputMaybe$1; + token_contains?: InputMaybe$1; + token_gt?: InputMaybe$1; + token_gte?: InputMaybe$1; + token_in?: InputMaybe$1>; + token_lt?: InputMaybe$1; + token_lte?: InputMaybe$1; + token_not?: InputMaybe$1; + token_not_contains?: InputMaybe$1; + token_not_in?: InputMaybe$1>; + userAddress?: InputMaybe$1; + userAddress_?: InputMaybe$1; + userAddress_contains?: InputMaybe$1; + userAddress_contains_nocase?: InputMaybe$1; + userAddress_ends_with?: InputMaybe$1; + userAddress_ends_with_nocase?: InputMaybe$1; + userAddress_gt?: InputMaybe$1; + userAddress_gte?: InputMaybe$1; + userAddress_in?: InputMaybe$1>; + userAddress_lt?: InputMaybe$1; + userAddress_lte?: InputMaybe$1; + userAddress_not?: InputMaybe$1; + userAddress_not_contains?: InputMaybe$1; + userAddress_not_contains_nocase?: InputMaybe$1; + userAddress_not_ends_with?: InputMaybe$1; + userAddress_not_ends_with_nocase?: InputMaybe$1; + userAddress_not_in?: InputMaybe$1>; + userAddress_not_starts_with?: InputMaybe$1; + userAddress_not_starts_with_nocase?: InputMaybe$1; + userAddress_starts_with?: InputMaybe$1; + userAddress_starts_with_nocase?: InputMaybe$1; +}; +type User_Filter$1 = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe$1; + and?: InputMaybe$1>>; + id?: InputMaybe$1; + id_gt?: InputMaybe$1; + id_gte?: InputMaybe$1; + id_in?: InputMaybe$1>; + id_lt?: InputMaybe$1; + id_lte?: InputMaybe$1; + id_not?: InputMaybe$1; + id_not_in?: InputMaybe$1>; + or?: InputMaybe$1>>; + sharesOwned_?: InputMaybe$1; + swaps_?: InputMaybe$1; + userInternalBalances_?: InputMaybe$1; +}; +declare enum User_OrderBy { + Id = "id", + SharesOwned = "sharesOwned", + Swaps = "swaps", + UserInternalBalances = "userInternalBalances" +} +type PoolShareQueryVariables = Exact$1<{ + id: Scalars$1['ID']; + block?: InputMaybe$1; +}>; +type PoolShareQuery = { + __typename?: 'Query'; + poolShare?: { + __typename?: 'PoolShare'; + id: string; + balance: string; + userAddress: { + __typename?: 'User'; + id: string; + }; + poolId: { + __typename?: 'Pool'; + id: string; + address: string; + }; + } | null; +}; +type PoolSharesQueryVariables = Exact$1<{ + first?: InputMaybe$1; + orderBy?: InputMaybe$1; + orderDirection?: InputMaybe$1; + skip?: InputMaybe$1; + where?: InputMaybe$1; + block?: InputMaybe$1; +}>; +type PoolSharesQuery = { + __typename?: 'Query'; + poolShares: Array<{ + __typename?: 'PoolShare'; + id: string; + balance: string; + userAddress: { + __typename?: 'User'; + id: string; + }; + poolId: { + __typename?: 'Pool'; + id: string; + address: string; + }; + }>; +}; +type SubgraphPoolShareFragment = { + __typename?: 'PoolShare'; + id: string; + balance: string; + userAddress: { + __typename?: 'User'; + id: string; + }; + poolId: { + __typename?: 'Pool'; + id: string; + address: string; + }; +}; +type PoolsQueryVariables$1 = Exact$1<{ + skip?: InputMaybe$1; + first?: InputMaybe$1; + orderBy?: InputMaybe$1; + orderDirection?: InputMaybe$1; + where?: InputMaybe$1; + block?: InputMaybe$1; +}>; +type PoolsQuery$1 = { + __typename?: 'Query'; + pools: Array<{ + __typename?: 'Pool'; + id: string; + address: string; + poolType?: string | null; + poolTypeVersion?: number | null; + factory?: string | null; + strategyType: number; + symbol?: string | null; + name?: string | null; + swapEnabled: boolean; + swapFee: string; + protocolYieldFeeCache?: string | null; + protocolSwapFeeCache?: string | null; + owner?: string | null; + totalWeight?: string | null; + totalSwapVolume: string; + totalSwapFee: string; + totalLiquidity: string; + totalShares: string; + swapsCount: string; + holdersCount: string; + tokensList: Array; + amp?: string | null; + expiryTime?: string | null; + unitSeconds?: string | null; + createTime: number; + principalToken?: string | null; + baseToken?: string | null; + wrappedIndex?: number | null; + mainIndex?: number | null; + lowerTarget?: string | null; + upperTarget?: string | null; + sqrtAlpha?: string | null; + sqrtBeta?: string | null; + root3Alpha?: string | null; + isInRecoveryMode?: boolean | null; + isPaused?: boolean | null; + alpha?: string | null; + beta?: string | null; + c?: string | null; + s?: string | null; + lambda?: string | null; + tauAlphaX?: string | null; + tauAlphaY?: string | null; + tauBetaX?: string | null; + tauBetaY?: string | null; + u?: string | null; + v?: string | null; + w?: string | null; + z?: string | null; + dSq?: string | null; + delta?: string | null; + epsilon?: string | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + id: string; + symbol: string; + name: string; + decimals: number; + address: string; + balance: string; + managedBalance: string; + weight?: string | null; + priceRate: string; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + latestFXPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + address: string; + balance: string; + weight?: string | null; + priceRate: string; + symbol: string; + decimals: number; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + address: string; + balance: string; + weight?: string | null; + priceRate: string; + symbol: string; + decimals: number; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + } | null; + }; + }> | null; + } | null; + }; + }> | null; + } | null; + }; + }> | null; + priceRateProviders?: Array<{ + __typename?: 'PriceRateProvider'; + address: string; + token: { + __typename?: 'PoolToken'; + address: string; + }; + }> | null; + }>; +}; +type AllPoolsQueryVariables = Exact$1<{ + skip?: InputMaybe$1; + first?: InputMaybe$1; + orderBy?: InputMaybe$1; + orderDirection?: InputMaybe$1; + where?: InputMaybe$1; + block?: InputMaybe$1; +}>; +type AllPoolsQuery = { + __typename?: 'Query'; + pool0: Array<{ + __typename?: 'Pool'; + id: string; + address: string; + poolType?: string | null; + poolTypeVersion?: number | null; + factory?: string | null; + strategyType: number; + symbol?: string | null; + name?: string | null; + swapEnabled: boolean; + swapFee: string; + protocolYieldFeeCache?: string | null; + protocolSwapFeeCache?: string | null; + owner?: string | null; + totalWeight?: string | null; + totalSwapVolume: string; + totalSwapFee: string; + totalLiquidity: string; + totalShares: string; + swapsCount: string; + holdersCount: string; + tokensList: Array; + amp?: string | null; + expiryTime?: string | null; + unitSeconds?: string | null; + createTime: number; + principalToken?: string | null; + baseToken?: string | null; + wrappedIndex?: number | null; + mainIndex?: number | null; + lowerTarget?: string | null; + upperTarget?: string | null; + sqrtAlpha?: string | null; + sqrtBeta?: string | null; + root3Alpha?: string | null; + isInRecoveryMode?: boolean | null; + isPaused?: boolean | null; + alpha?: string | null; + beta?: string | null; + c?: string | null; + s?: string | null; + lambda?: string | null; + tauAlphaX?: string | null; + tauAlphaY?: string | null; + tauBetaX?: string | null; + tauBetaY?: string | null; + u?: string | null; + v?: string | null; + w?: string | null; + z?: string | null; + dSq?: string | null; + delta?: string | null; + epsilon?: string | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + id: string; + symbol: string; + name: string; + decimals: number; + address: string; + balance: string; + managedBalance: string; + weight?: string | null; + priceRate: string; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + latestFXPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + address: string; + balance: string; + weight?: string | null; + priceRate: string; + symbol: string; + decimals: number; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + address: string; + balance: string; + weight?: string | null; + priceRate: string; + symbol: string; + decimals: number; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + } | null; + }; + }> | null; + } | null; + }; + }> | null; + } | null; + }; + }> | null; + priceRateProviders?: Array<{ + __typename?: 'PriceRateProvider'; + address: string; + token: { + __typename?: 'PoolToken'; + address: string; + }; + }> | null; + }>; + pool1000: Array<{ + __typename?: 'Pool'; + id: string; + address: string; + poolType?: string | null; + poolTypeVersion?: number | null; + factory?: string | null; + strategyType: number; + symbol?: string | null; + name?: string | null; + swapEnabled: boolean; + swapFee: string; + protocolYieldFeeCache?: string | null; + protocolSwapFeeCache?: string | null; + owner?: string | null; + totalWeight?: string | null; + totalSwapVolume: string; + totalSwapFee: string; + totalLiquidity: string; + totalShares: string; + swapsCount: string; + holdersCount: string; + tokensList: Array; + amp?: string | null; + expiryTime?: string | null; + unitSeconds?: string | null; + createTime: number; + principalToken?: string | null; + baseToken?: string | null; + wrappedIndex?: number | null; + mainIndex?: number | null; + lowerTarget?: string | null; + upperTarget?: string | null; + sqrtAlpha?: string | null; + sqrtBeta?: string | null; + root3Alpha?: string | null; + isInRecoveryMode?: boolean | null; + isPaused?: boolean | null; + alpha?: string | null; + beta?: string | null; + c?: string | null; + s?: string | null; + lambda?: string | null; + tauAlphaX?: string | null; + tauAlphaY?: string | null; + tauBetaX?: string | null; + tauBetaY?: string | null; + u?: string | null; + v?: string | null; + w?: string | null; + z?: string | null; + dSq?: string | null; + delta?: string | null; + epsilon?: string | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + id: string; + symbol: string; + name: string; + decimals: number; + address: string; + balance: string; + managedBalance: string; + weight?: string | null; + priceRate: string; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + latestFXPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + address: string; + balance: string; + weight?: string | null; + priceRate: string; + symbol: string; + decimals: number; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + address: string; + balance: string; + weight?: string | null; + priceRate: string; + symbol: string; + decimals: number; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + } | null; + }; + }> | null; + } | null; + }; + }> | null; + } | null; + }; + }> | null; + priceRateProviders?: Array<{ + __typename?: 'PriceRateProvider'; + address: string; + token: { + __typename?: 'PoolToken'; + address: string; + }; + }> | null; + }>; + pool2000: Array<{ + __typename?: 'Pool'; + id: string; + address: string; + poolType?: string | null; + poolTypeVersion?: number | null; + factory?: string | null; + strategyType: number; + symbol?: string | null; + name?: string | null; + swapEnabled: boolean; + swapFee: string; + protocolYieldFeeCache?: string | null; + protocolSwapFeeCache?: string | null; + owner?: string | null; + totalWeight?: string | null; + totalSwapVolume: string; + totalSwapFee: string; + totalLiquidity: string; + totalShares: string; + swapsCount: string; + holdersCount: string; + tokensList: Array; + amp?: string | null; + expiryTime?: string | null; + unitSeconds?: string | null; + createTime: number; + principalToken?: string | null; + baseToken?: string | null; + wrappedIndex?: number | null; + mainIndex?: number | null; + lowerTarget?: string | null; + upperTarget?: string | null; + sqrtAlpha?: string | null; + sqrtBeta?: string | null; + root3Alpha?: string | null; + isInRecoveryMode?: boolean | null; + isPaused?: boolean | null; + alpha?: string | null; + beta?: string | null; + c?: string | null; + s?: string | null; + lambda?: string | null; + tauAlphaX?: string | null; + tauAlphaY?: string | null; + tauBetaX?: string | null; + tauBetaY?: string | null; + u?: string | null; + v?: string | null; + w?: string | null; + z?: string | null; + dSq?: string | null; + delta?: string | null; + epsilon?: string | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + id: string; + symbol: string; + name: string; + decimals: number; + address: string; + balance: string; + managedBalance: string; + weight?: string | null; + priceRate: string; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + latestFXPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + address: string; + balance: string; + weight?: string | null; + priceRate: string; + symbol: string; + decimals: number; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + address: string; + balance: string; + weight?: string | null; + priceRate: string; + symbol: string; + decimals: number; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + } | null; + }; + }> | null; + } | null; + }; + }> | null; + } | null; + }; + }> | null; + priceRateProviders?: Array<{ + __typename?: 'PriceRateProvider'; + address: string; + token: { + __typename?: 'PoolToken'; + address: string; + }; + }> | null; + }>; +}; +type PoolQueryVariables = Exact$1<{ + id: Scalars$1['ID']; + block?: InputMaybe$1; +}>; +type PoolQuery = { + __typename?: 'Query'; + pool?: { + __typename?: 'Pool'; + id: string; + address: string; + poolType?: string | null; + poolTypeVersion?: number | null; + factory?: string | null; + strategyType: number; + symbol?: string | null; + name?: string | null; + swapEnabled: boolean; + swapFee: string; + protocolYieldFeeCache?: string | null; + protocolSwapFeeCache?: string | null; + owner?: string | null; + totalWeight?: string | null; + totalSwapVolume: string; + totalSwapFee: string; + totalLiquidity: string; + totalShares: string; + swapsCount: string; + holdersCount: string; + tokensList: Array; + amp?: string | null; + expiryTime?: string | null; + unitSeconds?: string | null; + createTime: number; + principalToken?: string | null; + baseToken?: string | null; + wrappedIndex?: number | null; + mainIndex?: number | null; + lowerTarget?: string | null; + upperTarget?: string | null; + sqrtAlpha?: string | null; + sqrtBeta?: string | null; + root3Alpha?: string | null; + isInRecoveryMode?: boolean | null; + isPaused?: boolean | null; + alpha?: string | null; + beta?: string | null; + c?: string | null; + s?: string | null; + lambda?: string | null; + tauAlphaX?: string | null; + tauAlphaY?: string | null; + tauBetaX?: string | null; + tauBetaY?: string | null; + u?: string | null; + v?: string | null; + w?: string | null; + z?: string | null; + dSq?: string | null; + delta?: string | null; + epsilon?: string | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + id: string; + symbol: string; + name: string; + decimals: number; + address: string; + balance: string; + managedBalance: string; + weight?: string | null; + priceRate: string; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + latestFXPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + address: string; + balance: string; + weight?: string | null; + priceRate: string; + symbol: string; + decimals: number; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + tokens?: Array<{ + __typename?: 'PoolToken'; + address: string; + balance: string; + weight?: string | null; + priceRate: string; + symbol: string; + decimals: number; + isExemptFromYieldProtocolFee?: boolean | null; + token: { + __typename?: 'Token'; + latestUSDPrice?: string | null; + pool?: { + __typename?: 'Pool'; + id: string; + totalShares: string; + address: string; + poolType?: string | null; + mainIndex?: number | null; + } | null; + }; + }> | null; + } | null; + }; + }> | null; + } | null; + }; + }> | null; + priceRateProviders?: Array<{ + __typename?: 'PriceRateProvider'; + address: string; + token: { + __typename?: 'PoolToken'; + address: string; + }; + }> | null; + } | null; +}; +type PoolHistoricalLiquiditiesQueryVariables = Exact$1<{ + skip?: InputMaybe$1; + first?: InputMaybe$1; + orderBy?: InputMaybe$1; + orderDirection?: InputMaybe$1; + where?: InputMaybe$1; + block?: InputMaybe$1; +}>; +type PoolHistoricalLiquiditiesQuery = { + __typename?: 'Query'; + poolHistoricalLiquidities: Array<{ + __typename?: 'PoolHistoricalLiquidity'; + id: string; + poolTotalShares: string; + poolLiquidity: string; + poolShareValue: string; + pricingAsset: string; + block: string; + poolId: { + __typename?: 'Pool'; + id: string; + }; + }>; +}; +type PoolSnapshotsQueryVariables = Exact$1<{ + skip?: InputMaybe$1; + first?: InputMaybe$1; + orderBy?: InputMaybe$1; + orderDirection?: InputMaybe$1; + where?: InputMaybe$1; + block?: InputMaybe$1; +}>; +type PoolSnapshotsQuery = { + __typename?: 'Query'; + poolSnapshots: Array<{ + __typename?: 'PoolSnapshot'; + id: string; + totalShares: string; + swapVolume: string; + swapFees: string; + timestamp: number; + pool: { + __typename?: 'Pool'; + id: string; + }; + }>; +}; +type JoinExitsQueryVariables = Exact$1<{ + skip?: InputMaybe$1; + first?: InputMaybe$1; + orderBy?: InputMaybe$1; + orderDirection?: InputMaybe$1; + where?: InputMaybe$1; + block?: InputMaybe$1; +}>; +type JoinExitsQuery = { + __typename?: 'Query'; + joinExits: Array<{ + __typename?: 'JoinExit'; + amounts: Array; + id: string; + sender: string; + timestamp: number; + tx: string; + type: InvestType; + user: { + __typename?: 'User'; + id: string; + }; + pool: { + __typename?: 'Pool'; + id: string; + tokensList: Array; + }; + }>; +}; +type SubgraphJoinExitFragment = { + __typename?: 'JoinExit'; + amounts: Array; + id: string; + sender: string; + timestamp: number; + tx: string; + type: InvestType; + user: { + __typename?: 'User'; + id: string; + }; + pool: { + __typename?: 'Pool'; + id: string; + tokensList: Array; + }; +}; +type BalancersQueryVariables = Exact$1<{ + skip?: InputMaybe$1; + first?: InputMaybe$1; + orderBy?: InputMaybe$1; + orderDirection?: InputMaybe$1; + where?: InputMaybe$1; + block?: InputMaybe$1; +}>; +type BalancersQuery = { + __typename?: 'Query'; + balancers: Array<{ + __typename?: 'Balancer'; + id: string; + totalLiquidity: string; + totalSwapVolume: string; + totalSwapFee: string; + totalSwapCount: string; + poolCount: number; + }>; +}; +type TokenPricesQueryVariables = Exact$1<{ + skip?: InputMaybe$1; + first?: InputMaybe$1; + orderBy?: InputMaybe$1; + orderDirection?: InputMaybe$1; + where?: InputMaybe$1; + block?: InputMaybe$1; +}>; +type TokenPricesQuery = { + __typename?: 'Query'; + tokenPrices: Array<{ + __typename?: 'TokenPrice'; + id: string; + asset: string; + amount: string; + pricingAsset: string; + price: string; + block: string; + timestamp: number; + poolId: { + __typename?: 'Pool'; + id: string; + }; + }>; +}; +type TokenLatestPricesQueryVariables = Exact$1<{ + skip?: InputMaybe$1; + first?: InputMaybe$1; + orderBy?: InputMaybe$1; + orderDirection?: InputMaybe$1; + where?: InputMaybe$1; + block?: InputMaybe$1; +}>; +type TokenLatestPricesQuery = { + __typename?: 'Query'; + latestPrices: Array<{ + __typename?: 'LatestPrice'; + id: string; + asset: string; + price: string; + pricingAsset: string; + poolId: { + __typename?: 'Pool'; + id: string; + }; + }>; +}; +type TokenLatestPriceQueryVariables = Exact$1<{ + id: Scalars$1['ID']; +}>; +type TokenLatestPriceQuery = { + __typename?: 'Query'; + latestPrice?: { + __typename?: 'LatestPrice'; + id: string; + asset: string; + price: string; + pricingAsset: string; + poolId: { + __typename?: 'Pool'; + id: string; + }; + } | null; +}; +type UserQueryVariables = Exact$1<{ + id: Scalars$1['ID']; + block?: InputMaybe$1; +}>; +type UserQuery = { + __typename?: 'Query'; + user?: { + __typename?: 'User'; + id: string; + sharesOwned?: Array<{ + __typename?: 'PoolShare'; + balance: string; + poolId: { + __typename?: 'Pool'; + id: string; + }; + }> | null; + } | null; +}; +type UsersQueryVariables = Exact$1<{ + skip?: InputMaybe$1; + first?: InputMaybe$1; + orderBy?: InputMaybe$1; + orderDirection?: InputMaybe$1; + where?: InputMaybe$1; + block?: InputMaybe$1; +}>; +type UsersQuery = { + __typename?: 'Query'; + users: Array<{ + __typename?: 'User'; + id: string; + sharesOwned?: Array<{ + __typename?: 'PoolShare'; + balance: string; + poolId: { + __typename?: 'Pool'; + id: string; + }; + }> | null; + }>; +}; +type SdkFunctionWrapper$1 = (action: (requestHeaders?: Record) => Promise, operationName: string, operationType?: string) => Promise; +declare function getSdk$1(client: GraphQLClient, withWrapper?: SdkFunctionWrapper$1): { + PoolShare(variables: PoolShareQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + PoolShares(variables?: PoolSharesQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + Pools(variables?: PoolsQueryVariables$1, requestHeaders?: Dom.RequestInit["headers"]): Promise; + AllPools(variables?: AllPoolsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + Pool(variables: PoolQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + PoolHistoricalLiquidities(variables?: PoolHistoricalLiquiditiesQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + PoolSnapshots(variables?: PoolSnapshotsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + JoinExits(variables?: JoinExitsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + Balancers(variables?: BalancersQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + TokenPrices(variables?: TokenPricesQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + TokenLatestPrices(variables?: TokenLatestPricesQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + TokenLatestPrice(variables: TokenLatestPriceQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + User(variables: UserQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + Users(variables?: UsersQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; +}; +type Sdk$1 = ReturnType; + +type Maybe = T | null; +type InputMaybe = Maybe; +type Exact = { + [K in keyof T]: T[K]; +}; +/** All built-in and custom scalars, mapped to their actual values */ +type Scalars = { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + BigDecimal: string; + BigInt: string; + Bytes: string; + Int8: any; +}; +type BlockChangedFilter = { + number_gte: Scalars['Int']; +}; +type Block_Height = { + hash?: InputMaybe; + number?: InputMaybe; + number_gte?: InputMaybe; +}; +declare enum Chain { + Arbitrum = "Arbitrum", + Avalanche = "Avalanche", + Base = "Base", + Gnosis = "Gnosis", + Optimism = "Optimism", + Polygon = "Polygon", + PolygonZkEvm = "PolygonZkEvm" +} +type Gauge = { + __typename?: 'Gauge'; + /** Timestamp at which Balancer DAO added the gauge to GaugeController [seconds] */ + addedTimestamp: Scalars['Int']; + /** Address of the gauge */ + address: Scalars['Bytes']; + /** Equal to: - */ + id: Scalars['ID']; + /** Reference to LiquidityGauge */ + liquidityGauge?: Maybe; + /** Reference to RootGauge */ + rootGauge?: Maybe; + /** Type of the gauge */ + type: GaugeType; +}; +type GaugeFactory = { + __typename?: 'GaugeFactory'; + /** List of gauges created through the factory */ + gauges?: Maybe>; + /** Factory contract address */ + id: Scalars['ID']; + /** Number of gauges created through the factory */ + numGauges: Scalars['Int']; +}; +type GaugeFactory_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + gauges_?: InputMaybe; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + numGauges?: InputMaybe; + numGauges_gt?: InputMaybe; + numGauges_gte?: InputMaybe; + numGauges_in?: InputMaybe>; + numGauges_lt?: InputMaybe; + numGauges_lte?: InputMaybe; + numGauges_not?: InputMaybe; + numGauges_not_in?: InputMaybe>; + or?: InputMaybe>>; +}; +type GaugeShare$1 = { + __typename?: 'GaugeShare'; + /** User's balance of gauge deposit tokens */ + balance: Scalars['BigDecimal']; + /** Reference to LiquidityGauge entity */ + gauge: LiquidityGauge$1; + /** Equal to: - */ + id: Scalars['ID']; + /** Reference to User entity */ + user: User; +}; +type GaugeShare_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + balance?: InputMaybe; + balance_gt?: InputMaybe; + balance_gte?: InputMaybe; + balance_in?: InputMaybe>; + balance_lt?: InputMaybe; + balance_lte?: InputMaybe; + balance_not?: InputMaybe; + balance_not_in?: InputMaybe>; + gauge?: InputMaybe; + gauge_?: InputMaybe; + gauge_contains?: InputMaybe; + gauge_contains_nocase?: InputMaybe; + gauge_ends_with?: InputMaybe; + gauge_ends_with_nocase?: InputMaybe; + gauge_gt?: InputMaybe; + gauge_gte?: InputMaybe; + gauge_in?: InputMaybe>; + gauge_lt?: InputMaybe; + gauge_lte?: InputMaybe; + gauge_not?: InputMaybe; + gauge_not_contains?: InputMaybe; + gauge_not_contains_nocase?: InputMaybe; + gauge_not_ends_with?: InputMaybe; + gauge_not_ends_with_nocase?: InputMaybe; + gauge_not_in?: InputMaybe>; + gauge_not_starts_with?: InputMaybe; + gauge_not_starts_with_nocase?: InputMaybe; + gauge_starts_with?: InputMaybe; + gauge_starts_with_nocase?: InputMaybe; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + or?: InputMaybe>>; + user?: InputMaybe; + user_?: InputMaybe; + user_contains?: InputMaybe; + user_contains_nocase?: InputMaybe; + user_ends_with?: InputMaybe; + user_ends_with_nocase?: InputMaybe; + user_gt?: InputMaybe; + user_gte?: InputMaybe; + user_in?: InputMaybe>; + user_lt?: InputMaybe; + user_lte?: InputMaybe; + user_not?: InputMaybe; + user_not_contains?: InputMaybe; + user_not_contains_nocase?: InputMaybe; + user_not_ends_with?: InputMaybe; + user_not_ends_with_nocase?: InputMaybe; + user_not_in?: InputMaybe>; + user_not_starts_with?: InputMaybe; + user_not_starts_with_nocase?: InputMaybe; + user_starts_with?: InputMaybe; + user_starts_with_nocase?: InputMaybe; +}; +declare enum GaugeShare_OrderBy { + balance = "balance", + gauge = "gauge", + gauge__id = "gauge__id", + gauge__isKilled = "gauge__isKilled", + gauge__isPreferentialGauge = "gauge__isPreferentialGauge", + gauge__poolAddress = "gauge__poolAddress", + gauge__poolId = "gauge__poolId", + gauge__relativeWeightCap = "gauge__relativeWeightCap", + gauge__streamer = "gauge__streamer", + gauge__symbol = "gauge__symbol", + gauge__totalSupply = "gauge__totalSupply", + id = "id", + user = "user", + user__id = "user__id" +} +type GaugeType = { + __typename?: 'GaugeType'; + /** Type ID */ + id: Scalars['ID']; + /** Name of the type - empty string if call reverts */ + name: Scalars['String']; +}; +type GaugeType_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + name?: InputMaybe; + name_contains?: InputMaybe; + name_contains_nocase?: InputMaybe; + name_ends_with?: InputMaybe; + name_ends_with_nocase?: InputMaybe; + name_gt?: InputMaybe; + name_gte?: InputMaybe; + name_in?: InputMaybe>; + name_lt?: InputMaybe; + name_lte?: InputMaybe; + name_not?: InputMaybe; + name_not_contains?: InputMaybe; + name_not_contains_nocase?: InputMaybe; + name_not_ends_with?: InputMaybe; + name_not_ends_with_nocase?: InputMaybe; + name_not_in?: InputMaybe>; + name_not_starts_with?: InputMaybe; + name_not_starts_with_nocase?: InputMaybe; + name_starts_with?: InputMaybe; + name_starts_with_nocase?: InputMaybe; + or?: InputMaybe>>; +}; +type GaugeVote = { + __typename?: 'GaugeVote'; + /** Reference to Gauge entity */ + gauge: Gauge; + /** Equal to: - */ + id: Scalars['ID']; + /** Timestamp at which user voted [seconds] */ + timestamp?: Maybe; + /** Reference to User entity */ + user: User; + /** Weight of veBAL power user has used to vote */ + weight?: Maybe; +}; +type GaugeVote_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + gauge?: InputMaybe; + gauge_?: InputMaybe; + gauge_contains?: InputMaybe; + gauge_contains_nocase?: InputMaybe; + gauge_ends_with?: InputMaybe; + gauge_ends_with_nocase?: InputMaybe; + gauge_gt?: InputMaybe; + gauge_gte?: InputMaybe; + gauge_in?: InputMaybe>; + gauge_lt?: InputMaybe; + gauge_lte?: InputMaybe; + gauge_not?: InputMaybe; + gauge_not_contains?: InputMaybe; + gauge_not_contains_nocase?: InputMaybe; + gauge_not_ends_with?: InputMaybe; + gauge_not_ends_with_nocase?: InputMaybe; + gauge_not_in?: InputMaybe>; + gauge_not_starts_with?: InputMaybe; + gauge_not_starts_with_nocase?: InputMaybe; + gauge_starts_with?: InputMaybe; + gauge_starts_with_nocase?: InputMaybe; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + or?: InputMaybe>>; + timestamp?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_lt?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_not_in?: InputMaybe>; + user?: InputMaybe; + user_?: InputMaybe; + user_contains?: InputMaybe; + user_contains_nocase?: InputMaybe; + user_ends_with?: InputMaybe; + user_ends_with_nocase?: InputMaybe; + user_gt?: InputMaybe; + user_gte?: InputMaybe; + user_in?: InputMaybe>; + user_lt?: InputMaybe; + user_lte?: InputMaybe; + user_not?: InputMaybe; + user_not_contains?: InputMaybe; + user_not_contains_nocase?: InputMaybe; + user_not_ends_with?: InputMaybe; + user_not_ends_with_nocase?: InputMaybe; + user_not_in?: InputMaybe>; + user_not_starts_with?: InputMaybe; + user_not_starts_with_nocase?: InputMaybe; + user_starts_with?: InputMaybe; + user_starts_with_nocase?: InputMaybe; + weight?: InputMaybe; + weight_gt?: InputMaybe; + weight_gte?: InputMaybe; + weight_in?: InputMaybe>; + weight_lt?: InputMaybe; + weight_lte?: InputMaybe; + weight_not?: InputMaybe; + weight_not_in?: InputMaybe>; +}; +type Gauge_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + addedTimestamp?: InputMaybe; + addedTimestamp_gt?: InputMaybe; + addedTimestamp_gte?: InputMaybe; + addedTimestamp_in?: InputMaybe>; + addedTimestamp_lt?: InputMaybe; + addedTimestamp_lte?: InputMaybe; + addedTimestamp_not?: InputMaybe; + addedTimestamp_not_in?: InputMaybe>; + address?: InputMaybe; + address_contains?: InputMaybe; + address_gt?: InputMaybe; + address_gte?: InputMaybe; + address_in?: InputMaybe>; + address_lt?: InputMaybe; + address_lte?: InputMaybe; + address_not?: InputMaybe; + address_not_contains?: InputMaybe; + address_not_in?: InputMaybe>; + and?: InputMaybe>>; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + liquidityGauge?: InputMaybe; + liquidityGauge_?: InputMaybe; + liquidityGauge_contains?: InputMaybe; + liquidityGauge_contains_nocase?: InputMaybe; + liquidityGauge_ends_with?: InputMaybe; + liquidityGauge_ends_with_nocase?: InputMaybe; + liquidityGauge_gt?: InputMaybe; + liquidityGauge_gte?: InputMaybe; + liquidityGauge_in?: InputMaybe>; + liquidityGauge_lt?: InputMaybe; + liquidityGauge_lte?: InputMaybe; + liquidityGauge_not?: InputMaybe; + liquidityGauge_not_contains?: InputMaybe; + liquidityGauge_not_contains_nocase?: InputMaybe; + liquidityGauge_not_ends_with?: InputMaybe; + liquidityGauge_not_ends_with_nocase?: InputMaybe; + liquidityGauge_not_in?: InputMaybe>; + liquidityGauge_not_starts_with?: InputMaybe; + liquidityGauge_not_starts_with_nocase?: InputMaybe; + liquidityGauge_starts_with?: InputMaybe; + liquidityGauge_starts_with_nocase?: InputMaybe; + or?: InputMaybe>>; + rootGauge?: InputMaybe; + rootGauge_?: InputMaybe; + rootGauge_contains?: InputMaybe; + rootGauge_contains_nocase?: InputMaybe; + rootGauge_ends_with?: InputMaybe; + rootGauge_ends_with_nocase?: InputMaybe; + rootGauge_gt?: InputMaybe; + rootGauge_gte?: InputMaybe; + rootGauge_in?: InputMaybe>; + rootGauge_lt?: InputMaybe; + rootGauge_lte?: InputMaybe; + rootGauge_not?: InputMaybe; + rootGauge_not_contains?: InputMaybe; + rootGauge_not_contains_nocase?: InputMaybe; + rootGauge_not_ends_with?: InputMaybe; + rootGauge_not_ends_with_nocase?: InputMaybe; + rootGauge_not_in?: InputMaybe>; + rootGauge_not_starts_with?: InputMaybe; + rootGauge_not_starts_with_nocase?: InputMaybe; + rootGauge_starts_with?: InputMaybe; + rootGauge_starts_with_nocase?: InputMaybe; + type?: InputMaybe; + type_?: InputMaybe; + type_contains?: InputMaybe; + type_contains_nocase?: InputMaybe; + type_ends_with?: InputMaybe; + type_ends_with_nocase?: InputMaybe; + type_gt?: InputMaybe; + type_gte?: InputMaybe; + type_in?: InputMaybe>; + type_lt?: InputMaybe; + type_lte?: InputMaybe; + type_not?: InputMaybe; + type_not_contains?: InputMaybe; + type_not_contains_nocase?: InputMaybe; + type_not_ends_with?: InputMaybe; + type_not_ends_with_nocase?: InputMaybe; + type_not_in?: InputMaybe>; + type_not_starts_with?: InputMaybe; + type_not_starts_with_nocase?: InputMaybe; + type_starts_with?: InputMaybe; + type_starts_with_nocase?: InputMaybe; +}; +type LiquidityGauge$1 = { + __typename?: 'LiquidityGauge'; + /** Factory contract address */ + factory: GaugeFactory; + /** Reference to Gauge entity - created when LiquidityGauge is added to GaugeController */ + gauge?: Maybe; + /** LiquidityGauge contract address */ + id: Scalars['ID']; + /** Whether Balancer DAO killed the gauge */ + isKilled: Scalars['Boolean']; + /** Whether the LiquidityGauge is the most recent added to GaugeController */ + isPreferentialGauge: Scalars['Boolean']; + /** Reference to Pool entity */ + pool?: Maybe; + /** Address of the pool (lp_token of the gauge) */ + poolAddress: Scalars['Bytes']; + /** Pool ID if lp_token is a Balancer pool; null otherwise */ + poolId?: Maybe; + /** Relative weight cap of the gauge (0.01 = 1%) - V2 factories only */ + relativeWeightCap?: Maybe; + /** List of reward tokens depositted in the gauge - ChildChainLiquidityGauge only */ + rewardTokensList?: Maybe>; + /** List of user shares */ + shares?: Maybe>; + /** Address of the contract that streams reward tokens to the gauge - ChildChainLiquidityGauge only */ + streamer?: Maybe; + /** ERC20 token symbol */ + symbol: Scalars['String']; + /** List of reward tokens depositted in the gauge */ + tokens?: Maybe>; + /** Total of BPTs users have staked in the LiquidityGauge */ + totalSupply: Scalars['BigDecimal']; +}; +type LiquidityGauge_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + factory?: InputMaybe; + factory_?: InputMaybe; + factory_contains?: InputMaybe; + factory_contains_nocase?: InputMaybe; + factory_ends_with?: InputMaybe; + factory_ends_with_nocase?: InputMaybe; + factory_gt?: InputMaybe; + factory_gte?: InputMaybe; + factory_in?: InputMaybe>; + factory_lt?: InputMaybe; + factory_lte?: InputMaybe; + factory_not?: InputMaybe; + factory_not_contains?: InputMaybe; + factory_not_contains_nocase?: InputMaybe; + factory_not_ends_with?: InputMaybe; + factory_not_ends_with_nocase?: InputMaybe; + factory_not_in?: InputMaybe>; + factory_not_starts_with?: InputMaybe; + factory_not_starts_with_nocase?: InputMaybe; + factory_starts_with?: InputMaybe; + factory_starts_with_nocase?: InputMaybe; + gauge?: InputMaybe; + gauge_?: InputMaybe; + gauge_contains?: InputMaybe; + gauge_contains_nocase?: InputMaybe; + gauge_ends_with?: InputMaybe; + gauge_ends_with_nocase?: InputMaybe; + gauge_gt?: InputMaybe; + gauge_gte?: InputMaybe; + gauge_in?: InputMaybe>; + gauge_lt?: InputMaybe; + gauge_lte?: InputMaybe; + gauge_not?: InputMaybe; + gauge_not_contains?: InputMaybe; + gauge_not_contains_nocase?: InputMaybe; + gauge_not_ends_with?: InputMaybe; + gauge_not_ends_with_nocase?: InputMaybe; + gauge_not_in?: InputMaybe>; + gauge_not_starts_with?: InputMaybe; + gauge_not_starts_with_nocase?: InputMaybe; + gauge_starts_with?: InputMaybe; + gauge_starts_with_nocase?: InputMaybe; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + isKilled?: InputMaybe; + isKilled_in?: InputMaybe>; + isKilled_not?: InputMaybe; + isKilled_not_in?: InputMaybe>; + isPreferentialGauge?: InputMaybe; + isPreferentialGauge_in?: InputMaybe>; + isPreferentialGauge_not?: InputMaybe; + isPreferentialGauge_not_in?: InputMaybe>; + or?: InputMaybe>>; + pool?: InputMaybe; + poolAddress?: InputMaybe; + poolAddress_contains?: InputMaybe; + poolAddress_gt?: InputMaybe; + poolAddress_gte?: InputMaybe; + poolAddress_in?: InputMaybe>; + poolAddress_lt?: InputMaybe; + poolAddress_lte?: InputMaybe; + poolAddress_not?: InputMaybe; + poolAddress_not_contains?: InputMaybe; + poolAddress_not_in?: InputMaybe>; + poolId?: InputMaybe; + poolId_contains?: InputMaybe; + poolId_gt?: InputMaybe; + poolId_gte?: InputMaybe; + poolId_in?: InputMaybe>; + poolId_lt?: InputMaybe; + poolId_lte?: InputMaybe; + poolId_not?: InputMaybe; + poolId_not_contains?: InputMaybe; + poolId_not_in?: InputMaybe>; + pool_?: InputMaybe; + pool_contains?: InputMaybe; + pool_contains_nocase?: InputMaybe; + pool_ends_with?: InputMaybe; + pool_ends_with_nocase?: InputMaybe; + pool_gt?: InputMaybe; + pool_gte?: InputMaybe; + pool_in?: InputMaybe>; + pool_lt?: InputMaybe; + pool_lte?: InputMaybe; + pool_not?: InputMaybe; + pool_not_contains?: InputMaybe; + pool_not_contains_nocase?: InputMaybe; + pool_not_ends_with?: InputMaybe; + pool_not_ends_with_nocase?: InputMaybe; + pool_not_in?: InputMaybe>; + pool_not_starts_with?: InputMaybe; + pool_not_starts_with_nocase?: InputMaybe; + pool_starts_with?: InputMaybe; + pool_starts_with_nocase?: InputMaybe; + relativeWeightCap?: InputMaybe; + relativeWeightCap_gt?: InputMaybe; + relativeWeightCap_gte?: InputMaybe; + relativeWeightCap_in?: InputMaybe>; + relativeWeightCap_lt?: InputMaybe; + relativeWeightCap_lte?: InputMaybe; + relativeWeightCap_not?: InputMaybe; + relativeWeightCap_not_in?: InputMaybe>; + rewardTokensList?: InputMaybe>; + rewardTokensList_contains?: InputMaybe>; + rewardTokensList_contains_nocase?: InputMaybe>; + rewardTokensList_not?: InputMaybe>; + rewardTokensList_not_contains?: InputMaybe>; + rewardTokensList_not_contains_nocase?: InputMaybe>; + shares_?: InputMaybe; + streamer?: InputMaybe; + streamer_contains?: InputMaybe; + streamer_gt?: InputMaybe; + streamer_gte?: InputMaybe; + streamer_in?: InputMaybe>; + streamer_lt?: InputMaybe; + streamer_lte?: InputMaybe; + streamer_not?: InputMaybe; + streamer_not_contains?: InputMaybe; + streamer_not_in?: InputMaybe>; + symbol?: InputMaybe; + symbol_contains?: InputMaybe; + symbol_contains_nocase?: InputMaybe; + symbol_ends_with?: InputMaybe; + symbol_ends_with_nocase?: InputMaybe; + symbol_gt?: InputMaybe; + symbol_gte?: InputMaybe; + symbol_in?: InputMaybe>; + symbol_lt?: InputMaybe; + symbol_lte?: InputMaybe; + symbol_not?: InputMaybe; + symbol_not_contains?: InputMaybe; + symbol_not_contains_nocase?: InputMaybe; + symbol_not_ends_with?: InputMaybe; + symbol_not_ends_with_nocase?: InputMaybe; + symbol_not_in?: InputMaybe>; + symbol_not_starts_with?: InputMaybe; + symbol_not_starts_with_nocase?: InputMaybe; + symbol_starts_with?: InputMaybe; + symbol_starts_with_nocase?: InputMaybe; + tokens_?: InputMaybe; + totalSupply?: InputMaybe; + totalSupply_gt?: InputMaybe; + totalSupply_gte?: InputMaybe; + totalSupply_in?: InputMaybe>; + totalSupply_lt?: InputMaybe; + totalSupply_lte?: InputMaybe; + totalSupply_not?: InputMaybe; + totalSupply_not_in?: InputMaybe>; +}; +declare enum LiquidityGauge_OrderBy { + factory = "factory", + factory__id = "factory__id", + factory__numGauges = "factory__numGauges", + gauge = "gauge", + gauge__addedTimestamp = "gauge__addedTimestamp", + gauge__address = "gauge__address", + gauge__id = "gauge__id", + id = "id", + isKilled = "isKilled", + isPreferentialGauge = "isPreferentialGauge", + pool = "pool", + poolAddress = "poolAddress", + poolId = "poolId", + pool__address = "pool__address", + pool__id = "pool__id", + pool__poolId = "pool__poolId", + relativeWeightCap = "relativeWeightCap", + rewardTokensList = "rewardTokensList", + shares = "shares", + streamer = "streamer", + symbol = "symbol", + tokens = "tokens", + totalSupply = "totalSupply" +} +type OmniVotingEscrowLock = { + __typename?: 'OmniVotingEscrowLock'; + /** veBAL balance at the moment user locks */ + bias: Scalars['BigDecimal']; + /** Chain where the lock was bridged to */ + dstChainId: Scalars['Int']; + /** Equal to: - */ + id: Scalars['ID']; + /** User on the local chain (reference to User entity) */ + localUser: User; + /** User address on the remote chain */ + remoteUser: Scalars['Bytes']; + /** veBAL decay rate (per second) */ + slope: Scalars['BigDecimal']; + /** Timestamp the lock was created [seconds] */ + timestamp: Scalars['Int']; + /** Reference to VotingEscrow entity */ + votingEscrowID: VotingEscrow; +}; +type OmniVotingEscrowLock_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + bias?: InputMaybe; + bias_gt?: InputMaybe; + bias_gte?: InputMaybe; + bias_in?: InputMaybe>; + bias_lt?: InputMaybe; + bias_lte?: InputMaybe; + bias_not?: InputMaybe; + bias_not_in?: InputMaybe>; + dstChainId?: InputMaybe; + dstChainId_gt?: InputMaybe; + dstChainId_gte?: InputMaybe; + dstChainId_in?: InputMaybe>; + dstChainId_lt?: InputMaybe; + dstChainId_lte?: InputMaybe; + dstChainId_not?: InputMaybe; + dstChainId_not_in?: InputMaybe>; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + localUser?: InputMaybe; + localUser_?: InputMaybe; + localUser_contains?: InputMaybe; + localUser_contains_nocase?: InputMaybe; + localUser_ends_with?: InputMaybe; + localUser_ends_with_nocase?: InputMaybe; + localUser_gt?: InputMaybe; + localUser_gte?: InputMaybe; + localUser_in?: InputMaybe>; + localUser_lt?: InputMaybe; + localUser_lte?: InputMaybe; + localUser_not?: InputMaybe; + localUser_not_contains?: InputMaybe; + localUser_not_contains_nocase?: InputMaybe; + localUser_not_ends_with?: InputMaybe; + localUser_not_ends_with_nocase?: InputMaybe; + localUser_not_in?: InputMaybe>; + localUser_not_starts_with?: InputMaybe; + localUser_not_starts_with_nocase?: InputMaybe; + localUser_starts_with?: InputMaybe; + localUser_starts_with_nocase?: InputMaybe; + or?: InputMaybe>>; + remoteUser?: InputMaybe; + remoteUser_contains?: InputMaybe; + remoteUser_gt?: InputMaybe; + remoteUser_gte?: InputMaybe; + remoteUser_in?: InputMaybe>; + remoteUser_lt?: InputMaybe; + remoteUser_lte?: InputMaybe; + remoteUser_not?: InputMaybe; + remoteUser_not_contains?: InputMaybe; + remoteUser_not_in?: InputMaybe>; + slope?: InputMaybe; + slope_gt?: InputMaybe; + slope_gte?: InputMaybe; + slope_in?: InputMaybe>; + slope_lt?: InputMaybe; + slope_lte?: InputMaybe; + slope_not?: InputMaybe; + slope_not_in?: InputMaybe>; + timestamp?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_lt?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_not_in?: InputMaybe>; + votingEscrowID?: InputMaybe; + votingEscrowID_?: InputMaybe; + votingEscrowID_contains?: InputMaybe; + votingEscrowID_contains_nocase?: InputMaybe; + votingEscrowID_ends_with?: InputMaybe; + votingEscrowID_ends_with_nocase?: InputMaybe; + votingEscrowID_gt?: InputMaybe; + votingEscrowID_gte?: InputMaybe; + votingEscrowID_in?: InputMaybe>; + votingEscrowID_lt?: InputMaybe; + votingEscrowID_lte?: InputMaybe; + votingEscrowID_not?: InputMaybe; + votingEscrowID_not_contains?: InputMaybe; + votingEscrowID_not_contains_nocase?: InputMaybe; + votingEscrowID_not_ends_with?: InputMaybe; + votingEscrowID_not_ends_with_nocase?: InputMaybe; + votingEscrowID_not_in?: InputMaybe>; + votingEscrowID_not_starts_with?: InputMaybe; + votingEscrowID_not_starts_with_nocase?: InputMaybe; + votingEscrowID_starts_with?: InputMaybe; + votingEscrowID_starts_with_nocase?: InputMaybe; +}; +/** Defines the order direction, either ascending or descending */ +declare enum OrderDirection { + asc = "asc", + desc = "desc" +} +type Pool$2 = { + __typename?: 'Pool'; + /** Address of the pool (lp_token of the gauge) */ + address: Scalars['Bytes']; + /** List of gauges created for the pool */ + gauges?: Maybe>; + /** List of the pool's gauges addresses */ + gaugesList: Array; + /** Address of the pool (lp_token of the gauge) */ + id: Scalars['ID']; + /** Pool ID if lp_token is a Balancer pool; null otherwise */ + poolId?: Maybe; + /** Most recent, unkilled gauge in the GaugeController */ + preferentialGauge?: Maybe; +}; +type Pool_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + address?: InputMaybe; + address_contains?: InputMaybe; + address_gt?: InputMaybe; + address_gte?: InputMaybe; + address_in?: InputMaybe>; + address_lt?: InputMaybe; + address_lte?: InputMaybe; + address_not?: InputMaybe; + address_not_contains?: InputMaybe; + address_not_in?: InputMaybe>; + and?: InputMaybe>>; + gaugesList?: InputMaybe>; + gaugesList_contains?: InputMaybe>; + gaugesList_contains_nocase?: InputMaybe>; + gaugesList_not?: InputMaybe>; + gaugesList_not_contains?: InputMaybe>; + gaugesList_not_contains_nocase?: InputMaybe>; + gauges_?: InputMaybe; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + or?: InputMaybe>>; + poolId?: InputMaybe; + poolId_contains?: InputMaybe; + poolId_gt?: InputMaybe; + poolId_gte?: InputMaybe; + poolId_in?: InputMaybe>; + poolId_lt?: InputMaybe; + poolId_lte?: InputMaybe; + poolId_not?: InputMaybe; + poolId_not_contains?: InputMaybe; + poolId_not_in?: InputMaybe>; + preferentialGauge?: InputMaybe; + preferentialGauge_?: InputMaybe; + preferentialGauge_contains?: InputMaybe; + preferentialGauge_contains_nocase?: InputMaybe; + preferentialGauge_ends_with?: InputMaybe; + preferentialGauge_ends_with_nocase?: InputMaybe; + preferentialGauge_gt?: InputMaybe; + preferentialGauge_gte?: InputMaybe; + preferentialGauge_in?: InputMaybe>; + preferentialGauge_lt?: InputMaybe; + preferentialGauge_lte?: InputMaybe; + preferentialGauge_not?: InputMaybe; + preferentialGauge_not_contains?: InputMaybe; + preferentialGauge_not_contains_nocase?: InputMaybe; + preferentialGauge_not_ends_with?: InputMaybe; + preferentialGauge_not_ends_with_nocase?: InputMaybe; + preferentialGauge_not_in?: InputMaybe>; + preferentialGauge_not_starts_with?: InputMaybe; + preferentialGauge_not_starts_with_nocase?: InputMaybe; + preferentialGauge_starts_with?: InputMaybe; + preferentialGauge_starts_with_nocase?: InputMaybe; +}; +declare enum Pool_OrderBy { + address = "address", + gauges = "gauges", + gaugesList = "gaugesList", + id = "id", + poolId = "poolId", + preferentialGauge = "preferentialGauge", + preferentialGauge__id = "preferentialGauge__id", + preferentialGauge__isKilled = "preferentialGauge__isKilled", + preferentialGauge__isPreferentialGauge = "preferentialGauge__isPreferentialGauge", + preferentialGauge__poolAddress = "preferentialGauge__poolAddress", + preferentialGauge__poolId = "preferentialGauge__poolId", + preferentialGauge__relativeWeightCap = "preferentialGauge__relativeWeightCap", + preferentialGauge__streamer = "preferentialGauge__streamer", + preferentialGauge__symbol = "preferentialGauge__symbol", + preferentialGauge__totalSupply = "preferentialGauge__totalSupply" +} +type RewardToken = { + __typename?: 'RewardToken'; + /** ERC20 token decimals - zero if call to decimals() reverts */ + decimals: Scalars['Int']; + /** Reference to LiquidityGauge entity */ + gauge: LiquidityGauge$1; + /** Equal to: - */ + id: Scalars['ID']; + /** Timestamp at which finishes the period of rewards */ + periodFinish?: Maybe; + /** Rate of reward tokens streamed per second */ + rate?: Maybe; + /** ERC20 token symbol - empty string if call to symbol() reverts */ + symbol: Scalars['String']; + /** Amount of reward tokens that has been deposited into the gauge */ + totalDeposited: Scalars['BigDecimal']; +}; +type RewardToken_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + decimals?: InputMaybe; + decimals_gt?: InputMaybe; + decimals_gte?: InputMaybe; + decimals_in?: InputMaybe>; + decimals_lt?: InputMaybe; + decimals_lte?: InputMaybe; + decimals_not?: InputMaybe; + decimals_not_in?: InputMaybe>; + gauge?: InputMaybe; + gauge_?: InputMaybe; + gauge_contains?: InputMaybe; + gauge_contains_nocase?: InputMaybe; + gauge_ends_with?: InputMaybe; + gauge_ends_with_nocase?: InputMaybe; + gauge_gt?: InputMaybe; + gauge_gte?: InputMaybe; + gauge_in?: InputMaybe>; + gauge_lt?: InputMaybe; + gauge_lte?: InputMaybe; + gauge_not?: InputMaybe; + gauge_not_contains?: InputMaybe; + gauge_not_contains_nocase?: InputMaybe; + gauge_not_ends_with?: InputMaybe; + gauge_not_ends_with_nocase?: InputMaybe; + gauge_not_in?: InputMaybe>; + gauge_not_starts_with?: InputMaybe; + gauge_not_starts_with_nocase?: InputMaybe; + gauge_starts_with?: InputMaybe; + gauge_starts_with_nocase?: InputMaybe; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + or?: InputMaybe>>; + periodFinish?: InputMaybe; + periodFinish_gt?: InputMaybe; + periodFinish_gte?: InputMaybe; + periodFinish_in?: InputMaybe>; + periodFinish_lt?: InputMaybe; + periodFinish_lte?: InputMaybe; + periodFinish_not?: InputMaybe; + periodFinish_not_in?: InputMaybe>; + rate?: InputMaybe; + rate_gt?: InputMaybe; + rate_gte?: InputMaybe; + rate_in?: InputMaybe>; + rate_lt?: InputMaybe; + rate_lte?: InputMaybe; + rate_not?: InputMaybe; + rate_not_in?: InputMaybe>; + symbol?: InputMaybe; + symbol_contains?: InputMaybe; + symbol_contains_nocase?: InputMaybe; + symbol_ends_with?: InputMaybe; + symbol_ends_with_nocase?: InputMaybe; + symbol_gt?: InputMaybe; + symbol_gte?: InputMaybe; + symbol_in?: InputMaybe>; + symbol_lt?: InputMaybe; + symbol_lte?: InputMaybe; + symbol_not?: InputMaybe; + symbol_not_contains?: InputMaybe; + symbol_not_contains_nocase?: InputMaybe; + symbol_not_ends_with?: InputMaybe; + symbol_not_ends_with_nocase?: InputMaybe; + symbol_not_in?: InputMaybe>; + symbol_not_starts_with?: InputMaybe; + symbol_not_starts_with_nocase?: InputMaybe; + symbol_starts_with?: InputMaybe; + symbol_starts_with_nocase?: InputMaybe; + totalDeposited?: InputMaybe; + totalDeposited_gt?: InputMaybe; + totalDeposited_gte?: InputMaybe; + totalDeposited_in?: InputMaybe>; + totalDeposited_lt?: InputMaybe; + totalDeposited_lte?: InputMaybe; + totalDeposited_not?: InputMaybe; + totalDeposited_not_in?: InputMaybe>; +}; +type RootGauge = { + __typename?: 'RootGauge'; + /** Chain where emissions by this gauge will be bridged to */ + chain: Chain; + /** Factory contract address */ + factory: GaugeFactory; + /** Reference to Gauge entity - created when LiquidityGauge is added to GaugeController */ + gauge?: Maybe; + /** RootGauge contract address */ + id: Scalars['ID']; + /** Whether Balancer DAO killed the gauge */ + isKilled: Scalars['Boolean']; + /** Address where emissions by this gauge will be bridged to */ + recipient: Scalars['Bytes']; + /** Relative weight cap of the gauge (0.01 = 1%) - V2 factories only */ + relativeWeightCap?: Maybe; +}; +type RootGauge_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + chain?: InputMaybe; + chain_in?: InputMaybe>; + chain_not?: InputMaybe; + chain_not_in?: InputMaybe>; + factory?: InputMaybe; + factory_?: InputMaybe; + factory_contains?: InputMaybe; + factory_contains_nocase?: InputMaybe; + factory_ends_with?: InputMaybe; + factory_ends_with_nocase?: InputMaybe; + factory_gt?: InputMaybe; + factory_gte?: InputMaybe; + factory_in?: InputMaybe>; + factory_lt?: InputMaybe; + factory_lte?: InputMaybe; + factory_not?: InputMaybe; + factory_not_contains?: InputMaybe; + factory_not_contains_nocase?: InputMaybe; + factory_not_ends_with?: InputMaybe; + factory_not_ends_with_nocase?: InputMaybe; + factory_not_in?: InputMaybe>; + factory_not_starts_with?: InputMaybe; + factory_not_starts_with_nocase?: InputMaybe; + factory_starts_with?: InputMaybe; + factory_starts_with_nocase?: InputMaybe; + gauge?: InputMaybe; + gauge_?: InputMaybe; + gauge_contains?: InputMaybe; + gauge_contains_nocase?: InputMaybe; + gauge_ends_with?: InputMaybe; + gauge_ends_with_nocase?: InputMaybe; + gauge_gt?: InputMaybe; + gauge_gte?: InputMaybe; + gauge_in?: InputMaybe>; + gauge_lt?: InputMaybe; + gauge_lte?: InputMaybe; + gauge_not?: InputMaybe; + gauge_not_contains?: InputMaybe; + gauge_not_contains_nocase?: InputMaybe; + gauge_not_ends_with?: InputMaybe; + gauge_not_ends_with_nocase?: InputMaybe; + gauge_not_in?: InputMaybe>; + gauge_not_starts_with?: InputMaybe; + gauge_not_starts_with_nocase?: InputMaybe; + gauge_starts_with?: InputMaybe; + gauge_starts_with_nocase?: InputMaybe; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + isKilled?: InputMaybe; + isKilled_in?: InputMaybe>; + isKilled_not?: InputMaybe; + isKilled_not_in?: InputMaybe>; + or?: InputMaybe>>; + recipient?: InputMaybe; + recipient_contains?: InputMaybe; + recipient_gt?: InputMaybe; + recipient_gte?: InputMaybe; + recipient_in?: InputMaybe>; + recipient_lt?: InputMaybe; + recipient_lte?: InputMaybe; + recipient_not?: InputMaybe; + recipient_not_contains?: InputMaybe; + recipient_not_in?: InputMaybe>; + relativeWeightCap?: InputMaybe; + relativeWeightCap_gt?: InputMaybe; + relativeWeightCap_gte?: InputMaybe; + relativeWeightCap_in?: InputMaybe>; + relativeWeightCap_lt?: InputMaybe; + relativeWeightCap_lte?: InputMaybe; + relativeWeightCap_not?: InputMaybe; + relativeWeightCap_not_in?: InputMaybe>; +}; +type User = { + __typename?: 'User'; + /** List of gauge the user has shares */ + gaugeShares?: Maybe>; + /** List of votes on gauges */ + gaugeVotes?: Maybe>; + /** User address */ + id: Scalars['ID']; + /** List of omni locks the user created */ + omniVotingLocks?: Maybe>; + /** List of locks the user created */ + votingLocks?: Maybe>; +}; +type User_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + gaugeShares_?: InputMaybe; + gaugeVotes_?: InputMaybe; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + omniVotingLocks_?: InputMaybe; + or?: InputMaybe>>; + votingLocks_?: InputMaybe; +}; +type VotingEscrow = { + __typename?: 'VotingEscrow'; + /** VotingEscrow contract address */ + id: Scalars['ID']; + /** List of veBAL locks created */ + locks?: Maybe>; + /** List of veBAL locks created */ + omniLocks?: Maybe>; + /** Amount of B-80BAL-20WETH BPT locked, only applies on mainnet */ + stakedSupply?: Maybe; +}; +type VotingEscrowLock = { + __typename?: 'VotingEscrowLock'; + /** veBAL balance at the moment user locks */ + bias: Scalars['BigDecimal']; + /** Equal to: - */ + id: Scalars['ID']; + /** Amount of B-80BAL-20WETH BPT the user has locked */ + lockedBalance: Scalars['BigDecimal']; + /** veBAL decay rate (per second) */ + slope: Scalars['BigDecimal']; + /** Timestamp at which the lock was created [seconds] */ + timestamp: Scalars['Int']; + /** Timestamp at which B-80BAL-20WETH BPT can be unlocked by user [seconds] */ + unlockTime: Scalars['BigInt']; + /** Timestamp at which the lcok was created [seconds]. Same as timestamp */ + updatedAt: Scalars['Int']; + /** Reference to User entity */ + user: User; + /** Reference to VotingEscrow entity */ + votingEscrowID: VotingEscrow; +}; +type VotingEscrowLock_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + bias?: InputMaybe; + bias_gt?: InputMaybe; + bias_gte?: InputMaybe; + bias_in?: InputMaybe>; + bias_lt?: InputMaybe; + bias_lte?: InputMaybe; + bias_not?: InputMaybe; + bias_not_in?: InputMaybe>; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + lockedBalance?: InputMaybe; + lockedBalance_gt?: InputMaybe; + lockedBalance_gte?: InputMaybe; + lockedBalance_in?: InputMaybe>; + lockedBalance_lt?: InputMaybe; + lockedBalance_lte?: InputMaybe; + lockedBalance_not?: InputMaybe; + lockedBalance_not_in?: InputMaybe>; + or?: InputMaybe>>; + slope?: InputMaybe; + slope_gt?: InputMaybe; + slope_gte?: InputMaybe; + slope_in?: InputMaybe>; + slope_lt?: InputMaybe; + slope_lte?: InputMaybe; + slope_not?: InputMaybe; + slope_not_in?: InputMaybe>; + timestamp?: InputMaybe; + timestamp_gt?: InputMaybe; + timestamp_gte?: InputMaybe; + timestamp_in?: InputMaybe>; + timestamp_lt?: InputMaybe; + timestamp_lte?: InputMaybe; + timestamp_not?: InputMaybe; + timestamp_not_in?: InputMaybe>; + unlockTime?: InputMaybe; + unlockTime_gt?: InputMaybe; + unlockTime_gte?: InputMaybe; + unlockTime_in?: InputMaybe>; + unlockTime_lt?: InputMaybe; + unlockTime_lte?: InputMaybe; + unlockTime_not?: InputMaybe; + unlockTime_not_in?: InputMaybe>; + updatedAt?: InputMaybe; + updatedAt_gt?: InputMaybe; + updatedAt_gte?: InputMaybe; + updatedAt_in?: InputMaybe>; + updatedAt_lt?: InputMaybe; + updatedAt_lte?: InputMaybe; + updatedAt_not?: InputMaybe; + updatedAt_not_in?: InputMaybe>; + user?: InputMaybe; + user_?: InputMaybe; + user_contains?: InputMaybe; + user_contains_nocase?: InputMaybe; + user_ends_with?: InputMaybe; + user_ends_with_nocase?: InputMaybe; + user_gt?: InputMaybe; + user_gte?: InputMaybe; + user_in?: InputMaybe>; + user_lt?: InputMaybe; + user_lte?: InputMaybe; + user_not?: InputMaybe; + user_not_contains?: InputMaybe; + user_not_contains_nocase?: InputMaybe; + user_not_ends_with?: InputMaybe; + user_not_ends_with_nocase?: InputMaybe; + user_not_in?: InputMaybe>; + user_not_starts_with?: InputMaybe; + user_not_starts_with_nocase?: InputMaybe; + user_starts_with?: InputMaybe; + user_starts_with_nocase?: InputMaybe; + votingEscrowID?: InputMaybe; + votingEscrowID_?: InputMaybe; + votingEscrowID_contains?: InputMaybe; + votingEscrowID_contains_nocase?: InputMaybe; + votingEscrowID_ends_with?: InputMaybe; + votingEscrowID_ends_with_nocase?: InputMaybe; + votingEscrowID_gt?: InputMaybe; + votingEscrowID_gte?: InputMaybe; + votingEscrowID_in?: InputMaybe>; + votingEscrowID_lt?: InputMaybe; + votingEscrowID_lte?: InputMaybe; + votingEscrowID_not?: InputMaybe; + votingEscrowID_not_contains?: InputMaybe; + votingEscrowID_not_contains_nocase?: InputMaybe; + votingEscrowID_not_ends_with?: InputMaybe; + votingEscrowID_not_ends_with_nocase?: InputMaybe; + votingEscrowID_not_in?: InputMaybe>; + votingEscrowID_not_starts_with?: InputMaybe; + votingEscrowID_not_starts_with_nocase?: InputMaybe; + votingEscrowID_starts_with?: InputMaybe; + votingEscrowID_starts_with_nocase?: InputMaybe; +}; +type VotingEscrow_Filter = { + /** Filter for the block changed event. */ + _change_block?: InputMaybe; + and?: InputMaybe>>; + id?: InputMaybe; + id_gt?: InputMaybe; + id_gte?: InputMaybe; + id_in?: InputMaybe>; + id_lt?: InputMaybe; + id_lte?: InputMaybe; + id_not?: InputMaybe; + id_not_in?: InputMaybe>; + locks_?: InputMaybe; + omniLocks_?: InputMaybe; + or?: InputMaybe>>; + stakedSupply?: InputMaybe; + stakedSupply_gt?: InputMaybe; + stakedSupply_gte?: InputMaybe; + stakedSupply_in?: InputMaybe>; + stakedSupply_lt?: InputMaybe; + stakedSupply_lte?: InputMaybe; + stakedSupply_not?: InputMaybe; + stakedSupply_not_in?: InputMaybe>; +}; +type GaugeShareQueryVariables = Exact<{ + id: Scalars['ID']; + block?: InputMaybe; +}>; +type GaugeShareQuery = { + __typename?: 'Query'; + gaugeShare?: { + __typename?: 'GaugeShare'; + id: string; + balance: string; + user: { + __typename?: 'User'; + id: string; + }; + gauge: { + __typename?: 'LiquidityGauge'; + id: string; + isKilled: boolean; + poolId?: string | null; + poolAddress: string; + totalSupply: string; + }; + } | null; +}; +type GaugeSharesQueryVariables = Exact<{ + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; +}>; +type GaugeSharesQuery = { + __typename?: 'Query'; + gaugeShares: Array<{ + __typename?: 'GaugeShare'; + id: string; + balance: string; + user: { + __typename?: 'User'; + id: string; + }; + gauge: { + __typename?: 'LiquidityGauge'; + id: string; + isKilled: boolean; + poolId?: string | null; + poolAddress: string; + totalSupply: string; + }; + }>; +}; +type SubgraphGaugeShareFragment = { + __typename?: 'GaugeShare'; + id: string; + balance: string; + user: { + __typename?: 'User'; + id: string; + }; + gauge: { + __typename?: 'LiquidityGauge'; + id: string; + isKilled: boolean; + poolId?: string | null; + poolAddress: string; + totalSupply: string; + }; +}; +type LiquidityGaugesQueryVariables = Exact<{ + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; +}>; +type LiquidityGaugesQuery = { + __typename?: 'Query'; + liquidityGauges: Array<{ + __typename?: 'LiquidityGauge'; + id: string; + symbol: string; + poolAddress: string; + poolId?: string | null; + streamer?: string | null; + totalSupply: string; + factory: { + __typename?: 'GaugeFactory'; + id: string; + numGauges: number; + }; + tokens?: Array<{ + __typename?: 'RewardToken'; + id: string; + symbol: string; + decimals: number; + totalDeposited: string; + rate?: string | null; + periodFinish?: string | null; + }> | null; + }>; +}; +type PoolsQueryVariables = Exact<{ + skip?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + where?: InputMaybe; + block?: InputMaybe; +}>; +type PoolsQuery = { + __typename?: 'Query'; + pools: Array<{ + __typename?: 'Pool'; + id: string; + poolId?: string | null; + preferentialGauge?: { + __typename?: 'LiquidityGauge'; + id: string; + symbol: string; + poolAddress: string; + poolId?: string | null; + streamer?: string | null; + totalSupply: string; + factory: { + __typename?: 'GaugeFactory'; + id: string; + numGauges: number; + }; + tokens?: Array<{ + __typename?: 'RewardToken'; + id: string; + symbol: string; + decimals: number; + totalDeposited: string; + rate?: string | null; + periodFinish?: string | null; + }> | null; + } | null; + }>; +}; +type PoolGaugesQueryVariables = Exact<{ + where?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderDirection?: InputMaybe; + skip?: InputMaybe; + block?: InputMaybe; +}>; +type PoolGaugesQuery = { + __typename?: 'Query'; + pools: Array<{ + __typename?: 'Pool'; + gauges?: Array<{ + __typename?: 'LiquidityGauge'; + id: string; + relativeWeightCap?: string | null; + }> | null; + preferentialGauge?: { + __typename?: 'LiquidityGauge'; + id: string; + } | null; + }>; +}; +type SdkFunctionWrapper = (action: (requestHeaders?: Record) => Promise, operationName: string, operationType?: string) => Promise; +declare function getSdk(client: GraphQLClient, withWrapper?: SdkFunctionWrapper): { + GaugeShare(variables: GaugeShareQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + GaugeShares(variables?: GaugeSharesQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + LiquidityGauges(variables?: LiquidityGaugesQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + Pools(variables?: PoolsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; + PoolGauges(variables?: PoolGaugesQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise; +}; +type Sdk = ReturnType; + +type SubgraphClient = Sdk$1; +type GaugesClient = Sdk; +type SubgraphLiquidityGauge = LiquidityGauge$1; + +/** + * Access liquidity gauges indexed by subgraph. + * Because we have ~100 gauges to save on repeated http calls we cache all results as `gauges` on an instance. + * Balancer's subgraph URL: https://thegraph.com/hosted-service/subgraph/balancer-labs/balancer-gauges + */ +declare class LiquidityGaugesSubgraphRepository implements Findable { + private client; + gauges: SubgraphLiquidityGauge[]; + constructor(url: string); + fetch(): Promise; + find(id: string): Promise; + findBy(param: string, value: string): Promise; +} + +interface LiquidityGauge { + id: string; + address: string; + name: string; + poolId?: Maybe$1; + poolAddress: string; + totalSupply: number; + workingSupply: number; + relativeWeight: number; + rewardTokens?: { + [tokenAddress: string]: RewardData; + }; + claimableTokens?: { + [tokenAddress: string]: BigNumber; + }; + balInflationRate?: number; +} +declare class LiquidityGaugeSubgraphRPCProvider implements Findable { + private chainId; + gaugeController?: GaugeControllerMulticallRepository; + multicall: LiquidityGaugesMulticallRepository; + subgraph: LiquidityGaugesSubgraphRepository; + workingSupplies: { + [gaugeAddress: string]: number; + }; + relativeWeights: { + [gaugeAddress: string]: number; + }; + inflationRates: { + [gaugeAddress: string]: number; + }; + rewardData: { + [gaugeAddress: string]: { + [tokenAddress: string]: RewardData; + }; + }; + gauges?: Promise; + constructor(subgraphUrl: string, multicall: Multicall, gaugeControllerAddress: string, chainId: Network, gaugeControllerCheckpointerAddress?: string); + fetch(): Promise; + find(id: string): Promise; + findBy(attribute: string, value: string): Promise; + private compose; +} + +type PoolAttribute = 'id' | 'address'; +interface PoolRepository { + skip?: number; +} +interface PoolsRepositoryFetchOptions { + first?: number; + skip?: number; +} +interface PoolsFallbackRepositoryOptions { + timeout?: number; +} + +type TokenAttribute = 'address' | 'symbol'; +interface TokenProvider { + find: (address: string) => Promise; + findBy: (attribute: TokenAttribute, value: string) => Promise; +} + +interface ProtocolFees { + swapFee: number; + yieldFee: number; +} +declare class ProtocolFeesProvider { + private multicall; + private protocolFeePercentagesProviderAddress; + protocolFees?: ProtocolFees; + constructor(multicall: Multicall, protocolFeePercentagesProviderAddress: string); + private fetch; + getFees(): Promise; +} + +declare enum PoolGaugesAttributes { + Id = "id", + Address = "address", + PoolId = "poolId" +} +interface PoolGauges { + preferentialGauge: { + id: string; + }; + gauges: { + id: string; + relativeWeightCap?: string | null; + }[]; +} + +declare enum PoolShareAttributes { + Balance = "balance", + Id = "id", + PoolId = "poolId", + UserAddress = "userAddress" +} +interface PoolShare { + id: string; + userAddress: string; + poolId: string; + balance: string; +} + +declare enum GaugeShareAttributes { + Id = "id", + UserAddress = "user", + GaugeId = "gauge", + Balance = "balance" +} +interface GaugeShare { + id: string; + balance: string; + userAddress: string; + gauge: { + id: string; + poolId?: string; + isKilled: boolean; + totalSupply: string; + }; +} + +interface Findable { + find: (id: string) => Promise; + findBy: (attribute: P, value: V) => Promise; +} +interface Searchable { + all: () => Promise; + where: (filters: (arg: T) => boolean) => Promise; +} +interface Cacheable { + refresh: (arg: T) => Promise; +} + +interface GyroConfigRepository { + getGyroProtocolFee(poolAddress: string): Promise; +} +declare class GyroConfigRepositoryImpl implements GyroConfigRepository { + private gyroConfigAddress; + private multicall; + gyroConfigInterface: GyroConfigInterface; + gyroConfig: GyroConfig; + constructor(gyroConfigAddress: string, multicall: Multicall, provider: Provider); + getGyroProtocolFee(poolAddress: string): Promise; +} + +/** + * Weekly Bal emissions are fixed / year according to: + * https://docs.google.com/spreadsheets/d/1FY0gi596YWBOTeu_mrxhWcdF74SwKMNhmu0qJVgs0KI/edit#gid=0 + * + * Using regular numbers for simplicity assuming frontend use only. + * + * Calculation source + * https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/liquidity-mining/contracts/BalancerTokenAdmin.sol + */ +declare const INITIAL_RATE = 145000; +declare const START_EPOCH_TIME = 1648465251; +/** + * Weekly BAL emissions + * + * @param currentTimestamp used to get the epoch + * @returns BAL emitted in a week + */ +declare const weekly: (currentTimestamp?: number) => number; +/** + * Total BAL emitted in epoch (1 year) + * + * @param epoch starting from 0 for the first year of emissions + * @returns BAL emitted in epoch + */ +declare const total: (epoch: number) => number; +/** + * Total BAL emitted between two timestamps + * + * @param start starting timestamp + * @param end ending timestamp + * @returns BAL emitted in period + */ +declare const between: (start: number, end: number) => number; + +declare const emissions_INITIAL_RATE: typeof INITIAL_RATE; +declare const emissions_START_EPOCH_TIME: typeof START_EPOCH_TIME; +declare const emissions_weekly: typeof weekly; +declare const emissions_total: typeof total; +declare const emissions_between: typeof between; +declare namespace emissions { + export { + emissions_INITIAL_RATE as INITIAL_RATE, + emissions_START_EPOCH_TIME as START_EPOCH_TIME, + emissions_weekly as weekly, + emissions_total as total, + emissions_between as between, + }; +} + +declare abstract class AbstractSubgraphRepository implements Findable { + protected abstract mapType(subgraphFragment: any): T; + abstract query(args: any): Promise; + get(args: any): Promise; + find(id: string): Promise; + findBy(attribute: A, value: string): Promise; + findAllBy(attribute: A, value: string, first?: number, skip?: number): Promise; +} + +declare abstract class BalancerSubgraphRepository extends AbstractSubgraphRepository { + protected chainId: Network; + protected blockHeight?: (() => Promise) | undefined; + protected client: SubgraphClient; + constructor(url: string, chainId: Network, blockHeight?: (() => Promise) | undefined); +} + +declare abstract class GaugesSubgraphRepository extends AbstractSubgraphRepository { + protected chainId: Network; + protected blockHeight?: (() => Promise) | undefined; + protected client: GaugesClient; + constructor(url: string, chainId: Network, blockHeight?: (() => Promise) | undefined); +} + +declare class GaugeSharesRepository extends GaugesSubgraphRepository { + query(args: any): Promise; + mapType(subgraphGaugeShare: SubgraphGaugeShareFragment): GaugeShare; + findByUser(userAddress: string, first?: number, skip?: number): Promise; + findByGauge(gaugeId: string, first?: number, skip?: number): Promise; +} + +interface PoolsBalancerAPIOptions { + url: string; + apiKey: string; + query?: GraphQLQuery; +} +/** + * Access pools using the Balancer GraphQL Api. + * + * Balancer's API URL: https://api.balancer.fi/query/ + */ +declare class PoolsBalancerAPIRepository implements Findable { + private client; + pools: Pool$1[]; + skip: number; + nextToken: string | undefined | null; + private query; + private hasFetched; + private isFetching; + constructor(options: PoolsBalancerAPIOptions); + private fetchFromCache; + fetch(options?: PoolsRepositoryFetchOptions): Promise; + fetchAll(options?: PoolsRepositoryFetchOptions): Promise; + awaitEnoughPoolsFetched(first: number, skip: number): Promise; + find(id: string): Promise; + findBy(param: PoolAttribute, value: string): Promise; + /** Fixes any formatting issues from the subgraph + * - GraphQL can't store a map so pool.apr.[rewardAprs/tokenAprs].breakdown + * is JSON data that needs to be parsed so they match the Pool type correctly. + */ + private format; +} + +/** + * The fallback provider takes multiple PoolRepository's in an array and uses them in order + * falling back to the next one if a request times out. + * + * This is useful for using the Balancer API while being able to fall back to the graph if it is down + * to ensure Balancer is maximally decentralized. + **/ +declare class PoolsFallbackRepository implements Findable { + private readonly providers; + currentProviderIdx: number; + timeout: number; + constructor(providers: PoolRepository[], options?: PoolsFallbackRepositoryOptions); + fetch(options?: PoolsRepositoryFetchOptions): Promise; + get currentProvider(): PoolRepository | undefined; + find(id: string): Promise; + findBy(attribute: PoolAttribute, value: string): Promise; + fallbackQuery(func: string, args: unknown[]): Promise; +} + +declare class PoolsStaticRepository implements Findable, Searchable { + private pools; + constructor(pools: Pool$1[]); + find(id: string): Promise; + findBy(attribute: PoolAttribute, value: string): Promise; + all(): Promise; + where(filter: (pool: Pool$1) => boolean): Promise; +} + +interface PoolsSubgraphRepositoryOptions { + url: string; + chainId: Network; + blockHeight?: () => Promise; + query?: GraphQLQuery; +} +/** + * Access pools using generated subgraph client. + * + * Balancer's subgraph URL: https://thegraph.com/hosted-service/subgraph/balancer-labs/balancer-v2 + */ +declare class PoolsSubgraphRepository implements Findable, Searchable { + private client; + private chainId; + private pools?; + skip: number; + private blockHeight; + private query; + /** + * Repository with optional lazy loaded blockHeight + * + * @param url subgraph URL + * @param chainId current network, needed for L2s logic + * @param blockHeight lazy loading blockHeigh resolver + */ + constructor(options: PoolsSubgraphRepositoryOptions); + /** + * We need a list of all the pools, for calculating APRs (nested pools), and for SOR (path finding). + * All the pools are fetched on page load and cachced for speedy lookups. + * + * @returns Promise resolving to pools list + */ + private fetchAllPools; + fetch(options?: PoolsRepositoryFetchOptions): Promise; + find(id: string): Promise; + findBy(param: PoolAttribute, value: string): Promise; + all(): Promise; + block(): Promise<{ + number: number | undefined; + } | undefined>; + where(filter: (pool: Pool$1) => boolean): Promise; +} + +interface PoolsSubgraphOnChainRepositoryOptions { + provider: Provider; + multicall: string; + vault: string; +} +/** + * Access pools using generated subgraph client and multicall. + */ +declare class PoolsSubgraphOnChainRepository implements Findable, Searchable, Cacheable { + private poolsSubgraph; + private readonly poolsToIgnore; + private batchSize?; + private provider; + private pools?; + private multicall; + private vault; + skip: number; + /** + * Repository using multicall to get onchain data. + * + * @param poolsSubgraph subgraph repository + * @param options options containing provider, multicall and vault addresses + */ + constructor(poolsSubgraph: PoolsSubgraphRepository, options: PoolsSubgraphOnChainRepositoryOptions, poolsToIgnore: string[] | undefined, batchSize?: number | undefined); + private filterPools; + /** + * We need a list of all the pools, for calculating APRs (nested pools), and for SOR (path finding). + * All the pools are fetched on page load and cachced for speedy lookups. + * + * @returns Promise resolving to pools list + */ + private fetchDefault; + fetch(options?: PoolsRepositoryFetchOptions): Promise; + find(id: string, forceRefresh?: boolean): Promise; + findBy(param: PoolAttribute, value: string, forceRefresh?: boolean): Promise; + all(): Promise; + where(filter: (pool: Pool$1) => boolean): Promise; + refresh(pool: Pool$1): Promise; +} + +type GenericToken = SubgraphToken | PoolToken; +type GenericPool = Omit & { + tokens: GenericToken[]; +}; +interface OnchainData { + poolTokens: [string[], string[]]; + totalShares: string; + swapFee: string; + isPaused?: boolean; + inRecoveryMode?: boolean; + rate?: string; + scalingFactors?: string[]; + weights?: string[]; + targets?: [string, string]; + wrappedTokenRate?: string; + amp?: [string, boolean, string]; + tokenRates?: [string, string]; +} +declare const fetchOnChainPoolData: (pools: { + id: string; + address: string; + poolType: string; + poolTypeVersion?: number; +}[], vaultAddress: string, provider: Provider, batchSize?: number) => Promise<{ + [id: string]: OnchainData; +}>; +declare function getOnChainBalances(subgraphPoolsOriginal: T[], _multiAddress: string, vaultAddress: string, provider: Provider, batchSize?: number): Promise; + +declare class PoolGaugesRepository extends GaugesSubgraphRepository { + query(args: any): Promise; + mapType(fragment: any): PoolGauges; +} + +declare enum PoolJoinExitAttributes { + Pool = "pool", + Sender = "sender" +} +interface PoolJoinExit { + id: string; + userAddress: string; + poolId: string; + timestamp: number; + type: string; + amounts: string[]; + tokens: string[]; +} + +declare class PoolJoinExitRepository extends BalancerSubgraphRepository { + query(args: any): Promise; + mapType(item: SubgraphJoinExitFragment): PoolJoinExit; + findByUser(sender: string, first?: number, skip?: number): Promise; + findJoins(sender: string, pool: string): Promise; + findExits(sender: string, pool: string): Promise; + findByPool(poolId: string, first?: number, skip?: number): Promise; +} + +declare class PoolSharesRepository extends BalancerSubgraphRepository { + query(args: any): Promise; + mapType(subgraphPoolShare: SubgraphPoolShareFragment): PoolShare; + findByUser(userAddress: string, first?: number, skip?: number): Promise; + findByPool(poolId: string, first?: number, skip?: number): Promise; +} + +declare class StaticTokenProvider implements Findable { + private tokens; + constructor(tokens: Token[]); + find(address: string): Promise; + findBy(attribute: TokenAttribute, value: string): Promise; +} + +declare class StaticTokenPriceProvider implements Findable { + tokenPrices: TokenPrices$1; + constructor(tokenPrices: TokenPrices$1); + find(address: string): Promise; + findBy(attribute: string, value: string): Promise; +} + +declare class AssetHelpers { + readonly ETH: string; + readonly WETH: string; + constructor(wethAddress: string); + static isEqual: (addressA: string, addressB: string) => boolean; + /** + * Tests whether `token` is ETH (represented by `0x0000...0000`). + * + * @param token - the address of the asset to be checked + */ + isETH: (token: string) => boolean; + /** + * Tests whether `token` is WETH. + * + * @param token - the address of the asset to be checked + */ + isWETH: (token: string) => boolean; + /** + * Converts an asset to the equivalent ERC20 address. + * + * For ERC20s this will return the passed address but passing ETH (`0x0000...0000`) will return the WETH address + * @param token - the address of the asset to be translated to an equivalent ERC20 + * @returns the address of translated ERC20 asset + */ + translateToERC20: (token: string) => string; + /** + * Sorts an array of token addresses into ascending order to match the format expected by the Vault. + * + * Passing additional arrays will result in each being sorted to maintain relative ordering to token addresses. + * + * The zero address (representing ETH) is sorted as if it were the WETH address. + * This matches the behaviour expected by the Vault when receiving an array of addresses. + * + * @param tokens - an array of token addresses to be sorted in ascending order + * @param others - a set of arrays to be sorted in the same order as the tokens, e.g. token weights or asset manager addresses + * @returns an array of the form `[tokens, ...others]` where each subarray has been sorted to maintain its ordering relative to `tokens` + * + * @example + * const [tokens] = sortTokens([tokenB, tokenC, tokenA]) + * const [tokens, weights] = sortTokens([tokenB, tokenC, tokenA], [weightB, weightC, weightA]) + * // where tokens = [tokenA, tokenB, tokenC], weights = [weightA, weightB, weightC] + */ + sortTokens(tokens: string[], ...others: unknown[][]): [string[], ...unknown[][]]; +} + +declare class BalancerErrors { + /** + * Cannot be constructed. + */ + private constructor(); + static isErrorCode: (error: string) => boolean; + /** + * Decodes a Balancer error code into the corresponding reason + * @param error - a Balancer error code of the form `BAL#000` + * @returns The decoded error reason + */ + static parseErrorCode: (error: string) => string; + /** + * Decodes a Balancer error code into the corresponding reason + * @param error - a Balancer error code of the form `BAL#000` + * @returns The decoded error reason if passed a valid error code, otherwise returns passed input + */ + static tryParseErrorCode: (error: string) => string; + /** + * Tests whether a string is a known Balancer error message + * @param error - a string to be checked verified as a Balancer error message + */ + static isBalancerError: (error: string) => boolean; + /** + * Encodes an error string into the corresponding error code + * @param error - a Balancer error message string + * @returns a Balancer error code of the form `BAL#000` + */ + static encodeError: (error: string) => string; +} + +type Account = string | Signer$1 | Contract; +declare function accountToAddress(account: Account): Promise; +declare enum RelayerAction { + JoinPool = "JoinPool", + ExitPool = "ExitPool", + Swap = "Swap", + BatchSwap = "BatchSwap", + SetRelayerApproval = "SetRelayerApproval" +} +declare class RelayerAuthorization { + /** + * Cannot be constructed. + */ + private constructor(); + static encodeCalldataAuthorization: (calldata: string, deadline: BigNumberish, signature: string) => string; + static signJoinAuthorization: (validator: Contract, user: Signer$1 & TypedDataSigner, allowedSender: Account, allowedCalldata: string, deadline?: BigNumberish, nonce?: BigNumberish) => Promise; + static signExitAuthorization: (validator: Contract, user: Signer$1 & TypedDataSigner, allowedSender: Account, allowedCalldata: string, deadline?: BigNumberish, nonce?: BigNumberish) => Promise; + static signSwapAuthorization: (validator: Contract, user: Signer$1 & TypedDataSigner, allowedSender: Account, allowedCalldata: string, deadline?: BigNumberish, nonce?: BigNumberish) => Promise; + static signBatchSwapAuthorization: (validator: Contract, user: Signer$1 & TypedDataSigner, allowedSender: Account, allowedCalldata: string, deadline?: BigNumberish, nonce?: BigNumberish) => Promise; + static signSetRelayerApprovalAuthorization: (validator: Contract, user: Signer$1 & TypedDataSigner, allowedSender: Account, allowedCalldata: string, deadline?: BigNumberish, nonce?: BigNumberish) => Promise; + static signAuthorizationFor: (type: RelayerAction, validator: Contract, user: Signer$1 & TypedDataSigner, allowedSender: Account, allowedCalldata: string, deadline?: BigNumberish, nonce?: BigNumberish) => Promise; +} +declare class BalancerMinterAuthorization { + /** + * Cannot be constructed. + */ + private constructor(); + static signSetMinterApproval: (minterContract: Contract, minter: Account, approval: boolean, user: Signer$1 & TypedDataSigner, deadline?: BigNumberish, nonce?: BigNumberish) => Promise<{ + v: number; + r: string; + s: string; + deadline: BigNumber; + }>; +} + +declare const signPermit: (token: Contract, owner: Signer$1 & TypedDataSigner, spender: Account, amount: BigNumberish, deadline?: BigNumberish, nonce?: BigNumberish) => Promise<{ + v: number; + r: string; + s: string; + deadline: BigNumber; + nonce: BigNumber; +}>; + +declare const AMP_PRECISION = 3; +type ParsedPoolInfo = { + bptIndex: number; + higherBalanceTokenIndex: number; + ampWithPrecision: bigint; + balancesEvm: bigint[]; + balancesEvmWithoutBpt: bigint[]; + priceRates: bigint[]; + priceRatesWithoutBpt: bigint[]; + swapFeeEvm: bigint; + poolTokens: string[]; + poolTokensWithoutBpt: string[]; + weights: bigint[]; + scalingFactors: bigint[]; + scalingFactorsWithoutBpt: bigint[]; + scalingFactorsRaw: bigint[]; + scalingFactorsRawWithoutBpt: bigint[]; + upScaledBalances: bigint[]; + upScaledBalancesWithoutBpt: bigint[]; + totalSharesEvm: bigint; +}; +/** + * Parse pool info into EVM amounts. Sorts by token order if wrappedNativeAsset param passed. + * @param pool Pool object to be parsed + * @param wrappedNativeAsset e.g. wETH address + * @param unwrapNativeAsset if true, changes wETH address to ETH address + * @returns parsed pool info + */ +declare const parsePoolInfo: (pool: Pool$1, wrappedNativeAsset?: string, unwrapNativeAsset?: boolean) => ParsedPoolInfo; + +declare function tokensToTokenPrices(tokens: Token[]): TokenPrices$1; +declare function tokenAddressForPricing(address: string, chainId: Network): string; +/** + * Maps testnet tokens, eg: on Göreli to a mainnet one. + * Used to get the pricing information on networks not supported by a price feed. + * + * @param address Address on a testnet network + */ +declare const addressMapIn: (address: string, chainId: Network) => string; +/** + * Finds an underlying token address for a wrapped one + * + * @param wrappedAddress + * @param chainId + * @returns underlying token address + */ +declare const unwrapToken: (wrappedAddress: string, chainId: Network) => string; +declare const getEthValue: (tokens: string[], amounts: string[]) => BigNumber; + +/** + * Debouncer for different attributes requested over time, which need to be aggregated into a single resolving call + * + * Choosing deferred promise since we have setTimeout that returns a promise + * Some reference for history buffs: https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns + */ +interface Promised { + promise: Promise; + resolve: (value: T) => void; + reject: (reason: unknown) => void; +} +/** + * Aggregates attributes and exectutes a debounced call + * + * @param fn Function to debounce + * @param wait Debouncing waiting time [ms] + * @param limit Maximum number of attributes to execute in one promise + * @returns Debouncer instance + */ +declare class Debouncer { + private fn; + private wait; + private limit; + requestSets: Set
[]; + promisedCalls: Promised[]; + promisedCount: number; + timeout?: ReturnType; + debounceCancel: () => void; + constructor(fn: (attrs: A[]) => Promise, wait?: number, limit?: number); + fetch(attr?: A): Promise; + execute(timeout?: number): Promise; +} + +/** + * Scales a number up by 10 ^ decimals. Also ensures the returned value is an + * integer, any additional decimals post scaling are removed. + * @param value The value to be scaled up + * @param decimals The total decimal places / order of magnitude to scale by + * @returns The scaled value + */ +declare function parseFixed(value: string, decimals?: BigNumberish): BigNumber; +/** + * Scales a number down by 10 ^ decimals. Also ensures the returned value doesn't + * have a .0 at the end, so integers are returned as integers. + * @param value The value to be scaled down + * @param decimals The total decimal places / order of magnitude to scale down by + * @returns The scaled value + */ +declare function formatFixed(value: BigNumberish, decimals: BigNumberish): string; +declare function parseToBigInt18(value: string): bigint; +declare function formatFromBigInt18(value: bigint): string; +/** + * Like parseEther but for numbers. Converts floating point to BigNumber using 18 decimals + */ +declare const bn: (value: number) => BigNumber; + +/** + * Multiplies input by slippage amount + * + * @param amount Input amount (not parsed) + * @param slippage Slippage value in bps - i.e. 50 = 0.5% + * @returns Result delta from multiplying amount and slippage + */ +declare const mulSlippage: (amount: BigNumber, slippage: BigNumber) => BigNumber; +/** + * Reduce input amount by slippage factor + * + * @param amount Input in EVM amounts + * @param slippage Slippage value in bps - i.e. 50 = 0.5% + * @returns Result amount subtracting slippage + */ +declare const subSlippage: (amount: BigNumber, slippage: BigNumber) => BigNumber; +/** + * Increase input amount by slippage factor + * + * @param amount Input in EVM amounts + * @param slippage Slippage value in bps - i.e. 50 = 0.5% + * @returns Result amount adding slippage + */ +declare const addSlippage: (amount: BigNumber, slippage: BigNumber) => BigNumber; + +declare const isSameAddress: (address1: string, address2: string) => boolean; +declare function insert(arr: T[], index: number, newItem: T): T[]; +/** + * Returns a new array with item on the specified index replaced by newItem + * @param arr + * @param index + * @param newItem + */ +declare function replace(arr: T[], index: number, newItem: T): T[]; +/** + * Removes item from array at specified index and returns new array. (Does not mutate original) + * @param arr Original array + * @param index Index of item to be removed + * @returns New array with item at index removed + */ +declare function removeItem(arr: T[], index: number): T[]; +/** + * REORDER ARRAYS USING A REFERENCE AND ORIGINAL ARRAY, + * Example: + * Input -> reference: [c,b,a], original: [a,b,c], others: [[1,2,3], [4,5,6]] + * Sorts like -> [[c,b,a],[3,2,1],[6,5,4]] + * Returns -> [6,5,4] + * @param reference + * @param original + * @param others + * @returns Sorted others + */ +declare function reorderArrays(reference: T[], original: T[], ...others: unknown[][]): unknown[][]; +declare function isLinearish(poolType: string): boolean; +declare function truncateAddresses(addresses: string[]): string[]; +declare const findEventInReceiptLogs: ({ receipt, to, contractInterface, logName, }: { + receipt: TransactionReceipt; + to: Address; + contractInterface: Interface; + logName: string; +}) => LogDescription; +declare const getRandomBytes32: () => string; + +/** + * Simple coingecko price source implementation. Configurable by network and token addresses. + */ +declare class CoingeckoPriceRepository implements Findable { + private chainId; + prices: { + [key: string]: Promise; + }; + nativePrice?: Promise; + private readonly url; + private readonly urlNative; + private readonly coingeckoApiKeyHeaderName; + baseTokenAddresses: string[]; + debouncer: Debouncer; + apiKey?: string; + constructor(tokenAddresses: string[], chainId?: Network, coingecko?: CoingeckoConfig); + private fetch; + private fetchNative; + find(inputAddress: string): Promise; + findBy(attribute: string, value: string): Promise; + private platform; +} + +/** + * Simple coingecko price source implementation. Configurable by network and token addresses. + */ +declare class CoingeckoHistoricalPriceRepository implements Findable { + private chainId; + prices: TokenPrices$1; + nativePrice?: Promise; + private readonly urlBase; + private readonly apiKey?; + private readonly coingeckoApiKeyHeaderName; + constructor(chainId?: Network, coingecko?: CoingeckoConfig); + private fetch; + find(address: string): Promise; + findBy(inputAddress: string, timestamp: number): Promise; + private platform; + private urlRange; +} + +declare class SubgraphPriceRepository implements Findable { + private subgraphUrl; + private chainId; + prices: { + [key: string]: Promise; + }; + debouncer: Debouncer; + constructor(subgraphUrl: string, chainId?: Network); + private fetch; + find(inputAddress: string): Promise; + findBy(attribute: string, value: string): Promise; +} + +declare const yieldTokens: { + 1: { + waUSDT: string; + waUSDC: string; + waDAI: string; + }; + 137: { + wamDAI: string; + wamUSDC: string; + wamUSDT: string; + }; +}; +declare const wrappedTokensMap: { + 1: { + [x: string]: { + aToken: string; + underlying: string; + }; + }; + 137: { + [x: string]: { + aToken: string; + underlying: string; + }; + }; +}; +interface IAaveRates { + getRate: (address: string) => Promise; +} +declare class AaveRates implements IAaveRates { + private multicall; + private network; + rates?: Promise<{ + [wrappedATokenAddress: string]: number; + }>; + constructor(multicall: Multicall, network: Network); + private fetch; + getRate(wrappedAToken: string): Promise; +} + +declare class TokenPriceProvider implements Findable { + private coingeckoRepository; + private subgraphRepository; + private aaveRates; + constructor(coingeckoRepository: Findable, subgraphRepository: Findable, aaveRates: IAaveRates); + find(address: string): Promise; + findBy(attribute: string, value: string): Promise; +} + +declare class HistoricalPriceProvider implements Findable { + private coingeckoRepository; + private aaveRates; + constructor(coingeckoRepository: Findable, aaveRates: IAaveRates); + /** + * get the historical price at time of call + * + * @param address the token address + */ + find(address: string): Promise; + /** + * get the historical price at the given timestamp. + * + * @param address the token address + * @param timestamp the UNIX timestamp + * @private + */ + findBy(address: string, timestamp: number): Promise; +} + +declare const APR_THRESHOLD = 10000; +/** + * For proportional exits from ComposableStable pools the ExactBPTInForTokensOut + * exit type was removed. Therefore we have to use BPTInForExactTokensOut which + * makes proportional exits using a user's total BPT balance impossible. In + * order to 'fix' this we need to subtract a little bit from the bptIn value + * when calculating the ExactTokensOut. The variable below is that "little bit". + */ +declare const SHALLOW_COMPOSABLE_STABLE_BUFFER = 1000000; +type FactoryType = 'oracleWeightedPool' | 'weightedPool' | 'stablePool' | 'managedPool' | 'liquidityBootstrappingPool' | 'boostedPool' | 'composableStablePool'; +type PoolMetadata = { + name: string; + hasIcon: boolean; +}; +type NamedPools = { + staBAL: string; + bbAaveUSD: { + v1: string; + v2: string; + }; + xMatic: { + v1: string; + v2: string; + }; + stMatic: { + v1: string; + v2: string; + }; + mai4: { + mai4: string; + maiBbaUsd: string; + }; + veBAL: string; +}; +type Pools$1 = { + IdsMap: Partial; + Pagination: { + PerPage: number; + PerPool: number; + PerPoolInitial: number; + }; + DelegateOwner: string; + ZeroAddress: string; + DynamicFees: { + Gauntlet: string[]; + }; + BlockList: string[]; + ExcludedPoolTypes: string[]; + Stable: { + AllowList: string[]; + }; + Investment: { + AllowList: string[]; + }; + Factories: Record; + Stakable: { + AllowList: string[]; + }; + Metadata: Record; +}; +declare function POOLS(networkId: Network): Pools$1; + +interface TransactionData$1 { + to: string; + from: string; + callData: string; + tokensOut: string[]; + expectedTokensValue: BigNumber[]; + functionName: string; +} +interface TokenBalance { + [token: string]: BigNumber; +} +interface IClaimService { + getClaimableRewardTokens(userAddress: string): Promise; + buildClaimRewardTokensRequest(gaugeAddresses: string[], userAddress: string): Promise; + getClaimableVeBalTokens(userAddress: string, claimableTokens: string[]): Promise; + buildClaimVeBalTokensRequest(userAddress: string, claimableTokens: string[]): Promise; +} + +interface FeeDistributorData { + balAmount: number; + bbAUsdAmount: number; + veBalSupply: number; + bbAUsdPrice: number; + balAddress: string; +} +interface BaseFeeDistributor { + multicallData: (ts: number) => Promise; + getClaimableBalances(userAddress: string, claimableTokens: string[]): Promise; + claimBalances(userAddress: string, claimableTokens: string[]): string; +} +declare class FeeDistributorRepository implements BaseFeeDistributor { + private multicall; + private feeDistributorAddress; + private balAddress; + private veBalAddress; + private bbAUsdAddress; + feeDistributor: Contract; + data?: FeeDistributorData; + constructor(multicall: Multicall, feeDistributorAddress: string, balAddress: string, veBalAddress: string, bbAUsdAddress: string, provider: Provider); + fetch(timestamp: number): Promise; + multicallData(timestamp: number): Promise; + getPreviousWeek(fromTimestamp: number): number; + getClaimableBalances(userAddress: string, claimableTokens: string[]): Promise; + claimBalances(userAddress: string, claimableTokens: string[]): string; + extractTokenBalance(claimableTokens: string[], amounts: (BigNumber | undefined | null)[]): TokenBalance; +} + +declare class FeeCollectorRepository implements Findable { + private provider; + vault: Contract; + swapFeePercentage?: number; + constructor(vaultAddress: string, provider: Provider); + fetch(): Promise; + find(): Promise; + findBy(): Promise; +} + +declare class TokenYieldsRepository implements Findable { + private url; + private yields?; + constructor(url?: string); + fetch(): Promise<{ + [address: string]: number; + }>; + find(address: string): Promise; + findBy(attribute: string, value: string): Promise; +} + +declare class BlockNumberRepository implements Findable { + private endpoint; + blocks: { + [ts: string]: Promise; + }; + constructor(endpoint: string); + find(from: string): Promise; + findBy(attribute?: string, value?: string): Promise; +} + +type GraphQLFilterOperator = 'gt' | 'lt' | 'eq' | 'in' | 'not_in' | 'contains'; +type GraphQLFilter = { + [operator in GraphQLFilterOperator]?: any; +}; +interface GraphQLArgs { + chainId?: number; + first?: number; + skip?: number; + nextToken?: string; + orderBy?: string; + orderDirection?: string; + block?: { + number?: number; + }; + where?: Record; +} +interface GraphQLArgsFormatter { + format(args: GraphQLArgs): unknown; +} + +declare class SubgraphPoolDataService implements PoolDataService { + private readonly client; + private readonly provider; + private readonly network; + private readonly sorConfig?; + private readonly defaultArgs; + constructor(client: SubgraphClient, provider: Provider, network: BalancerNetworkConfig, sorConfig?: BalancerSdkSorConfig | undefined, query?: GraphQLQuery); + /** + * Returns pools from the subgraph filtered by queryArgs with on-chain balances + * + * @param queryArgs + * @returns SubgraphPoolBase[] + */ + getPools(queryArgs?: GraphQLArgs): Promise; + private getSubgraphPools; +} + +type VeBalLockInfo = { + lockedEndDate: number; + lockedAmount: string; + totalSupply: string; + epoch: string; + hasExistingLock: boolean; + isExpired: boolean; +}; +type VeBalLockInfoResult = { + locked: BigNumber[]; + epoch: BigNumber; + totalSupply: BigNumber; +}; +declare class VeBal { + private veBalAddress; + private multicall; + constructor(veBalAddress: string, multicall: Multicall); + getLockInfo(account: string): Promise; + formatLockInfo(lockInfo: VeBalLockInfoResult): VeBalLockInfo; +} + +declare class VeBalProxy { + instance: Contract; + constructor(addresses: ContractAddresses, provider: Provider); + getAdjustedBalance(account: string): Promise; +} + +type ContractFactory = (address: string, signerOrProvider: Signer$1 | Provider) => Contract; +interface ContractInstances { + aaveLinearPoolFactory?: AaveLinearPoolFactory; + balancerHelpers: BalancerHelpers; + BasePool: ContractFactory; + composableStablePoolFactory?: ComposableStablePoolFactory; + ERC20: ContractFactory; + erc4626LinearPoolFactory?: ERC4626LinearPoolFactory; + eulerLinearPoolFactory?: EulerLinearPoolFactory; + gaugeClaimHelper?: GaugeClaimHelper; + gearboxLinearPoolFactory?: GearboxLinearPoolFactory; + gyroConfig?: GyroConfig; + lidoRelayer?: LidoRelayer; + liquidityGauge: ContractFactory; + multicall: Multicall; + relayer: Contract; + vault: Vault; + veBal?: VeBal; + veBalProxy?: VeBalProxy; + weightedPoolFactory?: WeightedPoolFactory; + yearnLinearPoolFactory?: YearnLinearPoolFactory; +} +declare class Contracts { + contractAddresses: ContractAddresses; + private instances; + /** + * Create instances of Balancer contracts connected to passed provider. + * @param { Network | ContractAddresses } networkOrAddresses + * @param { Provider } provider + */ + constructor(networkOrAddresses: Network | ContractAddresses, provider: Provider); + /** + * Expose contract instances. + */ + get contracts(): ContractInstances; + /** + * Helper to create ERC20 contract. + * @param { string } address ERC20 address. + * @param { Signer | Provider } signerOrProvider Signer or Provider. + * @returns Contract. + */ + getErc20(address: string, signerOrProvider: Signer$1 | Provider): ERC20; + /** + * Helper to create base pool contract. + * @param { string } address pool address. + * @param { Signer | Provider } signerOrProvider Signer or Provider. + * @returns Contract. + */ + getBasePool(address: string, signerOrProvider: Signer$1 | Provider): Contract; + /** + * Helper to create LiquidityGauge contract. + * @param { string } address Gauge address. + * @param { Signer | Provider} signerOrProvider Signer or Provider. + * @returns Contract. + */ + getLiquidityGauge: typeof LiquidityGaugeV5__factory.connect; +} + +declare class Data implements BalancerDataRepositories { + pools: PoolsSubgraphRepository; + poolsForSimulations: SubgraphPoolDataService; + poolsOnChain: PoolsSubgraphOnChainRepository; + yesterdaysPools: PoolsSubgraphRepository | undefined; + poolShares: PoolSharesRepository; + poolGauges: PoolGaugesRepository | undefined; + gaugeShares: GaugeSharesRepository | undefined; + tokenPrices: TokenPriceProvider; + tokenHistoricalPrices: HistoricalPriceProvider; + tokenMeta: StaticTokenProvider; + liquidityGauges: LiquidityGaugeSubgraphRPCProvider | undefined; + feeDistributor: FeeDistributorRepository | undefined; + feeCollector: FeeCollectorRepository; + protocolFees: ProtocolFeesProvider | undefined; + tokenYields: TokenYieldsRepository; + blockNumbers: BlockNumberRepository | undefined; + poolJoinExits: PoolJoinExitRepository; + gyroConfigRepository: GyroConfigRepositoryImpl | undefined; + constructor(networkConfig: BalancerNetworkConfig, provider: Provider, contracts: Contracts, subgraphQuery?: GraphQLQuery, coingecko?: CoingeckoConfig); +} + +declare class BalancerAPIArgsFormatter implements GraphQLArgsFormatter { + format(args: GraphQLArgs): GraphQLArgs; +} + +declare class SubgraphArgsFormatter implements GraphQLArgsFormatter { + operatorMap: Record; + constructor(); + format(args: GraphQLArgs): GraphQLArgs; +} + +declare class GraphQLArgsBuilder { + readonly args: GraphQLArgs; + constructor(args: GraphQLArgs); + merge(other: GraphQLArgsBuilder): GraphQLArgsBuilder; + format(formatter: GraphQLArgsFormatter): unknown; +} + +interface AprBreakdown { + swapFees: number; + tokenAprs: { + total: number; + breakdown: { + [address: string]: number; + }; + }; + stakingApr: { + min: number; + max: number; + }; + rewardAprs: { + total: number; + breakdown: { + [address: string]: number; + }; + }; + protocolApr: number; + min: number; + max: number; +} +/** + * Calculates pool APR via summing up sources of APR: + * + * 1. Swap fees (pool level) data coming from subgraph + * 2. Yield bearing pool tokens, with data from external sources eg: http endpoints, subgraph, onchain + * * stETH + * * aave + * * usd+ + * map token: calculatorFn + * 3. Staking rewards based from veBal gauges + */ +declare class PoolApr { + private pools; + private tokenPrices; + private tokenMeta; + private tokenYields; + private feeCollector; + private yesterdaysPools?; + private liquidityGauges?; + private feeDistributor?; + private gyroConfigRepository?; + constructor(pools: Findable, tokenPrices: Findable, tokenMeta: Findable, tokenYields: Findable, feeCollector: Findable, yesterdaysPools?: Findable | undefined, liquidityGauges?: Findable | undefined, feeDistributor?: BaseFeeDistributor | undefined, gyroConfigRepository?: GyroConfigRepository | undefined); + /** + * Pool revenue via swap fees. + * Fees and liquidity are takes from subgraph as USD floats. + * + * @returns APR [bsp] from fees accumulated over last 24h + */ + swapFees(pool: Pool$1): Promise; + /** + * Pool revenue from holding yield-bearing wrapped tokens. + * + * @returns APR [bsp] from tokens contained in the pool + */ + tokenAprs(pool: Pool$1): Promise; + /** + * Calculates staking rewards based on veBal gauges deployed with Curve Finance contracts. + * https://curve.readthedocs.io/dao-gauges.html + * + * Terminology: + * - LP token of a gauge is a BPT of a pool + * - Depositing into a gauge is called staking on the frontend + * - gauge totalSupply - BPT tokens deposited to a gauge + * - gauge workingSupply - effective BPT tokens participating in reward distribution. sum of 40% deposit + 60% boost from individual user's veBal + * - gauge relative weight - weight of this gauge in bal inflation distribution [0..1] scaled to 1e18 + * + * APR sources: + * - gauge BAL emissions = min: 40% of totalSupply, max: 40% of totalSupply + 60% of totalSupply * gauge LPs voting power + * https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/liquidity-mining/contracts/gauges/ethereum/LiquidityGaugeV5.vy#L338 + * - gauge reward tokens: Admin or designated depositor has an option to deposit additional reward with a weekly accruing cadence. + * https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/liquidity-mining/contracts/gauges/ethereum/LiquidityGaugeV5.vy#L641 + * rate: amount of token per second + * + * @param pool + * @param boost range between 1 and 2.5 + * @returns APR [bsp] from protocol rewards. + */ + stakingApr(pool: Pool$1, boost?: number): Promise; + /** + * Some gauges are holding tokens distributed as rewards to LPs. + * + * @param pool + * @returns APR [bsp] from token rewards. + */ + rewardAprs(pool: Pool$1): Promise; + /** + * 80BAL-20WETH pool is accruing protocol revenue. + * + * @param pool + * @returns accrued protocol revenue as APR [bsp] + */ + protocolApr(pool: Pool$1): Promise; + /** + * Composes all sources for total pool APR. + * + * @returns pool APR split [bsp] + */ + apr(pool: Pool$1): Promise; + private last24hFees; + /** + * Total Liquidity based on USD token prices taken from external price feed, eg: coingecko. + * + * @param pool + * @returns Pool liquidity in USD + */ + private totalLiquidity; + /** + * BPT price as pool totalLiquidity / pool total Shares + * Total Liquidity is calculated based on USD token prices taken from external price feed, eg: coingecko. + * + * @param pool + * @returns BPT price in USD + */ + private bptPrice; + private protocolSwapFeePercentage; + private rewardTokenApr; +} + +interface ParamsBuilder { + buildQueryJoinExactIn(params: JoinExactInParams): queryJoinParams; + buildQueryJoinExactOut(params: JoinExactOutParams): queryJoinParams; + buildQueryExitToSingleToken(params: ExitToSingleTokenParams): queryExitParams; + buildQueryExitProportionally(params: ExitProportionallyParams): queryExitParams; + buildQueryExitExactOut(params: ExitExactOutParams): queryExitParams; +} +interface JoinExactInParams { + maxAmountsInByToken: Map; + minimumBPT?: BigNumber; +} +interface JoinExactOutParams { + maxAmountIn?: BigNumber; + bptOut: BigNumber; + tokenIn: string; +} +interface ExitToSingleTokenParams { + minAmountOut?: BigNumber; + bptIn: BigNumber; + tokenOut: string; +} +interface ExitProportionallyParams { + minAmountsOut?: BigNumber[]; + bptIn: BigNumber; +} +interface ExitExactOutParams { + minAmountsOut: BigNumber[]; + tokensOut: string[]; + maxBptIn?: BigNumber; +} +type queryJoinParams = [ + poolId: string, + sender: string, + recipient: string, + request: { + assets: string[]; + maxAmountsIn: BigNumber[]; + userData: string; + fromInternalBalance: boolean; + } +]; +type queryExitParams = [ + poolId: string, + sender: string, + recipient: string, + request: { + assets: string[]; + minAmountsOut: BigNumber[]; + userData: string; + toInternalBalance: boolean; + } +]; + +type Address = string; +interface BalancerSdkConfig { + network: Network | BalancerNetworkConfig; + rpcUrl: string; + customSubgraphUrl?: string; + subgraphQuery?: GraphQLQuery; + sor?: Partial; + tenderly?: BalancerTenderlyConfig; + enableLogging?: boolean; + coingecko?: CoingeckoConfig; +} +interface BalancerTenderlyConfig { + accessKey: string; + user: string; + project: string; + blockNumber?: number; +} +interface BalancerSdkSorConfig { + tokenPriceService: 'api' | 'coingecko' | 'subgraph' | TokenPriceService; + poolDataService: 'subgraph' | PoolDataService; + fetchOnChainBalances: boolean; +} +interface ContractAddresses { + vault: string; + multicall: string; + poolDataQueries: string; + gaugeClaimHelper?: string; + balancerHelpers: string; + balancerMinter?: string; + lidoRelayer?: string; + balancerRelayer: string; + gaugeController?: string; + feeDistributor?: string; + veBal?: string; + veBalProxy?: string; + protocolFeePercentagesProvider?: string; + weightedPoolFactory?: string; + composableStablePoolFactory?: string; + aaveLinearPoolFactory?: string; + erc4626LinearPoolFactory?: string; + eulerLinearPoolFactory?: string; + gearboxLinearPoolFactory?: string; + yearnLinearPoolFactory?: string; + [key: string]: string | undefined; +} +interface BalancerNetworkConfig { + chainId: Network; + addresses: { + contracts: ContractAddresses; + tokens: { + wrappedNativeAsset: string; + lbpRaisingTokens?: string[]; + stETH?: string; + wstETH?: string; + bal: string; + veBal?: string; + bbaUsd?: string; + }; + }; + tenderly?: BalancerTenderlyConfig; + urls: { + subgraph: string; + gaugesSubgraph?: string; + blockNumberSubgraph?: string; + }; + thirdParty: { + coingecko: { + nativeAssetId: string; + platformId: string; + }; + }; + averageBlockTime?: number; + multicallBatchSize?: number; + pools: { + wETHwstETH?: PoolReference; + }; + poolsToIgnore?: string[]; + sorConnectingTokens?: { + symbol: string; + address: string; + }[]; + sorTriPathMidPoolIds?: string[]; +} +interface BalancerDataRepositories { + feeDistributor?: BaseFeeDistributor; + feeCollector: Findable; + gaugeShares?: GaugeSharesRepository; + gyroConfigRepository?: GyroConfigRepository; + liquidityGauges?: Findable; + protocolFees?: ProtocolFeesProvider; + /** + * Why do we need 3 different pools repositories? + */ + pools: Findable & Searchable; + poolsForSimulations: SubgraphPoolDataService; + poolGauges?: PoolGaugesRepository; + poolJoinExits: PoolJoinExitRepository; + poolsOnChain: Findable & Searchable & Cacheable; + poolShares: PoolSharesRepository; + tokenHistoricalPrices: Findable; + tokenMeta: Findable; + tokenPrices: Findable; + tokenYields: Findable; + yesterdaysPools?: Findable & Searchable; +} +type PoolReference = { + id: string; + address: string; +}; +declare enum PoolSpecialization { + GeneralPool = 0, + MinimalSwapInfoPool = 1, + TwoTokenPool = 2 +} +type JoinPoolRequest$1 = { + assets: string[]; + maxAmountsIn: BigNumberish[]; + userData: string; + fromInternalBalance: boolean; +}; +type ExitPoolRequest$1 = { + assets: string[]; + minAmountsOut: string[]; + userData: string; + toInternalBalance: boolean; +}; +declare enum UserBalanceOpKind { + DepositInternal = 0, + WithdrawInternal = 1, + TransferInternal = 2, + TransferExternal = 3 +} +type UserBalanceOp = { + kind: UserBalanceOpKind; + asset: string; + amount: BigNumberish; + sender: string; + recipient: string; +}; +declare enum PoolBalanceOpKind { + Withdraw = 0, + Deposit = 1, + Update = 2 +} +type PoolBalanceOp = { + kind: PoolBalanceOpKind; + poolId: string; + token: string; + amount: BigNumberish; +}; +interface TransactionData { + contract?: Contract; + function: string; + params: string[]; + outputs?: { + amountsIn?: string[]; + amountsOut?: string[]; + }; +} +type Currency = 'eth' | 'usd'; +type Price = { + [currency in Currency]?: string; +}; +type TokenPrices$1 = { + [address: string]: Price; +}; +type HistoricalPrices = { + prices: [[number, number]]; + market_caps: [[number, number]]; + total_volumes: [[number, number]]; +}; +interface Token { + address: string; + decimals?: number; + symbol?: string; + price?: Price; +} +interface PoolToken extends Token { + balance: string; + priceRate?: string; + weight?: string | null; + isExemptFromYieldProtocolFee?: boolean; + token?: SubPoolMeta; +} +interface SubPoolMeta { + pool: SubPool | null; + latestUSDPrice?: string; + latestFXPrice?: string; +} +interface SubPool { + id: string; + address: string; + poolType: PoolType; + totalShares: string; + mainIndex: number; + tokens?: PoolToken[]; +} +interface OnchainTokenData { + balance: string; + weight: number; + decimals: number; + logoURI: string | undefined; + name: string; + symbol: string; +} +interface OnchainPoolData { + tokens: Record; + totalSupply: string; + decimals: number; + swapFee: string; + amp?: string; + swapEnabled: boolean; + tokenRates?: string[]; +} +declare enum PoolType { + Weighted = "Weighted", + Investment = "Investment", + Stable = "Stable", + ComposableStable = "ComposableStable", + MetaStable = "MetaStable", + StablePhantom = "StablePhantom", + LiquidityBootstrapping = "LiquidityBootstrapping", + Element = "Element", + Gyro2 = "Gyro2", + Gyro3 = "Gyro3", + GyroE = "GyroE", + Managed = "Managed", + AaveLinear = "AaveLinear", + Linear = "Linear", + EulerLinear = "EulerLinear", + ERC4626Linear = "ERC4626Linear", + BeefyLinear = "BeefyLinear", + GearboxLinear = "GearboxLinear", + MidasLinear = "MidasLinear", + ReaperLinear = "ReaperLinear", + SiloLinear = "SiloLinear", + TetuLinear = "TetuLinear", + YearnLinear = "YearnLinear", + FX = "FX" +} +interface Pool$1 { + id: string; + name: string; + address: string; + chainId: number; + poolType: PoolType; + poolTypeVersion: number; + swapFee: string; + protocolYieldFeeCache: string; + protocolSwapFeeCache: string; + owner?: string; + factory?: string; + tokens: PoolToken[]; + tokensList: string[]; + tokenAddresses?: string[]; + totalLiquidity: string; + totalShares: string; + totalSwapFee?: string; + totalSwapVolume?: string; + onchain?: OnchainPoolData; + createTime?: number; + mainTokens?: string[]; + wrappedTokens?: string[]; + unwrappedTokens?: string[]; + isNew?: boolean; + volumeSnapshot?: string; + feesSnapshot?: string; + boost?: string; + symbol?: string; + swapEnabled: boolean; + amp?: string; + wrappedIndex?: number; + mainIndex?: number; + apr?: AprBreakdown; + liquidity?: string; + totalWeight: string; + lowerTarget: string; + upperTarget: string; + priceRateProviders?: PriceRateProvider[]; + lastJoinExitInvariant?: string; + isInRecoveryMode?: boolean; + isPaused?: boolean; + tokenRates?: string[]; +} +interface PriceRateProvider { + address: string; + token: { + address: string; + }; +} +/** + * Pool use-cases / controller layer + */ +interface PoolWithMethods extends Pool$1, ParamsBuilder { + /** + * Build join pool transaction parameters with exact tokens in and minimum BPT out based on slippage tolerance + * @param joiner Account address joining pool + * @param tokensIn Token addresses provided for joining pool (same length and order as amountsIn) + * @param amountsIn Token amounts provided for joining pool in EVM scale + * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5% + * @returns transaction request ready to send with signer.sendTransaction + */ + buildJoin: (joiner: string, tokensIn: string[], amountsIn: string[], slippage: string) => JoinPoolAttributes; + /** + * Calculate price impact of bptAmount against zero price impact BPT amount. + * @param tokenAmounts Token amounts. Needs a value for each pool token. + * @param bptAmount BPT amount for comparison (in EVM scale). + * @param isJoin boolean indicating if the price impact is for a join or exit. + * @returns price impact in EVM scale. + */ + calcPriceImpact: (tokenAmounts: string[], bptAmount: string, isJoin: boolean) => Promise; + /** + * Build exit pool transaction parameters with exact BPT in and minimum token amounts out based on slippage tolerance + * @param exiter Account address exiting pool + * @param bptIn BPT provided for exiting pool in EVM scale + * @param slippage Maximum slippage tolerance in bps. i.e. 50 = 5% + * @param shouldUnwrapNativeAsset Indicates whether wrapped native asset should be unwrapped after exit. Defaults to false. + * @param singleTokenOut Optional: token address that if provided will exit to given token + * @returns transaction request ready to send with signer.sendTransaction + */ + buildExitExactBPTIn: (exiter: string, bptIn: string, slippage: string, shouldUnwrapNativeAsset?: boolean, singleTokenOut?: string, toInternalBalance?: boolean) => ExitExactBPTInAttributes; + /** + * Build exit pool transaction parameters with exact tokens out and maximum BPT in based on slippage tolerance + * @param exiter Account address exiting pool + * @param tokensOut Tokens provided for exiting pool (same length and order as amountsOut) + * @param amountsOut Amounts provided for exiting pool in EVM scale + * @param slippage Maximum slippage tolerance in bps. i.e. 50 = 5% + * @returns transaction request ready to send with signer.sendTransaction + */ + buildExitExactTokensOut: (exiter: string, tokensOut: string[], amountsOut: string[], slippage: string, toInternalBalance?: boolean) => ExitExactTokensOutAttributes; + /** + * Build recovery exit pool transaction parameters with exact BPT in and minimum token amounts out based on slippage tolerance + * @param exiter Account address exiting pool + * @param bptIn BPT amount in EVM scale + * @param slippage Maximum slippage tolerance in basis points. i.e. 50 = 5% + * @returns transaction request ready to send with signer.sendTransaction + */ + buildRecoveryExit: (exiter: string, bptIn: string, slippage: string, toInternalBalance?: boolean) => ExitExactBPTInAttributes; + /** + * Calculate spot price for swapping tokenIn with tokenOut + * @param tokenIn Token address + * @param tokenOut Token address + * @returns spot price for swapping tokenIn with tokenOut in EVM scale + */ + calcSpotPrice: (tokenIn: string, tokenOut: string) => string; + bptIndex: number; +} +interface GraphQLQuery { + args: GraphQLArgs; + attrs: any; +} +type CoingeckoConfig = { + coingeckoApiKey: string; + tokensPerPriceRequest?: number; + isDemoApiKey?: boolean; +}; + +/** + * Splits a poolId into its components, i.e. pool address, pool specialization and its nonce + * @param poolId - a bytes32 string of the pool's ID + * @returns an object with the decomposed poolId + */ +declare const splitPoolId: (poolId: string) => { + address: string; + specialization: PoolSpecialization; + nonce: BigNumber; +}; +/** + * Extracts a pool's address from its poolId + * @param poolId - a bytes32 string of the pool's ID + * @returns the pool's address + */ +declare const getPoolAddress: (poolId: string) => string; +/** + * Extracts a pool's specialization from its poolId + * @param poolId - a bytes32 string of the pool's ID + * @returns the pool's specialization + */ +declare const getPoolSpecialization: (poolId: string) => PoolSpecialization; +/** + * Extracts a pool's nonce from its poolId + * @param poolId - a bytes32 string of the pool's ID + * @returns the pool's nonce + */ +declare const getPoolNonce: (poolId: string) => BigNumber; + +interface TokenAmounts { + [token: string]: string; +} +interface SwapsOptions { + maxPools?: number; + gasPrice?: string; + deadline?: string; + maxSlippage?: number; +} +declare enum SwapType { + SwapExactIn = 0, + SwapExactOut = 1 +} +type FundManagement = { + sender: string; + recipient: string; + fromInternalBalance: boolean; + toInternalBalance: boolean; +}; +type SingleSwap = { + poolId: string; + kind: SwapType; + assetIn: string; + assetOut: string; + amount: BigNumberish; + userData: string; +}; +type Swap = { + request: SingleSwap; + funds: FundManagement; + limit: BigNumberish; + deadline: BigNumberish; + value?: BigNumberish; + outputReference?: BigNumberish; +}; +type BatchSwapStep = { + poolId: string; + assetInIndex: number; + assetOutIndex: number; + amount: string; + userData: string; +}; +type BatchSwap = { + kind: SwapType; + swaps: BatchSwapStep[]; + assets: string[]; + funds: FundManagement; + limits: BigNumberish[]; + deadline: BigNumberish; + value?: BigNumberish; + outputReferences?: { + index: BigNumberish; + key: BigNumberish; + }[]; +}; +interface SwapInput { + tokenIn: string; + tokenOut: string; + swapType: SwapType; + amount: string; +} +interface QuerySimpleFlashSwapParameters { + poolIds: string[]; + assets: BatchSwap['assets']; + flashLoanAmount: string; + vaultContract: Vault; +} +interface SimpleFlashSwapParameters { + poolIds: string[]; + assets: BatchSwap['assets']; + flashLoanAmount: string; + walletAddress: string; +} +interface QuerySimpleFlashSwapResponse { + profits: Record; + isProfitable: boolean; +} +interface FindRouteParameters { + tokenIn: string; + tokenOut: string; + amount: BigNumber; + gasPrice: BigNumber; + maxPools?: number; +} +interface BuildTransactionParameters { + userAddress: string; + recipient?: string; + swapInfo: SwapInfo; + kind: SwapType; + deadline: string; + maxSlippage: number; +} +interface SwapTransactionRequest { + to: string; + data: string; + value?: BigNumber; +} +interface SwapAttributes { + to: string; + functionName: string; + attributes: Swap | BatchSwap; + data: string; + value?: BigNumber; +} + +/** + * Helper to create limits using a defined slippage amount. + * @param tokensIn - Array of token in addresses. + * @param tokensOut - Array of token out addresses. + * @param swapType - Type of swap - SwapExactIn or SwapExactOut + * @param deltas - An array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at the same index in the `assets` array. + * @param assets - array contains the addresses of all assets involved in the swaps. + * @param slippage - Slippage to be applied. i.e. 5%=50000000000000000. + * @returns Returns an array (same length as assets) with limits applied for each asset. + */ +declare function getLimitsForSlippage(tokensIn: string[], tokensOut: string[], swapType: SwapType, deltas: BigNumberish[], assets: string[], slippage: BigNumberish): BigNumberish[]; + +interface PoolBPTValue { + address: string; + liquidity: string; +} +declare class Liquidity { + private pools; + private tokenPrices; + constructor(pools: Findable, tokenPrices: Findable); + getLiquidity(pool: Pool$1): Promise; + getBptPrice(pool: Pool$1): Promise; +} + +declare class Swaps { + readonly sor: SOR; + chainId: number; + vaultContract: Vault; + constructor(sorOrConfig: SOR | BalancerSdkConfig); + static getLimitsForSlippage(tokensIn: string[], tokensOut: string[], swapType: SwapType, deltas: string[], assets: string[], slippage: string): string[]; + /** + * Uses SOR to find optimal route for a trading pair and amount + * + * @param FindRouteParameters + * @param FindRouteParameters.tokenIn Address + * @param FindRouteParameters.tokenOut Address + * @param FindRouteParameters.amount BigNumber with a trade amount + * @param FindRouteParameters.gasPrice BigNumber current gas price + * @param FindRouteParameters.maxPools number of pool included in path, default 4 + * @returns Best trade route information + */ + findRouteGivenIn({ tokenIn, tokenOut, amount, gasPrice, maxPools, }: FindRouteParameters): Promise; + /** + * Uses SOR to find optimal route for a trading pair and amount + * + * @param FindRouteParameters + * @param FindRouteParameters.tokenIn Address + * @param FindRouteParameters.tokenOut Address + * @param FindRouteParameters.amount BigNumber with a trade amount + * @param FindRouteParameters.gasPrice BigNumber current gas price + * @param FindRouteParameters.maxPools number of pool included in path, default 4 + * @returns Best trade route information + */ + findRouteGivenOut({ tokenIn, tokenOut, amount, gasPrice, maxPools, }: FindRouteParameters): Promise; + /** + * Uses SOR to find optimal route for a trading pair and amount + * + * @param BuildTransactionParameters + * @param BuildTransactionParameters.userAddress Address + * @param BuildTransactionParameters.swapInfo result of route finding + * @param BuildTransactionParameters.kind 0 - givenIn, 1 - givenOut + * @param BuildTransactionParameters.deadline block linux timestamp as string + * @param BuildTransactionParameters.maxSlippage [bps], eg: 1 === 0.01%, 100 === 1% + * @returns transaction request ready to send with signer.sendTransaction + */ + buildSwap({ userAddress, recipient, swapInfo, kind, deadline, maxSlippage, }: BuildTransactionParameters): SwapAttributes; + /** + * Uses SOR to find optimal route for a trading pair and amount + * and builds a transaction request + * + * @param sender Sender of the swap + * @param recipient Reciever of the swap + * @param tokenIn Address of tokenIn + * @param tokenOut Address of tokenOut + * @param amount Amount of tokenIn to swap as a string with 18 decimals precision + * @param options + * @param options.maxPools number of pool included in path + * @param options.gasPrice BigNumber current gas price + * @param options.deadline BigNumber block timestamp + * @param options.maxSlippage [bps], eg: 1 === 0.01%, 100 === 1% + * @returns transaction request ready to send with signer.sendTransaction + */ + buildRouteExactIn(sender: string, recipient: string, tokenIn: string, tokenOut: string, amount: string, options?: SwapsOptions): Promise; + /** + * Encode batchSwap in an ABI byte string + * + * [See method for a batchSwap](https://dev.balancer.fi/references/contracts/apis/the-vault#batch-swaps). + * + * _NB: This method doesn't execute a batchSwap -- it returns an [ABI byte string](https://docs.soliditylang.org/en/latest/abi-spec.html) + * containing the data of the function call on a contract, which can then be sent to the network to be executed. + * (ex. [sendTransaction](https://web3js.readthedocs.io/en/v1.2.11/web3-eth.html#sendtransaction)). + * + * @param {BatchSwap} batchSwap - BatchSwap information used for query. + * @param {SwapType} batchSwap.kind - either exactIn or exactOut + * @param {BatchSwapSteps[]} batchSwap.swaps - sequence of swaps + * @param {string[]} batchSwap.assets - array contains the addresses of all assets involved in the swaps + * @param {FundManagement} batchSwap.funds - object containing information about where funds should be taken/sent + * @param {number[]} batchSwap.limits - limits for each token involved in the swap, where either the maximum number of tokens to send (by passing a positive value) or the minimum amount of tokens to receive (by passing a negative value) is specified + * @param {string} batchSwap.deadline - time (in Unix timestamp) after which it will no longer attempt to make a trade + * @returns {string} encodedBatchSwapData - Returns an ABI byte string containing the data of the function call on a contract + */ + static encodeBatchSwap(batchSwap: BatchSwap): string; + /** + * Encode simple flash swap into a ABI byte string + * + * A "simple" flash swap is an arbitrage executed with only two tokens and two pools, + * swapping in the first pool and then back in the second pool for a profit. For more + * complex flash swaps, you will have to use the batch swap method. + * + * Learn more: A [Flash Swap](https://dev.balancer.fi/resources/swaps/flash-swaps). + * + * @param {SimpleFlashSwapParameters} params - BatchSwap information used for query. + * @param {string} params.flashLoanAmount - initial input amount for the flash loan (first asset) + * @param {string[]} params.poolIds - array of Balancer pool ids + * @param {string[]} params.assets - array of token addresses + * @param {string} params.walletAddress - array of token addresses + * @returns {string} encodedBatchSwapData - Returns an ABI byte string containing the data of the function call on a contract + */ + static encodeSimpleFlashSwap(params: SimpleFlashSwapParameters): string; + /** + * fetchPools saves updated pools data to SOR internal onChainBalanceCache. + * + * @returns Boolean indicating whether pools data was fetched correctly (true) or not (false). + */ + fetchPools(queryArgs?: GraphQLArgs): Promise; + getPools(): SubgraphPoolBase[]; + /** + * queryBatchSwap simulates a call to `batchSwap`, returning an array of Vault asset deltas. + * @param batchSwap - BatchSwap information used for query. + * @param {SwapType} batchSwap.kind - either exactIn or exactOut. + * @param {BatchSwapStep[]} batchSwap.swaps - sequence of swaps. + * @param {string[]} batchSwap.assets - array contains the addresses of all assets involved in the swaps. + * @returns {Promise} Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the + * Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at + * the same index in the `assets` array. + */ + queryBatchSwap(batchSwap: Pick): Promise; + /** + * Simple interface to test if a simple flash swap is valid and see potential profits. + * + * A "simple" flash swap is an arbitrage executed with only two tokens and two pools, + * swapping in the first pool and then back in the second pool for a profit. For more + * complex flash swaps, you will have to use the batch swap method. + * + * Learn more: A [Flash Swap](https://dev.balancer.fi/resources/swaps/flash-swaps). + * + * _NB: This method doesn't execute a flashSwap + * + * @param {SimpleFlashSwapParameters} params - BatchSwap information used for query. + * @param {string} params.flashLoanAmount - initial input amount for the flash loan (first asset) + * @param {string[]} params.poolIds - array of Balancer pool ids + * @param {string[]} params.assets - array of token addresses + * @returns {Promise<{profits: Record, isProfitable: boolean}>} Returns an ethersjs transaction response + */ + querySimpleFlashSwap(params: Omit): Promise; + /** + * Use SOR to get swapInfo for tokenIn<>tokenOut. + * @param {SwapInput} swapInput - Swap information used for querying using SOR. + * @param {string} swapInput.tokenIn - Addresse of asset in. + * @param {string} swapInput.tokenOut - Addresse of asset out. + * @param {SwapType} swapInput.swapType - Type of Swap, ExactIn/Out. + * @param {string} swapInput.amount - Amount used in swap. + * @returns {Promise} SOR swap info. + */ + getSorSwap(swapInput: SwapInput): Promise; + queryExactIn(swap: SwapInfo): Promise; + queryExactOut(swap: SwapInfo): Promise; + private query; + private assetDeltas; +} + +declare enum PoolKind { + WEIGHTED = 0, + LEGACY_STABLE = 1, + COMPOSABLE_STABLE = 2, + COMPOSABLE_STABLE_V2 = 3 +} +type OutputReference = { + index: number; + key: BigNumber; +}; +interface EncodeBatchSwapInput { + swapType: SwapType; + swaps: BatchSwapStep[]; + assets: string[]; + funds: FundManagement; + limits: string[]; + deadline: BigNumberish; + value: BigNumberish; + outputReferences: OutputReference[]; +} +interface EncodeExitPoolInput { + poolId: string; + poolKind: number; + sender: string; + recipient: string; + outputReferences: OutputReference[]; + exitPoolRequest: ExitPoolRequest$1; +} +interface EncodeJoinPoolInput { + poolId: string; + kind: number; + sender: string; + recipient: string; + joinPoolRequest: JoinPoolRequest$1; + value: BigNumberish; + outputReference: string; +} +interface EncodeWrapAaveDynamicTokenInput { + staticToken: string; + sender: string; + recipient: string; + amount: BigNumberish; + fromUnderlying: boolean; + outputReference: BigNumberish; +} +interface EncodeUnwrapAaveStaticTokenInput { + staticToken: string; + sender: string; + recipient: string; + amount: BigNumberish; + toUnderlying: boolean; + outputReference: BigNumberish; +} +interface EncodeUnwrapInput { + wrappedToken: string; + sender: string; + recipient: string; + amount: BigNumberish; + outputReference: BigNumberish; +} +interface EncodeUnwrapWstETHInput { + sender: string; + recipient: string; + amount: BigNumberish; + outputReference: BigNumberish; +} +type ExitPoolData = ExitPoolRequest$1 & EncodeExitPoolInput; +type JoinPoolData = JoinPoolRequest$1 & EncodeJoinPoolInput; + +declare class Relayer { + static CHAINED_REFERENCE_TEMP_PREFIX: string; + static CHAINED_REFERENCE_READONLY_PREFIX: string; + static encodeApproveVault(tokenAddress: string, maxAmount: string): string; + static encodeSetRelayerApproval(relayerAdress: string, approved: boolean, authorisation: string): string; + static encodeGaugeWithdraw(gaugeAddress: string, sender: string, recipient: string, amount: string): string; + static encodeGaugeDeposit(gaugeAddress: string, sender: string, recipient: string, amount: string): string; + static encodeSwap(params: Swap): string; + static encodeBatchSwap(params: EncodeBatchSwapInput): string; + static encodeExitPool(params: EncodeExitPoolInput): string; + static encodeJoinPool(params: EncodeJoinPoolInput): string; + static encodeWrapAaveDynamicToken(params: EncodeWrapAaveDynamicTokenInput): string; + static encodeUnwrapAaveStaticToken(params: EncodeUnwrapAaveStaticTokenInput): string; + static encodeUnwrapWstETH(params: EncodeUnwrapWstETHInput): string; + static encodeUnwrap(params: EncodeUnwrapInput, linearPoolType: string): string; + static encodePeekChainedReferenceValue(reference: BigNumberish): string; + static toChainedReference(key: BigNumberish, isTemporary?: boolean): BigNumber; + static fromChainedReference(ref: string, isTemporary?: boolean): BigNumber; + /** + * Returns true if `amount` is not actually an amount, but rather a chained reference. + */ + static isChainedReference(amount: string): boolean; + static formatExitPoolInput(params: ExitPoolData): EncodeExitPoolInput; + static formatJoinPoolInput(params: JoinPoolData): EncodeJoinPoolInput; + static signRelayerApproval: (relayerAddress: string, signerAddress: string, signer: JsonRpcSigner, vault: Vault) => Promise; +} + +declare class Subgraph { + readonly url: string; + readonly client: SubgraphClient; + constructor(config: BalancerSdkConfig); + private initClient; +} + +declare class Sor extends SOR { + constructor(sdkConfig: BalancerSdkConfig); + private static getSorConfig; + private static getSorNetworkConfig; + private static getPoolDataService; + private static getTokenPriceService; +} + +declare class Pricing { + private readonly swaps; + constructor(config: BalancerSdkConfig, swaps?: Swaps); + /** + * Retrieves pools using poolDataService. + * @returns {boolean} Boolean indicating whether pools data was fetched correctly (true) or not (false). + */ + fetchPools(): Promise; + /** + * Get currently saved pools list (fetched using fetchPools()). + * @returns {SubgraphPoolBase[]} pools list. + */ + getPools(): SubgraphPoolBase[]; + /** + * Calculates Spot Price for a token pair - finds most liquid path and uses this as reference SP. + * @param { string } tokenIn Token in address. + * @param { string } tokenOut Token out address. + * @param { SubgraphPoolBase[] } pools Optional - Pool data. Will be fetched via dataProvider if not supplied. + * @returns { string } Spot price. + */ + getSpotPrice(tokenIn: string, tokenOut: string, pools?: SubgraphPoolBase[]): Promise; +} + +type Asset = { + priceDelta: number; + weight: number; +}; +type TokenPrices = { + [key: string]: number; +}; +declare class ImpermanentLossService { + private tokenPrices; + private tokenHistoricalPrices; + constructor(tokenPrices: Findable, tokenHistoricalPrices: Findable); + /** + * entry point to calculate impermanent loss. + * + * The function will + * - retrieve the tokens' historical value at the desired time in the future + * - calculate the relative variation between current and historical value + * - return the IL in percentage rounded to 2 decimal places + * + * @param timestamp UNIX timestamp from which the IL is desired + * @param pool the pool + * @returns the impermanent loss as percentage rounded to 2 decimal places + */ + calcImpLoss(timestamp: number, pool: Pool$1): Promise; + calculateImpermanentLoss(poolValueDelta: number, holdValueDelta: number): number; + getPoolValueDelta(assets: Asset[]): number; + getHoldValueDelta(assets: Asset[]): number; + /** + * prepare the data for calculating the impermanent loss + * + * @param entryTimestamp UNIX timestamp from which the IL is desired + * @param pool the pool + * @returns a list of pair weight/price delta for each token in the pool + * @throws BalancerError if + * 1. a token's price is unknown + * 2. a token's weight is unknown + * 3. the user has no liquidity invested in the pool + */ + prepareData(entryTimestamp: number, pool: Pool$1): Promise; + getAssets(poolTokens: PoolToken[], exitPrices: TokenPrices, entryPrices: TokenPrices, weights: number[]): Asset[]; + getDelta(entryPrice: number, exitPrice: number): number; + /** + * returns the list of token's weights. + * + * @param poolTokens the pools' tokens + * @returns the list of token's weights + * @throws BalancerError if a token's weight is missing + * + */ + getWeights(poolTokens: PoolToken[]): number[]; + /** + * get the current's tokens' prices + * @param tokens the pools' tokens + * @returns a list of tokens with prices + */ + getExitPrices(tokens: PoolToken[]): Promise; + /** + * get the tokens' price at a given time + * + * @param timestamp the Unix timestamp + * @param tokenAddresses the tokens' addresses + * @returns a map of tokens' price + */ + getEntryPrices(timestamp: number, tokenAddresses: string[]): Promise; +} + +type SpotPrices = { + [tokenIn: string]: string; +}; +interface Node { + address: string; + id: string; + joinAction: JoinAction; + exitAction: ExitAction; + isProportionalExit: boolean; + type: string; + children: Node[]; + marked: boolean; + index: string; + proportionOfParent: BigNumber; + parent: Node | undefined; + isLeaf: boolean; + spotPrices: SpotPrices; + decimals: number; + balance: string; + priceRate: string; +} +type JoinAction = 'input' | 'batchSwap' | 'wrap' | 'joinPool'; +type ExitAction = 'output' | 'batchSwap' | 'unwrap' | 'exitPool'; +declare class PoolGraph { + private pools; + constructor(pools: Findable); + buildGraphFromRootPool(poolId: string, tokensToUnwrap: string[]): Promise; + getTokenTotal(pool: Pool$1): BigNumber; + buildGraphFromPool(address: string, nodeIndex: number, parent: Node | undefined, proportionOfParent: BigNumber, tokensToUnwrap: string[]): Promise<[Node, number]>; + /** + * Updates isProportionalExit for Node if the pool supports it + * @param pool + * @param node + */ + updateNodeIfProportionalExit(pool: Pool$1, node: Node): void; + createLinearNodeChildren(linearPoolNode: Node, nodeIndex: number, linearPool: Pool$1, tokensToUnwrap: string[]): [Node, number]; + createWrappedTokenNode(linearPool: Pool$1, nodeIndex: number, parent: Node | undefined, proportionOfParent: BigNumber): [Node, number]; + static createInputTokenNode(nodeIndex: number, address: string, decimals: number, parent: Node | undefined, proportionOfParent: BigNumber, balance: string): [Node, number]; + static orderByBfs(root: Node): Node[]; + static getLeafAddresses(nodes: Node[]): string[]; + /** + * Checks if list of Nodes only contains pools that support proportional exits + * @param nodes + * @returns + */ + static isProportionalPools(nodes: Node[]): boolean; + getGraphNodes: (isJoin: boolean, poolId: string, tokensToUnwrap: string[]) => Promise; +} + +interface PoolDictionary { + [poolId: string]: Pool; +} +type Pool = (WeightedPool$1 | StablePool$1 | LinearPool$1 | MetaStablePool | PhantomStablePool | ComposableStablePool$1) & { + SubgraphType: string; +}; +declare class PoolsSource { + private poolDataService; + private wrappedNativeAsset; + poolsArray: SubgraphPoolBase[]; + poolsDict: PoolDictionary; + constructor(poolDataService: PoolDataService, wrappedNativeAsset: string); + dataSource(): PoolDataService; + all(refresh?: boolean): Promise; + parseToPoolsDict(pools: SubgraphPoolBase[]): PoolDictionary; + parseNewPool(subgraphPool: SubgraphPoolBase): Pool | undefined; + /** + * Converts Subgraph array into PoolDictionary + * @param refresh + * @returns + */ + poolsDictionary(refresh?: boolean): Promise; +} + +interface JoinPoolRequest { + actionType: ActionType.Join; + poolId: string; + encodedUserData: string; + outputReference: string; +} + +interface ExitPoolRequest { + actionType: ActionType.Exit; + poolId: string; + encodedUserData: string; + outputReferences: OutputReference[]; +} + +interface SwapRequest extends Pick { + actionType: ActionType.Swap; +} +interface BatchSwapRequest extends Pick { + actionType: ActionType.BatchSwap; +} + +interface UnwrapRequest extends Pick { + poolId: string; + actionType: ActionType.Unwrap; +} + +declare enum ActionType { + BatchSwap = 0, + Join = 1, + Exit = 2, + Swap = 3, + Unwrap = 4 +} +type Requests = BatchSwapRequest | JoinPoolRequest | ExitPoolRequest | SwapRequest | UnwrapRequest; +/** + * Controller / use-case layer for interacting with pools data. + */ +declare class VaultModel { + poolsSource: PoolsSource; + constructor(poolDataService: PoolDataService, wrappedNativeAsset: string); + updateDeltas(deltas: Record, assets: string[], amounts: string[]): Record; + multicall(rawCalls: Requests[], refresh?: boolean): Promise>; + static mapSwapRequest(call: Swap): SwapRequest; + static mapBatchSwapRequest(call: EncodeBatchSwapInput): BatchSwapRequest; + static mapJoinPoolRequest(call: EncodeJoinPoolInput): JoinPoolRequest; + static mapExitPoolRequest(call: EncodeExitPoolInput): ExitPoolRequest; + static mapUnwrapRequest(amount: BigNumberish, outputReference: BigNumberish, poolId: string): UnwrapRequest; +} + +declare enum SimulationType { + Tenderly = 0, + VaultModel = 1, + Static = 2 +} +/** + * Simulation module is responsible for simulating the results of a generalised + * join or exit using different types of simulation, such as: + * - Tenderly: uses Tenderly Simulation API (third party service) + * - VaultModel: uses TS math, which may be less accurate (min. 99% accuracy) + * - Static: uses staticCall, which is 100% accurate but requires vault approval + * + * This module allows a user to perform a simulation and check for expected + * amounts out in order to make an informed decision on whether to proceed with + * the transaction. These expected amounts out can be used as limits to prevent + * frontrunning and ensure that the transaction will return minimum amounts out. + */ +declare class Simulation { + private tenderlyHelper?; + private vaultModel; + constructor(networkConfig: BalancerNetworkConfig, poolDataService?: PoolDataService); + simulateGeneralisedJoin: (to: string, multiRequests: Requests[][], encodedCall: string, outputIndexes: number[], userAddress: string, tokensIn: string[], signer: JsonRpcSigner, simulationType: SimulationType, value: string) => Promise; + simulateGeneralisedExit: (to: string, multiRequests: Requests[][], encodedCall: string, outputIndexes: number[], userAddress: string, tokenIn: string, signer: JsonRpcSigner, simulationType: SimulationType) => Promise; + private decodeResult; + private simulateRequests; +} + +declare class Join { + private poolGraph; + private simulationService; + private relayer; + private wrappedNativeAsset; + constructor(poolGraph: PoolGraph, networkConfig: BalancerNetworkConfig, simulationService: Simulation); + private checkInputs; + joinPool(poolId: string, tokensIn: string[], amountsIn: string[], userAddress: string, slippage: string, signer: JsonRpcSigner, simulationType: SimulationType, authorisation?: string): Promise<{ + to: string; + encodedCall: string; + expectedOut: string; + minOut: string; + priceImpact: string; + value: BigNumberish; + }>; + private assertDeltas; + static getJoinPaths: (orderedNodes: Node[], tokensIn: string[], amountsIn: string[]) => Node[][]; + private static updateInputAmounts; + private createCalls; + static totalBptZeroPriceImpact: (joinPaths: Node[][]) => BigNumber; + static bptOutZeroPiForInputNode: (inputNode: Node) => bigint; + private amountsOutByJoinPath; + private minAmountsOutByJoinPath; + private updateDeltas; + private createActionCalls; + /** + * Creates a map of node address and total proportion. Used for the case where there may be multiple inputs using same token, e.g. DAI input to 2 pools. + * @param nodes nodes to consider. + */ + static updateTotalProportions: (nodes: Node[]) => Record; + /** + * Uses relayer to approve itself to act in behalf of the user + * + * @param authorisation Encoded authorisation call. + * @returns relayer approval call + */ + private createSetRelayerApproval; + static updateNodeAmount: (node: Node, tokensIn: string[], amountsIn: string[], totalProportions: Record) => Node; + private createSwap; + private createJoinPool; + private getOutputRefValue; + private shouldBeConsidered; + private sendsToInternalBalance; + private allImmediateChildrenSendToInternal; + private allSiblingsSendToInternal; + private replaceWrappedNativeAsset; +} + +interface GeneralisedExitOutput { + to: string; + encodedCall: string; + tokensOut: string[]; + expectedAmountsOut: string[]; + minAmountsOut: string[]; + priceImpact: string; +} +interface ExitInfo { + tokensOut: string[]; + estimatedAmountsOut: string[]; + priceImpact: string; + tokensToUnwrap: string[]; +} +declare class Exit { + private poolGraph; + private simulationService; + private wrappedNativeAsset; + private relayer; + constructor(poolGraph: PoolGraph, networkConfig: BalancerNetworkConfig, simulationService: Simulation); + getExitInfo(poolId: string, amountBptIn: string, userAddress: string, signer: JsonRpcSigner): Promise<{ + tokensOut: string[]; + estimatedAmountsOut: string[]; + priceImpact: string; + tokensToUnwrap: string[]; + }>; + buildExitCall(poolId: string, amountBptIn: string, userAddress: string, slippage: string, signer: JsonRpcSigner, simulationType: SimulationType.Static | SimulationType.Tenderly, authorisation?: string, tokensToUnwrap?: string[]): Promise<{ + to: string; + encodedCall: string; + tokensOut: string[]; + expectedAmountsOut: string[]; + minAmountsOut: string[]; + priceImpact: string; + }>; + private getExit; + private calculatePriceImpact; + private assertDeltas; + private amountsOutByExitPath; + private amountsOutByTokenOut; + private minAmountsOut; + private getExitPaths; + private createCalls; + private updateDeltas; + private createActionCalls; + private createUnwrap; + private createSwap; + private createBatchSwap; + private createExitPool; + private createExitPoolProportional; + private getOutputRef; + private receivesFromInternal; +} + +declare class PoolVolume { + private yesterdaysPools; + constructor(yesterdaysPools: Findable | undefined); + last24h(pool: Pool$1): Promise; +} + +declare class PoolFees { + private yesterdaysPools; + constructor(yesterdaysPools: Findable | undefined); + last24h(pool: Pool$1): Promise; +} + +type CreatePoolParameters = { + name: string; + symbol: string; + tokenAddresses: string[]; + swapFeeEvm: string; + owner: string; + salt?: BytesLike$1; +}; +interface ComposableStableCreatePoolParameters extends CreatePoolParameters { + amplificationParameter: string; + rateProviders: string[]; + tokenRateCacheDurations: string[]; + exemptFromYieldProtocolFeeFlags: boolean[]; + salt?: BytesLike$1; +} +interface WeightedCreatePoolParameters extends CreatePoolParameters { + rateProviders: string[]; + normalizedWeights: BigNumberish[]; +} +type LinearCreatePoolParameters = Pick & { + mainToken: string; + wrappedToken: string; + upperTargetEvm: string; + protocolId: ProtocolId; +}; +interface InitJoinPoolParameters { + joiner: string; + poolId: string; + poolAddress: string; + tokensIn: string[]; + amountsIn: string[]; +} +interface InitJoinPoolAttributes { + to: string; + functionName: string; + attributes: JoinPool; + data: string; + value?: BigNumber; +} +declare enum ProtocolId { + AAVE_V1 = 0, + AAVE_V2 = 1, + AAVE_V3 = 2, + AMPLEFORTH = 3, + BEEFY = 4, + EULER = 5, + GEARBOX = 6, + IDLE = 7, + MORPHO = 8, + RADIANT = 9, + REAPER = 10, + SILO = 11, + STARGATE = 12, + STURDY = 13, + TESSERA = 14, + TETU = 15, + YEARN = 16, + MIDAS = 17, + AGAVE = 18 +} +type JoinPoolDecodedAttributes = { + poolId: string; + sender: string; + recipient: string; + joinPoolRequest: JoinPoolRequestDecodedAttributes; +}; +type JoinPoolRequestDecodedAttributes = { + assets: string[]; + maxAmountsIn: string[]; + userData: string; + fromInternalBalance: boolean; +}; +type LinearPoolInterface = ERC4626LinearPoolInterface | EulerLinearPoolInterface | AaveLinearPoolInterface | YearnLinearPoolInterface | GearboxLinearPoolInterface; +type LinearPoolFactoryInterface = AaveLinearPoolFactoryInterface | ERC4626LinearPoolFactoryInterface | EulerLinearPoolFactoryInterface | GearboxLinearPoolFactoryInterface | YearnLinearPoolFactoryInterface; + +interface PoolFactory { + buildInitJoin: (parameters: InitJoinPoolParameters) => InitJoinPoolAttributes; + getPoolAddressAndIdWithReceipt: (provider: JsonRpcProvider, receipt: TransactionReceipt) => Promise<{ + poolId: string; + poolAddress: string; + }>; + create(parameters: ComposableStableCreatePoolParameters | WeightedCreatePoolParameters | LinearCreatePoolParameters): { + to?: string; + data: BytesLike$1; + }; + getPoolInterface(): WeightedPoolInterface | ComposableStablePoolInterface | LinearPoolInterface; +} + +/** + * Wrapper around pool type specific methods. + * + * Returns a class instance of a type specific factory. + */ +declare class PoolFactory__factory { + networkConfig: BalancerNetworkConfig; + contracts: ContractInstances; + constructor(networkConfig: BalancerNetworkConfig, balancerContracts: Contracts); + of(poolType: PoolType): PoolFactory; +} + +/** + * Returns BAL emissions per pool + */ +declare class EmissionsService { + private liquidityGaugesRepository; + constructor(liquidityGaugesRepository: Findable); + relativeWeight(poolId: string): Promise; + weekly(poolId: string): Promise; +} + +/** + * Controller / use-case layer for interacting with pools data. + */ +declare class Pools implements Findable { + private networkConfig; + private repositories; + private balancerContracts; + aprService: PoolApr; + liquidityService: Liquidity; + joinService: Join; + exitService: Exit; + feesService: PoolFees; + volumeService: PoolVolume; + simulationService: Simulation; + poolFactory: PoolFactory__factory; + impermanentLossService: ImpermanentLossService; + graphService: PoolGraph; + emissionsService: EmissionsService | undefined; + proportionalAmounts: (pool: { + id: string; + tokens: { + address: string; + balance: string; + decimals?: number | undefined; + }[]; + }, token: string, amount: string) => { + tokens: string[]; + amounts: string[]; + }; + constructor(networkConfig: BalancerNetworkConfig, repositories: BalancerDataRepositories, balancerContracts: Contracts); + static wrap(pool: Pool$1, networkConfig: BalancerNetworkConfig): PoolWithMethods; + dataSource(): Findable & Searchable; + /** + * Calculates APR on any pool data + * + * @param pool + * @returns + */ + apr(pool: Pool$1): Promise; + /** + * Calculates Impermanent Loss on any pool data + * + * @param timestamp + * @param pool + * @returns + */ + impermanentLoss(timestamp: number, pool: Pool$1): Promise; + /** + * Calculates total pool liquidity in USD + * + * @param pool + * @returns total pool liquidity in USD + */ + liquidity(pool: Pool$1): Promise; + /** + * Calculates pool's BPT price in USD + * + * @param pool + * @returns pool's BPT price in USD + */ + bptPrice(pool: Pool$1): Promise; + /** + * Builds join transaction + * + * @param pool Pool + * @param tokensIn Token addresses + * @param amountsIn Token amounts in EVM scale + * @param userAddress User address + * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%. + * @returns Transaction object + * @throws Error if pool type is not implemented + */ + buildJoin({ pool, tokensIn, amountsIn, userAddress, slippage, }: { + pool: Pool$1; + tokensIn: string[]; + amountsIn: string[]; + userAddress: string; + slippage: string; + }): JoinPoolAttributes; + buildExitExactBPTIn({ pool, bptAmount, userAddress, slippage, shouldUnwrapNativeAsset, singleTokenOut, }: { + pool: Pool$1; + bptAmount: string; + userAddress: string; + slippage: string; + shouldUnwrapNativeAsset?: boolean; + singleTokenOut?: string; + }): ExitExactBPTInAttributes; + buildRecoveryExit({ pool, bptAmount, userAddress, slippage, toInternalBalance, }: { + pool: Pool$1; + bptAmount: string; + userAddress: string; + slippage: string; + toInternalBalance?: boolean; + }): ExitExactBPTInAttributes; + /** + * Builds generalised join transaction + * + * @param poolId Pool id + * @param tokens Token addresses + * @param amounts Token amounts in EVM scale + * @param userAddress User address + * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%. + * @param signer JsonRpcSigner that will sign the staticCall transaction if Static simulation chosen + * @param simulationType Simulation type (VaultModel, Tenderly or Static) + * @param authorisation Optional auhtorisation call to be added to the chained transaction + * @returns transaction data ready to be sent to the network along with min and expected BPT amounts out. + */ + generalisedJoin(poolId: string, tokens: string[], amounts: string[], userAddress: string, slippage: string, signer: JsonRpcSigner, simulationType: SimulationType, authorisation?: string): Promise<{ + to: string; + encodedCall: string; + minOut: string; + expectedOut: string; + priceImpact: string; + value: BigNumberish; + }>; + /** + * Builds generalised exit transaction + * + * @param poolId Pool id + * @param amount Token amount in EVM scale + * @param userAddress User address + * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%. + * @param signer JsonRpcSigner that will sign the staticCall transaction if Static simulation chosen + * @param simulationType Simulation type (Tenderly or Static) - VaultModel should not be used to build exit transaction + * @param authorisation Optional auhtorisation call to be added to the chained transaction + * @param tokensToUnwrap List all tokens that requires exit by unwrapping - info provided by getExitInfo + * @returns transaction data ready to be sent to the network along with tokens, min and expected amounts out. + */ + generalisedExit(poolId: string, amount: string, userAddress: string, slippage: string, signer: JsonRpcSigner, simulationType: SimulationType.Static | SimulationType.Tenderly, authorisation?: string, tokensToUnwrap?: string[]): Promise; + /** + * Calculates price impact for an action on a pool + * + * @param pool + * @returns percentage as a string in EVM scale + */ + calcPriceImpact({ pool, tokenAmounts, bptAmount, isJoin, }: { + pool: Pool$1; + tokenAmounts: string[]; + bptAmount: string; + isJoin: boolean; + }): string; + /** + * Gets info required to build generalised exit transaction + * + * @param poolId Pool id + * @param amountBptIn BPT amount in EVM scale + * @param userAddress User address + * @param signer JsonRpcSigner that will sign the staticCall transaction if Static simulation chosen + * @returns info required to build a generalised exit transaction including whether tokens need to be unwrapped + */ + getExitInfo(poolId: string, amountBptIn: string, userAddress: string, signer: JsonRpcSigner): Promise; + /** + * Calculates total fees for the pool in the last 24 hours + * + * @param pool + * @returns + */ + fees(pool: Pool$1): Promise; + /** + * Calculates total volume of the pool in the last 24 hours + * + * @param pool + * @returns + */ + volume(pool: Pool$1): Promise; + find(id: string): Promise; + findBy(param: string, value: string): Promise; + all(): Promise; + where(filter: (pool: Pool$1) => boolean): Promise; +} + +/** + * @param user - user address + * @param from - pool ID + * @param to - pool ID + * @param balance - amount of liquidity to migrate in WAL (wei-ether) + * @param minBptOut - minimum amount of BPT to receive, when 0 it will include a peek for the amount + * @param authorisation - signed user's authorisation to approve relayer in the vault + */ +interface MigrationParams { + user: string; + from: string; + to: string; + balance: string; + minBptOut?: string; + authorisation?: string; +} +/** + * Class responsible for building liquidity migration transactions. + */ +declare class Migrations { + relayerAddress: string; + poolsRepository: Findable; + gaugesRepository: Findable; + provider: JsonRpcProvider; + /** + * Instance of a class responsible for building liquidity migration transactions. + * + * @param relayerAddress Address of the relayer contract. + * @param poolsRepository Repository of pools. + * @param liquidityGaugesRepository Repository of liquidity gauges. + * @param provider Provider to use for RPC data fetching. + * + * Available methods: + * - `pool2pool` - Migrates liquidity from one pool to another. + * - `pool2poolWithGauges` - Migrates liquidity from a pool's gauge to another gauge. + * - `gauge2gauge` - Migrates liquidity from one gauge to another of the same pool. + * + * @example + * ```typescript + * const sdk = new BalancerSDK({ + * network: 1, + * rpcUrl: 'https://rpc.ankr.com/eth', + * }) + * + * const migrations = new Migrations({ + * relayerAddress: sdk.networkConfig.addresses.contracts.relayerV4 as string, + * poolsRepository: sdk.data.pools, + * gaugesRepository: sdk.data.liquidityGauges.subgraph, + * provider: sdk.provider + * }) + * + * const user = '0xfacec29Ae158B26e234B1a81Db2431F6Bd8F8cE8' + * const from = '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080' + * const to = '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080' + * const balance = '1000000000000000000' + * const { to, data } = await migrations.pool2pool({ user, from, to, balance }) + * + * const tx = await sdk.provider.sendTransaction({ to, data }) + * ``` + */ + constructor({ relayerAddress, poolsRepository, gaugesRepository, provider, }: { + relayerAddress: string; + poolsRepository: Findable; + gaugesRepository: Findable; + provider: JsonRpcProvider; + }); + /** + * Takes user, from and to pool IDs as strings and returns the transaction data + * + * @returns transaction data + */ + pool2pool({ user, from, to, balance, minBptOut, authorisation, }: MigrationParams): Promise<{ + to: string; + data: string; + }>; + /** + * Takes user, from and to pool IDs as strings and returns the transaction data + * for a migration including unstaking and restaking + * + * @returns transaction data + */ + pool2poolWithGauges({ user, from, to, balance, minBptOut, authorisation, }: MigrationParams): Promise<{ + to: string; + data: string; + }>; + /** + * Migrates staked liquidity for the same pool from one gauge to another. + * + * @returns transaction data + */ + gauge2gauge({ user, from, to, balance, authorisation, }: MigrationParams): Promise<{ + to: string; + data: string; + }>; + /** + * Decodes the relayer return value to get the expected BPT out. + * + * @param relayerReturnValue + * @returns + */ + static getExpectedBptOut: (relayerReturnValue: string) => string; + getExpectedBptOut: (relayerReturnValue: string) => string; +} + +interface BalancerSDKRoot { + config: BalancerSdkConfig; + sor: Sor; + subgraph: Subgraph; + pools: Pools; + data: Data; + swaps: Swaps; + relayer: Relayer; + networkConfig: BalancerNetworkConfig; + provider: JsonRpcProvider; + claimService?: IClaimService; +} +declare class BalancerSDK implements BalancerSDKRoot { + config: BalancerSdkConfig; + sor: Sor; + subgraph: Subgraph; + readonly swaps: Swaps; + readonly relayer: Relayer; + readonly pricing: Pricing; + readonly pools: Pools; + readonly data: Data; + balancerContracts: Contracts; + vaultModel: VaultModel; + readonly networkConfig: BalancerNetworkConfig; + readonly provider: JsonRpcProvider; + readonly claimService?: IClaimService; + readonly migrationService?: Migrations; + constructor(config: BalancerSdkConfig, sor?: Sor, subgraph?: Subgraph); + /** + * Expose balancer contracts, e.g. Vault, LidoRelayer. + */ + get contracts(): ContractInstances; +} + +declare function canUseJoinExit(swapType: SwapTypes, tokenIn: string, tokenOut: string): boolean; +/** + * Find if any of the swaps are join/exits. If yes these swaps should be routed via Relayer. + * @param pools + * @param swaps + * @param assets + * @returns + */ +declare function someJoinExit(pools: SubgraphPoolBase[], swaps: SwapV2[], assets: string[]): boolean; +/** + * Given swapInfo from the SOR construct the Relayer multicall to execture swaps/joins/exits. + * @param swapInfo Returned from SOR + * @param swapType Only supports ExactIn + * @param pools Pool info from SOR + * @param user Address of user + * @param relayerAddress Address of Relayer (>=V4) + * @param wrappedNativeAsset Address of Native asset + * @param slippage [bps], eg: 1 === 0.01%, 100 === 1% + * @param authorisation Encoded authorisation call. + * @returns + */ +declare function buildRelayerCalls(swapInfo: SwapInfo, pools: SubgraphPoolBase[], user: string, relayerAddress: string, wrappedNativeAsset: string, slippage: string, authorisation: string | undefined): { + to: string; + data: string; + rawCalls: string[]; + inputs: (EncodeBatchSwapInput | ExitPoolData | EncodeJoinPoolInput)[]; +}; + +declare enum BalancerErrorCode { + ABOVE_MAX_TOKENS = "ABOVE_MAX_TOKENS", + BELOW_MIN_TOKENS = "BELOW_MIN_TOKENS", + EXIT_DELTA_AMOUNTS = "EXIT_DELTA_AMOUNTS", + FEE_PROVIDER_NOT_PROVIDED = "FEE_PROVIDER_NOT_PROVIDED", + GAUGES_HELPER_ADDRESS_NOT_PROVIDED = "GAUGES_HELPER_ADDRESS_NOT_PROVIDED", + GAUGES_NOT_FOUND = "GAUGES_NOT_FOUND", + GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED = "GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED", + GAUGES_REWARD_TOKEN_EMPTY = "GAUGES_REWARD_TOKEN_EMPTY", + ILLEGAL_PARAMETER = "ILLEGAL_PARAMETER", + INTERNAL_ERROR_INVALID_ABI = "INTERNAL_ERROR_INVALID_ABI", + INPUT_LENGTH_MISMATCH = "INPUT_LENGTH_MISMATCH", + INPUT_OUT_OF_BOUNDS = "INPUT_OUT_OF_BOUNDS", + INPUT_TOKEN_INVALID = "INPUT_TOKEN_INVALID", + INVALID_PROTOCOL_ID = "INVALID_PROTOCOL_ID", + INVALID_SWAP_FEE_PERCENTAGE = "INVALID_SWAP_FEE_PERCENTAGE", + INVALID_WEIGHTS = "INVALID_WEIGHTS", + JOIN_DELTA_AMOUNTS = "JOIN_DELTA_AMOUNTS", + JOIN_WITH_ZERO_AMOUNT = "JOIN_WITH_ZERO_AMOUNT", + MISSING_AMP = "MISSING_AMP", + MISSING_DECIMALS = "MISSING_DECIMALS", + MISSING_PRICE_RATE = "MISSING_PRICE_RATE", + MISSING_TOKENS = "MISSING_TOKENS", + MISSING_WEIGHT = "MISSING_WEIGHT", + NO_POOL_DATA = "NO_POOL_DATA", + NO_VALUE_PARAMETER = "NO_VALUE_PARAMETER", + POOL_DOESNT_EXIST = "POOL_DOESNT_EXIST", + QUERY_BATCH_SWAP = "QUERY_BATCH_SWAP", + RELAY_SWAP_AMOUNTS = "RELAY_SWAP_AMOUNTS", + REWARD_TOKEN_ZERO = "REWARD_TOKEN_ZERO", + TIMESTAMP_IN_THE_FUTURE = "TIMESTAMP_IN_THE_FUTURE", + TOKEN_MISMATCH = "TOKEN_MISMATCH", + UNSUPPORTED_PAIR = "UNSUPPORTED_PAIR", + UNSUPPORTED_POOL_TYPE = "UNSUPPORTED_POOL_TYPE", + UNSUPPORTED_POOL_TYPE_VERSION = "UNSUPPORTED_POOL_TYPE_VERSION" +} +declare class BalancerError extends Error { + code: BalancerErrorCode; + constructor(code: BalancerErrorCode); + static getMessage(code: BalancerErrorCode): string; +} + +declare const BALANCER_NETWORK_CONFIG: Record; + +export { AMP_PRECISION, APR_THRESHOLD, AaveLinearPool, AaveLinearPoolFactory, AaveLinearPoolFactory__factory, AaveLinearPool__factory, AaveRates, AaveWrapping, AaveWrapping__factory, Account, Address, AprBreakdown, AssetHelpers, Authoriser, Authoriser__factory, BALANCER_NETWORK_CONFIG, BalancerAPIArgsFormatter, BalancerDataRepositories, BalancerError, BalancerErrorCode, BalancerErrors, BalancerHelpers, BalancerHelpers__factory, BalancerMinter, BalancerMinterAuthorization, BalancerMinter__factory, BalancerNetworkConfig, BalancerPoolDataQueries, BalancerPoolDataQueries__factory, BalancerRelayer, BalancerRelayer__factory, BalancerSDK, BalancerSDKRoot, BalancerSdkConfig, BalancerSdkSorConfig, BalancerTenderlyConfig, BaseFeeDistributor, BasePoolEncoder, BatchRelayerLibrary, BatchRelayerLibrary__factory, BatchSwap, BatchSwapStep, BlockNumberRepository, BuildTransactionParameters, Cacheable, CoingeckoConfig, CoingeckoHistoricalPriceRepository, CoingeckoPriceRepository, ComposableStableCreatePoolParameters, ComposableStablePool, ComposableStablePoolEncoder, ComposableStablePoolExitKind, ComposableStablePoolFactory, ComposableStablePoolFactory__factory, ComposableStablePoolJoinKind, ComposableStablePool__factory, ContractAddresses, ConvergentCurvePool, ConvergentCurvePool__factory, CreatePoolParameters, Currency, Data, Debouncer, ERC20, ERC20__factory, ERC4626LinearPool, ERC4626LinearPoolFactory, ERC4626LinearPoolFactory__factory, ERC4626LinearPool__factory, EncodeBatchSwapInput, EncodeExitPoolInput, EncodeJoinPoolInput, EncodeUnwrapAaveStaticTokenInput, EncodeUnwrapInput, EncodeUnwrapWstETHInput, EncodeWrapAaveDynamicTokenInput, EulerLinearPool, EulerLinearPoolFactory, EulerLinearPoolFactory__factory, EulerLinearPool__factory, ExitPoolData, ExitPoolRequest$1 as ExitPoolRequest, FXPool, FXPool__factory, FeeCollectorRepository, FeeDistributorData, FeeDistributorRepository, FindRouteParameters, Findable, FundManagement, GaugeClaimHelper, GaugeClaimHelper__factory, GaugeControllerMulticallRepository, GaugeShare, GaugeShareAttributes, GaugeSharesRepository, GearboxLinearPool, GearboxLinearPoolFactory, GearboxLinearPoolFactory__factory, GearboxLinearPool__factory, GraphQLArgs, GraphQLArgsBuilder, GraphQLArgsFormatter, GraphQLFilter, GraphQLFilterOperator, GraphQLQuery, GyroConfig, GyroConfig__factory, GyroEV2, GyroEV2__factory, HistoricalPriceProvider, HistoricalPrices, IAaveRates, InitJoinPoolAttributes, InitJoinPoolParameters, JoinPoolData, JoinPoolDecodedAttributes, JoinPoolRequest$1 as JoinPoolRequest, JoinPoolRequestDecodedAttributes, LidoRelayer, LidoRelayer__factory, LinearCreatePoolParameters, LinearPool, LinearPoolFactoryInterface, LinearPoolInterface, LinearPool__factory, Liquidity, LiquidityGauge, LiquidityGaugeSubgraphRPCProvider, LiquidityGaugeV5, LiquidityGaugeV5__factory, LiquidityGaugesMulticallRepository, LiquidityGaugesSubgraphRepository, ManagedPoolEncoder, Migrations, Multicall, Multicall3, Multicall3__factory, Multicall__factory, NamedPools, Network, OnchainPoolData, OnchainTokenData, OutputReference, POOLS, Pool$1 as Pool, PoolAttribute, PoolBPTValue, PoolBalanceOp, PoolBalanceOpKind, PoolGauges, PoolGaugesAttributes, PoolGaugesRepository, PoolJoinExit, PoolJoinExitAttributes, PoolJoinExitRepository, PoolKind, PoolReference, PoolRepository, PoolShare, PoolShareAttributes, PoolSharesRepository, PoolSpecialization, PoolToken, PoolType, PoolWithMethods, Pools, PoolsBalancerAPIRepository, PoolsFallbackRepository, PoolsFallbackRepositoryOptions, PoolsRepositoryFetchOptions, PoolsStaticRepository, PoolsSubgraphOnChainRepository, PoolsSubgraphRepository, Price, PriceRateProvider, ProtocolFees, ProtocolFeesProvider, ProtocolId, QuerySimpleFlashSwapParameters, QuerySimpleFlashSwapResponse, Relayer, RelayerAction, RelayerAuthorization, RewardData, SHALLOW_COMPOSABLE_STABLE_BUFFER, Searchable, SimpleFlashSwapParameters, SimulationType, SingleSwap, Sor, StablePhantomPoolJoinKind, StablePool, StablePoolEncoder, StablePoolExitKind, StablePoolJoinKind, StablePool__factory, StaticATokenRateProvider, StaticATokenRateProvider__factory, StaticTokenPriceProvider, StaticTokenProvider, SubPool, SubPoolMeta, Subgraph, SubgraphArgsFormatter, SubgraphPriceRepository, Swap, SwapAttributes, SwapInput, SwapTransactionRequest, SwapType, Swaps, SwapsOptions, Token, TokenAmounts, TokenAttribute, TokenPriceProvider, TokenPrices$1 as TokenPrices, TokenProvider, TokenYieldsRepository, TransactionData, UserBalanceOp, UserBalanceOpKind, Vault, Vault__factory, VeBal$1 as VeBal, VeBal__factory, VeDelegationProxy, VeDelegationProxy__factory, WeightedCreatePoolParameters, WeightedPool, WeightedPoolEncoder, WeightedPoolExitKind, WeightedPoolFactory, WeightedPoolFactory__factory, WeightedPoolJoinKind, WeightedPool__factory, YearnLinearPool, YearnLinearPoolFactory, YearnLinearPoolFactory__factory, YearnLinearPool__factory, accountToAddress, addSlippage, addressMapIn, emissions as balEmissions, bn, buildRelayerCalls, canUseJoinExit, index as factories, fetchOnChainPoolData, findEventInReceiptLogs, formatFixed, formatFromBigInt18, getEthValue, getLimitsForSlippage, getOnChainBalances, getPoolAddress, getPoolNonce, getPoolSpecialization, getRandomBytes32, insert, isLinearish, isNormalizedWeights, isSameAddress, mulSlippage, parseFixed, parsePoolInfo, parseToBigInt18, removeItem, reorderArrays, replace, signPermit, someJoinExit, splitPoolId, subSlippage, toNormalizedWeights, tokenAddressForPricing, tokensToTokenPrices, truncateAddresses, unwrapToken, wrappedTokensMap, yieldTokens }; diff --git a/package/dist/index.esm.js b/package/dist/index.esm.js new file mode 100644 index 000000000..517a91a49 --- /dev/null +++ b/package/dist/index.esm.js @@ -0,0 +1,515 @@ +import{defaultAbiCoder as e,Interface as t}from"@ethersproject/abi";import{WeiPerEther as a,Zero as n,AddressZero as o,MaxUint256 as i,MaxInt256 as s,HashZero as r}from"@ethersproject/constants";import{BigNumber as p,parseFixed as d,formatFixed as l}from"@ethersproject/bignumber";import{getAddress as u}from"@ethersproject/address";import{hexZeroPad as c,hexValue as y,splitSignature as b,arrayify as m,hexlify as f,concat as T,zeroPad as h}from"@ethersproject/bytes";import{Signer as I}from"@ethersproject/abstract-signer";import{mergeWith as _,set as g,parseInt as P,keyBy as w,sum as x,pickBy as E,zipObject as A,identity as v,cloneDeep as S}from"lodash";import{utils as k,Contract as O}from"ethers";import*as M from"@balancer-labs/sor";import{StablePool as C,ZERO as F,PhantomStablePool as B,StableMathBigInt as R,WeightedMaths as N,WeightedPool as L,MetaStablePool as D,LinearPool as U,SwapTypes as V,SOR as q,parseToPoolsDict as G,getSpotPriceAfterSwapForPath as W,bnum as $,ComposableStablePool as H}from"@balancer-labs/sor";export{PoolFilter,SOR,SwapTypes,stableBPTForTokensZeroPriceImpact,weightedBPTForTokensZeroPriceImpact}from"@balancer-labs/sor";import{JsonRpcProvider as K}from"@ethersproject/providers";import{GraphQLClient as J,gql as X,request as Y}from"graphql-request";import{parse as j}from"graphql";import z from"axios";import{Contract as Z}from"@ethersproject/contracts";import{jsonToGraphQLQuery as Q}from"json-to-graphql-query";var ee,te,ae,ne,oe,ie;!function(e){e[e.RECOVERY_MODE=255]="RECOVERY_MODE"}(ee||(ee={}));class se{}se.recoveryModeExit=t=>e.encode(["uint256","uint256"],[ee.RECOVERY_MODE,t]),function(e){e[e.INIT=0]="INIT",e[e.EXACT_TOKENS_IN_FOR_BPT_OUT=1]="EXACT_TOKENS_IN_FOR_BPT_OUT",e[e.TOKEN_IN_FOR_EXACT_BPT_OUT=2]="TOKEN_IN_FOR_EXACT_BPT_OUT"}(te||(te={})),function(e){e[e.INIT=0]="INIT",e[e.COLLECT_PROTOCOL_FEES=1]="COLLECT_PROTOCOL_FEES"}(ae||(ae={})),function(e){e[e.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT=0]="EXACT_BPT_IN_FOR_ONE_TOKEN_OUT",e[e.EXACT_BPT_IN_FOR_TOKENS_OUT=1]="EXACT_BPT_IN_FOR_TOKENS_OUT",e[e.BPT_IN_FOR_EXACT_TOKENS_OUT=2]="BPT_IN_FOR_EXACT_TOKENS_OUT"}(ne||(ne={}));class re{constructor(){}}re.joinInit=t=>e.encode(["uint256","uint256[]"],[te.INIT,t]),re.joinCollectProtocolFees=()=>e.encode(["uint256"],[ae.COLLECT_PROTOCOL_FEES]),re.joinExactTokensInForBPTOut=(t,a)=>e.encode(["uint256","uint256[]","uint256"],[te.EXACT_TOKENS_IN_FOR_BPT_OUT,t,a]),re.joinTokenInForExactBPTOut=(t,a)=>e.encode(["uint256","uint256","uint256"],[te.TOKEN_IN_FOR_EXACT_BPT_OUT,t,a]),re.exitExactBPTInForOneTokenOut=(t,a)=>e.encode(["uint256","uint256","uint256"],[ne.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,t,a]),re.exitExactBPTInForTokensOut=t=>e.encode(["uint256","uint256"],[ne.EXACT_BPT_IN_FOR_TOKENS_OUT,t]),re.exitBPTInForExactTokensOut=(t,a)=>e.encode(["uint256","uint256[]","uint256"],[ne.BPT_IN_FOR_EXACT_TOKENS_OUT,t,a]),function(e){e[e.INIT=0]="INIT",e[e.EXACT_TOKENS_IN_FOR_BPT_OUT=1]="EXACT_TOKENS_IN_FOR_BPT_OUT",e[e.TOKEN_IN_FOR_EXACT_BPT_OUT=2]="TOKEN_IN_FOR_EXACT_BPT_OUT",e[e.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT=3]="ALL_TOKENS_IN_FOR_EXACT_BPT_OUT"}(oe||(oe={})),function(e){e[e.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT=0]="EXACT_BPT_IN_FOR_ONE_TOKEN_OUT",e[e.EXACT_BPT_IN_FOR_TOKENS_OUT=1]="EXACT_BPT_IN_FOR_TOKENS_OUT",e[e.BPT_IN_FOR_EXACT_TOKENS_OUT=2]="BPT_IN_FOR_EXACT_TOKENS_OUT",e[e.MANAGEMENT_FEE_TOKENS_OUT=3]="MANAGEMENT_FEE_TOKENS_OUT"}(ie||(ie={}));class pe{constructor(){}}pe.joinInit=t=>e.encode(["uint256","uint256[]"],[oe.INIT,t]),pe.joinExactTokensInForBPTOut=(t,a)=>e.encode(["uint256","uint256[]","uint256"],[oe.EXACT_TOKENS_IN_FOR_BPT_OUT,t,a]),pe.joinTokenInForExactBPTOut=(t,a)=>e.encode(["uint256","uint256","uint256"],[oe.TOKEN_IN_FOR_EXACT_BPT_OUT,t,a]),pe.joinAllTokensInForExactBPTOut=t=>e.encode(["uint256","uint256"],[oe.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT,t]),pe.exitExactBPTInForOneTokenOut=(t,a)=>e.encode(["uint256","uint256","uint256"],[ie.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,t,a]),pe.exitExactBPTInForTokensOut=t=>e.encode(["uint256","uint256"],[ie.EXACT_BPT_IN_FOR_TOKENS_OUT,t]),pe.exitBPTInForExactTokensOut=(t,a)=>e.encode(["uint256","uint256[]","uint256"],[ie.BPT_IN_FOR_EXACT_TOKENS_OUT,t,a]);class de{constructor(){}}de.exitForManagementFees=()=>e.encode(["uint256"],[ie.MANAGEMENT_FEE_TOKENS_OUT]);function le(e){if(100==e.length)return Array(100).fill(a.div(100));const t=e.reduce(((e,t)=>e.add(t)),n);if(t.eq(a))return e;const o=[];let i=n;for(let n=0;n{const t=e.reduce(((e,t)=>e.add(t)),n);return t.eq(a)};var ce,ye;!function(e){e[e.INIT=0]="INIT",e[e.EXACT_TOKENS_IN_FOR_BPT_OUT=1]="EXACT_TOKENS_IN_FOR_BPT_OUT",e[e.TOKEN_IN_FOR_EXACT_BPT_OUT=2]="TOKEN_IN_FOR_EXACT_BPT_OUT"}(ce||(ce={})),function(e){e[e.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT=0]="EXACT_BPT_IN_FOR_ONE_TOKEN_OUT",e[e.BPT_IN_FOR_EXACT_TOKENS_OUT=1]="BPT_IN_FOR_EXACT_TOKENS_OUT",e[e.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT=2]="EXACT_BPT_IN_FOR_ALL_TOKENS_OUT"}(ye||(ye={}));class be{constructor(){}}be.joinInit=t=>e.encode(["uint256","uint256[]"],[ce.INIT,t]),be.joinCollectProtocolFees=()=>e.encode(["uint256"],[ae.COLLECT_PROTOCOL_FEES]),be.joinExactTokensInForBPTOut=(t,a)=>e.encode(["uint256","uint256[]","uint256"],[ce.EXACT_TOKENS_IN_FOR_BPT_OUT,t,a]),be.joinTokenInForExactBPTOut=(t,a)=>e.encode(["uint256","uint256","uint256"],[ce.TOKEN_IN_FOR_EXACT_BPT_OUT,t,a]),be.exitExactBPTInForOneTokenOut=(t,a)=>e.encode(["uint256","uint256","uint256"],[ye.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,t,a]),be.exitExactBPTInForAllTokensOut=t=>e.encode(["uint256","uint256"],[ye.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT,t]),be.exitBPTInForExactTokensOut=(t,a)=>e.encode(["uint256","uint256[]","uint256"],[ye.BPT_IN_FOR_EXACT_TOKENS_OUT,t,a]);var me="production"===process.env.NODE_ENV,fe="Invariant failed";function Te(e,t){if(!e){if(me)throw new Error(fe);var a="function"==typeof t?t():t,n=a?"".concat(fe,": ").concat(a):fe;throw new Error(n)}}const he=e=>({address:Ie(e),specialization:_e(e),nonce:ge(e)}),Ie=e=>(Te(66===e.length,"Invalid poolId length"),e.slice(0,42)),_e=e=>{Te(66===e.length,"Invalid poolId length");const t=parseInt(e[45]);return Te(t<3,"Invalid pool specialization"),t},ge=e=>(Te(66===e.length,"Invalid poolId length"),p.from(`0x${e.slice(46)}`));var Pe;!function(e){e[e.MAINNET=1]="MAINNET",e[e.GOERLI=5]="GOERLI",e[e["GÖRLI"]=5]="GÖRLI",e[e.OPTIMISM=10]="OPTIMISM",e[e.GNOSIS=100]="GNOSIS",e[e.POLYGON=137]="POLYGON",e[e.FANTOM=250]="FANTOM",e[e.BASE=8453]="BASE",e[e.ZKEVM=1101]="ZKEVM",e[e.ARBITRUM=42161]="ARBITRUM",e[e.AVALANCHE=43114]="AVALANCHE",e[e.SEPOLIA=11155111]="SEPOLIA"}(Pe||(Pe={}));const we=1e4,xe=1e6,Ee={IdsMap:{},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","FX"],Stable:{AllowList:["0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066","0x9f19a375709baf0e8e35c2c5c65aca676c4c719100000000000000000000006e","0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080","0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112","0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e","0x9be7de742865d021c0e8fb9d64311b2c040c1ec1000200000000000000000012","0x9f19a375709baf0e8e35c2c5c65aca676c4c7191000200000000000000000022","0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016","0xf38cf113d2d4f60c36cbd95af2f48a9a0167045a00000000000000000000005b","0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068","0x386b5d43ba8b97c43d4afb4cdae7877a1b295e8a000000000000000000000020","0x5028497af0c9a54ea8c6d42a054c0341b9fc616800020000000000000000007b","0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe","0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366"]},Investment:{AllowList:["0xccf5575570fac94cec733a58ff91bb3d073085c70002000000000000000000af","0xe7b1d394f3b40abeaa0b64a545dbcf89da1ecb3f00010000000000000000009a","0x3b40d7d5ae25df2561944dd68b252016c4c7b2800001000000000000000000c2"]},Factories:{"0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0":"oracleWeightedPool","0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9":"weightedPool","0xc66ba2b6595d3613ccab350c886ace23866ede24":"stablePool","0x67d27634e44793fe63c467035e31ea8635117cd4":"stablePool","0x7dfdef5f355096603419239ce743bfaf1120312b":"weightedPool","0xcf0a32bbef8f064969f21f7e02328fb577382018":"weightedPool","0x2433477a10fc5d31b9513c638f19ee85caed53fd":"stablePool","0xebfd5681977e38af65a7487dc70b8221d089ccad":"stablePool","0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de":"liquidityBootstrappingPool","0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e":"liquidityBootstrappingPool","0x142b9666a0a3a30477b052962dda81547e7029ab":"liquidityBootstrappingPool","0x1802953277fd955f9a254b80aa0582f193cf1d77":"liquidityBootstrappingPool","0x48767f9f868a4a7b86a90736632f6e44c2df7fa9":"managedPool","0x0f7bb7ce7b6ed9366f9b6b910adefe72dc538193":"managedPool","0xacd615b3705b9c880e4e7293f1030b34e57b4c1c":"managedPool","0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2":"boostedPool","0xdae7e32adc5d490a43ccba1f0c736033f2b4efca":"boostedPool","0xc128a9954e6c874ea3d62ce62b468ba073093f25":"boostedPool"},Stakable:{AllowList:[]},Metadata:{"0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe":{name:"Balancer Boosted Aave USD",hasIcon:!0},"0x8fd162f338b770f7e879030830cde9173367f3010000000000000000000004d8":{name:"Balancer Boosted Aave USD",hasIcon:!0},"0xd387dfd3a786e7caa06e6cf0c675352c7ffff30400000000000000000000063e":{name:"Balancer Stable USD",hasIcon:!0}}},Ae={[Pe.GOERLI]:{IdsMap:{staBAL:"0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062",bbAaveUSD:{v1:"0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f",v2:"0x3d5981bdd8d3e49eb7bbdc1d2b156a3ee019c18e0000000000000000000001a7"},veBAL:"0xf8a0623ab66f985effc1c69d05f1af4badb01b00000200000000000000000060"},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:["0x22d398c68030ef6b1c55321cca6e0cecc5c93b2f000200000000000000000678"],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","FX"],Stable:{AllowList:["0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f","0xb60e46d90f2de35f7062a27d3a98749414036d5d000200000000000000000061","0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062","0xc957b1acceb21707b782eb8eee2ed8e20088463d000200000000000000000076","0x3d5981bdd8d3e49eb7bbdc1d2b156a3ee019c18e0000000000000000000001a7","0x14f93df8a4e37bfdb49d2cec4789df7a010603d700000000000000000000011d","0x00a62d31b6c776b6813543bc99ff265f7222dbe100000000000000000000011e","0x0c925fce89a22e36ebd9b3c6e0262234e853d2f600000000000000000000019c"]},Investment:{AllowList:[]},Factories:{"0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0":"oracleWeightedPool","0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9":"weightedPool","0x44afeb87c871d8fea9398a026dea2bd3a13f5769":"stablePool","0xa55f73e2281c60206ba43a3590db07b8955832be":"stablePool","0xb48cc42c45d262534e46d5965a9ac496f1b7a830":"liquidityBootstrappingPool","0xb0c726778c3ae4b3454d85557a48e8fa502bdd6a":"liquidityBootstrappingPool","0x41e9036ae350baedcc7107760a020dca3c0731ec":"boostedPool","0xb848f50141f3d4255b37ac288c25c109104f2158":"composableStablePool","0x94f68b54191f62f781fe8298a8a5fa3ed772d227":"weightedPool"},Stakable:{AllowList:["0x16faf9f73748013155b7bc116a3008b57332d1e600020000000000000000005b","0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f","0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062","0x67f8fcb9d3c463da05de1392efdbb2a87f8599ea000200000000000000000059"]},Metadata:{"0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f":{name:"Balancer Boosted Aave USD",hasIcon:!1}}},[Pe.MAINNET]:{IdsMap:{staBAL:"0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063",bbAaveUSD:{v1:"0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe",v2:"0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d"},veBAL:"0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014"},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","Gyro2","Gyro3","GyroE","FX"],Stable:{AllowList:["0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066","0x9f19a375709baf0e8e35c2c5c65aca676c4c719100000000000000000000006e","0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080","0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112","0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe","0x851523a36690bf267bbfec389c823072d82921a90002000000000000000001ed","0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249","0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d","0x178e029173417b1f9c8bc16dcec6f697bc32374600000000000000000000025d","0xf93579002dbe8046c43fefe86ec78b1112247bb80000000000000000000002bc","0xf3aeb3abba741f0eece8a1b1d2f11b85899951cb000200000000000000000351","0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d","0x5b3240b6be3e7487d61cd1afdfc7fe4fa1d81e6400000000000000000000037b"]},Investment:{AllowList:["0xccf5575570fac94cec733a58ff91bb3d073085c70002000000000000000000af","0xe7b1d394f3b40abeaa0b64a545dbcf89da1ecb3f00010000000000000000009a","0x3b40d7d5ae25df2561944dd68b252016c4c7b2800001000000000000000000c2"]},Factories:{"0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0":"oracleWeightedPool","0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9":"weightedPool","0xc66ba2b6595d3613ccab350c886ace23866ede24":"stablePool","0x67d27634e44793fe63c467035e31ea8635117cd4":"stablePool","0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de":"liquidityBootstrappingPool","0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e":"liquidityBootstrappingPool","0x48767f9f868a4a7b86a90736632f6e44c2df7fa9":"managedPool","0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2":"boostedPool","0x8df6efec5547e31b0eb7d1291b511ff8a2bf987c":"stablePool","0xf9ac7b9df2b3454e841110cce5550bd5ac6f875f":"composableStablePool","0xcc508a455f5b0073973107db6a878ddbdab957bc":"weightedPool"},Stakable:{AllowList:["0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063","0x072f14b85add63488ddad88f855fda4a99d6ac9b000200000000000000000027","0x0b09dea16768f0799065c475be02919503cb2a3500020000000000000000001a","0x186084ff790c65088ba694df11758fae4943ee9e000200000000000000000013","0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112","0x27c9f71cc31464b906e0006d4fcbc8900f48f15f00020000000000000000010f","0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080","0x350196326aeaa9b98f1903fb5e8fc2686f85318c000200000000000000000084","0x3e5fa9518ea95c3e533eb377c001702a9aacaa32000200000000000000000052","0x51735bdfbfe3fc13dea8dc6502e2e958989429610002000000000000000000a0","0x5d66fff62c17d841935b60df5f07f6cf79bd0f4700020000000000000000014c","0x5f7fa48d765053f8dd85e052843e12d23e3d7bc50002000000000000000000c0","0x702605f43471183158938c1a3e5f5a359d7b31ba00020000000000000000009f","0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe","0x7edde0cb05ed19e03a9a47cd5e53fc57fde1c80c0002000000000000000000c8","0x8f4205e1604133d1875a3e771ae7e4f2b086563900020000000000000000010e","0x90291319f1d4ea3ad4db0dd8fe9e12baf749e84500020000000000000000013c","0x96646936b91d6b9d7d0c47c496afbf3d6ec7b6f8000200000000000000000019","0x96ba9025311e2f47b840a1f68ed57a3df1ea8747000200000000000000000160","0xa02e4b3d18d4e6b8d18ac421fbc3dfff8933c40a00020000000000000000004b","0xa6f548df93de924d73be7d25dc02554c6bd66db500020000000000000000000e","0xbaeec99c90e3420ec6c1e7a769d2a856d2898e4d00020000000000000000008a","0xbf96189eee9357a95c7719f4f5047f76bde804e5000200000000000000000087","0xe2469f47ab58cf9cf59f9822e3c5de4950a41c49000200000000000000000089","0xe99481dc77691d8e2456e5f3f61c1810adfc1503000200000000000000000018","0xec60a5fef79a92c741cb74fdd6bfc340c0279b01000200000000000000000015","0xedf085f65b4f6c155e13155502ef925c9a756003000200000000000000000123","0xefaa1604e82e1b3af8430b90192c1b9e8197e377000200000000000000000021","0xf4c0dd9b82da36c07605df83c8a416f11724d88b000200000000000000000026","0xf5aaf7ee8c39b651cebf5f1f50c10631e78e0ef9000200000000000000000069","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066","0x92762b42a06dcdddc5b7362cfb01e631c4d44b40000200000000000000000182","0xde8c195aa41c11a0c4787372defbbddaa31306d2000200000000000000000181","0x17ddd9646a69c9445cd8a9f921d4cd93bf50d108000200000000000000000159","0xc45d42f801105e861e86658648e3678ad7aa70f900010000000000000000011e","0x2d344a84bac123660b021eebe4eb6f12ba25fe8600020000000000000000018a","0xb460daa847c45f1c4a41cb05bfb3b51c92e41b36000200000000000000000194","0x5122e01d819e58bb2e22528c0d68d310f0aa6fd7000200000000000000000163","0x851523a36690bf267bbfec389c823072d82921a90002000000000000000001ed","0xe8cc7e765647625b95f59c15848379d10b9ab4af0002000000000000000001de","0x85370d9e3bb111391cc89f6de344e801760461830002000000000000000001ef","0xa7ff759dbef9f3efdd1d59beee44b966acafe214000200000000000000000180","0x3f7c10701b14197e2695dec6428a2ca4cf7fc3b800020000000000000000023c","0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d","0x178e029173417b1f9c8bc16dcec6f697bc32374600000000000000000000025d","0xcfca23ca9ca720b6e98e3eb9b6aa0ffc4a5c08b9000200000000000000000274","0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249","0x0578292cb20a443ba1cde459c985ce14ca2bdee5000100000000000000000269","0x8eb6c82c3081bbbd45dcac5afa631aac53478b7c000100000000000000000270","0x1b65fe4881800b91d4277ba738b567cbb200a60d0002000000000000000002cc","0x99a14324cfd525a34bbc93ac7e348929909d57fd00020000000000000000030e","0x9b532ab955417afd0d012eb9f7389457cd0ea712000000000000000000000338","0x48607651416a943bf5ac71c41be1420538e78f87000200000000000000000327","0x6a5ead5433a50472642cd268e584dafa5a394490000200000000000000000366","0x0fd5663d4893ae0d579d580584806aadd2dd0b8b000200000000000000000367","0x441b8a1980f2f2e43a9397099d15cc2fe6d3625000020000000000000000035f","0xf3aeb3abba741f0eece8a1b1d2f11b85899951cb000200000000000000000351","0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d"]},Metadata:{"0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe":{name:"Balancer Boosted Aave USD",hasIcon:!0},"0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d":{name:"Balancer Boosted Aave USD",hasIcon:!0},"0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063":{name:"Balancer Stable USD",hasIcon:!0},"0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249":{name:"AuraBAL Stable Pool",hasIcon:!1}}},[Pe.POLYGON]:{IdsMap:{xMatic:{v1:"0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4",v2:"0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c"},stMatic:{v1:"0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366",v2:"0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d"},mai4:{mai4:"0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012",maiBbaUsd:"0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e"}},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","Gyro2","Gyro3","GyroE","FX"],Stable:{AllowList:["0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e","0xf38cf113d2d4f60c36cbd95af2f48a9a0167045a00000000000000000000005b","0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068","0x5028497af0c9a54ea8c6d42a054c0341b9fc616800020000000000000000007b","0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366","0xb4670d1389c758e4380c4211bcbc85342688b9c50002000000000000000003d8","0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455","0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4","0xb4b22bd6cdad0ab828be6f8a4086dfa54e9b373600020000000000000000058f","0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba","0x0b8319061732b34cab22445fa83b81f950e4b7ed000000000000000000000709","0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366","0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d","0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c","0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e","0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b","0xa48d164f6eb0edc68bd03b56fa59e12f24499ad10000000000000000000007c4"]},Investment:{AllowList:[""]},Factories:{"0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0":"oracleWeightedPool","0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9":"weightedPool","0xc66ba2b6595d3613ccab350c886ace23866ede24":"stablePool","0xdae7e32adc5d490a43ccba1f0c736033f2b4efca":"stablePool","0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de":"liquidityBootstrappingPool","0x41b953164995c11c81da73d212ed8af25741b7ac":"liquidityBootstrappingPool","0x0f7bb7ce7b6ed9366f9b6b910adefe72dc538193":"managedPool","0xc128a9954e6c874ea3d62ce62b468ba073093f25":"boostedPool","0xca96c4f198d343e251b1a01f3eba061ef3da73c1":"stablePool","0x136fd06fa01ecf624c7f2b3cb15742c1339dc2c4":"composableStablePool","0x0e39c3d9b2ec765efd9c5c70bb290b1fcd8536e3":"weightedPool"},Stakable:{AllowList:["0x0297e37f1873d2dab4487aa67cd56b58e2f27875000100000000000000000002","0x03cd191f589d12b0582a99808cf19851e468e6b500010000000000000000000a","0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012","0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068","0x10f21c9bd8128a29aa785ab2de0d044dcdd79436000200000000000000000059","0x186084ff790c65088ba694df11758fae4943ee9e000200000000000000000032","0x36128d5436d2d70cab39c9af9cce146c38554ff0000100000000000000000008","0x5a6ae1fd70d04ba4a279fc219dfabc53825cb01d00020000000000000000020e","0x614b5038611729ed49e0ded154d8a5d3af9d1d9e00010000000000000000001d","0x7c9cf12d783821d5c63d8e9427af5c44bad92445000100000000000000000051","0x805ca3ccc61cc231851dee2da6aabff0a7714aa7000200000000000000000361","0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366","0xb204bf10bc3a5435017d3db247f56da601dfe08a0002000000000000000000fe","0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455","0xce66904b68f1f070332cbc631de7ee98b650b499000100000000000000000009","0xcf354603a9aebd2ff9f33e1b04246d8ea204ae9500020000000000000000005a","0xdb1db6e248d7bb4175f6e5a382d0a03fe3dcc813000100000000000000000035","0xea4e073c8ac859f2994c07e627178719c8002dc00002000000000000000003dc","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e","0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4","0x2dbc9ab0160087ae59474fb7bed95b9e808fa6bc0001000000000000000003db","0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba","0x8f9dd2064eb38e8e40f2ab67bde27c0e16ea9b080002000000000000000004ca","0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b","0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e","0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d","0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c"]},Metadata:{}},[Pe.ARBITRUM]:{IdsMap:{},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","FX"],Stable:{AllowList:["0x9be7de742865d021c0e8fb9d64311b2c040c1ec1000200000000000000000012","0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016","0x386b5d43ba8b97c43d4afb4cdae7877a1b295e8a000000000000000000000020","0x0510ccf9eb3ab03c1508d3b9769e8ee2cfd6fdcf00000000000000000000005d","0x5a5884fc31948d59df2aeccca143de900d49e1a300000000000000000000006f","0xd89746affa5483627a87e55713ec1905114394950002000000000000000000bf","0x7bceaa9c5e7f4836fec3bce2d5346637c9b13970000000000000000000000102","0xfb5e6d0c1dfed2ba000fbc040ab8df3615ac329c000000000000000000000159"]},Investment:{AllowList:[""]},Factories:{"0x7dfdef5f355096603419239ce743bfaf1120312b":"weightedPool","0xcf0a32bbef8f064969f21f7e02328fb577382018":"weightedPool","0x2433477a10fc5d31b9513c638f19ee85caed53fd":"stablePool","0xebfd5681977e38af65a7487dc70b8221d089ccad":"stablePool","0x142b9666a0a3a30477b052962dda81547e7029ab":"liquidityBootstrappingPool","0x1802953277fd955f9a254b80aa0582f193cf1d77":"liquidityBootstrappingPool","0xacd615b3705b9c880e4e7293f1030b34e57b4c1c":"managedPool","0xdae7e32adc5d490a43ccba1f0c736033f2b4efca":"boostedPool","0xef44d6786b2b4d544b7850fe67ce6381626bf2d6":"stablePool","0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33":"composableStablePool","0x8df6efec5547e31b0eb7d1291b511ff8a2bf987c":"weightedPool"},Stakable:{AllowList:["0x0510ccf9eb3ab03c1508d3b9769e8ee2cfd6fdcf00000000000000000000005d","0x0adeb25cb5920d4f7447af4a0428072edc2cee2200020000000000000000004a","0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016","0x1779900c7707885720d39aa741f4086886307e9e00020000000000000000004b","0x4a3a22a3e7fee0ffbb66f1c28bfac50f75546fc7000200000000000000000008","0x5a5884fc31948d59df2aeccca143de900d49e1a300000000000000000000006f","0x64541216bafffeec8ea535bb71fbc927831d0595000100000000000000000002","0x651e00ffd5ecfa7f3d4f33d62ede0a97cf62ede2000200000000000000000006","0xb28670b3e7ad27bd41fb5938136bf9e9cba90d6500020000000000000000001e","0xb340b6b1a34019853cb05b2de6ee8ffd0b89a008000100000000000000000036","0xb5b77f1ad2b520df01612399258e7787af63025d000200000000000000000010","0xc2f082d33b5b8ef3a7e3de30da54efd3114512ac000200000000000000000017","0xc61ff48f94d801c1ceface0289085197b5ec44f000020000000000000000004d","0xcc65a812ce382ab909a11e434dbf75b34f1cc59d000200000000000000000001","0xe1b40094f1446722c424c598ac412d590e0b3ffb000200000000000000000076","0xb3028ca124b80cfe6e9ca57b70ef2f0ccc41ebd40002000000000000000000ba","0x7bceaa9c5e7f4836fec3bce2d5346637c9b13970000000000000000000000102","0xfb5e6d0c1dfed2ba000fbc040ab8df3615ac329c000000000000000000000159","0x178e029173417b1f9c8bc16dcec6f697bc323746000200000000000000000158"]},Metadata:{}},[Pe.GNOSIS]:{IdsMap:{},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","FX","Gyro2","Gyro3","GyroE","HighAmpComposableStable","FX"],Stable:{AllowList:["0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000004","0x707b7d4a1bae449d546dcab869256591bbb3d70b000000000000000000000000"]},Investment:{AllowList:[]},Factories:{},Stakable:{AllowList:[]},Metadata:{}}};function ve(e){return Ae[e]?Ae[e]:Ee}var Se,ke,Oe,Me,Ce,Fe,Be;!function(e){e.Id="id",e.Address="address",e.PoolId="poolId"}(Se||(Se={})),function(e){e.Balance="balance",e.Id="id",e.PoolId="poolId",e.UserAddress="userAddress"}(ke||(ke={})),function(e){e.Id="id",e.UserAddress="user",e.GaugeId="gauge",e.Balance="balance"}(Oe||(Oe={})),function(e){e[e.GeneralPool=0]="GeneralPool",e[e.MinimalSwapInfoPool=1]="MinimalSwapInfoPool",e[e.TwoTokenPool=2]="TwoTokenPool"}(Me||(Me={})),function(e){e[e.DepositInternal=0]="DepositInternal",e[e.WithdrawInternal=1]="WithdrawInternal",e[e.TransferInternal=2]="TransferInternal",e[e.TransferExternal=3]="TransferExternal"}(Ce||(Ce={})),function(e){e[e.Withdraw=0]="Withdraw",e[e.Deposit=1]="Deposit",e[e.Update=2]="Update"}(Fe||(Fe={})),function(e){e.Weighted="Weighted",e.Investment="Investment",e.Stable="Stable",e.ComposableStable="ComposableStable",e.MetaStable="MetaStable",e.StablePhantom="StablePhantom",e.LiquidityBootstrapping="LiquidityBootstrapping",e.Element="Element",e.Gyro2="Gyro2",e.Gyro3="Gyro3",e.GyroE="GyroE",e.Managed="Managed",e.AaveLinear="AaveLinear",e.Linear="Linear",e.EulerLinear="EulerLinear",e.ERC4626Linear="ERC4626Linear",e.BeefyLinear="BeefyLinear",e.GearboxLinear="GearboxLinear",e.MidasLinear="MidasLinear",e.ReaperLinear="ReaperLinear",e.SiloLinear="SiloLinear",e.TetuLinear="TetuLinear",e.YearnLinear="YearnLinear",e.FX="FX"}(Be||(Be={}));class Re{constructor(){this.enableLogging=!0}static getInstance(){return Re.instance||(Re.instance=new Re),Re.instance}setLoggingEnabled(e){this.enableLogging=e}info(e){this.enableLogging}warn(e){this.enableLogging&&console.warn(`[WARN] ${e}`)}error(e){this.enableLogging&&console.error(`[ERROR] ${e}`)}time(e){this.enableLogging}timeEnd(e){this.enableLogging}}const Ne=e=>e[0].map(((t,a)=>e.map((e=>e[a]))));class Le{constructor(e){this.ETH=o,this.isETH=e=>Le.isEqual(e,this.ETH),this.isWETH=e=>Le.isEqual(e,this.WETH),this.translateToERC20=e=>this.isETH(e)?this.WETH:e,this.WETH=u(e)}sortTokens(e,...t){t.forEach((t=>Te(e.length===t.length,"array length mismatch")));const a=e.map(this.translateToERC20),n=Ne([a,...t]).sort((([e],[t])=>((e,t)=>e.toLowerCase()>t.toLowerCase()?1:-1)(e,t))),[o,...i]=Ne(n);return[e.includes(this.ETH)?o.map((e=>this.isWETH(e)?this.ETH:e)):o,...i]}}Le.isEqual=(e,t)=>u(e)===u(t);const De={"000":"ADD_OVERFLOW","001":"SUB_OVERFLOW","002":"SUB_UNDERFLOW","003":"MUL_OVERFLOW","004":"ZERO_DIVISION","005":"DIV_INTERNAL","006":"X_OUT_OF_BOUNDS","007":"Y_OUT_OF_BOUNDS","008":"PRODUCT_OUT_OF_BOUNDS","009":"INVALID_EXPONENT",100:"OUT_OF_BOUNDS",101:"UNSORTED_ARRAY",102:"UNSORTED_TOKENS",103:"INPUT_LENGTH_MISMATCH",104:"ZERO_TOKEN",200:"MIN_TOKENS",201:"MAX_TOKENS",202:"MAX_SWAP_FEE_PERCENTAGE",203:"MIN_SWAP_FEE_PERCENTAGE",204:"MINIMUM_BPT",205:"CALLER_NOT_VAULT",206:"UNINITIALIZED",207:"BPT_IN_MAX_AMOUNT",208:"BPT_OUT_MIN_AMOUNT",209:"EXPIRED_PERMIT",210:"NOT_TWO_TOKENS",211:"DISABLED",300:"MIN_AMP",301:"MAX_AMP",302:"MIN_WEIGHT",303:"MAX_STABLE_TOKENS",304:"MAX_IN_RATIO",305:"MAX_OUT_RATIO",306:"MIN_BPT_IN_FOR_TOKEN_OUT",307:"MAX_OUT_BPT_FOR_TOKEN_IN",308:"NORMALIZED_WEIGHT_INVARIANT",309:"INVALID_TOKEN",310:"UNHANDLED_JOIN_KIND",311:"ZERO_INVARIANT",312:"ORACLE_INVALID_SECONDS_QUERY",313:"ORACLE_NOT_INITIALIZED",314:"ORACLE_QUERY_TOO_OLD",315:"ORACLE_INVALID_INDEX",316:"ORACLE_BAD_SECS",317:"AMP_END_TIME_TOO_CLOSE",318:"AMP_ONGOING_UPDATE",319:"AMP_RATE_TOO_HIGH",320:"AMP_NO_ONGOING_UPDATE",321:"STABLE_INVARIANT_DIDNT_CONVERGE",322:"STABLE_GET_BALANCE_DIDNT_CONVERGE",323:"RELAYER_NOT_CONTRACT",324:"BASE_POOL_RELAYER_NOT_CALLED",325:"REBALANCING_RELAYER_REENTERED",326:"GRADUAL_UPDATE_TIME_TRAVEL",327:"SWAPS_DISABLED",328:"CALLER_IS_NOT_LBP_OWNER",329:"PRICE_RATE_OVERFLOW",330:"INVALID_JOIN_EXIT_KIND_WHILE_SWAPS_DISABLED",331:"WEIGHT_CHANGE_TOO_FAST",332:"LOWER_GREATER_THAN_UPPER_TARGET",333:"UPPER_TARGET_TOO_HIGH",334:"UNHANDLED_BY_LINEAR_POOL",335:"OUT_OF_TARGET_RANGE",336:"UNHANDLED_EXIT_KIND ",337:"UNAUTHORIZED_EXIT",338:"MAX_MANAGEMENT_SWAP_FEE_PERCENTAGE",339:"UNHANDLED_BY_MANAGED_POOL",340:"UNHANDLED_BY_PHANTOM_POOL",341:"TOKEN_DOES_NOT_HAVE_RATE_PROVIDER",342:"INVALID_INITIALIZATION",343:"OUT_OF_NEW_TARGET_RANGE",344:"UNAUTHORIZED_OPERATION",345:"UNINITIALIZED_POOL_CONTROLLER",400:"REENTRANCY",401:"SENDER_NOT_ALLOWED",402:"PAUSED",403:"PAUSE_WINDOW_EXPIRED",404:"MAX_PAUSE_WINDOW_DURATION",405:"MAX_BUFFER_PERIOD_DURATION",406:"INSUFFICIENT_BALANCE",407:"INSUFFICIENT_ALLOWANCE",408:"ERC20_TRANSFER_FROM_ZERO_ADDRESS",409:"ERC20_TRANSFER_TO_ZERO_ADDRESS",410:"ERC20_MINT_TO_ZERO_ADDRESS",411:"ERC20_BURN_FROM_ZERO_ADDRESS",412:"ERC20_APPROVE_FROM_ZERO_ADDRESS",413:"ERC20_APPROVE_TO_ZERO_ADDRESS",414:"ERC20_TRANSFER_EXCEEDS_ALLOWANCE",415:"ERC20_DECREASED_ALLOWANCE_BELOW_ZERO",416:"ERC20_TRANSFER_EXCEEDS_BALANCE",417:"ERC20_BURN_EXCEEDS_ALLOWANCE",418:"SAFE_ERC20_CALL_FAILED",419:"ADDRESS_INSUFFICIENT_BALANCE",420:"ADDRESS_CANNOT_SEND_VALUE",421:"SAFE_CAST_VALUE_CANT_FIT_INT256",422:"GRANT_SENDER_NOT_ADMIN",423:"REVOKE_SENDER_NOT_ADMIN",424:"RENOUNCE_SENDER_NOT_ALLOWED",425:"BUFFER_PERIOD_EXPIRED",426:"CALLER_IS_NOT_OWNER",427:"NEW_OWNER_IS_ZERO",428:"CODE_DEPLOYMENT_FAILED",429:"CALL_TO_NON_CONTRACT",430:"LOW_LEVEL_CALL_FAILED",431:"NOT_PAUSED",432:"ADDRESS_ALREADY_ALLOWLISTED",433:"ADDRESS_NOT_ALLOWLISTED",434:"ERC20_BURN_EXCEEDS_BALANCE",500:"INVALID_POOL_ID",501:"CALLER_NOT_POOL",502:"SENDER_NOT_ASSET_MANAGER",503:"USER_DOESNT_ALLOW_RELAYER",504:"INVALID_SIGNATURE",505:"EXIT_BELOW_MIN",506:"JOIN_ABOVE_MAX",507:"SWAP_LIMIT",508:"SWAP_DEADLINE",509:"CANNOT_SWAP_SAME_TOKEN",510:"UNKNOWN_AMOUNT_IN_FIRST_SWAP",511:"MALCONSTRUCTED_MULTIHOP_SWAP",512:"INTERNAL_BALANCE_OVERFLOW",513:"INSUFFICIENT_INTERNAL_BALANCE",514:"INVALID_ETH_INTERNAL_BALANCE",515:"INVALID_POST_LOAN_BALANCE",516:"INSUFFICIENT_ETH",517:"UNALLOCATED_ETH",518:"ETH_TRANSFER",519:"CANNOT_USE_ETH_SENTINEL",520:"TOKENS_MISMATCH",521:"TOKEN_NOT_REGISTERED",522:"TOKEN_ALREADY_REGISTERED",523:"TOKENS_ALREADY_SET",524:"TOKENS_LENGTH_MUST_BE_2",525:"NONZERO_TOKEN_BALANCE",526:"BALANCE_TOTAL_OVERFLOW",527:"POOL_NO_TOKENS",528:"INSUFFICIENT_FLASH_LOAN_BALANCE",600:"SWAP_FEE_PERCENTAGE_TOO_HIGH",601:"FLASH_LOAN_FEE_PERCENTAGE_TOO_HIGH",602:"INSUFFICIENT_FLASH_LOAN_FEE_AMOUNT"};class Ue{constructor(){}}async function Ve(e){if("string"==typeof e)return e;if(I.isSigner(e))return e.getAddress();if(e.address)return e.address;throw new Error("Could not read account address")}var qe;Ue.isErrorCode=e=>{if(!e.includes("BAL#"))return!1;const t=e.replace("BAL#","");return Object.keys(De).includes(t)},Ue.parseErrorCode=e=>{if(!e.includes("BAL#"))throw new Error("Error code not found");const t=e.replace("BAL#",""),a=De[t];if(!a)throw new Error("Error code not found");return a},Ue.tryParseErrorCode=e=>{try{return Ue.parseErrorCode(e)}catch{return e}},Ue.isBalancerError=e=>Object.values(De).includes(e),Ue.encodeError=e=>{const t=Object.entries(De).find((([,t])=>t===e));if(!t)throw Error("Error message not found");return`BAL#${t[0]}`},function(e){e.JoinPool="JoinPool",e.ExitPool="ExitPool",e.Swap="Swap",e.BatchSwap="BatchSwap",e.SetRelayerApproval="SetRelayerApproval"}(qe||(qe={}));class Ge{constructor(){}}Ge.encodeCalldataAuthorization=(e,t,a)=>{const n=c(y(t),32).slice(2),{v:o,r:i,s:s}=b(a);return`${e}${n}${c(y(o),32).slice(2)}${i.slice(2)}${s.slice(2)}`},Ge.signJoinAuthorization=(e,t,a,n,o,i)=>Ge.signAuthorizationFor(qe.JoinPool,e,t,a,n,o,i),Ge.signExitAuthorization=(e,t,a,n,o,i)=>Ge.signAuthorizationFor(qe.ExitPool,e,t,a,n,o,i),Ge.signSwapAuthorization=(e,t,a,n,o,i)=>Ge.signAuthorizationFor(qe.Swap,e,t,a,n,o,i),Ge.signBatchSwapAuthorization=(e,t,a,n,o,i)=>Ge.signAuthorizationFor(qe.BatchSwap,e,t,a,n,o,i),Ge.signSetRelayerApprovalAuthorization=(e,t,a,n,o,i)=>Ge.signAuthorizationFor(qe.SetRelayerApproval,e,t,a,n,o,i),Ge.signAuthorizationFor=async(e,t,a,n,o,s=i,r)=>{const{chainId:p}=await t.provider.getNetwork();if(!r){const e=await a.getAddress();r=await t.getNextNonce(e)}const d={name:"Balancer V2 Vault",version:"1",chainId:p,verifyingContract:t.address},l={[e]:[{name:"calldata",type:"bytes"},{name:"sender",type:"address"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]},u={calldata:o,sender:await Ve(n),nonce:r.toString(),deadline:s.toString()};return a._signTypedData(d,l,u)};class We{constructor(){}}We.signSetMinterApproval=async(e,t,a,n,o=i,s)=>{const{chainId:r}=await e.provider.getNetwork();if(!s){const t=await n.getAddress();s=await e.getNextNonce(t)}const d={name:"Balancer Minter",version:"1",chainId:r,verifyingContract:e.address},l={minter:await Ve(t),approval:a,nonce:s.toString(),deadline:o.toString()},u=await n._signTypedData(d,{SetMinterApproval:[{name:"minter",type:"address"},{name:"approval",type:"bool"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]},l);return{...b(u),deadline:p.from(o)}};const $e=async(e,t,a,n,o=i,s)=>{const{chainId:r}=await e.provider.getNetwork(),d=await t.getAddress();s||(s=await e.nonces(d));const l={name:await e.name(),version:"1",chainId:r,verifyingContract:e.address},u={owner:d,spender:await Ve(a),value:n,nonce:s,deadline:o},c=await t._signTypedData(l,{Permit:[{name:"owner",type:"address"},{name:"spender",type:"address"},{name:"value",type:"uint256"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]},u);return{...b(c),deadline:p.from(o),nonce:p.from(s)}},He=BigInt(0),Ke=BigInt(1),Je=BigInt("1000000000000000000"),Xe=(e,t)=>{if(!e)throw new Error(t)};function Ye(e){const t=BigInt(18)-e;return Je*BigInt(10)**t}function je(e,t){return et.mulDownFixed(e,t)}function ze(e,t){const a=new Array(e.length);for(let n=0;n=0&&a>=e||t<0&&at>e?t:e))}static min(e,t){return e=this.MIN_NATURAL_EXPONENT&&e<=this.MAX_NATURAL_EXPONENT,"Errors.INVALID_EXPONENT"),e<0)return this.ONE_18*this.ONE_18/this.exp(BigInt(-1)*e);let t;e>=this.x0?(e-=this.x0,t=this.a0):e>=this.x1?(e-=this.x1,t=this.a1):t=BigInt(1),e*=BigInt(100);let a=this.ONE_20;e>=this.x2&&(e-=this.x2,a=a*this.a2/this.ONE_20),e>=this.x3&&(e-=this.x3,a=a*this.a3/this.ONE_20),e>=this.x4&&(e-=this.x4,a=a*this.a4/this.ONE_20),e>=this.x5&&(e-=this.x5,a=a*this.a5/this.ONE_20),e>=this.x6&&(e-=this.x6,a=a*this.a6/this.ONE_20),e>=this.x7&&(e-=this.x7,a=a*this.a7/this.ONE_20),e>=this.x8&&(e-=this.x8,a=a*this.a8/this.ONE_20),e>=this.x9&&(e-=this.x9,a=a*this.a9/this.ONE_20);let n,o=this.ONE_20;return n=e,o+=n,n=n*e/this.ONE_20/BigInt(2),o+=n,n=n*e/this.ONE_20/BigInt(3),o+=n,n=n*e/this.ONE_20/BigInt(4),o+=n,n=n*e/this.ONE_20/BigInt(5),o+=n,n=n*e/this.ONE_20/BigInt(6),o+=n,n=n*e/this.ONE_20/BigInt(7),o+=n,n=n*e/this.ONE_20/BigInt(8),o+=n,n=n*e/this.ONE_20/BigInt(9),o+=n,n=n*e/this.ONE_20/BigInt(10),o+=n,n=n*e/this.ONE_20/BigInt(11),o+=n,n=n*e/this.ONE_20/BigInt(12),o+=n,a*o/this.ONE_20*t/BigInt(100)}static _ln_36(e){const t=((e*=this.ONE_18)-this.ONE_36)*this.ONE_36/(e+this.ONE_36),a=t*t/this.ONE_36;let n=t,o=n;return n=n*a/this.ONE_36,o+=n/BigInt(3),n=n*a/this.ONE_36,o+=n/BigInt(5),n=n*a/this.ONE_36,o+=n/BigInt(7),n=n*a/this.ONE_36,o+=n/BigInt(9),n=n*a/this.ONE_36,o+=n/BigInt(11),n=n*a/this.ONE_36,o+=n/BigInt(13),n=n*a/this.ONE_36,o+=n/BigInt(15),o*BigInt(2)}static _ln(e){if(e=this.a0*this.ONE_18&&(e/=this.a0,t+=this.x0),e>=this.a1*this.ONE_18&&(e/=this.a1,t+=this.x1),t*=BigInt(100),(e*=BigInt(100))>=this.a2&&(e=e*this.ONE_20/this.a2,t+=this.x2),e>=this.a3&&(e=e*this.ONE_20/this.a3,t+=this.x3),e>=this.a4&&(e=e*this.ONE_20/this.a4,t+=this.x4),e>=this.a5&&(e=e*this.ONE_20/this.a5,t+=this.x5),e>=this.a6&&(e=e*this.ONE_20/this.a6,t+=this.x6),e>=this.a7&&(e=e*this.ONE_20/this.a7,t+=this.x7),e>=this.a8&&(e=e*this.ONE_20/this.a8,t+=this.x8),e>=this.a9&&(e=e*this.ONE_20/this.a9,t+=this.x9),e>=this.a10&&(e=e*this.ONE_20/this.a10,t+=this.x10),e>=this.a11&&(e=e*this.ONE_20/this.a11,t+=this.x11);const a=(e-this.ONE_20)*this.ONE_20/(e+this.ONE_20),n=a*a/this.ONE_20;let o=a,i=o;return o=o*n/this.ONE_20,i+=o/BigInt(3),o=o*n/this.ONE_20,i+=o/BigInt(5),o=o*n/this.ONE_20,i+=o/BigInt(7),o=o*n/this.ONE_20,i+=o/BigInt(9),o=o*n/this.ONE_20,i+=o/BigInt(11),i*=BigInt(2),(t+i)/BigInt(100)}}tt.ONE_18=BigInt("1000000000000000000"),tt.ONE_20=BigInt("100000000000000000000"),tt.ONE_36=BigInt("1000000000000000000000000000000000000"),tt.MAX_NATURAL_EXPONENT=BigInt("130000000000000000000"),tt.MIN_NATURAL_EXPONENT=BigInt("-41000000000000000000"),tt.LN_36_LOWER_BOUND=BigInt(tt.ONE_18)-BigInt("100000000000000000"),tt.LN_36_UPPER_BOUND=BigInt(tt.ONE_18)+BigInt("100000000000000000"),tt.MILD_EXPONENT_BOUND=BigInt(2)**BigInt(254)/tt.ONE_20,tt.x0=BigInt("128000000000000000000"),tt.a0=BigInt("38877084059945950922200000000000000000000000000000000000"),tt.x1=BigInt("64000000000000000000"),tt.a1=BigInt("6235149080811616882910000000"),tt.x2=BigInt("3200000000000000000000"),tt.a2=BigInt("7896296018268069516100000000000000"),tt.x3=BigInt("1600000000000000000000"),tt.a3=BigInt("888611052050787263676000000"),tt.x4=BigInt("800000000000000000000"),tt.a4=BigInt("298095798704172827474000"),tt.x5=BigInt("400000000000000000000"),tt.a5=BigInt("5459815003314423907810"),tt.x6=BigInt("200000000000000000000"),tt.a6=BigInt("738905609893065022723"),tt.x7=BigInt("100000000000000000000"),tt.a7=BigInt("271828182845904523536"),tt.x8=BigInt("50000000000000000000"),tt.a8=BigInt("164872127070012814685"),tt.x9=BigInt("25000000000000000000"),tt.a9=BigInt("128402541668774148407"),tt.x10=BigInt("12500000000000000000"),tt.a10=BigInt("113314845306682631683"),tt.x11=BigInt("6250000000000000000"),tt.a11=BigInt("106449445891785942956");const at=3,nt=(e,t,a)=>{var n;let i=a?e.tokens.map((e=>e.address===t?o:e.address)):e.tokens.map((e=>e.address)),s=e.tokens.map((e=>{var t;return null!==(t=e.decimals)&&void 0!==t?t:18})),r=e.tokens.map((e=>d(e.balance,e.decimals).toBigInt())),p=e.tokens.map((e=>{var t;return d(null!==(t=e.weight)&&void 0!==t?t:"1",18).toBigInt()})),l=e.tokens.map((e=>{var t;return d(null!==(t=e.priceRate)&&void 0!==t?t:"1",18).toBigInt()})),u=s.map((e=>Ye(BigInt(e)))),c=u.map(((e,t)=>et.mulDownFixed(e,l[t]))),y=ze(r,c);if(t){const e=new Le(t);[i,s,c,u,r,y,p,l]=e.sortTokens(i,s,c,u,r,y,p,l)}const b=d(null!==(n=e.amp)&&void 0!==n?n:"1",3).toBigInt(),m=y.indexOf(et.max(y)),f=[...c],T=[...u],h=[...i],I=[...r],_=[...l],g=[...y],P=i.indexOf(e.address);return-1!==P&&(f.splice(P,1),T.splice(P,1),h.splice(P,1),I.splice(P,1),_.splice(P,1),g.splice(P,1)),{bptIndex:P,higherBalanceTokenIndex:m,ampWithPrecision:b,balancesEvm:r,balancesEvmWithoutBpt:I,priceRates:l,priceRatesWithoutBpt:_,swapFeeEvm:d(e.swapFee,18).toBigInt(),poolTokens:i,poolTokensWithoutBpt:h,weights:p,scalingFactors:c,scalingFactorsWithoutBpt:f,scalingFactorsRaw:u,scalingFactorsRawWithoutBpt:T,upScaledBalances:y,upScaledBalancesWithoutBpt:g,totalSharesEvm:d(e.totalShares||"0",18).toBigInt()}},ot={Popular:{Symbols:["WBTC","DAI","USDC","BAL","AAVE","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",WETH:"0x0000000000000000000000000000000000000000",BAL:"0x0000000000000000000000000000000000000000"}},it={[Pe.GOERLI]:{Popular:{Symbols:["WBTC","DAI","USDC","BAL","USDT","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1",WETH:"0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1",BAL:"0xfA8449189744799aD2AcE7e0EBAC8BB7575eff47",bbaUSD:"0x13ACD41C585d7EbB4a9460f7C8f50BE60DC080Cd"},PriceChainMap:{"0xdfcea9088c8a88a76ff74892c1457c17dfeef9c1":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2","0x37f03a12241e9fd3658ad6777d289c3fb8512bc9":"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599","0xfa8449189744799ad2ace7e0ebac8bb7575eff47":"0xba100000625a3754423978a60c9317c58a424e3d","0xe0c9275e44ea80ef17579d33c55136b7da269aeb":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","0x8c9e6c40d3402480ace624730524facc5482798c":"0x6b175474e89094c44da98b954eedeac495271d0f","0x1f1f156e0317167c11aa412e3d1435ea29dc3cce":"0xdac17f958d2ee523a2206206994597c13d831ec7","0x4cb1892fddf14f772b2e39e299f44b2e5da90d04":"0x3ed3b47dd13ec9a98b44e6204a523e766b225811","0x811151066392fd641fe74a9b55a712670572d161":"0xbcca60bb61934080951369a648fb03df4f96263c","0x89534a24450081aa267c79b07411e9617d984052":"0x028171bca77440897b824ca71d1c56cac55b68a3","0x829f35cebbcd47d3c120793c12f7a232c903138b":"0x956f47f50a910163d8bf957cf5846d573e7f87ca","0xff386a3d08f80ac38c77930d173fa56c6286dc8b":"0x6810e776880c02933d47db1b9fc05908e5386b96"}},[Pe.MAINNET]:{Popular:{Symbols:["WBTC","DAI","USDC","BAL","AAVE","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",WETH:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",BAL:"0xba100000625a3754423978a60c9317c58a424e3d",bbaUSD:"0x7B50775383d3D6f0215A8F290f2C9e2eEBBEceb2",bbaUSDv2:"0xA13a9247ea42D743238089903570127DdA72fE44"}},[Pe.POLYGON]:{Popular:{Symbols:["WBTC","DAI","USDC","BAL","AAVE","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",WETH:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",BAL:"0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3"}},[Pe.ARBITRUM]:{Popular:{Symbols:["WBTC","DAI","USDC","BAL","AAVE","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",WETH:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",BAL:"0x040d1EdC9569d4Bab2D15287Dc5A4F10F56a56B8"}},[Pe.GNOSIS]:{Popular:{Symbols:["xDAI","WXDAI","WETH","BAL"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0xe91d153e0b41518a2ce8dd3d7944fa863463a97d",WETH:"0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1",BAL:"0x7eF541E2a22058048904fE5744f9c7E4C57AF717"}}};function st(e){return it[e]?it[e]:ot}let rt=!1,pt=!1;const dt={debug:1,default:2,info:2,warning:3,error:4,off:5};let lt=dt.default,ut=null;const ct=function(){try{const e=[];if(["NFD","NFC","NFKD","NFKC"].forEach((t=>{try{if("test"!=="test".normalize(t))throw new Error("bad normalize")}catch(a){e.push(t)}})),e.length)throw new Error("missing "+e.join(", "));if(String.fromCharCode(233).normalize("NFD")!==String.fromCharCode(101,769))throw new Error("broken implementation")}catch(e){return e.message}return null}();var yt,bt;!function(e){e.DEBUG="DEBUG",e.INFO="INFO",e.WARNING="WARNING",e.ERROR="ERROR",e.OFF="OFF"}(yt||(yt={})),function(e){e.UNKNOWN_ERROR="UNKNOWN_ERROR",e.NOT_IMPLEMENTED="NOT_IMPLEMENTED",e.UNSUPPORTED_OPERATION="UNSUPPORTED_OPERATION",e.NETWORK_ERROR="NETWORK_ERROR",e.SERVER_ERROR="SERVER_ERROR",e.TIMEOUT="TIMEOUT",e.BUFFER_OVERRUN="BUFFER_OVERRUN",e.NUMERIC_FAULT="NUMERIC_FAULT",e.MISSING_NEW="MISSING_NEW",e.INVALID_ARGUMENT="INVALID_ARGUMENT",e.MISSING_ARGUMENT="MISSING_ARGUMENT",e.UNEXPECTED_ARGUMENT="UNEXPECTED_ARGUMENT",e.CALL_EXCEPTION="CALL_EXCEPTION",e.INSUFFICIENT_FUNDS="INSUFFICIENT_FUNDS",e.NONCE_EXPIRED="NONCE_EXPIRED",e.REPLACEMENT_UNDERPRICED="REPLACEMENT_UNDERPRICED",e.UNPREDICTABLE_GAS_LIMIT="UNPREDICTABLE_GAS_LIMIT",e.TRANSACTION_REPLACED="TRANSACTION_REPLACED",e.ACTION_REJECTED="ACTION_REJECTED"}(bt||(bt={}));const mt="0123456789abcdef";class ft{constructor(e){Object.defineProperty(this,"version",{enumerable:!0,value:e,writable:!1})}_log(e,t){const a=e.toLowerCase();null==dt[a]&&this.throwArgumentError("invalid log level name","logLevel",e),lt>dt[a]||console.log.apply(console,t)}debug(...e){this._log(ft.levels.DEBUG,e)}info(...e){this._log(ft.levels.INFO,e)}warn(...e){this._log(ft.levels.WARNING,e)}makeError(e,t,a){if(pt)return this.makeError("censored error",t,{});t||(t=ft.errors.UNKNOWN_ERROR),a||(a={});const n=[];Object.keys(a).forEach((e=>{const t=a[e];try{if(t instanceof Uint8Array){let a="";for(let e=0;e>4],a+=mt[15&t[e]];n.push(e+"=Uint8Array(0x"+a+")")}else n.push(e+"="+JSON.stringify(t))}catch(t){n.push(e+"="+JSON.stringify(a[e].toString()))}})),n.push(`code=${t}`),n.push(`version=${this.version}`);const o=e;let i="";switch(t){case bt.NUMERIC_FAULT:{i="NUMERIC_FAULT";const t=e;switch(t){case"overflow":case"underflow":case"division-by-zero":i+="-"+t;break;case"negative-power":case"negative-width":i+="-unsupported";break;case"unbound-bitwise-result":i+="-unbound-result"}break}case bt.CALL_EXCEPTION:case bt.INSUFFICIENT_FUNDS:case bt.MISSING_NEW:case bt.NONCE_EXPIRED:case bt.REPLACEMENT_UNDERPRICED:case bt.TRANSACTION_REPLACED:case bt.UNPREDICTABLE_GAS_LIMIT:i=t}i&&(e+=" [ See: https://links.ethers.org/v5-errors-"+i+" ]"),n.length&&(e+=" ("+n.join(", ")+")");const s=new Error(e);return s.reason=o,s.code=t,Object.keys(a).forEach((function(e){s[e]=a[e]})),s}throwError(e,t,a){throw this.makeError(e,t,a)}throwArgumentError(e,t,a){return this.throwError(e,ft.errors.INVALID_ARGUMENT,{argument:t,value:a})}assert(e,t,a,n){e||this.throwError(t,a,n)}assertArgument(e,t,a,n){e||this.throwArgumentError(t,a,n)}checkNormalize(e){ct&&this.throwError("platform missing String.prototype.normalize",ft.errors.UNSUPPORTED_OPERATION,{operation:"String.prototype.normalize",form:ct})}checkSafeUint53(e,t){"number"==typeof e&&(null==t&&(t="value not safe"),(e<0||e>=9007199254740991)&&this.throwError(t,ft.errors.NUMERIC_FAULT,{operation:"checkSafeInteger",fault:"out-of-safe-range",value:e}),e%1&&this.throwError(t,ft.errors.NUMERIC_FAULT,{operation:"checkSafeInteger",fault:"non-integer",value:e}))}checkArgumentCount(e,t,a){a=a?": "+a:"",et&&this.throwError("too many arguments"+a,ft.errors.UNEXPECTED_ARGUMENT,{count:e,expectedCount:t})}checkNew(e,t){e!==Object&&null!=e||this.throwError("missing new",ft.errors.MISSING_NEW,{name:t.name})}checkAbstract(e,t){e===t?this.throwError("cannot instantiate abstract class "+JSON.stringify(t.name)+" directly; use a sub-class",ft.errors.UNSUPPORTED_OPERATION,{name:e.name,operation:"new"}):e!==Object&&null!=e||this.throwError("missing new",ft.errors.MISSING_NEW,{name:t.name})}static globalLogger(){return ut||(ut=new ft("logger/5.7.0")),ut}static setCensorship(e,t){if(!e&&t&&this.globalLogger().throwError("cannot permanently disable censorship",ft.errors.UNSUPPORTED_OPERATION,{operation:"setCensorship"}),rt){if(!e)return;this.globalLogger().throwError("error censorship permanent",ft.errors.UNSUPPORTED_OPERATION,{operation:"setCensorship"})}pt=!!e,rt=!!t}static setLogLevel(e){const t=dt[e.toLowerCase()];null!=t?lt=t:ft.globalLogger().warn("invalid log level - "+e)}static from(e){return new ft(e)}}ft.errors=bt,ft.levels=yt;const Tt=new ft("units/5.7.0"),ht=["wei","kwei","mwei","gwei","szabo","finney","ether"];function It(e,t){if("string"==typeof t){const e=ht.indexOf(t);-1!==e&&(t=3*e)}return l(e,null!=t?t:18)}function _t(e,t){if("string"!=typeof e&&Tt.throwArgumentError("value must be a string","value",e),"string"==typeof t){const e=ht.indexOf(t);-1!==e&&(t=3*e)}return d(e,null!=t?t:18)}const gt={[Pe.MAINNET]:{waUSDT:"0xf8fd466f12e236f4c96f7cce6c79eadb819abf58",waUSDC:"0xd093fa4fb80d09bb30817fdcd442d4d02ed3e5de",waDAI:"0x02d60b84491589974263d922d9cc7a3152618ef6"},[Pe.POLYGON]:{wamDAI:"0xee029120c72b0607344f35b17cdd90025e647b00",wamUSDC:"0x221836a597948dce8f3568e044ff123108acc42a",wamUSDT:"0x19c60a251e525fa88cd6f3768416a8024e98fc19"}},Pt={[Pe.MAINNET]:{[gt[Pe.MAINNET].waUSDT]:{aToken:"0x3ed3b47dd13ec9a98b44e6204a523e766b225811",underlying:"0xdac17f958d2ee523a2206206994597c13d831ec7"},[gt[Pe.MAINNET].waUSDC]:{aToken:"0xbcca60bb61934080951369a648fb03df4f96263c",underlying:"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"},[gt[Pe.MAINNET].waDAI]:{aToken:"0x028171bca77440897b824ca71d1c56cac55b68a3",underlying:"0x6b175474e89094c44da98b954eedeac495271d0f"}},[Pe.POLYGON]:{[gt[Pe.POLYGON].wamUSDT]:{aToken:"0x60d55f02a771d515e077c9c2403a1ef324885cec",underlying:"0xc2132d05d31c914a87c6611c10748aeb04b58e8f"},[gt[Pe.POLYGON].wamUSDC]:{aToken:"0x1a13f4ca1d028320a707d99520abfefca3998b7f",underlying:"0x2791bca1f2de4661ed88a30c99a7a9449aa84174"},[gt[Pe.POLYGON].wamDAI]:{aToken:"0x27f8d03b3a2196956ed754badc28d73be8830a6e",underlying:"0x8f3cf7ad23cd3cadbd9735aff958023239c6a063"}}},wt=new t(["function rate() view returns (uint256)"]);class xt{constructor(e,t){this.multicall=e,this.network=t}async fetch(e){const t=Object.values(gt[e]),a=t.map((e=>({target:e,callData:wt.encodeFunctionData("rate",[])}))),[,n]=await this.multicall.callStatic.aggregate(a);return t.reduce(((e,t,a)=>(e[t]||(e[t]="0x"==n[a]?0:parseFloat(It(n[a],27))),e)),{})}async getRate(e){return 1}}function Et(e){const t={};return e.forEach((e=>{e.price&&(t[e.address]=e.price)})),t}function At(e,t){let a=e.toLowerCase();return a=vt(a,t),a=St(a,t),a}const vt=(e,t)=>{const a=st(t).PriceChainMap;return a&&a[e.toLowerCase()]||e},St=(e,t)=>{const a=e.toLocaleLowerCase(),n=t;return null!=Pt[n]&&null!=Pt[n]&&Object.keys(Pt[n]).includes(a)?Pt[n][a].aToken:a},kt=(e,t)=>{const a=t.filter(((t,a)=>e[a]===o));return a[0]?p.from(a[0]):p.from(0)};class Ot{constructor(e,t=200,a=100){this.fn=e,this.wait=t,this.limit=a,this.requestSets=[],this.promisedCalls=[],this.promisedCount=0,this.debounceCancel=()=>{}}fetch(e){var t,a;return(t=this.requestSets)[a=this.promisedCount]||(t[a]=new Set),e&&this.requestSets[this.promisedCount].add(e),this.requestSets[this.promisedCount].size>=this.limit?this.execute(0):this.promisedCalls[this.promisedCount]?this.promisedCalls[this.promisedCount].promise:this.execute(this.wait)}execute(e=0){this.promisedCalls[this.promisedCount]||(this.promisedCalls[this.promisedCount]=(()=>{let e=()=>{},t=()=>{};return{promise:new Promise(((a,n)=>{[e,t]=[a,n]})),reject:t,resolve:e}})());const{promise:t,resolve:a,reject:n}=this.promisedCalls[this.promisedCount];this.timeout&&clearTimeout(this.timeout);const o=()=>{const e=[...this.requestSets[this.promisedCount]];this.promisedCount++,this.fn(e).then((e=>{a(e),this.debounceCancel=()=>{}})).catch((e=>{e.response&&e.response.data&&e.response.data.error&&(e=e.response.data.error),n(e)}))};return e>0?this.timeout=setTimeout(o.bind(this),e):o(),this.debounceCancel=()=>{this.timeout&&clearTimeout(this.timeout),n("Cancelled"),delete this.promisedCalls[this.promisedCount]},t}}function Mt(e,t){const a=new RegExp(`[0-9]+\\.?[0-9]{0,${t}}`),n=e.match(a);let o=e;return n&&(o=n[0]),d(o,t)}function Ct(e,t){return l(e,t).replace(/(.0$)/,"")}function Ft(e){return Mt(e,18).toBigInt()}function Bt(e){return l(p.from(e),18)}const Rt=e=>d(`${e}`,18),Nt=p.from("10000"),Lt=(e,t)=>e.mul(t).div(Nt),Dt=(e,t)=>{const a=Lt(e,t);return e.sub(a)},Ut=(e,t)=>{const a=Lt(e,t);return e.add(a)},Vt=(e,t)=>u(e)===u(t);function qt(e,t,a){return t<0||t>e.length?e:[...e.slice(0,t),a,...e.slice(t)]}function Gt(e,t,a){return t<0||t>=e.length?e:[...e.slice(0,t),a,...e.slice(t+1)]}function Wt(e,t){const a=[...e];return t<0||t>=e.length||a.splice(t,1),a}function $t(e,t,...a){if(e.length!==t.length||a.some((e=>e.length!==t.length)))throw new Error("Array length mismatch");const n=e.map((e=>t.indexOf(e)));if(n.indexOf(-1)>=0)throw new Error("Invalid reference or original array");const o=[];return n.forEach(((e,t)=>{a.forEach(((a,n)=>{o[n]||(o[n]=[]),o[n][t]=a[e]}))})),o}function Ht(e){const t=Object.values(Be);return!(!e.includes("Linear")||!t.includes(e))}function Kt(e){return e.map((e=>`${e.slice(0,6)}...${e.slice(38,42)}`))}const Jt=({receipt:e,to:t,contractInterface:a,logName:n})=>{const o=e.logs.filter((e=>Vt(e.address,t))).map((e=>{try{return a.parseLog(e)}catch(e){return Re.getInstance().warn(e),null}})).find((e=>(null==e?void 0:e.name)===n));if(!o)throw new Error("Event not found in logs");return o},Xt=()=>`0x${Array(8).fill(null).map((()=>Math.random().toString(16).slice(2,10))).join("")}`;class Yt{format(e){return e}}class jt{constructor(){this.operatorMap={gt:"_gt",lt:"_lt",eq:"",in:"_in",not_in:"_not_in",contains:"_contains"}}format(e){const t={};return e.where&&Object.entries(e.where).forEach((([e,a])=>{Object.entries(a).forEach((([a,n])=>{t[`${e}${this.operatorMap[a]}`]=n}))})),{...e,where:t}}}class zt{constructor(e){this.args=e}merge(e){const t=_(this.args,e.args,((e,t)=>{if(Array.isArray(e))return e.concat(t)}));return new zt(t)}format(e){return e.format(this.args)}}const Zt=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct AaveLinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Qt{static createInterface(){return new k.Interface(Zt)}static connect(e,t){return new O(e,Zt,t)}}Qt.abi=Zt;const ea=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"AaveLinearPoolCreated",type:"event"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract AaveLinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class ta{static createInterface(){return new k.Interface(ea)}static connect(e,t){return new O(e,ea,t)}}ta.abi=ea;const aa=[{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approveVault",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IStaticATokenLM",name:"staticToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"toUnderlying",type:"bool"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapAaveStaticToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStaticATokenLM",name:"staticToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"fromUnderlying",type:"bool"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapAaveDynamicToken",outputs:[],stateMutability:"payable",type:"function"}];class na{static createInterface(){return new k.Interface(aa)}static connect(e,t){return new O(e,aa,t)}}na.abi=aa;const oa=[{inputs:[{internalType:"address",name:"admin",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"previousAdminRole",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"newAdminRole",type:"bytes32"}],name:"RoleAdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleGranted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleRevoked",type:"event"},{inputs:[],name:"DEFAULT_ADMIN_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"actionId",type:"bytes32"},{internalType:"address",name:"account",type:"address"},{internalType:"address",name:"",type:"address"}],name:"canPerform",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"}],name:"getRoleAdmin",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getRoleMember",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"}],name:"getRoleMemberCount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"grantRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32[]",name:"roles",type:"bytes32[]"},{internalType:"address",name:"account",type:"address"}],name:"grantRoles",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32[]",name:"roles",type:"bytes32[]"},{internalType:"address[]",name:"accounts",type:"address[]"}],name:"grantRolesToMany",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"hasRole",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"renounceRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"revokeRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32[]",name:"roles",type:"bytes32[]"},{internalType:"address",name:"account",type:"address"}],name:"revokeRoles",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32[]",name:"roles",type:"bytes32[]"},{internalType:"address[]",name:"accounts",type:"address[]"}],name:"revokeRolesFromMany",outputs:[],stateMutability:"nonpayable",type:"function"}];class ia{static createInterface(){return new k.Interface(oa)}static connect(e,t){return new O(e,oa,t)}}ia.abi=oa;const sa=[{inputs:[{internalType:"contract IVault",name:"_vault",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"minAmountsOut",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.ExitPoolRequest",name:"request",type:"tuple"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"maxAmountsIn",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"fromInternalBalance",type:"bool"}],internalType:"struct IVault.JoinPoolRequest",name:"request",type:"tuple"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"vault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"}];class ra{static createInterface(){return new k.Interface(sa)}static connect(e,t){return new O(e,sa,t)}}ra.abi=sa;const pa=[{inputs:[{internalType:"contract IBalancerTokenAdmin",name:"tokenAdmin",type:"address"},{internalType:"contract IGaugeController",name:"gaugeController",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"gauge",type:"address"},{indexed:!1,internalType:"uint256",name:"minted",type:"uint256"}],name:"Minted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!0,internalType:"address",name:"minter",type:"address"},{indexed:!1,internalType:"bool",name:"approval",type:"bool"}],name:"MinterApprovalSet",type:"event"},{inputs:[{internalType:"address",name:"minter",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"allowed_to_mint_for",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBalancerToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBalancerTokenAdmin",outputs:[{internalType:"contract IBalancerTokenAdmin",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getGaugeController",outputs:[{internalType:"contract IGaugeController",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"minter",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"getMinterApproval",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"gauge",type:"address"}],name:"mint",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"gauge",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"mintFor",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[]",name:"gauges",type:"address[]"}],name:"mintMany",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[]",name:"gauges",type:"address[]"},{internalType:"address",name:"user",type:"address"}],name:"mintManyFor",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"gauge",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"mint_for",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[8]",name:"gauges",type:"address[8]"}],name:"mint_many",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"gauge",type:"address"}],name:"minted",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"minter",type:"address"},{internalType:"bool",name:"approval",type:"bool"}],name:"setMinterApproval",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"minter",type:"address"},{internalType:"bool",name:"approval",type:"bool"},{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"setMinterApprovalWithSignature",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"minter",type:"address"}],name:"toggle_approve_mint",outputs:[],stateMutability:"nonpayable",type:"function"}];class da{static createInterface(){return new k.Interface(pa)}static connect(e,t){return new O(e,pa,t)}}da.abi=pa;const la=[{inputs:[{internalType:"contract IVault",name:"_vault",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getAmpForPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getInRecoveryModeForPools",outputs:[{internalType:"bool[]",name:"",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getIsPausedForPools",outputs:[{internalType:"bool[]",name:"",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getLinearTargetsForPools",outputs:[{internalType:"uint256[][]",name:"",type:"uint256[][]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getNormalizedWeightsForPools",outputs:[{internalType:"uint256[][]",name:"",type:"uint256[][]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"poolIds",type:"bytes32[]"},{components:[{internalType:"bool",name:"loadTokenBalanceUpdatesAfterBlock",type:"bool"},{internalType:"bool",name:"loadTotalSupply",type:"bool"},{internalType:"bool",name:"loadSwapFees",type:"bool"},{internalType:"bool",name:"loadLinearWrappedTokenRates",type:"bool"},{internalType:"bool",name:"loadLinearTargets",type:"bool"},{internalType:"bool",name:"loadNormalizedWeights",type:"bool"},{internalType:"bool",name:"loadScalingFactors",type:"bool"},{internalType:"bool",name:"loadAmps",type:"bool"},{internalType:"bool",name:"loadRates",type:"bool"},{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"enum TotalSupplyType[]",name:"totalSupplyTypes",type:"uint8[]"},{internalType:"enum SwapFeeType[]",name:"swapFeeTypes",type:"uint8[]"},{internalType:"uint256[]",name:"linearPoolIdxs",type:"uint256[]"},{internalType:"uint256[]",name:"weightedPoolIdxs",type:"uint256[]"},{internalType:"uint256[]",name:"scalingFactorPoolIdxs",type:"uint256[]"},{internalType:"uint256[]",name:"ampPoolIdxs",type:"uint256[]"},{internalType:"uint256[]",name:"ratePoolIdxs",type:"uint256[]"}],internalType:"struct PoolDataQueryConfig",name:"config",type:"tuple"}],name:"getPoolData",outputs:[{internalType:"uint256[][]",name:"balances",type:"uint256[][]"},{internalType:"uint256[]",name:"totalSupplies",type:"uint256[]"},{internalType:"uint256[]",name:"swapFees",type:"uint256[]"},{internalType:"uint256[]",name:"linearWrappedTokenRates",type:"uint256[]"},{internalType:"uint256[][]",name:"linearTargets",type:"uint256[][]"},{internalType:"uint256[][]",name:"weights",type:"uint256[][]"},{internalType:"uint256[][]",name:"scalingFactors",type:"uint256[][]"},{internalType:"uint256[]",name:"amps",type:"uint256[]"},{internalType:"uint256[]",name:"rates",type:"uint256[]"},{internalType:"uint256[]",name:"ignoreIdxs",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"poolIds",type:"bytes32[]"},{components:[{internalType:"bool",name:"loadInRecoveryMode",type:"bool"},{internalType:"bool",name:"loadIsPaused",type:"bool"}],internalType:"struct PoolStatusQueryConfig",name:"config",type:"tuple"}],name:"getPoolStatus",outputs:[{internalType:"bool[]",name:"isPaused",type:"bool[]"},{internalType:"bool[]",name:"inRecoveryMode",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"poolIds",type:"bytes32[]"},{internalType:"uint256",name:"blockNumber",type:"uint256"}],name:"getPoolTokenBalancesWithUpdatesAfterBlock",outputs:[{internalType:"uint256[][]",name:"",type:"uint256[][]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getRateForPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getScalingFactorsForPools",outputs:[{internalType:"uint256[][]",name:"",type:"uint256[][]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"},{internalType:"enum SwapFeeType[]",name:"swapFeeTypes",type:"uint8[]"}],name:"getSwapFeePercentageForPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"},{internalType:"enum TotalSupplyType[]",name:"totalSupplyTypes",type:"uint8[]"}],name:"getTotalSupplyForPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getWrappedTokenRateForLinearPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"vault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"}];class ua{static createInterface(){return new k.Interface(la)}static connect(e,t){return new O(e,la,t)}}ua.abi=la;const ca=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"address",name:"libraryAddress",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"getLibrary",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"results",type:"bytes[]"}],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}];class ya{static createInterface(){return new k.Interface(ca)}static connect(e,t){return new O(e,ca,t)}}ya.abi=ca;const ba=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IERC20",name:"wstETH",type:"address"},{internalType:"contract IBalancerMinter",name:"minter",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approveVault",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"assetInIndex",type:"uint256"},{internalType:"uint256",name:"assetOutIndex",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.BatchSwapStep[]",name:"swaps",type:"tuple[]"},{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"int256[]",name:"limits",type:"int256[]"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"value",type:"uint256"},{components:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"key",type:"uint256"}],internalType:"struct VaultActions.OutputReference[]",name:"outputReferences",type:"tuple[]"}],name:"batchSwap",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum VaultActions.PoolKind",name:"kind",type:"uint8"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"minAmountsOut",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.ExitPoolRequest",name:"request",type:"tuple"},{components:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"key",type:"uint256"}],internalType:"struct VaultActions.OutputReference[]",name:"outputReferences",type:"tuple[]"}],name:"exitPool",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStakingLiquidityGauge[]",name:"gauges",type:"address[]"}],name:"gaugeClaimRewards",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStakingLiquidityGauge",name:"gauge",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"gaugeDeposit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address[]",name:"gauges",type:"address[]"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"gaugeMint",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bool",name:"approval",type:"bool"},{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"gaugeSetMinterApproval",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStakingLiquidityGauge",name:"gauge",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"gaugeWithdraw",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"getEntrypoint",outputs:[{internalType:"contract IBalancerRelayer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum VaultActions.PoolKind",name:"kind",type:"uint8"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"maxAmountsIn",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"fromInternalBalance",type:"bool"}],internalType:"struct IVault.JoinPoolRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"joinPool",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.UserBalanceOpKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"asset",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"}],internalType:"struct IVault.UserBalanceOp[]",name:"ops",type:"tuple[]"},{internalType:"uint256",name:"value",type:"uint256"}],name:"manageUserBalance",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"ref",type:"uint256"}],name:"peekChainedReferenceValue",outputs:[{internalType:"uint256",name:"value",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"relayer",type:"address"},{internalType:"bool",name:"approved",type:"bool"},{internalType:"bytes",name:"authorisation",type:"bytes"}],name:"setRelayerApproval",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"stakeETH",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"stakeETHAndWrap",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"assetIn",type:"address"},{internalType:"contract IAsset",name:"assetOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.SingleSwap",name:"singleSwap",type:"tuple"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"uint256",name:"limit",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"swap",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStaticATokenLM",name:"staticToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"toUnderlying",type:"bool"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapAaveStaticToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract ICToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapCompoundV2",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC4626",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapERC4626",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IEulerToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapEuler",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IGearboxDieselToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"dieselAmount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapGearbox",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IReaperTokenVault",name:"vaultToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapReaperVaultToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IShareToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapShareToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract ITetuSmartVault",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapTetu",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IUnbuttonToken",name:"wrapperToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapUnbuttonToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapWstETH",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IYearnTokenVault",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapYearn",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC20Permit",name:"token",type:"address"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"vaultPermit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC20PermitDAI",name:"token",type:"address"},{internalType:"address",name:"holder",type:"address"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"expiry",type:"uint256"},{internalType:"bool",name:"allowed",type:"bool"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"vaultPermitDAI",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStaticATokenLM",name:"staticToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"fromUnderlying",type:"bool"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapAaveDynamicToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract ICToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapCompoundV2",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC4626",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapERC4626",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IEulerToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"eulerProtocol",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapEuler",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IGearboxDieselToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"mainAmount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapGearbox",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IReaperTokenVault",name:"vaultToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapReaperVaultToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IShareToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapShareToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapStETH",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract ITetuSmartVault",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapTetu",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IUnbuttonToken",name:"wrapperToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"uAmount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapUnbuttonToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IYearnTokenVault",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapYearn",outputs:[],stateMutability:"payable",type:"function"}];class ma{static createInterface(){return new k.Interface(ba)}static connect(e,t){return new O(e,ba,t)}}ma.abi=ba;const fa=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"contract IRateProvider[]",name:"rateProviders",type:"address[]"},{internalType:"uint256[]",name:"tokenRateCacheDurations",type:"uint256[]"},{internalType:"bool[]",name:"exemptFromYieldProtocolFeeFlags",type:"bool[]"},{internalType:"uint256",name:"amplificationParameter",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"}],internalType:"struct ComposableStablePool.NewPoolParams",name:"params",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"startValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endTime",type:"uint256"}],name:"AmpUpdateStarted",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"currentValue",type:"uint256"}],name:"AmpUpdateStopped",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"feeType",type:"uint256"},{indexed:!1,internalType:"uint256",name:"protocolFeePercentage",type:"uint256"}],name:"ProtocolFeePercentageCacheUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"tokenIndex",type:"uint256"},{indexed:!1,internalType:"uint256",name:"rate",type:"uint256"}],name:"TokenRateCacheUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"tokenIndex",type:"uint256"},{indexed:!0,internalType:"contract IRateProvider",name:"provider",type:"address"},{indexed:!1,internalType:"uint256",name:"cacheDuration",type:"uint256"}],name:"TokenRateProviderSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getActualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAmplificationParameter",outputs:[{internalType:"uint256",name:"value",type:"uint256"},{internalType:"bool",name:"isUpdating",type:"bool"},{internalType:"uint256",name:"precision",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastJoinExitData",outputs:[{internalType:"uint256",name:"lastJoinExitAmplification",type:"uint256"},{internalType:"uint256",name:"lastPostJoinExitInvariant",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMinimumBpt",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"feeType",type:"uint256"}],name:"getProtocolFeePercentageCache",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolSwapFeeDelegation",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRateProviders",outputs:[{internalType:"contract IRateProvider[]",name:"",type:"address[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"getTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"getTokenRateCache",outputs:[{internalType:"uint256",name:"rate",type:"uint256"},{internalType:"uint256",name:"oldRate",type:"uint256"},{internalType:"uint256",name:"duration",type:"uint256"},{internalType:"uint256",name:"expires",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"isTokenExemptFromYieldProtocolFee",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"swapRequest",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"bytes",name:"poolConfig",type:"bytes"}],name:"setAssetManagerPoolConfig",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"uint256",name:"duration",type:"uint256"}],name:"setTokenRateCacheDuration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"rawEndValue",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"}],name:"startAmplificationParameterUpdate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopAmplificationParameterUpdate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"updateProtocolFeePercentageCache",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"updateTokenRateCache",outputs:[],stateMutability:"nonpayable",type:"function"}];class Ta{static createInterface(){return new k.Interface(fa)}static connect(e,t){return new O(e,fa,t)}}Ta.abi=fa;const ha=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256",name:"amplificationParameter",type:"uint256"},{internalType:"contract IRateProvider[]",name:"rateProviders",type:"address[]"},{internalType:"uint256[]",name:"tokenRateCacheDurations",type:"uint256[]"},{internalType:"bool[]",name:"exemptFromYieldProtocolFeeFlags",type:"bool[]"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract ComposableStablePool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Ia{static createInterface(){return new k.Interface(ha)}static connect(e,t){return new O(e,ha,t)}}Ia.abi=ha;const _a=[{inputs:[{internalType:"contract IERC20",name:"_underlying",type:"address"},{internalType:"contract IERC20",name:"_bond",type:"address"},{internalType:"uint256",name:"_expiration",type:"uint256"},{internalType:"uint256",name:"_unitSeconds",type:"uint256"},{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"uint256",name:"_percentFee",type:"uint256"},{internalType:"uint256",name:"_percentFeeGov",type:"uint256"},{internalType:"address",name:"_governance",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"collectedBase",type:"uint256"},{indexed:!1,internalType:"uint256",name:"collectedBond",type:"uint256"},{indexed:!1,internalType:"uint256",name:"remainingBase",type:"uint256"},{indexed:!1,internalType:"uint256",name:"remainingBond",type:"uint256"}],name:"FeeCollection",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"FEE_BOUND",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"bond",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"bondDecimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseApproval",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"expiration",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"feesBond",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"feesUnderlying",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"governance",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"increaseApproval",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"currentBalances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"protocolSwapFee",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"currentBalances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"protocolSwapFee",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"swapRequest",type:"tuple"},{internalType:"uint256",name:"currentBalanceTokenIn",type:"uint256"},{internalType:"uint256",name:"currentBalanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"percentFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"percentFeeGov",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountX",type:"uint256"},{internalType:"uint256",name:"reserveX",type:"uint256"},{internalType:"uint256",name:"reserveY",type:"uint256"},{internalType:"bool",name:"out",type:"bool"}],name:"solveTradeInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"underlying",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"underlyingDecimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"unitSeconds",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"}];class ga{static createInterface(){return new k.Interface(_a)}static connect(e,t){return new O(e,_a,t)}}ga.abi=_a;const Pa=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];class wa{static createInterface(){return new k.Interface(Pa)}static connect(e,t){return new O(e,Pa,t)}}wa.abi=Pa;const xa=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct ERC4626LinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Ea{static createInterface(){return new k.Interface(xa)}static connect(e,t){return new O(e,xa,t)}}Ea.abi=xa;const Aa=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"Erc4626LinearPoolCreated",type:"event"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract LinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class va{static createInterface(){return new k.Interface(Aa)}static connect(e,t){return new O(e,Aa,t)}}va.abi=Aa;const Sa=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct EulerLinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class ka{static createInterface(){return new k.Interface(Sa)}static connect(e,t){return new O(e,Sa,t)}}ka.abi=Sa;const Oa=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"_eulerProtocol",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"EulerLinearPoolCreated",type:"event"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"}],name:"create",outputs:[{internalType:"contract LinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"eulerProtocol",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Ma{static createInterface(){return new k.Interface(Oa)}static connect(e,t){return new O(e,Oa,t)}}Ma.abi=Oa;const Ca=[{inputs:[{internalType:"address[]",name:"_assetsToRegister",type:"address[]"},{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"uint256",name:"_protocolPercentFee",type:"uint256"},{internalType:"string",name:"_name",type:"string"},{internalType:"string",name:"_symbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"numeraire",type:"address"},{indexed:!0,internalType:"address",name:"reserve",type:"address"},{indexed:!1,internalType:"uint256",name:"weight",type:"uint256"}],name:"AssetIncluded",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"derivative",type:"address"},{indexed:!0,internalType:"address",name:"numeraire",type:"address"},{indexed:!0,internalType:"address",name:"reserve",type:"address"},{indexed:!1,internalType:"address",name:"assimilator",type:"address"}],name:"AssimilatorIncluded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"newCollector",type:"address"}],name:"ChangeCollectorAddress",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"isEmergency",type:"bool"}],name:"EmergencyAlarm",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"lptAmountBurned",type:"uint256"},{indexed:!1,internalType:"uint256[]",name:"amountsWithdrawn",type:"uint256[]"}],name:"EmergencyWithdraw",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"feesCollected",type:"uint256"}],name:"FeesAccrued",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"feesCollected",type:"uint256"}],name:"FeesCollected",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"lptAmountBurned",type:"uint256"},{indexed:!1,internalType:"uint256[]",name:"amountsWithdrawn",type:"uint256[]"}],name:"OnExitPool",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"lptAmountMinted",type:"uint256"},{indexed:!1,internalType:"uint256[]",name:"amountsDeposited",type:"uint256[]"}],name:"OnJoinPool",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"alpha",type:"uint256"},{indexed:!1,internalType:"uint256",name:"beta",type:"uint256"},{indexed:!1,internalType:"uint256",name:"delta",type:"uint256"},{indexed:!1,internalType:"uint256",name:"epsilon",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lambda",type:"uint256"}],name:"ParametersSet",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"updater",type:"address"},{indexed:!1,internalType:"uint256",name:"newProtocolPercentage",type:"uint256"}],name:"ProtocolFeeShareUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"trader",type:"address"},{indexed:!0,internalType:"address",name:"origin",type:"address"},{indexed:!0,internalType:"address",name:"target",type:"address"},{indexed:!1,internalType:"uint256",name:"originAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"targetAmount",type:"uint256"}],name:"Trade",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_derivative",type:"address"}],name:"assimilator",outputs:[{internalType:"address",name:"assimilator_",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"collectorAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"curve",outputs:[{internalType:"int128",name:"alpha",type:"int128"},{internalType:"int128",name:"beta",type:"int128"},{internalType:"int128",name:"delta",type:"int128"},{internalType:"int128",name:"epsilon",type:"int128"},{internalType:"int128",name:"lambda",type:"int128"},{internalType:"uint256",name:"cap",type:"uint256"},{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"address",name:"fxPoolAddress",type:"address"},{internalType:"bytes32",name:"poolId",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"derivatives",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"emergency",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[]",name:"_assets",type:"address[]"},{internalType:"uint256[]",name:"_assetWeights",type:"uint256[]"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"liquidity",outputs:[{internalType:"uint256",name:"total_",type:"uint256"},{internalType:"uint256[]",name:"individual_",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"numeraires",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"swapRequest",type:"tuple"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"protocolPercentFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"reserves",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_cap",type:"uint256"}],name:"setCap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_collectorAddress",type:"address"}],name:"setCollectorAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"_emergency",type:"bool"}],name:"setEmergency",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_alpha",type:"uint256"},{internalType:"uint256",name:"_beta",type:"uint256"},{internalType:"uint256",name:"_feeAtHalt",type:"uint256"},{internalType:"uint256",name:"_epsilon",type:"uint256"},{internalType:"uint256",name:"_lambda",type:"uint256"}],name:"setParams",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_protocolPercentFee",type:"uint256"}],name:"setProtocolPercentFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalUnclaimedFeesInNumeraire",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"totalDepositNumeraire",type:"uint256"}],name:"viewDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"viewParameters",outputs:[{internalType:"uint256",name:"alpha_",type:"uint256"},{internalType:"uint256",name:"beta_",type:"uint256"},{internalType:"uint256",name:"delta_",type:"uint256"},{internalType:"uint256",name:"epsilon_",type:"uint256"},{internalType:"uint256",name:"lambda_",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_curvesToBurn",type:"uint256"}],name:"viewWithdraw",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"}];class Fa{static createInterface(){return new k.Interface(Ca)}static connect(e,t){return new O(e,Ca,t)}}Fa.abi=Ca;const Ba=[{inputs:[],name:"CLAIM_FREQUENCY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IRewardsOnlyGauge",name:"gauge",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"claimRewardsFromGauge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IRewardsOnlyGauge[]",name:"gauges",type:"address[]"},{internalType:"address",name:"user",type:"address"}],name:"claimRewardsFromGauges",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IRewardsOnlyGauge",name:"gauge",type:"address"},{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"token",type:"address"}],name:"getPendingRewards",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"}];class Ra{static createInterface(){return new k.Interface(Ba)}static connect(e,t){return new O(e,Ba,t)}}Ra.abi=Ba;const Na=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct GearboxLinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class La{static createInterface(){return new k.Interface(Na)}static connect(e,t){return new O(e,Na,t)}}La.abi=Na;const Da=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"GearboxLinearPoolCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract GearboxLinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Ua{static createInterface(){return new k.Interface(Da)}static connect(e,t){return new O(e,Da,t)}}Ua.abi=Da;const Va=[{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"key",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"previousValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newValue",type:"uint256"}],name:"ConfigChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"key",type:"bytes32"}],name:"ConfigFrozen",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"key",type:"bytes32"}],name:"ConfigUnset",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"newGovernor",type:"address"}],name:"GovernorChangeRequested",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"oldGovernor",type:"address"},{indexed:!1,internalType:"address",name:"newGovernor",type:"address"}],name:"GovernorChanged",type:"event"},{inputs:[],name:"acceptGovernance",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newGovernor",type:"address"}],name:"changeGovernor",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"freeze",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"},{internalType:"address",name:"defaultValue",type:"address"}],name:"getAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"getAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"getConfigMeta",outputs:[{internalType:"uint8",name:"",type:"uint8"},{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"getUint",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"governor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"hasKey",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_governor",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"listKeys",outputs:[{internalType:"bytes32[]",name:"",type:"bytes32[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"pendingGovernor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"},{internalType:"address",name:"newValue",type:"address"}],name:"setAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"},{internalType:"uint256",name:"newValue",type:"uint256"}],name:"setUint",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"unset",outputs:[],stateMutability:"nonpayable",type:"function"}];class qa{static createInterface(){return new k.Interface(Va)}static connect(e,t){return new O(e,Va,t)}}qa.abi=Va;const Ga=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IwstETH",name:"wstETH",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"assetInIndex",type:"uint256"},{internalType:"uint256",name:"assetOutIndex",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.BatchSwapStep[]",name:"swaps",type:"tuple[]"},{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"int256[]",name:"limits",type:"int256[]"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"batchSwap",outputs:[{internalType:"int256[]",name:"swapAmounts",type:"int256[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"minAmountsOut",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.ExitPoolRequest",name:"request",type:"tuple"}],name:"exitPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getStETH",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWstETH",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"maxAmountsIn",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"fromInternalBalance",type:"bool"}],internalType:"struct IVault.JoinPoolRequest",name:"request",type:"tuple"}],name:"joinPool",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"assetIn",type:"address"},{internalType:"contract IAsset",name:"assetOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.SingleSwap",name:"singleSwap",type:"tuple"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"uint256",name:"limit",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swap",outputs:[{internalType:"uint256",name:"swapAmount",type:"uint256"}],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}];class Wa{static createInterface(){return new k.Interface(Ga)}static connect(e,t){return new O(e,Ga,t)}}Wa.abi=Ga;const $a=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"bytes",name:"poolConfig",type:"bytes"}],name:"setAssetManagerPoolConfig",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"paused",type:"bool"}],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];class Ha{static createInterface(){return new k.Interface($a)}static connect(e,t){return new O(e,$a,t)}}Ha.abi=$a;const Ka=[{name:"Deposit",inputs:[{name:"provider",type:"address",indexed:!0},{name:"value",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Withdraw",inputs:[{name:"provider",type:"address",indexed:!0},{name:"value",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"UpdateLiquidityLimit",inputs:[{name:"user",type:"address",indexed:!0},{name:"original_balance",type:"uint256",indexed:!1},{name:"original_supply",type:"uint256",indexed:!1},{name:"working_balance",type:"uint256",indexed:!1},{name:"working_supply",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Transfer",inputs:[{name:"_from",type:"address",indexed:!0},{name:"_to",type:"address",indexed:!0},{name:"_value",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Approval",inputs:[{name:"_owner",type:"address",indexed:!0},{name:"_spender",type:"address",indexed:!0},{name:"_value",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{stateMutability:"nonpayable",type:"constructor",inputs:[{name:"minter",type:"address"},{name:"veBoostProxy",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit",inputs:[{name:"_value",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit",inputs:[{name:"_value",type:"uint256"},{name:"_addr",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit",inputs:[{name:"_value",type:"uint256"},{name:"_addr",type:"address"},{name:"_claim_rewards",type:"bool"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"withdraw",inputs:[{name:"_value",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"withdraw",inputs:[{name:"_value",type:"uint256"},{name:"_claim_rewards",type:"bool"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"claim_rewards",inputs:[],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"claim_rewards",inputs:[{name:"_addr",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"claim_rewards",inputs:[{name:"_addr",type:"address"},{name:"_receiver",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"transferFrom",inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"transfer",inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"approve",inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"permit",inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"},{name:"_value",type:"uint256"},{name:"_deadline",type:"uint256"},{name:"_v",type:"uint8"},{name:"_r",type:"bytes32"},{name:"_s",type:"bytes32"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"increaseAllowance",inputs:[{name:"_spender",type:"address"},{name:"_added_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"decreaseAllowance",inputs:[{name:"_spender",type:"address"},{name:"_subtracted_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"user_checkpoint",inputs:[{name:"addr",type:"address"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"set_rewards_receiver",inputs:[{name:"_receiver",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"kick",inputs:[{name:"addr",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit_reward_token",inputs:[{name:"_reward_token",type:"address"},{name:"_amount",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"add_reward",inputs:[{name:"_reward_token",type:"address"},{name:"_distributor",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"set_reward_distributor",inputs:[{name:"_reward_token",type:"address"},{name:"_distributor",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"set_killed",inputs:[{name:"_is_killed",type:"bool"}],outputs:[]},{stateMutability:"view",type:"function",name:"claimed_reward",inputs:[{name:"_addr",type:"address"},{name:"_token",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"claimable_reward",inputs:[{name:"_user",type:"address"},{name:"_reward_token",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"claimable_reward_write",inputs:[{name:"_addr",type:"address"},{name:"_token",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"claimable_tokens",inputs:[{name:"addr",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_checkpoint",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"future_epoch_time",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"inflation_rate",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"decimals",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"version",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"allowance",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"nonpayable",type:"function",name:"initialize",inputs:[{name:"_lp_token",type:"address"}],outputs:[]},{stateMutability:"view",type:"function",name:"balanceOf",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"totalSupply",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"name",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"symbol",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"DOMAIN_SEPARATOR",inputs:[],outputs:[{name:"",type:"bytes32"}]},{stateMutability:"view",type:"function",name:"nonces",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"factory",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"lp_token",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"is_killed",inputs:[],outputs:[{name:"",type:"bool"}]},{stateMutability:"view",type:"function",name:"reward_count",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"reward_data",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"tuple",components:[{name:"token",type:"address"},{name:"distributor",type:"address"},{name:"period_finish",type:"uint256"},{name:"rate",type:"uint256"},{name:"last_update",type:"uint256"},{name:"integral",type:"uint256"}]}]},{stateMutability:"view",type:"function",name:"rewards_receiver",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"reward_integral_for",inputs:[{name:"arg0",type:"address"},{name:"arg1",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"working_balances",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"working_supply",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_inv_supply_of",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_checkpoint_of",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_fraction",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"period",inputs:[],outputs:[{name:"",type:"int128"}]},{stateMutability:"view",type:"function",name:"reward_tokens",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"period_timestamp",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_inv_supply",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"uint256"}]}];class Ja{static createInterface(){return new k.Interface(Ka)}static connect(e,t){return new O(e,Ka,t)}}Ja.abi=Ka;const Xa=[{constant:!1,inputs:[{components:[{name:"target",type:"address"},{name:"callData",type:"bytes"}],name:"calls",type:"tuple[]"}],name:"aggregate",outputs:[{name:"blockNumber",type:"uint256"},{name:"returnData",type:"bytes[]"}],payable:!1,stateMutability:"nonpayable",type:"function"}];class Ya{static createInterface(){return new k.Interface(Xa)}static connect(e,t){return new O(e,Xa,t)}}Ya.abi=Xa;const ja=[{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call[]",name:"calls",type:"tuple[]"}],name:"aggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes[]",name:"returnData",type:"bytes[]"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bool",name:"allowFailure",type:"bool"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call3[]",name:"calls",type:"tuple[]"}],name:"aggregate3",outputs:[{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bool",name:"allowFailure",type:"bool"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call3Value[]",name:"calls",type:"tuple[]"}],name:"aggregate3Value",outputs:[{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call[]",name:"calls",type:"tuple[]"}],name:"blockAndAggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"blockHash",type:"bytes32"},{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"},{inputs:[],name:"getBasefee",outputs:[{internalType:"uint256",name:"basefee",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],name:"getBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBlockNumber",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getChainId",outputs:[{internalType:"uint256",name:"chainid",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockCoinbase",outputs:[{internalType:"address",name:"coinbase",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockDifficulty",outputs:[{internalType:"uint256",name:"difficulty",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockGasLimit",outputs:[{internalType:"uint256",name:"gaslimit",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockTimestamp",outputs:[{internalType:"uint256",name:"timestamp",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"addr",type:"address"}],name:"getEthBalance",outputs:[{internalType:"uint256",name:"balance",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bool",name:"requireSuccess",type:"bool"},{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call[]",name:"calls",type:"tuple[]"}],name:"tryAggregate",outputs:[{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bool",name:"requireSuccess",type:"bool"},{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call[]",name:"calls",type:"tuple[]"}],name:"tryBlockAndAggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"blockHash",type:"bytes32"},{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"}];class za{static createInterface(){return new k.Interface(ja)}static connect(e,t){return new O(e,ja,t)}}za.abi=ja;const Za=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256",name:"amplificationParameter",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"startValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endTime",type:"uint256"}],name:"AmpUpdateStarted",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"currentValue",type:"uint256"}],name:"AmpUpdateStopped",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAmplificationParameter",outputs:[{internalType:"uint256",name:"value",type:"uint256"},{internalType:"bool",name:"isUpdating",type:"bool"},{internalType:"uint256",name:"precision",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"swapRequest",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"bytes",name:"poolConfig",type:"bytes"}],name:"setAssetManagerPoolConfig",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"paused",type:"bool"}],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"rawEndValue",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"}],name:"startAmplificationParameterUpdate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopAmplificationParameterUpdate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];class Qa{static createInterface(){return new k.Interface(Za)}static connect(e,t){return new O(e,Za,t)}}Qa.abi=Za;const en=[{inputs:[{internalType:"contract IStaticAToken",name:"_waToken",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"waToken",outputs:[{internalType:"contract IStaticAToken",name:"",type:"address"}],stateMutability:"view",type:"function"}];class tn{static createInterface(){return new k.Interface(en)}static connect(e,t){return new O(e,en,t)}}tn.abi=en;const an=[{inputs:[{internalType:"contract IAuthorizer",name:"authorizer",type:"address"},{internalType:"contract IWETH",name:"weth",type:"address"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IAuthorizer",name:"newAuthorizer",type:"address"}],name:"AuthorizerChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ExternalBalanceTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IFlashLoanRecipient",name:"recipient",type:"address"},{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"feeAmount",type:"uint256"}],name:"FlashLoan",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"int256",name:"delta",type:"int256"}],name:"InternalBalanceChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!0,internalType:"address",name:"liquidityProvider",type:"address"},{indexed:!1,internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{indexed:!1,internalType:"int256[]",name:"deltas",type:"int256[]"},{indexed:!1,internalType:"uint256[]",name:"protocolFeeAmounts",type:"uint256[]"}],name:"PoolBalanceChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!0,internalType:"address",name:"assetManager",type:"address"},{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"int256",name:"cashDelta",type:"int256"},{indexed:!1,internalType:"int256",name:"managedDelta",type:"int256"}],name:"PoolBalanceManaged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!0,internalType:"address",name:"poolAddress",type:"address"},{indexed:!1,internalType:"enum IVault.PoolSpecialization",name:"specialization",type:"uint8"}],name:"PoolRegistered",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"relayer",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bool",name:"approved",type:"bool"}],name:"RelayerApprovalChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!0,internalType:"contract IERC20",name:"tokenIn",type:"address"},{indexed:!0,internalType:"contract IERC20",name:"tokenOut",type:"address"},{indexed:!1,internalType:"uint256",name:"amountIn",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amountOut",type:"uint256"}],name:"Swap",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"contract IERC20[]",name:"tokens",type:"address[]"}],name:"TokensDeregistered",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{indexed:!1,internalType:"address[]",name:"assetManagers",type:"address[]"}],name:"TokensRegistered",type:"event"},{inputs:[],name:"WETH",outputs:[{internalType:"contract IWETH",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"assetInIndex",type:"uint256"},{internalType:"uint256",name:"assetOutIndex",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.BatchSwapStep[]",name:"swaps",type:"tuple[]"},{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"int256[]",name:"limits",type:"int256[]"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"batchSwap",outputs:[{internalType:"int256[]",name:"assetDeltas",type:"int256[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"}],name:"deregisterTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"minAmountsOut",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.ExitPoolRequest",name:"request",type:"tuple"}],name:"exitPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IFlashLoanRecipient",name:"recipient",type:"address"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"flashLoan",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"}],name:"getInternalBalance",outputs:[{internalType:"uint256[]",name:"balances",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"}],name:"getPool",outputs:[{internalType:"address",name:"",type:"address"},{internalType:"enum IVault.PoolSpecialization",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"contract IERC20",name:"token",type:"address"}],name:"getPoolTokenInfo",outputs:[{internalType:"uint256",name:"cash",type:"uint256"},{internalType:"uint256",name:"managed",type:"uint256"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"assetManager",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"}],name:"getPoolTokens",outputs:[{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract ProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"relayer",type:"address"}],name:"hasApprovedRelayer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"maxAmountsIn",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"fromInternalBalance",type:"bool"}],internalType:"struct IVault.JoinPoolRequest",name:"request",type:"tuple"}],name:"joinPool",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.PoolBalanceOpKind",name:"kind",type:"uint8"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct IVault.PoolBalanceOp[]",name:"ops",type:"tuple[]"}],name:"managePoolBalance",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.UserBalanceOpKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"asset",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"}],internalType:"struct IVault.UserBalanceOp[]",name:"ops",type:"tuple[]"}],name:"manageUserBalance",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"assetInIndex",type:"uint256"},{internalType:"uint256",name:"assetOutIndex",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.BatchSwapStep[]",name:"swaps",type:"tuple[]"},{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"}],name:"queryBatchSwap",outputs:[{internalType:"int256[]",name:"",type:"int256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"enum IVault.PoolSpecialization",name:"specialization",type:"uint8"}],name:"registerPool",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"address[]",name:"assetManagers",type:"address[]"}],name:"registerTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IAuthorizer",name:"newAuthorizer",type:"address"}],name:"setAuthorizer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"paused",type:"bool"}],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"relayer",type:"address"},{internalType:"bool",name:"approved",type:"bool"}],name:"setRelayerApproval",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"assetIn",type:"address"},{internalType:"contract IAsset",name:"assetOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.SingleSwap",name:"singleSwap",type:"tuple"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"uint256",name:"limit",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swap",outputs:[{internalType:"uint256",name:"amountCalculated",type:"uint256"}],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}];class nn{static createInterface(){return new k.Interface(an)}static connect(e,t){return new O(e,an,t)}}nn.abi=an;const on=[{inputs:[{components:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256[]",name:"normalizedWeights",type:"uint256[]"},{internalType:"contract IRateProvider[]",name:"rateProviders",type:"address[]"},{internalType:"address[]",name:"assetManagers",type:"address[]"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],internalType:"struct WeightedPool.NewPoolParams",name:"params",type:"tuple"},{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"feeType",type:"uint256"},{indexed:!1,internalType:"uint256",name:"protocolFeePercentage",type:"uint256"}],name:"ProtocolFeePercentageCacheUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getATHRateProduct",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getActualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastPostJoinExitInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getNormalizedWeights",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"feeType",type:"uint256"}],name:"getProtocolFeePercentageCache",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolSwapFeeDelegation",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRateProviders",outputs:[{internalType:"contract IRateProvider[]",name:"",type:"address[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"bytes",name:"poolConfig",type:"bytes"}],name:"setAssetManagerPoolConfig",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"updateProtocolFeePercentageCache",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class sn{static createInterface(){return new k.Interface(on)}static connect(e,t){return new O(e,on,t)}}sn.abi=on;const rn=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256[]",name:"normalizedWeights",type:"uint256[]"},{internalType:"contract IRateProvider[]",name:"rateProviders",type:"address[]"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class pn{static createInterface(){return new k.Interface(rn)}static connect(e,t){return new O(e,rn,t)}}pn.abi=rn;const dn=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct YearnLinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class ln{static createInterface(){return new k.Interface(dn)}static connect(e,t){return new O(e,dn,t)}}ln.abi=dn;const un=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"YearnLinearPoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract LinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class cn{static createInterface(){return new k.Interface(un)}static connect(e,t){return new O(e,un,t)}}cn.abi=un;const yn=[{inputs:[{components:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"token0",type:"address"},{internalType:"contract IERC20",name:"token1",type:"address"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"bool",name:"oracleEnabled",type:"bool"},{internalType:"address",name:"owner",type:"address"}],internalType:"struct ExtensibleWeightedPool2Tokens.NewPoolParams",name:"baseParams",type:"tuple"},{components:[{internalType:"int256",name:"alpha",type:"int256"},{internalType:"int256",name:"beta",type:"int256"},{internalType:"int256",name:"c",type:"int256"},{internalType:"int256",name:"s",type:"int256"},{internalType:"int256",name:"lambda",type:"int256"}],internalType:"struct GyroECLPMath.Params",name:"eclpParams",type:"tuple"},{components:[{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],internalType:"struct GyroECLPMath.Vector2",name:"tauAlpha",type:"tuple"},{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],internalType:"struct GyroECLPMath.Vector2",name:"tauBeta",type:"tuple"},{internalType:"int256",name:"u",type:"int256"},{internalType:"int256",name:"v",type:"int256"},{internalType:"int256",name:"w",type:"int256"},{internalType:"int256",name:"z",type:"int256"},{internalType:"int256",name:"dSq",type:"int256"}],internalType:"struct GyroECLPMath.DerivedParams",name:"derivedEclpParams",type:"tuple"},{internalType:"address",name:"rateProvider0",type:"address"},{internalType:"address",name:"rateProvider1",type:"address"},{internalType:"address",name:"capManager",type:"address"},{components:[{internalType:"bool",name:"capEnabled",type:"bool"},{internalType:"uint120",name:"perAddressCap",type:"uint120"},{internalType:"uint128",name:"globalCap",type:"uint128"}],internalType:"struct ICappedLiquidity.CapParams",name:"capParams",type:"tuple"},{internalType:"address",name:"pauseManager",type:"address"}],internalType:"struct GyroECLPPool.GyroParams",name:"params",type:"tuple"},{internalType:"address",name:"configAddress",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"capManager",type:"address"}],name:"CapManagerUpdated",type:"event"},{anonymous:!1,inputs:[{components:[{internalType:"bool",name:"capEnabled",type:"bool"},{internalType:"uint120",name:"perAddressCap",type:"uint120"},{internalType:"uint128",name:"globalCap",type:"uint128"}],indexed:!1,internalType:"struct ICappedLiquidity.CapParams",name:"params",type:"tuple"}],name:"CapParamsUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"derivedParamsValidated",type:"bool"}],name:"ECLPDerivedParamsValidated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paramsValidated",type:"bool"}],name:"ECLPParamsValidated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"invariantAfterJoin",type:"uint256"}],name:"InvariantAterInitializeJoin",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"oldInvariant",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newInvariant",type:"uint256"}],name:"InvariantOldAndNew",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"OracleEnabledChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"oracleUpdatedIndex",type:"uint256"}],name:"OracleIndexUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"oldPauseManager",type:"address"},{indexed:!1,internalType:"address",name:"newPauseManager",type:"address"}],name:"PauseManagerChanged",type:"event"},{anonymous:!1,inputs:[],name:"PausedLocally",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256[]",name:"balances",type:"uint256[]"},{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],indexed:!1,internalType:"struct GyroECLPMath.Vector2",name:"invariant",type:"tuple"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"SwapParams",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[],name:"UnpausedLocally",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"_dSq",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsAlpha",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsBeta",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsC",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsLambda",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsS",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_tauAlphaX",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_tauAlphaY",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_tauBetaX",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_tauBetaY",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_u",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_v",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_w",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_z",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"capManager",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"capParams",outputs:[{components:[{internalType:"bool",name:"capEnabled",type:"bool"},{internalType:"uint120",name:"perAddressCap",type:"uint120"},{internalType:"uint128",name:"globalCap",type:"uint128"}],internalType:"struct ICappedLiquidity.CapParams",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_pauseManager",type:"address"}],name:"changePauseManager",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"startIndex",type:"uint256"},{internalType:"uint256",name:"endIndex",type:"uint256"}],name:"dirtyUninitializedOracleSamples",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getECLPParams",outputs:[{components:[{internalType:"int256",name:"alpha",type:"int256"},{internalType:"int256",name:"beta",type:"int256"},{internalType:"int256",name:"c",type:"int256"},{internalType:"int256",name:"s",type:"int256"},{internalType:"int256",name:"lambda",type:"int256"}],internalType:"struct GyroECLPMath.Params",name:"params",type:"tuple"},{components:[{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],internalType:"struct GyroECLPMath.Vector2",name:"tauAlpha",type:"tuple"},{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],internalType:"struct GyroECLPMath.Vector2",name:"tauBeta",type:"tuple"},{internalType:"int256",name:"u",type:"int256"},{internalType:"int256",name:"v",type:"int256"},{internalType:"int256",name:"w",type:"int256"},{internalType:"int256",name:"z",type:"int256"},{internalType:"int256",name:"dSq",type:"int256"}],internalType:"struct GyroECLPMath.DerivedParams",name:"d",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[],name:"getInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLargestSafeQueryWindow",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getLastInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"enum IPriceOracle.Variable",name:"variable",type:"uint8"}],name:"getLatest",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMiscData",outputs:[{internalType:"int256",name:"logInvariant",type:"int256"},{internalType:"int256",name:"logTotalSupply",type:"int256"},{internalType:"uint256",name:"oracleSampleCreationTimestamp",type:"uint256"},{internalType:"uint256",name:"oracleIndex",type:"uint256"},{internalType:"bool",name:"oracleEnabled",type:"bool"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getNormalizedWeights",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"enum IPriceOracle.Variable",name:"variable",type:"uint8"},{internalType:"uint256",name:"ago",type:"uint256"}],internalType:"struct IPriceOracle.OracleAccumulatorQuery[]",name:"queries",type:"tuple[]"}],name:"getPastAccumulators",outputs:[{internalType:"int256[]",name:"results",type:"int256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"spotPrice",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getSample",outputs:[{internalType:"int256",name:"logPairPrice",type:"int256"},{internalType:"int256",name:"accLogPairPrice",type:"int256"},{internalType:"int256",name:"logBptPrice",type:"int256"},{internalType:"int256",name:"accLogBptPrice",type:"int256"},{internalType:"int256",name:"logInvariant",type:"int256"},{internalType:"int256",name:"accLogInvariant",type:"int256"},{internalType:"uint256",name:"timestamp",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"enum IPriceOracle.Variable",name:"variable",type:"uint8"},{internalType:"uint256",name:"secs",type:"uint256"},{internalType:"uint256",name:"ago",type:"uint256"}],internalType:"struct IPriceOracle.OracleAverageQuery[]",name:"queries",type:"tuple[]"}],name:"getTimeWeightedAverage",outputs:[{internalType:"uint256[]",name:"results",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTokenRates",outputs:[{internalType:"uint256",name:"rate0",type:"uint256"},{internalType:"uint256",name:"rate1",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTotalSamples",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"gyroConfig",outputs:[{internalType:"contract IGyroConfig",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pauseManager",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"rateProvider0",outputs:[{internalType:"contract IRateProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"rateProvider1",outputs:[{internalType:"contract IRateProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_capManager",type:"address"}],name:"setCapManager",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"bool",name:"capEnabled",type:"bool"},{internalType:"uint120",name:"perAddressCap",type:"uint120"},{internalType:"uint128",name:"globalCap",type:"uint128"}],internalType:"struct ICappedLiquidity.CapParams",name:"params",type:"tuple"}],name:"setCapParams",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"paused",type:"bool"}],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"}];class bn{static createInterface(){return new k.Interface(yn)}static connect(e,t){return new O(e,yn,t)}}bn.abi=yn;const mn=[{name:"Deposit",inputs:[{name:"provider",type:"address",indexed:!0},{name:"value",type:"uint256",indexed:!1},{name:"locktime",type:"uint256",indexed:!0},{name:"type",type:"int128",indexed:!1},{name:"ts",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Withdraw",inputs:[{name:"provider",type:"address",indexed:!0},{name:"value",type:"uint256",indexed:!1},{name:"ts",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Supply",inputs:[{name:"prevSupply",type:"uint256",indexed:!1},{name:"supply",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{stateMutability:"nonpayable",type:"constructor",inputs:[{name:"token_addr",type:"address"},{name:"_name",type:"string"},{name:"_symbol",type:"string"},{name:"_authorizer_adaptor",type:"address"}],outputs:[]},{stateMutability:"view",type:"function",name:"token",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"name",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"symbol",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"decimals",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"admin",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"nonpayable",type:"function",name:"commit_smart_wallet_checker",inputs:[{name:"addr",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"apply_smart_wallet_checker",inputs:[],outputs:[]},{stateMutability:"view",type:"function",name:"get_last_user_slope",inputs:[{name:"addr",type:"address"}],outputs:[{name:"",type:"int128"}]},{stateMutability:"view",type:"function",name:"user_point_history__ts",inputs:[{name:"_addr",type:"address"},{name:"_idx",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"locked__end",inputs:[{name:"_addr",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"nonpayable",type:"function",name:"checkpoint",inputs:[],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit_for",inputs:[{name:"_addr",type:"address"},{name:"_value",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"create_lock",inputs:[{name:"_value",type:"uint256"},{name:"_unlock_time",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"increase_amount",inputs:[{name:"_value",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"increase_unlock_time",inputs:[{name:"_unlock_time",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"withdraw",inputs:[],outputs:[]},{stateMutability:"view",type:"function",name:"balanceOf",inputs:[{name:"addr",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"balanceOf",inputs:[{name:"addr",type:"address"},{name:"_t",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"balanceOfAt",inputs:[{name:"addr",type:"address"},{name:"_block",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"totalSupply",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"totalSupply",inputs:[{name:"t",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"totalSupplyAt",inputs:[{name:"_block",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"supply",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"locked",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"tuple",components:[{name:"amount",type:"int128"},{name:"end",type:"uint256"}]}]},{stateMutability:"view",type:"function",name:"epoch",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"point_history",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"bias",type:"int128"},{name:"slope",type:"int128"},{name:"ts",type:"uint256"},{name:"blk",type:"uint256"}]}]},{stateMutability:"view",type:"function",name:"user_point_history",inputs:[{name:"arg0",type:"address"},{name:"arg1",type:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"bias",type:"int128"},{name:"slope",type:"int128"},{name:"ts",type:"uint256"},{name:"blk",type:"uint256"}]}]},{stateMutability:"view",type:"function",name:"user_point_epoch",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"slope_changes",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"int128"}]},{stateMutability:"view",type:"function",name:"future_smart_wallet_checker",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"smart_wallet_checker",inputs:[],outputs:[{name:"",type:"address"}]}];class fn{static createInterface(){return new k.Interface(mn)}static connect(e,t){return new O(e,mn,t)}}fn.abi=mn;const Tn=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IERC20",name:"votingEscrow",type:"address"},{internalType:"contract IVeDelegation",name:"delegation",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"newImplementation",type:"address"}],name:"DelegationImplementationUpdated",type:"event"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"adjustedBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"adjusted_balance_of",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDelegationImplementation",outputs:[{internalType:"contract IVeDelegation",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVotingEscrow",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"killDelegation",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IVeDelegation",name:"delegation",type:"address"}],name:"setDelegation",outputs:[],stateMutability:"nonpayable",type:"function"}];class hn{static createInterface(){return new k.Interface(Tn)}static connect(e,t){return new O(e,Tn,t)}}hn.abi=Tn;var In,_n=Object.freeze({__proto__:null,AaveLinearPool__factory:Qt,AaveLinearPoolFactory__factory:ta,AaveWrapping__factory:na,Authoriser__factory:ia,BalancerHelpers__factory:ra,BalancerMinter__factory:da,BalancerPoolDataQueries__factory:ua,BalancerRelayer__factory:ya,BatchRelayerLibrary__factory:ma,ComposableStablePool__factory:Ta,ComposableStablePoolFactory__factory:Ia,ConvergentCurvePool__factory:ga,ERC20__factory:wa,ERC4626LinearPool__factory:Ea,ERC4626LinearPoolFactory__factory:va,EulerLinearPool__factory:ka,EulerLinearPoolFactory__factory:Ma,FXPool__factory:Fa,GaugeClaimHelper__factory:Ra,GearboxLinearPool__factory:La,GearboxLinearPoolFactory__factory:Ua,GyroConfig__factory:qa,LidoRelayer__factory:Wa,LinearPool__factory:Ha,LiquidityGaugeV5__factory:Ja,Multicall__factory:Ya,Multicall3__factory:za,StablePool__factory:Qa,StaticATokenRateProvider__factory:tn,Vault__factory:nn,WeightedPool__factory:sn,WeightedPoolFactory__factory:pn,YearnLinearPool__factory:ln,YearnLinearPoolFactory__factory:cn,GyroEV2__factory:bn,VeBal__factory:fn,VeDelegationProxy__factory:hn});function gn(e,t,o,i,s,r){const d=new Array(s.length).fill(n);return s.forEach(((n,s)=>{if(e.some((e=>Vt(n,e)))){const e=p.from(r).add(a);d[s]=o===In.SwapExactOut?d[s].add(p.from(i[s]).mul(e).div(a)):d[s].add(i[s])}if(t.some((e=>Vt(n,e)))){const e=a.sub(p.from(r));d[s]=o===In.SwapExactIn?d[s].add(p.from(i[s]).mul(e).div(a)):d[s].add(i[s])}})),d}!function(e){e[e.SwapExactIn=0]="SwapExactIn",e[e.SwapExactOut=1]="SwapExactOut"}(In||(In={}));var Pn={1:{contracts:{aaveLinearPoolFactory:"0x0b576c1245f479506e7c8bbc4db4db07c1cd31f9",arbitrumRootGauge:"0x6337949cbc4825bbd09242c811770f6f6fee9ffc",arbitrumRootGaugeFactory:"0x1c99324edc771c82a0dccb780cc7dda0045e50e7",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x8f42adbba1b16eaae3bb5754915e0d06059add75",authorizerAdaptorEntrypoint:"0xf5decdb1f3d1ee384908fbe16d2f0348ae43a9ea",authorizerWithAdaptorValidation:"0x6048a8c631fb7e77eca533cf9c29784e482391e7",avalancheRootGauge:"0xc57b4be50bf6bbe5f6a4fe379da342b32b37bf2f",avalancheRootGaugeFactory:"0x10f3e79911a490aa5b5d5cda6f111029c4eab5ac",bal:"0xba100000625a3754423978a60c9317c58a424e3d",balancerHelpers:"0x5addcca35b7a0d07c74063c48700c8590e87864e",balancerMinter:"0x239e55f427d44c3cc793f49bfb507ebe76638a2b",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0xfea793aa415061c483d2390414275ad314b3f621",balancerTokenAdmin:"0xf302f9f50958c5593770fdf4d4812309ff77414f",balTokenHolderFactory:"0xb848f50141f3d4255b37ac288c25c109104f2158",batchRelayerLibrary:"0xf77018c0d817da22cadbdf504c00c0d32ce1e5c2",circuitBreakerLib:"0x4967b3353cdf9e5c67421a3890d35f2f3bb50527",composableStablePoolFactory:"0xfada0f4547ab2de89d1304a668c39b3e09aa7c76",distributionScheduler:"0xbd35248f8325dd1cb2bbf9d01e80a6bb99a792dd",doubleEntrypointFixRelayer:"0xca96c4f198d343e251b1a01f3eba061ef3da73c1",erc4626LinearPoolFactory:"0x813ee7a840ce909e7fea2117a44a90b8063bd4fd",eulerLinearPoolFactory:"0x5f43fba61f63fa6bff101a0a0458cea917f6b347",externalWeightedMath:"0x3db89f0ca3b388f2bcdbccd2ff8e13c22459cf75",feeDistributor:"0xd3cf852898b21fc233251427c2dc93d3d604f3bb",gaugeAdder:"0x5dbad78818d4c8958eff2d5b95b28385a22113cd",gaugeController:"0xc128468b7ce63ea702c1f104d55a2566b13d3abd",gaugeWorkingBalanceHelper:"0xdab2583911e872a00a851fb80dcc78a4b46ba57c",gearboxLinearPoolFactory:"0x39a79eb449fc05c92c39aa6f0e9bfac03be8de5b",gnosisRootGauge:"0x05277ce7d1e365d660624612d8b8b9b55bfd4518",gnosisRootGaugeFactory:"0x2a18b396829bc29f66a1e59fadd7a0269a6605e8",l2GaugeCheckpointer:"0x343688c5cb92115a52ca485af7f62b4b7a2e9ccc",liquidityGaugeFactory:"0xf1665e19bc105be4edd3739f88315cc699cc5b65",liquidityGaugeV5:"0xe5f96070ca00cd54795416b1a4b4c2403231c548",managedPoolAddRemoveTokenLib:"0x4148bf5b0688ed0a87f317c6534cb841f503349e",managedPoolAmmLib:"0xb37646acbb1a91287721b2cdbe01ba0dba5e57a2",managedPoolFactory:"0xbf904f9f340745b4f0c4702c7b6ab1e808ea6b93",merkleOrchard:"0xe3881627b8deebccf9c23b291430a549fc0be5f7",mockAaveLendingPool:"0x28fa1e40011adf98898e8243b2a48bb21ebf0c29",mockAaveLinearPool:"0x4ce277df0feb5b4d07a0ca2adcf5326e4005239d",mockComposableStablePool:"0x5537f945d8c3fcfdc1b8deceebd220fad26afda8",mockErc4626LinearPool:"0x9516a2d25958edb8da246a320f2c7d94a0dbe25d",mockErc4626Token:"0xb99edc4b289b0f2284fcf3f66884191bdce29624",mockEulerLinearPool:"0xdec02e6642e2c999af429f5ce944653cad15e093",mockEulerToken:"0xc101dca301a4011c1f925e9622e749e550a1b667",mockGearboxDieselToken:"0xb7a32b67aadb3866cc5c2fabc6c6ab8a9027c3c1",mockGearboxLinearPool:"0x0d05aac44ac7dd3c7ba5d50be93eb884a057d234",mockGearboxVault:"0xc7b779ab638b7a59f490ac95199502343a81e006",mockManagedPool:"0xd0cbf6765997b7ca7be6440f5e305b2ec7b96065",mockShareToken:"0x192e67544694a7baa2dea94f9b1df58bb3395a12",mockSilo:"0x66c94ae8d795e98f69ca65ffac87b38b17be3ca2",mockSiloLinearPool:"0x74cbfaf94a3577c539a9dcee9870a6349a33b34f",mockSiloRepository:"0x8e2dfc5e111dbe14e9d725210b9342688dd51c6c",mockStaticAToken:"0x1f3c910c416ed2340150281c5eb93325c38817a1",mockWeightedPool:"0x8055b8c947de30130bc1ec750c8f345a50006b23",mockYearnLinearPool:"0xac5b4ef7ede2f2843a704e96dcaa637f4ba3dc3f",mockYearnTokenVault:"0x806e02dea8d4a0882cad9fa3fa75b212328692de",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",omniVotingEscrowAdaptor:"0x96484f2abf5e58b15176dbf1a799627b53f13b6d",optimismRootGauge:"0xbc230b1a66a138cd9cfc7b352390025978dfadde",optimismRootGaugeFactory:"0x866d4b65694c66fbfd15dd6fa933d0a6b3940a36",polygonRootGauge:"0xfeb1a24c2752e53576133cdb718f25bc64ebdd52",polygonRootGaugeFactory:"0xa98bce70c92ad2ef3288dbcd659bc0d6b62f8f13",polygonZkEvmRootGauge:"0x45bf48d996d22afc9bc150df7fb4d13a49088602",polygonZkEvmRootGaugeFactory:"0x9bf951848288ccd87d06fac426150262cd3447de",poolRecoveryHelper:"0x1b300c86980a5195bcf49bd419a068d98dc133db",preseededVotingEscrowDelegation:"0xb496ff44746a8693a060fafd984da41b253f6790",protocolFeePercentagesProvider:"0x97207b095e4d5c9a6e4cfbfcd2c3358e03b90c4a",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x5ef4c5352882b10893b70dbcaa0c000965bd23c5",protocolIdRegistry:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",recoveryModeHelper:"0x7827108af2fd9910ea7cf361d9b827941fa7d809",siloLinearPoolFactory:"0x4e11aeec21baf1660b1a46472963cb3da7811c89",singleRecipientGauge:"0xb2007b8b7e0260042517f635cfd8e6dd2dd7f007",singleRecipientGaugeFactory:"0x4fb47126fa83a8734991e41b942ac29a3266c968",smartWalletChecker:"0x7869296efd0a76872fee62a058c8fbca5c1c826c",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x67f8df125b796b05895a6dc8ecf944b9556ecb0b",votingEscrow:"0xc128a9954e6c874ea3d62ce62b468ba073093f25",votingEscrowDelegation:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",votingEscrowDelegationProxy:"0x6f5a2ee11e7a772aeb5114a20d0d7c0ff61eb8a0",votingEscrowRemapper:"0x83e443ef4f9963c77bd860f94500075556668cb8",weightedPoolFactory:"0x897888115ada5773e02aa29f775430bfb5f34c51",weth:"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",wstEthRateProvider:"0x72d07d7dca67b8a406ad1ec34ce969c90bfee768",yearnLinearPoolFactory:"0x5f5222ffa40f2aed6380d022184d6ea67c776ee0"},tokens:{AAVE:"0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9",aFEI:"0x683923db55fead99a79fa01a27eec3cb19679cc3",aFRAX:"0xd4937682df3c8aef4fe912a96a74121c0829e664",ALCX:"0xdbdb4d16eda451d0503b854cf79d55697f90c8df",alUSD:"0xbc6da0fe9ad5f3b0d58160288917aa56653660e9",ANGLE:"0x31429d1856ad1377a8a0079410b297e1a9e214c2",AURA:"0xc0c293ce456ff0ed870add98a0828dd4d2903dbf",AURABAL:"0x616e8bfa43f920657b3497dbf40d6b1a02d4608d",aUSDC:"0xbcca60bb61934080951369a648fb03df4f96263c",aUSDT:"0x3ed3b47dd13ec9a98b44e6204a523e766b225811",aWBTC:"0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656",BADGER:"0x3472a5a71965499acd81997a54bba8d852c6e53d",BAL:"0xba100000625a3754423978a60c9317c58a424e3d",BalWeth8020:"0x5c6ee304399dbdb9c8ef030ab642b10820db8f56",bb_a_usd:"0xa13a9247ea42d743238089903570127dda72fe44",cDAI:"0x5d3a536e4d6dbd6114cc1ead35777bab948e3643",cETH:"0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5",COMP:"0xc00e94cb662c3520282e6f5717214004a7f26888",CRV:"0xd533a949740bb3306d119cc777fa900ba034cd52",cUSDC:"0x39aa39c021dfbae8fac545936693ac917d5e7563",CVX:"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b",cvxCRV:"0x62b9c7356a2dc64a1969e19c23e4f579f9810aa7",DAI:"0x6b175474e89094c44da98b954eedeac495271d0f",DIGG:"0x798d1be841a82a273720ce31c822c61a67a601c3",DUSD:"0x5bc25f649fc4e26069ddf4cf4010f9f706c23831",ENS:"0xc18360217d8f7ab5e7c516566761ea12ce7f9d72",EURS:"0xdb25f211ab05b1c97d595516f45794528a807ad8",FARM:"0xa0246c9032bc3a600820415ae600c6388619a14d",FEI:"0x956f47f50a910163d8bf957cf5846d573e7f87ca",FRAX:"0x853d955acef822db058eb8505911ed77f175b99e",FTM:"0x4e15361fd6b4bb609fa63c81a2be19d873717870",FXS:"0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0",GEAR:"0xba3335588d9403515223f109edc4eb7269a9ab5d",GTC:"0xde30da39c46104798bb5aa3fe8b9e0e1f348163f",LINK:"0x514910771af9ca656af840dff83e8264ecf986ca",MIM:"0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3",renBTC:"0xeb4c2781e4eba804ce9a9803c67d0893436bb27d",RETH:"0xae78736cd615f374d3085123a210448e74fc6393",sBTC:"0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6",SPELL:"0x090185f2135308bad17527004364ebcc2d37e5f6",stkAAVE:"0x4da27a545c0c5b758a6ba100e3a049001de870f5",SUSHI:"0x6b3595068778dd592e39a122f4f5a5cf09c90fe2",USDC:"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",USDT:"0xdac17f958d2ee523a2206206994597c13d831ec7",WBTC:"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",WETH:"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",xSUSHI:"0x8798249c2e607446efb7ad49ec89dd1865ff4272"}},4:{contracts:{authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",balancerHelpers:"0x5addcca35b7a0d07c74063c48700c8590e87864e",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x41b953164995c11c81da73d212ed8af25741b7ac",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8"},tokens:{}},5:{contracts:{authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x5d90225de345ee24d1d2b6f45de90b056f5265a1",authorizerAdaptorEntrypoint:"0xacaac3e6d6df918bf3c809dfc7d42de0e4a72d4c",authorizerWithAdaptorValidation:"0x8ea89804145c007e7d226001a96955ad53836087",bal:"0xfa8449189744799ad2ace7e0ebac8bb7575eff47",balancerHelpers:"0x5addcca35b7a0d07c74063c48700c8590e87864e",balancerMinter:"0xdf0399539a72e2689b8b2dd53c3c2a0883879fdd",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0x03f1ab8b19bce21eb06c364aec9e40322572a1e9",balancerTokenAdmin:"0x0f32d7d830e20809bcb9071581a696135dd472b7",balTokenHolderFactory:"0x45e617b07021b97407367624648d1a0a358a751a",batchRelayerLibrary:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",childChainGauge:"0x6b5da774890db7b7b96c6f44e6a4b0f657399e2e",childChainGaugeFactory:"0x7ba29fe8e83dd6097a7298075c4affdbda3121cc",childChainGaugeRewardHelper:"0xc128a9954e6c874ea3d62ce62b468ba073093f25",childChainGaugeTokenAdder:"0x55b18f514d7f0c6c886d0c23ac72df5d3b5f8850",childChainLiquidityGaugeFactory:"0x393b918cc2ffa238732e83dd4ee52343f57d767b",childChainStreamer:"0x5b5b72d76b68f4bb1d2a10ef0fc77711f8ec7ed0",circuitBreakerLib:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",composableStablePoolFactory:"0x1802953277fd955f9a254b80aa0582f193cf1d77",distributionScheduler:"0x05a0bf0540f346b6dac25550738343beb51c0f65",doubleEntrypointFixRelayer:"0xbe9458ab5b6f289e524410141c8d5e20a6b035fe",eulerLinearPoolFactory:"0x813ee7a840ce909e7fea2117a44a90b8063bd4fd",externalWeightedMath:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",feeDistributor:"0x42b67611b208e2e9b4cc975f6d74c87b865ae066",gaugeAdder:"0x3f170631ed9821ca51a59d996ab095162438dc10",gaugeController:"0xbb1ce49b16d55a1f2c6e88102f32144c7334b116",gaugeWorkingBalanceHelper:"0xa7d524046ef89de9f8e4f2d7b029f66ccb738d48",l2BalancerPseudoMinter:"0x81cfae226343b24ba12ec6521db2c79e7aeeb310",l2LayerZeroBridgeForwarder:"0xef44d6786b2b4d544b7850fe67ce6381626bf2d6",liquidityGaugeFactory:"0x3b8ca519122cdd8efb272b0d3085453404b25bd0",liquidityGaugeV5:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",managedPoolAddRemoveTokenLib:"0xacf05be5134d64d150d153818f8c67ee36996650",managedPoolAmmLib:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",managedPoolFactory:"0x03f3fb107e74f2eac9358862e91ad3c692712054",merkleOrchard:"0x5cf4928a3205728bd12830e1840f7db85c62a4b9",mockComposableStablePool:"0x5d343d374a769d1ab102e0418a516dadb08a86e4",mockEulerLinearPool:"0x43fa2c00419f60e18966aa043debd4701cb91b6d",mockEulerToken:"0xb99edc4b289b0f2284fcf3f66884191bdce29624",mockManagedPool:"0xff79b51ec2934dd1810a8e0325e3b08708720b26",mockShareToken:"0xb8bdcbf8ccf443d055d5ffe1d8154fac8187fc94",mockSilo:"0xa7a7e22398622bf71ff31dae5355ec7843b13806",mockSiloLinearPool:"0xbbb66a4fff47701ec6c528db615f5e7bf1abdaaf",mockSiloRepository:"0x7153de1a6d71360f07017838c28deca0d6c03e2a",mockWeightedPool:"0x072ed560cc042d7ab1c080a9e4fa8c6f4858deb3",noProtocolFeeLiquidityBootstrappingPoolFactory:"0xb0c726778c3ae4b3454d85557a48e8fa502bdd6a",nullVotingEscrow:"0xa523f47a933d5020b23629ddf689695aa94612dc",omniVotingEscrowAdaptor:"0x83e443ef4f9963c77bd860f94500075556668cb8",poolRecoveryHelper:"0x1cbbe6cea5e4fe7d69c586b4e362a646deef105d",preseededVotingEscrowDelegation:"0x7af980bdbc36d21ce228efabcca35707566a2be5",protocolFeePercentagesProvider:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x85153b639a35d6e6cf8b291aca237fbe67377154",protocolIdRegistry:"0x4fb47126fa83a8734991e41b942ac29a3266c968",recoveryModeHelper:"0x300ab2038eac391f26d9f895dc61f8f66a548833",rewardsOnlyGauge:"0x40bd3faef4268ea40f4c372d7f0a44c3efaaa6b1",siloLinearPoolFactory:"0x30fd8a0f7009f50616afdab4af91a0a2ef4eae49",singleRecipientGauge:"0x0e9addc34f93bccb45d1f744b9f9301285c5b48f",singleRecipientGaugeFactory:"0xe3881627b8deebccf9c23b291430a549fc0be5f7",smartWalletChecker:"0x1b6df1ff5db99f8a8a04d38f7478bab056fa35a7",testBalancerToken:"0xfa8449189744799ad2ace7e0ebac8bb7575eff47",timelockAuthorizer:"0x70e26f740bad6a2cdd762e2478496268882c21d4",timelockAuthorizerMigrator:"0x7159c4b96bfcfca232355b55778e85cf9e245192",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0xd13afc362f619b840c8f4aac1d957ce219ef37ca",votingEscrow:"0x33a99dcc4c85c014cf12626959111d5898bbcabf",votingEscrowDelegation:"0xcff73979321788d59a6170ff012730db2087f31c",votingEscrowDelegationProxy:"0x6817149cb753bf529565b4d023d7507ed2ff4bc0",votingEscrowRemapper:"0x5dbad78818d4c8958eff2d5b95b28385a22113cd",weightedPoolFactory:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",weth:"0xdfcea9088c8a88a76ff74892c1457c17dfeef9c1",wstEthRateProvider:"0x80a94f458491ca88f09767e58a92fd23cbf1196f"},tokens:{}},10:{contracts:{aaveLinearPoolFactory:"0x7396f99b48e7436b152427bfa3dd6aa8c7c6d05b",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x8f42adbba1b16eaae3bb5754915e0d06059add75",authorizerAdaptorEntrypoint:"0xed86ff0c507d3af5f35d3523b77c17415fcffacb",authorizerWithAdaptorValidation:"0xacf05be5134d64d150d153818f8c67ee36996650",bal:"0xfe8b128ba8c78aabc59d4c64cee7ff28e9379921",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0x03f1ab8b19bce21eb06c364aec9e40322572a1e9",batchRelayerLibrary:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",childChainGauge:"0x81cfae226343b24ba12ec6521db2c79e7aeeb310",childChainGaugeFactory:"0xa523f47a933d5020b23629ddf689695aa94612dc",childChainGaugeRewardHelper:"0x8ab784368a1883da90d8513b48801e2db1cb2d5d",childChainGaugeTokenAdder:"0x6f5a2ee11e7a772aeb5114a20d0d7c0ff61eb8a0",childChainLiquidityGaugeFactory:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",childChainStreamer:"0x239e55f427d44c3cc793f49bfb507ebe76638a2b",circuitBreakerLib:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",composableStablePoolFactory:"0x1802953277fd955f9a254b80aa0582f193cf1d77",doubleEntrypointFixRelayer:"0x3b8ca519122cdd8efb272b0d3085453404b25bd0",erc4626LinearPoolFactory:"0x7adbdabaa80f654568421887c12f09e0c7bd9629",externalWeightedMath:"0x8df317a729fcaa260306d7de28888932cb579b88",gaugeWorkingBalanceHelper:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",l2BalancerPseudoMinter:"0x4fb47126fa83a8734991e41b942ac29a3266c968",l2LayerZeroBridgeForwarder:"0xbef13d1e54d0c79da8b0ad704883e1cea7eb2100",managedPoolAddRemoveTokenLib:"0x59562f93c447656f6e4799fc1fc7c3d977c3324f",managedPoolAmmLib:"0xded7fef7d8ecdcb74f22f0169e1a9ec696e6695d",managedPoolFactory:"0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4",mockAaveLendingPool:"0x533a16f90e7d3ca31dbc608e5ec54967710f0d2a",mockAaveLinearPool:"0x45d37982784f022a9864748b4e8750e1e7019604",mockComposableStablePool:"0x11a4cf51bb0bb4d925cadfda61fcda952d64889c",mockErc4626LinearPool:"0x2da61ef3cdcb97efb0f7099c02527fabfe94dee5",mockErc4626Token:"0x4be0e4d6184348c5ba845a4010528cfc779610b8",mockManagedPool:"0xb4af4fdd49da2a2ba9522eadcf86d407a69f19c8",mockStaticAToken:"0x8b7854708c0c54f9d7d1ff351d4f84e6de0e134c",mockWeightedPool:"0x62f5f9a446d198e8e4c84ee56e5217416720edaf",mockYearnLinearPool:"0x34557ef500bfc060b8e3f2da58ef725bb7d32202",mockYearnTokenVault:"0xb15608d28eb43378a7e7780add3fe9bc132baf40",noProtocolFeeLiquidityBootstrappingPoolFactory:"0xf302f9f50958c5593770fdf4d4812309ff77414f",nullVotingEscrow:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",poolRecoveryHelper:"0x26743984e3357efc59f2fd6c1afdc310335a61c9",protocolFeePercentagesProvider:"0xacaac3e6d6df918bf3c809dfc7d42de0e4a72d4c",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0xc128a9954e6c874ea3d62ce62b468ba073093f25",protocolIdRegistry:"0x9805dcfd25e6de36bad8fe9d3fe2c9b44b764102",recoveryModeHelper:"0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98",rewardsOnlyGauge:"0xc128468b7ce63ea702c1f104d55a2566b13d3abd",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x6817149cb753bf529565b4d023d7507ed2ff4bc0",votingEscrowDelegationProxy:"0x9da18982a33fd0c7051b19f0d7c76f2d5e7e017c",weightedPoolFactory:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",weth:"0x4200000000000000000000000000000000000006",yearnLinearPoolFactory:"0x19dfef0a828eec0c85fbb335aa65437417390b85"},tokens:{}},42:{contracts:{authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x97207b095e4d5c9a6e4cfbfcd2c3358e03b90c4a",balancerHelpers:"0x94905e703fead7f0fd0eee355d267ee909784e6d",balancerMinter:"0x1bbfa323155526f54eec458571bb5a75e0c41507",balancerTokenAdmin:"0xab093cd16e765b5b23d34030aafaf026558e0a19",balTokenHolderFactory:"0xa98bce70c92ad2ef3288dbcd659bc0d6b62f8f13",childChainLiquidityGaugeFactory:"0xf9ac7b9df2b3454e841110cce5550bd5ac6f875f",childChainStreamer:"0x4de578134995bea8480d7696946217f356339ab8",gaugeController:"0x35c425234dc42e7402f54cc54573f77842963a56",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x1b57f637ce3408f1f834b0b70f9a595b062daea7",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",rewardsOnlyGauge:"0x868543bb787317632f94fcfe8eb85406b123590c",testBalancerToken:"0xa2d801064652a269d92ee2a59f3261155ec66830",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",votingEscrow:"0x16ba924752ef283c7946db8a122a6742aa35c1dc",votingEscrowDelegation:"0xdc6d62ae091ea77331542042a72e5e38b188837c",votingEscrowDelegationProxy:"0x98d0d0a65cbeccaa647a5a95cf27cf2f00e1231c",wstEthRateProvider:"0xd7fad3bd59d6477cbe1be7f646f7f1ba25b230f8"},tokens:{}},100:{contracts:{aaveLinearPoolFactory:"0x62aab12865d7281048c337d53a4dde9d770321e6",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x5addcca35b7a0d07c74063c48700c8590e87864e",authorizerAdaptorEntrypoint:"0x8f42adbba1b16eaae3bb5754915e0d06059add75",authorizerWithAdaptorValidation:"0x03f3fb107e74f2eac9358862e91ad3c692712054",bal:"0x7ef541e2a22058048904fe5744f9c7e4c57af717",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",balancerRelayer:"0x3536fd480ca495ac91e698a703248a8915c137a3",batchRelayerLibrary:"0xb9ad3466cdd42015cc05d4804dc68d562b6a2065",childChainGauge:"0x96484f2abf5e58b15176dbf1a799627b53f13b6d",childChainGaugeFactory:"0x83e443ef4f9963c77bd860f94500075556668cb8",childChainGaugeRewardHelper:"0xf7d5dce55e6d47852f054697bab6a1b48a00ddbd",childChainGaugeTokenAdder:"0x1802953277fd955f9a254b80aa0582f193cf1d77",childChainLiquidityGaugeFactory:"0x809b79b53f18e9bc08a961ed4678b901ac93213a",childChainStreamer:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",circuitBreakerLib:"0x54f8f9d28e26fa5864cfa80f50a5df95fd85f46a",composableStablePoolFactory:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",externalWeightedMath:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",gaugeWorkingBalanceHelper:"0x682f0ddbfd41d1272982f64a499fb62d80e27589",l2BalancerPseudoMinter:"0xa8920455934da4d853faac1f94fe7bef72943ef1",l2LayerZeroBridgeForwarder:"0xeb151668006cd04dadd098afd0a82e78f77076c3",managedPoolAddRemoveTokenLib:"0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4",managedPoolAmmLib:"0xacf05be5134d64d150d153818f8c67ee36996650",managedPoolFactory:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",mockAaveLendingPool:"0x040dba12bb3d5c0a73ddfe84c220be3ddba06966",mockAaveLinearPool:"0x1ac55c31dac78ca943cb8ebfca5945ce09e036e2",mockComposableStablePool:"0xf3678a0b54c61ccd88ce321c2e07f87ac75f08b9",mockManagedPool:"0xc061361fda32ff5b65f7d98acc9a87349d3f0768",mockStaticAToken:"0x35d8f4a4c0e95f3d925cb4cbbbf513a0172ed8a4",mockWeightedPool:"0xd8752f9b0a2c2813796abd2be212a32ffd656ef1",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x85a80afee867adf27b50bdb7b76da70f1e853062",nullVotingEscrow:"0x013d4382f291be5688afbcc741ee8a24c66b2c92",poolRecoveryHelper:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",protocolFeePercentagesProvider:"0x41b953164995c11c81da73d212ed8af25741b7ac",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0xdae7e32adc5d490a43ccba1f0c736033f2b4efca",protocolIdRegistry:"0x6b5da774890db7b7b96c6f44e6a4b0f657399e2e",recoveryModeHelper:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",rewardsOnlyGauge:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x5dbad78818d4c8958eff2d5b95b28385a22113cd",votingEscrowDelegationProxy:"0x7a2535f5fb47b8e44c02ef5d9990588313fe8f05",weightedPoolFactory:"0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7",weth:"0xe91d153e0b41518a2ce8dd3d7944fa863463a97d"},tokens:{}},137:{contracts:{aaveLinearPoolFactory:"0xab2372275809e15198a7968c7f324053867cdb0c",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0xc128468b7ce63ea702c1f104d55a2566b13d3abd",authorizerAdaptorEntrypoint:"0xab093cd16e765b5b23d34030aafaf026558e0a19",authorizerWithAdaptorValidation:"0x020301b0a99efb6816b41007765fb577259ec418",bal:"0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3",balancerHelpers:"0x239e55f427d44c3cc793f49bfb507ebe76638a2b",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0xd18d5d377eb23362e54fa496597d7e962d56c554",batchRelayerLibrary:"0x4271de2595c3d85d2d455c5778adf2d7ad54322c",childChainGauge:"0xc9b36096f5201ea332db35d6d195774ea0d5988f",childChainGaugeFactory:"0x22625eedd92c81a219a83e1dc48f88d54786b017",childChainGaugeRewardHelper:"0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33",childChainGaugeTokenAdder:"0x1554ee754707d5c93b7934af404747aba521aaf2",childChainLiquidityGaugeFactory:"0x3b8ca519122cdd8efb272b0d3085453404b25bd0",childChainStreamer:"0x6f5a2ee11e7a772aeb5114a20d0d7c0ff61eb8a0",circuitBreakerLib:"0xedfd0a7005a7c72c44ff13bea370c86a9d11bee1",composableStablePoolFactory:"0x6ab5549bbd766a43afb687776ad8466f8b42f777",doubleEntrypointFixRelayer:"0x79d0011892fe558fc5a4ec7d4ca5db59069f460f",erc4626LinearPoolFactory:"0x5c5fcf8fbd4cd563ced27e7d066b88ee20e1867a",externalWeightedMath:"0x72ebafddc4c7d3eb702c81295d90a8b29f008a03",gaugeWorkingBalanceHelper:"0x08fd003d8f1892d4ec684e6c3ee0128081be461b",l2BalancerPseudoMinter:"0x47b489bf5836f83abd928c316f8e39bc0587b020",l2LayerZeroBridgeForwarder:"0xb98f54a74590a6e681ff664b2fa22ebffe1a929e",managedPoolAddRemoveTokenLib:"0xf553bf40db86c35f3058434039d51aad29c6180b",managedPoolAmmLib:"0xcefd59eedafa9ee8ccda1aaf944088e68b5bd890",managedPoolFactory:"0xb8dfa4fd0f083de2b7edc0d5eed5e684e54ba45d",merkleOrchard:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",mockAaveLendingPool:"0x0df6bb26533eb86f371b1f70eecdd955420523c6",mockAaveLinearPool:"0x0889b240a5876aae745ac19f1771853671dc5d36",mockComposableStablePool:"0x0f25823cf786b78696b16536e2f2b9835289ab51",mockErc4626LinearPool:"0xc55ec796a4debe625d95436a3531f4950b11bdcf",mockErc4626Token:"0x19dfef0a828eec0c85fbb335aa65437417390b85",mockManagedPool:"0x074efd7806e6c28e8b6611075b1aa62c6c408090",mockStaticAToken:"0xe72b2780d3c57f781bd4e8572e200cd7e9a447c2",mockWeightedPool:"0xb77e03655ee894aade216a83d05511a9f9895126",mockYearnLinearPool:"0xdae301690004946424e41051ace1791083be42a1",mockYearnTokenVault:"0x28fa1e40011adf98898e8243b2a48bb21ebf0c29",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x41b953164995c11c81da73d212ed8af25741b7ac",nullVotingEscrow:"0x1311fbc9f60359639174c1e7cc2032dbdb5cc4d1",poolRecoveryHelper:"0x495f696430f4a51f7fcb98fbe68a9cb7a07fb1ba",protocolFeePercentagesProvider:"0x42ac0e6fa47385d55aff070d79ef0079868c48a6",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0xef44d6786b2b4d544b7850fe67ce6381626bf2d6",protocolIdRegistry:"0xa523f47a933d5020b23629ddf689695aa94612dc",recoveryModeHelper:"0x1eb79551ca0e83ec145608bc39a0c7f10ca21aa5",rewardsOnlyGauge:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0xd961e30156c2e0d0d925a0de45f931cb7815e970",votingEscrowDelegationProxy:"0x0f08eef2c785aa5e7539684af04755dec1347b7c",weightedPoolFactory:"0xfc8a407bba312ac761d8bfe04ce1201904842b76",weth:"0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270",yearnLinearPoolFactory:"0x0b576c1245f479506e7c8bbc4db4db07c1cd31f9"},tokens:{BAL:"0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3",USDC:"0x2791bca1f2de4661ed88a30c99a7a9449aa84174",WBTC:"0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6",WETH:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",WMATIC:"0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270"}},1101:{contracts:{aaveLinearPoolFactory:"0x4b7b369989e613ff2c65768b7cf930cc927f901e",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0xdcdbf71a870cc60c6f9b621e28a7d3ffd6dd4965",authorizerAdaptorEntrypoint:"0xb9ad3466cdd42015cc05d4804dc68d562b6a2065",authorizerWithAdaptorValidation:"0x8df317a729fcaa260306d7de28888932cb579b88",bal:"0x120ef59b80774f02211563834d8e3b72cb1649d6",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0x809b79b53f18e9bc08a961ed4678b901ac93213a",balancerRelayer:"0x4678731dc41142a902a114ac5b2f77b63f4a259d",batchRelayerLibrary:"0x54f8f9d28e26fa5864cfa80f50a5df95fd85f46a",childChainGauge:"0x59562f93c447656f6e4799fc1fc7c3d977c3324f",childChainGaugeFactory:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",circuitBreakerLib:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",composableStablePoolFactory:"0x8ea89804145c007e7d226001a96955ad53836087",erc4626LinearPoolFactory:"0x6b1da720be2d11d95177ccfc40a917c2688f396c",externalWeightedMath:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",gaugeWorkingBalanceHelper:"0xef454a7b3f965d3f6723e462405246f8cd865425",gearboxLinearPoolFactory:"0x687b8c9b41e01be8b591725fac5d5f52d0564d79",l2BalancerPseudoMinter:"0x475d18169be8a89357a9ee3ab00ca386d20fa229",l2LayerZeroBridgeForwarder:"0xded7fef7d8ecdcb74f22f0169e1a9ec696e6695d",managedPoolAddRemoveTokenLib:"0xacf05be5134d64d150d153818f8c67ee36996650",managedPoolAmmLib:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",managedPoolFactory:"0xaf779e58dafb4307b998c7b3c9d3f788dfc80632",mockAaveLendingPool:"0x161f4014c27773840ccb4ec1957113e6dd028846",mockAaveLinearPool:"0xbfd65c6160cfd638a85c645e6e6d8acac5dac935",mockComposableStablePool:"0x6f5f794a3cef904b8517c4c311de2fa837ff24a0",mockErc4626LinearPool:"0xac4b72c01072a52b73ca71105504f1372efcce0d",mockErc4626Token:"0x0c6052254551eae3ecac77b01dfcf1025418828f",mockGearboxDieselToken:"0x698caed853be9cea96c268f565e2b61d3b2bcda4",mockGearboxLinearPool:"0x32f03464fdf909fdf3798f87ff3712b10c59bd86",mockGearboxVault:"0x88ed12a90142fdbfe2a28f7d5b48927254c7e760",mockLiquidityBootstrappingPool:"0x3c87ff3e9307dbebfae720e04c6439e49f79bf9b",mockManagedPool:"0x522ee506a2f63d0ae1d79d6f5dbd9d0bca32c866",mockStaticAToken:"0x4638ab64022927c9bd5947607459d13f57f1551c",mockWeightedPool:"0x78385153d2f356c87001f09bb5424137c618d38b",mockYearnLinearPool:"0x02c9dcb975262719a61f9b40bdf0987ead9add3a",mockYearnTokenVault:"0xdbf7b9f1d2bfba14e42709f84dda3187ee410e38",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98",nullVotingEscrow:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",poolRecoveryHelper:"0xf7d5dce55e6d47852f054697bab6a1b48a00ddbd",protocolFeePercentagesProvider:"0x1802953277fd955f9a254b80aa0582f193cf1d77",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",protocolIdRegistry:"0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7",recoveryModeHelper:"0x300ab2038eac391f26d9f895dc61f8f66a548833",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",votingEscrowDelegationProxy:"0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7",weightedPoolFactory:"0x03f3fb107e74f2eac9358862e91ad3c692712054",weth:"0x4f9a0e7fd2bf6067db6994cf12e4495df938e6e9",yearnLinearPoolFactory:"0x44d33798dddcdabc93fe6a40c80588033dc502d3"},tokens:{}},8453:{contracts:{aaveLinearPoolFactory:"0x687b8c9b41e01be8b591725fac5d5f52d0564d79",authorizer:"0x809b79b53f18e9bc08a961ed4678b901ac93213a",authorizerAdaptor:"0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7",authorizerAdaptorEntrypoint:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",authorizerWithAdaptorValidation:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",bal:"0x4158734d47fc9692176b5085e0f52ee0da5d47f1",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0x300ab2038eac391f26d9f895dc61f8f66a548833",balancerRelayer:"0x76f7204b62f554b79d444588edac9dfa7032c71a",batchRelayerLibrary:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",childChainGauge:"0x59562f93c447656f6e4799fc1fc7c3d977c3324f",childChainGaugeFactory:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",circuitBreakerLib:"0xef454a7b3f965d3f6723e462405246f8cd865425",composableStablePoolFactory:"0x8df317a729fcaa260306d7de28888932cb579b88",erc4626LinearPoolFactory:"0x161f4014c27773840ccb4ec1957113e6dd028846",externalWeightedMath:"0x7920bfa1b2041911b354747ca7a6cdd2dfc50cfd",gaugeWorkingBalanceHelper:"0xa7d524046ef89de9f8e4f2d7b029f66ccb738d48",gearboxLinearPoolFactory:"0x9dd32684176638d977883448a4c914311c07bd62",l2BalancerPseudoMinter:"0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7",l2LayerZeroBridgeForwarder:"0x8ea89804145c007e7d226001a96955ad53836087",managedPoolAddRemoveTokenLib:"0xb19382073c7a0addbb56ac6af1808fa49e377b75",managedPoolAmmLib:"0x7d2248f194755dca9a1887099394f39476d28c9a",managedPoolFactory:"0x9a62c91626d39d0216b3959112f9d4678e20134d",mockAaveLendingPool:"0x88ed12a90142fdbfe2a28f7d5b48927254c7e760",mockAaveLinearPool:"0x712e23a9b91aa30ee7997d1c7a1a285d4c7912d1",mockComposableStablePool:"0x7f6e9d6a4093af9d09bae92d24bfe42fc5369ae6",mockErc4626LinearPool:"0x1cc2e10c486ffb7228810b9c7c183d0cd92cdf44",mockErc4626Token:"0x4638ab64022927c9bd5947607459d13f57f1551c",mockGearboxDieselToken:"0xb521dd5c8e13fe202626cac98873fea2b7760ce4",mockGearboxLinearPool:"0x3c28a59356b473847aaa5e0b6f561636079213a6",mockGearboxVault:"0x79e435875ccee3cd9e8da23fe34f9a011d05ea6c",mockLiquidityBootstrappingPool:"",mockManagedPool:"0xe50ad96af9370d05d3c1ce85f17c31557b29c4ee",mockStaticAToken:"0x698caed853be9cea96c268f565e2b61d3b2bcda4",mockWeightedPool:"0xd9dbbfaa703f3c33838365ae00fe4eb22cdf8d46",mockYearnLinearPool:"0x369877467fc3b6774de4e11e0c0abbde70eb40fd",mockYearnTokenVault:"0xdbf7b9f1d2bfba14e42709f84dda3187ee410e38",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x0c6052254551eae3ecac77b01dfcf1025418828f",nullVotingEscrow:"0x475d18169be8a89357a9ee3ab00ca386d20fa229",poolRecoveryHelper:"0x03f3fb107e74f2eac9358862e91ad3c692712054",protocolFeePercentagesProvider:"0xded7fef7d8ecdcb74f22f0169e1a9ec696e6695d",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0xacf05be5134d64d150d153818f8c67ee36996650",protocolIdRegistry:"0x682f0ddbfd41d1272982f64a499fb62d80e27589",recoveryModeHelper:"0x313a8d36b1d90a4cba3a505fdc3480c3870be053",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",votingEscrowDelegationProxy:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",weightedPoolFactory:"0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4",weth:"0x4200000000000000000000000000000000000006",yearnLinearPoolFactory:"0x44d33798dddcdabc93fe6a40c80588033dc502d3"},tokens:{}},42161:{contracts:{aaveLinearPoolFactory:"0x7396f99b48e7436b152427bfa3dd6aa8c7c6d05b",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",authorizerAdaptorEntrypoint:"0x97207b095e4d5c9a6e4cfbfcd2c3358e03b90c4a",authorizerWithAdaptorValidation:"0x6b1da720be2d11d95177ccfc40a917c2688f396c",bal:"0x040d1edc9569d4bab2d15287dc5a4f10f56a56b8",balancerHelpers:"0x77d46184d22ca6a3726a2f500c776767b6a3d6ab",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0x598ce0f1ab64b27256759ef99d883ee51138b9bd",batchRelayerLibrary:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",childChainGauge:"0xa523f47a933d5020b23629ddf689695aa94612dc",childChainGaugeFactory:"0x6817149cb753bf529565b4d023d7507ed2ff4bc0",childChainGaugeRewardHelper:"0xa0dabebaad1b243bbb243f933013d560819eb66f",childChainGaugeTokenAdder:"0xbfd9769b061e57e478690299011a028194d66e3c",childChainLiquidityGaugeFactory:"0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2",childChainStreamer:"0xd7fad3bd59d6477cbe1be7f646f7f1ba25b230f8",circuitBreakerLib:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",composableStablePoolFactory:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",doubleEntrypointFixRelayer:"0x8e5698dc4897dc12243c8642e77b4f21349db97c",erc4626LinearPoolFactory:"0x7adbdabaa80f654568421887c12f09e0c7bd9629",externalWeightedMath:"0x03f3fb107e74f2eac9358862e91ad3c692712054",gaugeWorkingBalanceHelper:"0xea924b45a3fcdaadf4e5cfb1665823b8f8f2039b",l2BalancerPseudoMinter:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",l2LayerZeroBridgeForwarder:"0x12ca9de662a7bf5dc89e034a5083ef751b08ede7",managedPoolAddRemoveTokenLib:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",managedPoolAmmLib:"0x300ab2038eac391f26d9f895dc61f8f66a548833",managedPoolFactory:"0x8ea89804145c007e7d226001a96955ad53836087",merkleOrchard:"0x9805dcfd25e6de36bad8fe9d3fe2c9b44b764102",mockAaveLendingPool:"0x533a16f90e7d3ca31dbc608e5ec54967710f0d2a",mockAaveLinearPool:"0x19b1c92631405a0a9495ccba0becf4f2e8e908bd",mockComposableStablePool:"0xff7e6b102516e071dcda763ee9d02c1515481db5",mockErc4626LinearPool:"0x3f53a862919ccfa023cb6ace91378a79fb0f6bf5",mockErc4626Token:"0x4be0e4d6184348c5ba845a4010528cfc779610b8",mockManagedPool:"0xf5a71257b331c02da1eae52151c3d600f16b76f0",mockStaticAToken:"0x8b7854708c0c54f9d7d1ff351d4f84e6de0e134c",mockWeightedPool:"0x129c6402ff88611aa59bf2e14b39e091822e2c9c",mockYearnLinearPool:"0x1fa7f727934226aedab636d62a084931b97d366b",mockYearnTokenVault:"0xb15608d28eb43378a7e7780add3fe9bc132baf40",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x1802953277fd955f9a254b80aa0582f193cf1d77",nullVotingEscrow:"0x9da18982a33fd0c7051b19f0d7c76f2d5e7e017c",poolRecoveryHelper:"0xb5e56cc3d2e38e53b1166175c59e921a37cdc1e2",protocolFeePercentagesProvider:"0x5ef4c5352882b10893b70dbcaa0c000965bd23c5",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x70bbd023481788e443472e123ab963e5ebf58d06",protocolIdRegistry:"0x5cf4928a3205728bd12830e1840f7db85c62a4b9",recoveryModeHelper:"0x682f0ddbfd41d1272982f64a499fb62d80e27589",rewardsOnlyGauge:"0x41b953164995c11c81da73d212ed8af25741b7ac",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x6b5da774890db7b7b96c6f44e6a4b0f657399e2e",votingEscrowDelegationProxy:"0x81cfae226343b24ba12ec6521db2c79e7aeeb310",weightedPoolFactory:"0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7",weth:"0x82af49447d8a07e3bd95bd0d56f35241523fbab1",yearnLinearPoolFactory:"0x19dfef0a828eec0c85fbb335aa65437417390b85"},tokens:{BADGER:"0xbfa641051ba0a0ad1b0acf549a89536a0d76472e",CRV:"0x11cdb42b0eb46d95f990bedd4695a6e3fa034978",LDO:"0x13ad51ed4f1b7e9dc168d8a00cb3f4ddd85efa60",renBTC:"0xdbf31df14b66535af65aac99c32e9ea844e14501",SUSHI:"0xd4d42f0b6def4ce0383636770ef773390d85c61a",USDC:"0xff970a61a04b1ca14834a43f5de4533ebddb5cc8",USDT:"0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9",WBTC:"0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",WETH:"0x82af49447d8a07e3bd95bd0d56f35241523fbab1"}},43114:{contracts:{aaveLinearPoolFactory:"0x6caf662b573f577de01165d2d38d1910bba41f8a",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0xdae7e32adc5d490a43ccba1f0c736033f2b4efca",authorizerAdaptorEntrypoint:"0x4e7bbd911cf1efa442bc1b2e9ea01ffe785412ec",authorizerWithAdaptorValidation:"0x8df317a729fcaa260306d7de28888932cb579b88",bal:"0xe15bcb9e0ea69e6ab9fa080c4c4a5632896298c3",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0xc128468b7ce63ea702c1f104d55a2566b13d3abd",balancerRelayer:"0x03f1ab8b19bce21eb06c364aec9e40322572a1e9",batchRelayerLibrary:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",childChainGauge:"0x4b7b369989e613ff2c65768b7cf930cc927f901e",childChainGaugeFactory:"0x161f4014c27773840ccb4ec1957113e6dd028846",childChainGaugeRewardHelper:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",childChainGaugeTokenAdder:"0xf302f9f50958c5593770fdf4d4812309ff77414f",childChainLiquidityGaugeFactory:"0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2",childChainStreamer:"0xd7fad3bd59d6477cbe1be7f646f7f1ba25b230f8",circuitBreakerLib:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",composableStablePoolFactory:"0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98",distributionScheduler:"0xc128a9954e6c874ea3d62ce62b468ba073093f25",erc4626LinearPoolFactory:"0x4507d91cd2c0d51d9b4f30bf0b93afc938a70ba5",externalWeightedMath:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",gaugeWorkingBalanceHelper:"0x687b8c9b41e01be8b591725fac5d5f52d0564d79",l2BalancerPseudoMinter:"0xea924b45a3fcdaadf4e5cfb1665823b8f8f2039b",l2LayerZeroBridgeForwarder:"0x4638ab64022927c9bd5947607459d13f57f1551c",managedPoolAddRemoveTokenLib:"0xacf05be5134d64d150d153818f8c67ee36996650",managedPoolAmmLib:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",managedPoolFactory:"0x03f3fb107e74f2eac9358862e91ad3c692712054",mockAaveLendingPool:"0x57ea28a99394978d060e483477c0fd9fb9afa96c",mockAaveLinearPool:"0xa826a114b0c7db4d1ff4a4be845a78998c64564c",mockComposableStablePool:"0xea4643102dfc03d5e382e7827bf767f6587e9965",mockErc4626LinearPool:"0xed3e2f496cbcd8e212192fb8d1499842f04a0d19",mockErc4626Token:"0x2ebe41e1aa44d61c206a94474932dadc7d3fd9e3",mockManagedPool:"0x3fb81f6fb0dd94c6fc7e138887f1ca4cdb5e2999",mockStaticAToken:"0xd8b6b96c88ad626eb6209c4876e3b14f45f8803a",mockWeightedPool:"0xb2b5b452d53401391155ea48c4451f6e9b0dd058",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",nullVotingEscrow:"0x6b1da720be2d11d95177ccfc40a917c2688f396c",poolRecoveryHelper:"0x3b8ca519122cdd8efb272b0d3085453404b25bd0",protocolFeePercentagesProvider:"0x239e55f427d44c3cc793f49bfb507ebe76638a2b",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x8f42adbba1b16eaae3bb5754915e0d06059add75",recoveryModeHelper:"0x300ab2038eac391f26d9f895dc61f8f66a548833",rewardsOnlyGauge:"0x41b953164995c11c81da73d212ed8af25741b7ac",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",votingEscrowDelegationProxy:"0x0c6052254551eae3ecac77b01dfcf1025418828f",weightedPoolFactory:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",weth:"0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7"},tokens:{}},11155111:{contracts:{aaveLinearPoolFactory:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0xdcdbf71a870cc60c6f9b621e28a7d3ffd6dd4965",authorizerAdaptorEntrypoint:"0xb9ad3466cdd42015cc05d4804dc68d562b6a2065",authorizerWithAdaptorValidation:"0xb521dd5c8e13fe202626cac98873fea2b7760ce4",bal:"0xb19382073c7a0addbb56ac6af1808fa49e377b75",balancerHelpers:"0xdae7e32adc5d490a43ccba1f0c736033f2b4efca",balancerMinter:"0x1783cd84b3d01854a96b4ed5843753c2ccbd574a",balancerQueries:"0x1802953277fd955f9a254b80aa0582f193cf1d77",balancerRelayer:"0x6d5342d716c13d9a3f072a2b11498624ade27f90",balancerTokenAdmin:"0x7d2248f194755dca9a1887099394f39476d28c9a",balTokenHolderFactory:"0xef454a7b3f965d3f6723e462405246f8cd865425",batchRelayerLibrary:"0x5f6848976c2914403b425f18b589a65772f082e3",childChainGauge:"0xc49ca921c4cd1117162eaeec0ee969649997950c",childChainGaugeFactory:"0xc370cd86d5488c1788b62f11b09adb0c47f47440",circuitBreakerLib:"0x4c0c450bedb9282a7a54fcb316c285e85a8c0265",composableStablePoolFactory:"0xa3fd20e29358c056b727657e83dfd139abbc9924",erc4626LinearPoolFactory:"0x59562f93c447656f6e4799fc1fc7c3d977c3324f",externalWeightedMath:"0x8246e571d88acd1346179cc3641de87fe3544d7a",feeDistributor:"0xa6971317fb06c76ef731601c64433a4846fca707",gaugeAdder:"0xe42ffa682a26ef8f25891db4882932711d42e467",gaugeController:"0x577e5993b9cc480f07f98b5ebd055604bd9071c4",gaugeWorkingBalanceHelper:"0x2e4abed3362a622c5f712bb183005a476b146bd3",gearboxLinearPoolFactory:"0x8df317a729fcaa260306d7de28888932cb579b88",l2BalancerPseudoMinter:"0xb51f7ffc97cedfb6922e8b9bbf3ef7575fafd630",l2LayerZeroBridgeForwarder:"0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7",liquidityGaugeFactory:"0x2ff226cd12c80511a641a6101f071d853a4e5363",liquidityGaugeV5:"0x82416ce6ea7dd4923d4a3ed70a79b4a432a382c4",managedPoolAddRemoveTokenLib:"0xc7416e4f3715467ddcf28dc409a9483b2e4d4f43",managedPoolAmmLib:"0xa30ade89e6af5b0ca515cd78e44f9ad0c63989b2",managedPoolFactory:"0x63e179c5b6d54b2c2e36b9ce4085ef5a8c86d50c",mockAaveLendingPool:"0x300ab2038eac391f26d9f895dc61f8f66a548833",mockAaveLinearPool:"0xe4efd99f3c03778ba913eb578c599329634e2bd7",mockComposableStablePool:"0xa8d865fe1d68a405b29f884358468c9b52d4841d",mockErc4626LinearPool:"0x0c2ead6f2dc2a9385187023f4cec5925337b330f",mockErc4626Token:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",mockGearboxDieselToken:"0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4",mockGearboxLinearPool:"0x112a7b7ca66e6963c49bc523a415f7d8cdb806b9",mockGearboxVault:"0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98",mockLiquidityBootstrappingPool:"0xe90472ffc41d7ddf8e3b456bba748e3f22c59c6f",mockManagedPool:"0xe458224ca8d6605c87b73e92aa5cb7a4e77770f3",mockShareToken:"0x0c6052254551eae3ecac77b01dfcf1025418828f",mockSilo:"0x6b1da720be2d11d95177ccfc40a917c2688f396c",mockSiloLinearPool:"0xa149cf2d795aab83a15673f5beade9361e4e3f65",mockSiloRepository:"0xa7d524046ef89de9f8e4f2d7b029f66ccb738d48",mockStaticAToken:"0x03f3fb107e74f2eac9358862e91ad3c692712054",mockWeightedPool:"0xf7a7e1f48fa43cb7919ff4eb362c5be78092df4a",mockYearnLinearPool:"0x016b7366f76aa2794097798b90cf239796aeff8d",mockYearnTokenVault:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",nullVotingEscrow:"0x475d18169be8a89357a9ee3ab00ca386d20fa229",omniVotingEscrowAdaptor:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",poolRecoveryHelper:"0x1b6f057520b4e826271d47b8bdab98e35af17e59",preseededVotingEscrowDelegation:"0xb1a4fe1c6d25a0ddab47431a92a723dd71d9021f",protocolFeePercentagesProvider:"0xf7d5dce55e6d47852f054697bab6a1b48a00ddbd",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x809b79b53f18e9bc08a961ed4678b901ac93213a",protocolIdRegistry:"0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7",recoveryModeHelper:"0x5419e785b83ad3539d3a8741c0abb77d90d8784e",siloLinearPoolFactory:"0x8ea89804145c007e7d226001a96955ad53836087",singleRecipientGauge:"0x9a5ddde7056ceffb03d9962c4549ac1c4ad1f985",singleRecipientGaugeFactory:"0x7ee4d172ae50c627a1bfa9a99e1260c54da26fdf",smartWalletChecker:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",testBalancerToken:"0xb19382073c7a0addbb56ac6af1808fa49e377b75",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x927906bbac747c13c75f6447fe8abb490eab456c",votingEscrow:"0x150a72e4d4d81bbf045565e232c50ed0931ad795",votingEscrowDelegation:"0x0c5538098ebe88175078972f514c9e101d325d4f",votingEscrowDelegationProxy:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",votingEscrowRemapper:"0xf24917fb88261a37cc57f686ebc831a5c0b9fd39",weightedPoolFactory:"0x7920bfa1b2041911b354747ca7a6cdd2dfc50cfd",weth:"0x7b79995e5f793a07bc00c21412e50ecae098e7f9",yearnLinearPoolFactory:"0xacf05be5134d64d150d153818f8c67ee36996650"},tokens:{}}};const wn="0xBA12222222228d8Ba445958a75a0704d566BF2C8",xn={[Pe.MAINNET]:{chainId:Pe.MAINNET,addresses:{contracts:{multicall:"0xeefba1e63905ef1d7acba5a8513c70307c1ce441",poolDataQueries:"0xf5CDdF6feD9C589f1Be04899F48f9738531daD59",lidoRelayer:"0xdcdbf71A870cc60C6F9B621E28a7D3Ffd6Dd4965",veBal:"0xC128a9954e6c874eA3d62ce62B468bA073093F25",gaugeControllerCheckpointer:"0x8e5698dc4897dc12243c8642e77b4f21349db97c",veBalProxy:"0x6f5a2eE11E7a772AeB5114A20d0D7c0ff61EB8A0",gyroConfigProxy:"0xac89cc9d78bbad7eb3a02601b4d65daa1f908aa6",...Pn[Pe.MAINNET].contracts},tokens:{bal:Pn[Pe.MAINNET].contracts.bal,wrappedNativeAsset:Pn[Pe.MAINNET].contracts.weth,bbaUsd:Pn[Pe.MAINNET].tokens.bb_a_usd,lbpRaisingTokens:["0x6b175474e89094c44da98b954eedeac495271d0f","0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"],stETH:"0xae7ab96520de3a18e5e111b5eaab095312d7fe84",wstETH:"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",veBal:"0xC128a9954e6c874eA3d62ce62B468bA073093F25",...Pn[Pe.MAINNET].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/blocklytics/ethereum-blocks"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"ethereum"}},pools:{wETHwstETH:{id:"0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080",address:"0x32296969ef14eb0c6d29669c550d4a0449130230"}},poolsToIgnore:["0xbd482ffb3e6e50dc1c437557c3bea2b68f3683ee0000000000000000000003c6","0x0afbd58beca09545e4fb67772faf3858e610bcd00000000000000000000004b9","0xf22ff21e17157340575158ad7394e068048dd98b0000000000000000000004b8","0xf71d0774b214c4cf51e33eb3d30ef98132e4dbaa00000000000000000000046e"],sorConnectingTokens:[{symbol:"wEth",address:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"},{symbol:"wstEth",address:"0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0"},{symbol:"DOLA",address:"0x865377367054516e17014CcdED1e7d814EDC9ce4"},{symbol:"rEth",address:"0xae78736cd615f374d3085123a210448e74fc6393"},{symbol:"ETHx",address:"0xa35b1b31ce002fbf2058d22f30f95d405200a15b"}],sorTriPathMidPoolIds:["0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112"]},[Pe.POLYGON]:{chainId:Pe.POLYGON,addresses:{contracts:{multicall:"0xa1B2b503959aedD81512C37e9dce48164ec6a94d",poolDataQueries:"0x84813aA3e079A665C0B80F944427eE83cBA63617",gaugeClaimHelper:"0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33",gyroConfigProxy:"0xfdc2e9e03f515804744a40d0f8d25c16e93fbe67",...Pn[Pe.POLYGON].contracts},tokens:{bal:Pn[Pe.POLYGON].contracts.bal,wrappedNativeAsset:Pn[Pe.POLYGON].contracts.weth,lbpRaisingTokens:["0x8f3cf7ad23cd3cadbd9735aff958023239c6a063","0x2791bca1f2de4661ed88a30c99a7a9449aa84174","0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"],...Pn[Pe.POLYGON].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-polygon-prune-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-polygon",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/ianlapham/polygon-blocks"},thirdParty:{coingecko:{nativeAssetId:"",platformId:"polygon-pos"}},pools:{},poolsToIgnore:["0x600bd01b6526611079e12e1ff93aba7a3e34226f0000000000000000000009e4","0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455"],sorConnectingTokens:[{symbol:"weth",address:"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"},{symbol:"bbrz2",address:"0xe22483774bd8611be2ad2f4194078dac9159f4ba"}]},[Pe.ARBITRUM]:{chainId:Pe.ARBITRUM,addresses:{contracts:{multicall:"0x269ff446d9892c9e19082564df3f5e8741e190a1",poolDataQueries:"0x7Ba29fE8E83dd6097A7298075C4AFfdBda3121cC",gaugeClaimHelper:"0xa0dabebaad1b243bbb243f933013d560819eb66f",gyroConfigProxy:"0x9b683ca24b0e013512e2566b68704dbe9677413c",...Pn[Pe.ARBITRUM].contracts},tokens:{bal:Pn[Pe.ARBITRUM].contracts.bal,wrappedNativeAsset:Pn[Pe.ARBITRUM].contracts.weth,lbpRaisingTokens:["0xda10009cbd5d07dd0cecc66161fc93d7c9000da1","0xff970a61a04b1ca14834a43f5de4533ebddb5cc8","0x82af49447d8a07e3bd95bd0d56f35241523fbab1"],...Pn[Pe.ARBITRUM].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-arbitrum-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-arbitrum",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-one-blocks"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"arbitrum-one"}},pools:{},sorConnectingTokens:[{symbol:"weth",address:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"}],sorTriPathMidPoolIds:["0x178e029173417b1f9c8bc16dcec6f697bc323746000200000000000000000158","0x0052688295413b32626d226a205b95cdb337de860002000000000000000003d1","0xa1a8bf131571a2139feb79401aa4a2e9482df6270002000000000000000004b4"]},[Pe.GOERLI]:{chainId:Pe.GOERLI,addresses:{contracts:{multicall:"0x77dCa2C955b15e9dE4dbBCf1246B4B85b651e50e",poolDataQueries:"0x6d3197d069F8F9f1Fe7e23665Bc64CB77ED8b089",veBal:"0x33A99Dcc4C85C014cf12626959111D5898bbCAbF",veBalProxy:"0xA1F107D1cD709514AE8A914eCB757E95f9cedB31",erc4626LinearPoolFactory:"0xba240c856498e2d7a70af4911aafae0d6b565a5b",aaveLinearPoolFactory:"0x76578ecf9a141296ec657847fb45b0585bcda3a6",...Pn[Pe.GOERLI].contracts},tokens:{bal:Pn[Pe.GOERLI].contracts.bal,wrappedNativeAsset:Pn[Pe.GOERLI].contracts.weth}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-goerli-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-goerli",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/blocklytics/goerli-blocks"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"ethereum"}},pools:{},sorConnectingTokens:[{symbol:"weth",address:"0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1"}]},[Pe.OPTIMISM]:{chainId:Pe.OPTIMISM,addresses:{contracts:{multicall:"0x2dc0e2aa608532da689e89e237df582b783e552c",poolDataQueries:"0x6B5dA774890Db7B7b96C6f44e6a4b0F657399E2e",gyroConfigProxy:"0x32acb44fc929339b9f16f0449525cc590d2a23f3",...Pn[Pe.OPTIMISM].contracts},tokens:{bal:"0xfe8b128ba8c78aabc59d4c64cee7ff28e9379921",wrappedNativeAsset:Pn[Pe.OPTIMISM].contracts.weth,lbpRaisingTokens:["0xda10009cbd5d07dd0cecc66161fc93d7c9000da1","0x7f5c764cbc14f9669b88837ca1490cca17c31607","0x4200000000000000000000000000000000000006"],...Pn[Pe.OPTIMISM].tokens}},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"optimistic-ethereum"}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-optimism",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-optimism",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/lyra-finance/optimism-mainnet-blocks"},pools:{},sorConnectingTokens:[{symbol:"weth",address:"0x4200000000000000000000000000000000000006"}]},[Pe.GNOSIS]:{chainId:Pe.GNOSIS,addresses:{contracts:{multicall:"0xbb6fab6b627947dae0a75808250d8b2652952cb5",poolDataQueries:"0x3f170631ed9821Ca51A59D996aB095162438DC10",...Pn[Pe.GNOSIS].contracts},tokens:{wrappedNativeAsset:Pn[Pe.GNOSIS].contracts.weth,bal:Pn[Pe.GNOSIS].contracts.bal,...Pn[Pe.GNOSIS].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gnosis-chain-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-gnosis-chain"},thirdParty:{coingecko:{nativeAssetId:"xdai",platformId:"xdai"}},averageBlockTime:5,pools:{},sorConnectingTokens:[{symbol:"weth",address:"0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d"},{symbol:"wsEth",address:"0x6C76971f98945AE98dD7d4DFcA8711ebea946eA6"}],sorTriPathMidPoolIds:["0xeb30c85cc528537f5350cf5684ce6a4538e13394000200000000000000000059","0x7644fa5d0ea14fcf3e813fdf93ca9544f8567655000000000000000000000066"]},[Pe.FANTOM]:{chainId:Pe.FANTOM,addresses:{contracts:{vault:"0x20dd72Ed959b6147912C2e529F0a0C651c33c9ce",multicall:"0x66335d7ad8011f6aa3f48aadcb523b62b38ed961",poolDataQueries:"0xb132F1E145DcC085980C531e2dA81f2b84efc14F",gaugeClaimHelper:"0x0000000000000000000000000000000000000000",balancerRelayer:"0x419f7925b8c9e409b6ee8792242556fa210a7a09",balancerHelpers:"0xfE18C7C70b0a2c6541bEde0367124278BC345Dc8",weightedPoolFactory:"0x60467cb225092cE0c989361934311175f437Cf53",composableStablePoolFactory:"0x44814E3A603bb7F1198617995c5696C232F6e8Ed",yearnLinearPoolFactory:"0x1f73ae6ed391a2b1e84ff988a1bb5394b78a4a71"},tokens:{bal:"0xF24Bcf4d1e507740041C9cFd2DddB29585aDCe1e",wrappedNativeAsset:"0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83",lbpRaisingTokens:["0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83","0x04068DA6C83AFCFA0e13ba15A6696662335D5B75","0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E"]}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-v2-fantom",gaugesSubgraph:"",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/beethovenxfi/fantom-blocks"},thirdParty:{coingecko:{nativeAssetId:"ftm",platformId:"fantom"}},pools:{},poolsToIgnore:[],sorConnectingTokens:[{symbol:"wftm",address:"0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83"}]},[Pe.SEPOLIA]:{chainId:Pe.SEPOLIA,addresses:{contracts:{multicall:"0xcA11bde05977b3631167028862bE2a173976CA11",poolDataQueries:"0x9805dcfD25e6De36bad8fe9D3Fe2c9b44B764102",...Pn[Pe.SEPOLIA].contracts},tokens:{bal:Pn[Pe.SEPOLIA].contracts.bal,wrappedNativeAsset:Pn[Pe.SEPOLIA].contracts.weth,...Pn[Pe.SEPOLIA].tokens}},urls:{subgraph:"https://api.studio.thegraph.com/query/24660/balancer-sepolia-v2/version/latest"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"ethereum"}},pools:{},poolsToIgnore:[],sorConnectingTokens:[]},[Pe.ZKEVM]:{chainId:Pe.ZKEVM,addresses:{contracts:{balancerMinter:"0x475D18169BE8a89357A9ee3Ab00ca386d20fA229",multicall:"0xcA11bde05977b3631167028862bE2a173976CA11",poolDataQueries:"0xF24917fB88261a37Cc57F686eBC831a5c0B9fD39",...Pn[Pe.ZKEVM].contracts},tokens:{bal:Pn[Pe.ZKEVM].contracts.bal,wrappedNativeAsset:Pn[Pe.ZKEVM].contracts.weth,...Pn[Pe.ZKEVM].tokens}},urls:{subgraph:"https://api.studio.thegraph.com/query/24660/balancer-polygon-zk-v2/version/latest",gaugesSubgraph:"https://api.studio.thegraph.com/query/24660/balancer-gauges-polygon-zk/version/latest"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"polygon-zkevm"}},averageBlockTime:4,multicallBatchSize:128,pools:{},poolsToIgnore:[],sorConnectingTokens:[{symbol:"weth",address:"0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9"},{symbol:"wsEth",address:"0x5D8cfF95D7A57c0BF50B30b43c7CC0D52825D4a9"}]},[Pe.AVALANCHE]:{chainId:Pe.AVALANCHE,addresses:{contracts:{balancerMinter:"0xEa924b45a3fcDAAdf4E5cFB1665823B8F8F2039B",multicall:"0xcA11bde05977b3631167028862bE2a173976CA11",poolDataQueries:"0x67af5D428d38C5176a286a2371Df691cDD914Fb8",...Pn[Pe.AVALANCHE].contracts},tokens:{bal:Pn[Pe.AVALANCHE].contracts.bal,wrappedNativeAsset:Pn[Pe.AVALANCHE].contracts.weth,...Pn[Pe.AVALANCHE].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-avalanche-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-avalanche",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/iliaazhel/avalanche-blocks"},thirdParty:{coingecko:{nativeAssetId:"avalanche-2",platformId:"avalanche"}},pools:{},poolsToIgnore:[],sorConnectingTokens:[{symbol:"WAVAX",address:"0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7"},{symbol:"sAVAX",address:"0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be"}]},[Pe.BASE]:{chainId:Pe.BASE,addresses:{contracts:{balancerMinter:"0xc7E5ED1054A24Ef31D827E6F86caA58B3Bc168d7",multicall:"0xcA11bde05977b3631167028862bE2a173976CA11",poolDataQueries:"",...Pn[Pe.BASE].contracts},tokens:{bal:Pn[Pe.BASE].contracts.bal,wrappedNativeAsset:Pn[Pe.BASE].contracts.weth,...Pn[Pe.BASE].tokens}},urls:{subgraph:"https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest",gaugesSubgraph:"https://api.studio.thegraph.com/query/24660/balancer-gauges-base/version/latest",blockNumberSubgraph:"https://api.studio.thegraph.com/query/48427/bleu-base-blocks/version/latest"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"base"}},averageBlockTime:2,pools:{},poolsToIgnore:[],sorConnectingTokens:[{symbol:"weth",address:"0x4200000000000000000000000000000000000006"}],sorTriPathMidPoolIds:["0x2db50a0e0310723ef0c2a165cb9a9f80d772ba2f00020000000000000000000d"]}},En=e=>xn[e].addresses;var An;!function(e){e.ABOVE_MAX_TOKENS="ABOVE_MAX_TOKENS",e.BELOW_MIN_TOKENS="BELOW_MIN_TOKENS",e.EXIT_DELTA_AMOUNTS="EXIT_DELTA_AMOUNTS",e.FEE_PROVIDER_NOT_PROVIDED="FEE_PROVIDER_NOT_PROVIDED",e.GAUGES_HELPER_ADDRESS_NOT_PROVIDED="GAUGES_HELPER_ADDRESS_NOT_PROVIDED",e.GAUGES_NOT_FOUND="GAUGES_NOT_FOUND",e.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED="GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED",e.GAUGES_REWARD_TOKEN_EMPTY="GAUGES_REWARD_TOKEN_EMPTY",e.ILLEGAL_PARAMETER="ILLEGAL_PARAMETER",e.INTERNAL_ERROR_INVALID_ABI="INTERNAL_ERROR_INVALID_ABI",e.INPUT_LENGTH_MISMATCH="INPUT_LENGTH_MISMATCH",e.INPUT_OUT_OF_BOUNDS="INPUT_OUT_OF_BOUNDS",e.INPUT_TOKEN_INVALID="INPUT_TOKEN_INVALID",e.INVALID_PROTOCOL_ID="INVALID_PROTOCOL_ID",e.INVALID_SWAP_FEE_PERCENTAGE="INVALID_SWAP_FEE_PERCENTAGE",e.INVALID_WEIGHTS="INVALID_WEIGHTS",e.JOIN_DELTA_AMOUNTS="JOIN_DELTA_AMOUNTS",e.JOIN_WITH_ZERO_AMOUNT="JOIN_WITH_ZERO_AMOUNT",e.MISSING_AMP="MISSING_AMP",e.MISSING_DECIMALS="MISSING_DECIMALS",e.MISSING_PRICE_RATE="MISSING_PRICE_RATE",e.MISSING_TOKENS="MISSING_TOKENS",e.MISSING_WEIGHT="MISSING_WEIGHT",e.NO_POOL_DATA="NO_POOL_DATA",e.NO_VALUE_PARAMETER="NO_VALUE_PARAMETER",e.POOL_DOESNT_EXIST="POOL_DOESNT_EXIST",e.QUERY_BATCH_SWAP="QUERY_BATCH_SWAP",e.RELAY_SWAP_AMOUNTS="RELAY_SWAP_AMOUNTS",e.REWARD_TOKEN_ZERO="REWARD_TOKEN_ZERO",e.TIMESTAMP_IN_THE_FUTURE="TIMESTAMP_IN_THE_FUTURE",e.TOKEN_MISMATCH="TOKEN_MISMATCH",e.UNSUPPORTED_PAIR="UNSUPPORTED_PAIR",e.UNSUPPORTED_POOL_TYPE="UNSUPPORTED_POOL_TYPE",e.UNSUPPORTED_POOL_TYPE_VERSION="UNSUPPORTED_POOL_TYPE_VERSION"}(An||(An={}));class vn extends Error{constructor(e){super(vn.getMessage(e)),this.code=e,this.name="BalancerError"}static getMessage(e){switch(e){case An.ABOVE_MAX_TOKENS:return"the array contains more tokens than the maximum allowed";case An.BELOW_MIN_TOKENS:return"the array does not contain the minimum quantity of tokens";case An.EXIT_DELTA_AMOUNTS:return"Error when checking exit call deltas";case An.FEE_PROVIDER_NOT_PROVIDED:return"Fee Provider Repository has not been provided";case An.GAUGES_HELPER_ADDRESS_NOT_PROVIDED:return"Liquidity Gauges Helper Contract address has not been provided";case An.GAUGES_NOT_FOUND:return"Liquidity Gauges not found with given addresses";case An.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED:return"Liquidity Gauges Reward Minter Contract address has not been provided";case An.GAUGES_REWARD_TOKEN_EMPTY:return"No Reward Tokens for Liquidity Gauges provided";case An.INPUT_LENGTH_MISMATCH:return"input length mismatch";case An.INPUT_OUT_OF_BOUNDS:return"input out of bounds";case An.INPUT_TOKEN_INVALID:return"input token invalid";case An.INVALID_PROTOCOL_ID:return"The provided protocol id does not correspond to a protocol";case An.INVALID_SWAP_FEE_PERCENTAGE:return"The swap fee needs to be greater than zero and less than 1e17(10%)";case An.INVALID_WEIGHTS:return"The sum of the weights needs to be equal to 1e18(100%)";case An.JOIN_DELTA_AMOUNTS:return"Error when checking join call deltas";case An.JOIN_WITH_ZERO_AMOUNT:return"Cant join pool with 0 amount of token in";case An.MISSING_AMP:return"missing amp";case An.MISSING_DECIMALS:return"missing decimals";case An.MISSING_PRICE_RATE:return"missing price rate";case An.MISSING_TOKENS:return"missing tokens";case An.MISSING_WEIGHT:return"missing weight";case An.NO_POOL_DATA:return"no pool data";case An.NO_VALUE_PARAMETER:return"Illegal value passed as parameter";case An.POOL_DOESNT_EXIST:return"balancer pool does not exist";case An.RELAY_SWAP_AMOUNTS:return"Error when checking swap amounts";case An.REWARD_TOKEN_ZERO:return"All Zero Values for Reward Tokens";case An.TIMESTAMP_IN_THE_FUTURE:return"Timestamp cannot be in the future";case An.TOKEN_MISMATCH:return"token mismatch";case An.UNSUPPORTED_PAIR:return"unsupported token pair";case An.UNSUPPORTED_POOL_TYPE:return"unsupported pool type";default:return"Unknown error"}}}function Sn(e,t,a){return a?function(e,t){const a=Je-et.divDownFixed(e,t);return a<0?BigInt(0):a}(e,t):function(e,t){const a=et.divDownFixed(e,t)-Je;return a<0?BigInt(0):a}(e,t)}const kn=BigInt(1e3);function On(e,t,a,n){const o=t.length,i=function(e,t,a){let n=He;const o=t.length;for(let e=0;ei){if(s-i<=1)return s}else if(i-s<=1)return s}throw new Error("Errors.STABLE_INVARIANT_DIDNT_CONVERGE")}(e,t,!0);let s=He,r=i/BigInt(o);for(let e=0;e{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:s,pool:t,shouldUnwrapNativeAsset:o});const p=this.sortValuesExitExactBptIn({pool:t,wrappedNativeAsset:i,shouldUnwrapNativeAsset:o,singleTokenOut:s}),{minAmountsOut:d,expectedAmountsOut:l}=p.singleTokenOutIndex>=0?this.calcTokenOutGivenExactBptIn({...p,bptIn:a,slippage:n}):this.calcTokensOutGivenExactBptIn({...p,bptIn:a,slippage:n}),u=p.singleTokenOutIndex>=0?re.exitExactBPTInForOneTokenOut(a,p.singleTokenOutIndex):re.exitExactBPTInForTokensOut(a),c=this.encodeExitPool({poolTokens:p.poolTokens,poolId:t.id,exiter:e,minAmountsOut:d,userData:u,toInternalBalance:r}),y=(new Mn).calcPriceImpact(t,l.map(BigInt),BigInt(a),!1);return{...c,expectedAmountsOut:l,minAmountsOut:d,priceImpact:y}},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{this.checkInputsExactTokensOut(n,a,t);const r=this.sortValuesExitExactTokensOut({pool:t,wrappedNativeAsset:i,amountsOut:n,tokensOut:a}),{expectedBPTIn:p,maxBPTIn:d}=this.calcBptInGivenExactTokensOut({...r,slippage:o}),{downScaledAmountsOut:l,poolTokens:u}=r,c=re.exitBPTInForExactTokensOut(l,d);return{...this.encodeExitPool({poolId:t.id,userData:c,poolTokens:u,minAmountsOut:l,exiter:e,toInternalBalance:s}),expectedBPTIn:p,maxBPTIn:d,priceImpact:(new Mn).calcPriceImpact(t,l.map(BigInt),BigInt(p),!1)}},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:void 0,pool:t,shouldUnwrapNativeAsset:!1});const i=nt(t),{minAmountsOut:s,expectedAmountsOut:r}=this.calcTokensOutGivenExactBptIn({...i,singleTokenOutIndex:-1,bptIn:a,slippage:n}),p=se.recoveryModeExit(a),d=this.encodeExitPool({poolTokens:i.poolTokens,poolId:t.id,exiter:e,minAmountsOut:s,userData:p,toInternalBalance:o}),l=(new Mn).calcPriceImpact(t,r.map(BigInt),BigInt(a),!1);return{...d,expectedAmountsOut:r,minAmountsOut:s,priceImpact:l}},this.checkInputsExactBPTIn=({bptIn:e,singleTokenOut:t,pool:a,shouldUnwrapNativeAsset:n})=>{if(!e.length||d(e,18).isNegative())throw new vn(An.INPUT_OUT_OF_BOUNDS);if(t&&t!==o&&!a.tokens.map((e=>e.address)).some((e=>Vt(e,t))))throw new vn(An.TOKEN_MISMATCH);if(!n&&t===o)throw new Error("shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values");if(a.tokens.some((e=>void 0===e.decimals)))throw new vn(An.MISSING_DECIMALS);if(!a.amp)throw new vn(An.MISSING_AMP)},this.checkInputsExactTokensOut=(e,t,a)=>{if(t.length!=e.length||t.length!=a.tokensList.length)throw new vn(An.INPUT_LENGTH_MISMATCH);if(a.tokens.some((e=>void 0===e.decimals)))throw new vn(An.MISSING_DECIMALS);if(!a.amp)throw new vn(An.MISSING_AMP)},this.sortValuesExitExactBptIn=({pool:e,wrappedNativeAsset:t,shouldUnwrapNativeAsset:a,singleTokenOut:n})=>{const o=nt(e,t,a),{poolTokens:i}=o;let s=-1;return n&&(s=i.indexOf(n)),{...o,singleTokenOutIndex:s}},this.sortValuesExitExactTokensOut=({pool:e,wrappedNativeAsset:t,amountsOut:a,tokensOut:n})=>{const i=n.some((e=>e===o)),s=nt(e,t,i),{scalingFactors:r}=s,p=new Le(t),[,d]=p.sortTokens(n,a),l=ze(d.map((e=>BigInt(e))),r.map((e=>BigInt(e))));return{...s,upScaledAmountsOut:l,downScaledAmountsOut:d}},this.calcTokenOutGivenExactBptIn=({poolTokens:e,ampWithPrecision:t,upScaledBalances:a,totalSharesEvm:n,swapFeeEvm:o,singleTokenOutIndex:i,bptIn:s,slippage:r,scalingFactors:d})=>{const l=M.StableMathBigInt._calcTokenOutGivenExactBptIn(t,a,i,BigInt(s),n,o).toString(),u=Ze(BigInt(l)-BigInt(1),d[i]).toString(),c=Array(e.length).fill("0"),y=Array(e.length).fill("0");return c[i]=u,y[i]=Dt(p.from(u),p.from(r)).toString(),{minAmountsOut:y,expectedAmountsOut:c}},this.calcTokensOutGivenExactBptIn=({upScaledBalances:e,totalSharesEvm:t,scalingFactors:a,bptIn:n,slippage:o})=>{const i=Qe(M.StableMathBigInt._calcTokensOutGivenExactBptIn(e,BigInt(n),t),a),s=i.map((e=>e.toString()));return{minAmountsOut:i.map((e=>Dt(p.from(e),p.from(o)).toString())),expectedAmountsOut:s}},this.calcBptInGivenExactTokensOut=({ampWithPrecision:e,upScaledBalances:t,upScaledAmountsOut:a,totalSharesEvm:n,swapFeeEvm:o,slippage:i})=>{const s=M.StableMathBigInt._calcBptInGivenExactTokensOut(e,t,a,n,o).toString();return{maxBPTIn:Ut(p.from(s),p.from(i)).toString(),expectedBPTIn:s}},this.encodeExitPool=({poolId:e,exiter:t,poolTokens:a,minAmountsOut:n,userData:o,toInternalBalance:i})=>{const s=wn,r="exitPool",p={poolId:e,sender:t,recipient:t,exitPoolRequest:{assets:a,minAmountsOut:n,userData:o,toInternalBalance:i}};return{data:nn.createInterface().encodeFunctionData(r,[p.poolId,p.sender,p.recipient,p.exitPoolRequest]),to:s,functionName:r,attributes:p}}}}class Fn{constructor(){this.buildJoin=({joiner:e,pool:t,tokensIn:a,amountsIn:n,slippage:o,wrappedNativeAsset:i})=>{this.checkInputs(a,n,t);const s=this.sortValues({pool:t,wrappedNativeAsset:i,tokensIn:a,amountsIn:n}),{expectedBPTOut:r,minBPTOut:p}=this.calcBptOutGivenExactTokensIn({...s,slippage:o});return{...this.encodeJoinPool({joiner:e,amountsIn:n,tokensIn:a,poolId:t.id,minBPTOut:p,...s}),minBPTOut:p,expectedBPTOut:r,priceImpact:(new Mn).calcPriceImpact(t,s.sortedAmountsIn.map(BigInt),BigInt(r),!0)}},this.checkInputs=(e,t,a)=>{if(t.length!=e.length||t.length!=a.tokensList.length)throw new vn(An.INPUT_LENGTH_MISMATCH);if(a.tokens.some((e=>void 0===e.decimals)))throw new vn(An.MISSING_DECIMALS);if(!a.amp)throw new vn(An.MISSING_AMP)},this.sortValues=({pool:e,wrappedNativeAsset:t,amountsIn:a,tokensIn:n})=>{const{poolTokens:i,ampWithPrecision:s,totalSharesEvm:r,swapFeeEvm:p,scalingFactors:d,upScaledBalances:l}=nt(e,t,n.includes(o)),u=new Le(t),[,c]=u.sortTokens(n,a);return{poolTokens:i,ampWithPrecision:s,totalSharesEvm:r,swapFeeEvm:p,upScaledBalances:l,upScaledAmountsIn:ze(c.map((e=>BigInt(e))),d.map((e=>BigInt(e)))),sortedAmountsIn:c}},this.calcBptOutGivenExactTokensIn=({ampWithPrecision:e,upScaledBalances:t,upScaledAmountsIn:a,totalSharesEvm:n,swapFeeEvm:o,slippage:i})=>{const s=M.StableMathBigInt._calcBptOutGivenExactTokensIn(e,t,a,n,o).toString();return{expectedBPTOut:s,minBPTOut:Dt(p.from(s),p.from(i)).toString()}},this.encodeJoinPool=({poolId:e,joiner:t,poolTokens:a,sortedAmountsIn:n,amountsIn:o,tokensIn:i,minBPTOut:s})=>{const r=re.joinExactTokensInForBPTOut(n,s),p=wn,d="joinPool",l={poolId:e,sender:t,recipient:t,joinPoolRequest:{assets:a,maxAmountsIn:n,userData:r,fromInternalBalance:!1}};return{attributes:l,data:nn.createInterface().encodeFunctionData(d,[l.poolId,l.sender,l.recipient,l.joinPoolRequest]),functionName:d,to:p,value:kt(i,o)}}}}class Bn{calcTotal(e){var t,a;let n=p.from(0),o=p.from(0);for(let a=0;a{this.checkInputs(a,n,t.tokensList);const s=this.sortValuesBasedOnPoolVersion({pool:t,wrappedNativeAsset:i,amountsIn:n,tokensIn:a}),r=this.buildExactTokensInForBPTOut({...s,slippage:o,joiner:e,poolId:t.id}),p=kt(a,n),d=(new Mn).calcPriceImpact(t,s.sortedAmountsIn.map(BigInt),BigInt(r.expectedBPTOut),!0);return{...r,to:wn,value:p,priceImpact:d}}}sortValuesBasedOnPoolVersion({pool:e,wrappedNativeAsset:t,amountsIn:a,tokensIn:n}){return this.sortV1(t,n,a,e)}checkInputs(e,t,a){if(e.length!=t.length||e.length!=a.length-1)throw new vn(An.INPUT_LENGTH_MISMATCH)}encodeUserDataExactTokensInForBPTOut(e,t,a){const n=Dt(p.from(e),p.from(t)).toString();return{userData:be.joinExactTokensInForBPTOut(a,n),minBPTOut:n}}encodeJoinPool(e,t,a,n,o,i){const s="joinPool",r={poolId:e,sender:t,recipient:a,joinPoolRequest:{assets:n,maxAmountsIn:i,userData:o,fromInternalBalance:!1}};return{functionName:s,attributes:r,data:nn.createInterface().encodeFunctionData(s,[r.poolId,r.sender,r.recipient,r.joinPoolRequest])}}sortV1(e,t,a,n){const i=new Le(e),[,s]=i.sortTokens(t,a),{poolTokens:r,ampWithPrecision:p,swapFeeEvm:d,totalSharesEvm:l,bptIndex:u,scalingFactorsWithoutBpt:c,upScaledBalancesWithoutBpt:y}=nt(n,e,t.includes(o));return{sortedAmountsIn:s,scalingFactorsWithoutBpt:c,upScaledBalancesWithoutBpt:y,ampWithPrecision:p,totalSharesEvm:l,swapFeeEvm:d,bptIndex:u,poolTokens:r}}buildExactTokensInForBPTOut(e){const{sortedAmountsIn:t,scalingFactorsWithoutBpt:a,upScaledBalancesWithoutBpt:n,ampWithPrecision:o,totalSharesEvm:i,swapFeeEvm:s,bptIndex:r,poolTokens:p,slippage:d,poolId:l,joiner:u}=e,c=this.calcBptOutGivenExactTokensIn(t,a,n,o,i,s),y=this.encodeUserDataExactTokensInForBPTOut(c,d,t),{functionName:b,data:m,attributes:f}=this.encodeJoinPool(l,u,u,p,y.userData,qt(t,r,"0"));return{functionName:b,data:m,attributes:f,minBPTOut:y.minBPTOut,expectedBPTOut:c.toString()}}calcBptOutGivenExactTokensIn(e,t,a,n,o,i){const s=ze(e.map(BigInt),t.map(BigInt));return R._calcBptOutGivenExactTokensIn(n,a,s,o,i)}sortV4(e,t,a){const{poolTokens:n,poolTokensWithoutBpt:o,ampWithPrecision:i,swapFeeEvm:s,totalSharesEvm:r,scalingFactorsWithoutBpt:p,upScaledBalancesWithoutBpt:d}=nt(a),[l]=$t(o,e,t);return{sortedAmountsIn:l,scalingFactorsWithoutBpt:p,upScaledBalancesWithoutBpt:d,ampWithPrecision:i,totalSharesEvm:r,swapFeeEvm:s,bptIndex:0,poolTokens:n}}}class Un{constructor(){this.buildExitExactBPTIn=({exiter:e,pool:t,bptIn:a,slippage:n,shouldUnwrapNativeAsset:o,wrappedNativeAsset:i,singleTokenOut:s,toInternalBalance:r})=>{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:s,pool:t,shouldUnwrapNativeAsset:o});const p=this.sortValuesExitExactBptIn({pool:t,wrappedNativeAsset:i,shouldUnwrapNativeAsset:o,singleTokenOut:s}),{minAmountsOut:d,expectedAmountsOut:l}=p.singleTokenOutIndexWithoutBpt>=0?this.calcTokenOutGivenExactBptIn({...p,bptIn:a,slippage:n}):this.calcTokensOutGivenExactBptIn({...p,bptIn:a,slippage:n}),u=p.singleTokenOutIndexWithoutBpt>=0?be.exitExactBPTInForOneTokenOut(a,p.singleTokenOutIndexWithoutBpt):be.exitExactBPTInForAllTokensOut(a),c=qt(d,p.bptIndex,"0"),y=this.encodeExitPool({poolTokens:p.poolTokens,poolId:t.id,exiter:e,userData:u,minAmountsOut:c,toInternalBalance:r}),b=(new Mn).calcPriceImpact(t,l.map(BigInt),BigInt(a),!1);return{...y,expectedAmountsOut:l,minAmountsOut:d,priceImpact:b}},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{this.checkInputsExactTokensOut(a,n,t);const r=this.sortValuesExitExactTokensOut({pool:t,wrappedNativeAsset:i,amountsOut:n,tokensOut:a}),{bptIn:p,maxBPTIn:d}=this.calcBptInGivenExactTokensOut({...r,slippage:o}),l=be.exitBPTInForExactTokensOut(r.downscaledAmountsOutWithoutBpt,d);return{...this.encodeExitPool({poolTokens:r.poolTokens,minAmountsOut:r.downscaledAmountsOutWithBpt,userData:l,exiter:e,poolId:t.id,toInternalBalance:s}),maxBPTIn:d,expectedBPTIn:p,priceImpact:(new Mn).calcPriceImpact(t,r.downscaledAmountsOutWithoutBpt.map(BigInt),BigInt(p),!1)}},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{this.checkInputsRecoveryExit({bptIn:a,pool:t}),t.tokens.forEach((e=>e.priceRate="1"));const i=nt(t),{minAmountsOut:s,expectedAmountsOut:r}=this.calcTokensOutGivenExactBptIn({...i,bptIn:a,slippage:n}),p=se.recoveryModeExit(a),d=qt(s,i.bptIndex,"0"),l=this.encodeExitPool({poolTokens:i.poolTokens,poolId:t.id,exiter:e,userData:p,minAmountsOut:d,toInternalBalance:o}),u=(new Mn).calcPriceImpact(t,r.map(BigInt),BigInt(a),!1);return{...l,expectedAmountsOut:r,minAmountsOut:s,priceImpact:u}},this.checkInputsExactBPTIn=({bptIn:e,singleTokenOut:t,pool:a,shouldUnwrapNativeAsset:n})=>{if(p.from(e).lte(0))throw new vn(An.INPUT_OUT_OF_BOUNDS);if(!t&&a.poolTypeVersion<2)throw new Error("Unsupported Exit Type For Pool");if(t&&t!==o&&!a.tokens.map((e=>e.address)).some((e=>Vt(e,t))))throw new vn(An.TOKEN_MISMATCH);if(!n&&t===o)throw new Error("shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values");if(a.tokens.some((e=>void 0===e.decimals)))throw new vn(An.MISSING_DECIMALS);if(!a.amp)throw new vn(An.MISSING_AMP)},this.checkInputsExactTokensOut=(e,t,a)=>{if(e.length!=t.length||e.length!=a.tokensList.length-1)throw new vn(An.INPUT_LENGTH_MISMATCH)},this.checkInputsRecoveryExit=({bptIn:e,pool:t})=>{if(p.from(e).lte(0))throw new vn(An.INPUT_OUT_OF_BOUNDS);if(!t.isInRecoveryMode)throw new Error("Exit type not supported because pool is not in Recovery Mode");if(t.tokens.some((e=>void 0===e.decimals)))throw new vn(An.MISSING_DECIMALS);if(!t.amp)throw new vn(An.MISSING_AMP)},this.sortValuesExitExactBptIn=({pool:e,singleTokenOut:t,wrappedNativeAsset:a,shouldUnwrapNativeAsset:n})=>{const o=nt(e,a,n);let i=-1;return t&&(i=o.poolTokensWithoutBpt.indexOf(t)),{...o,singleTokenOutIndexWithoutBpt:i}},this.sortValuesExitExactTokensOut=({pool:e,wrappedNativeAsset:t,amountsOut:a,tokensOut:n})=>{const i=n.some((e=>e===o)),s=nt(e,t,i),r=new Le(t),[,d]=r.sortTokens(n,a),l=qt(d,s.bptIndex,"0").map((e=>{const t=p.from(e);return t.isZero()?e:t.sub(1).toString()})),u=ze(d.map((e=>BigInt(e))),s.scalingFactorsWithoutBpt);return{...s,upScaledAmountsOutWithoutBpt:u,downscaledAmountsOutWithBpt:l,downscaledAmountsOutWithoutBpt:d}},this.calcTokenOutGivenExactBptIn=({ampWithPrecision:e,upScaledBalancesWithoutBpt:t,singleTokenOutIndexWithoutBpt:a,scalingFactorsWithoutBpt:n,totalSharesEvm:o,swapFeeEvm:i,bptIn:s,slippage:r})=>{const d=M.StableMathBigInt._calcTokenOutGivenExactBptIn(e,t,a,BigInt(s),o,i),l=Array(t.length).fill("0"),u=Array(t.length).fill("0"),c=Ze(d,n[a]);return l[a]=c.toString(),u[a]=Dt(p.from(c),p.from(r)).toString(),{minAmountsOut:u,expectedAmountsOut:l}},this.calcTokensOutGivenExactBptIn=({upScaledBalancesWithoutBpt:e,totalSharesEvm:t,scalingFactorsWithoutBpt:a,bptIn:n,slippage:o})=>{const i=Qe(M.StableMathBigInt._calcTokensOutGivenExactBptIn(e,BigInt(n),t),a),s=i.map((e=>e.toString()));return{minAmountsOut:i.map((e=>Dt(p.from(e),p.from(o)).toString())),expectedAmountsOut:s}},this.calcBptInGivenExactTokensOut=({ampWithPrecision:e,upScaledBalancesWithoutBpt:t,upScaledAmountsOutWithoutBpt:a,totalSharesEvm:n,swapFeeEvm:o,slippage:i})=>{const s=M.StableMathBigInt._calcBptInGivenExactTokensOut(e,t,a,n,o).toString();return{bptIn:s,maxBPTIn:Ut(p.from(s),p.from(i)).toString()}},this.encodeExitPool=e=>{const{exiter:t,poolId:a,minAmountsOut:n,userData:o,poolTokens:i,toInternalBalance:s}=e,r="exitPool",p={poolId:a,sender:t,recipient:t,exitPoolRequest:{assets:i,minAmountsOut:n,userData:o,toInternalBalance:s}};return{to:wn,functionName:r,attributes:p,data:nn.createInterface().encodeFunctionData(r,[p.poolId,p.sender,p.recipient,p.exitPoolRequest])}}}}class Vn{constructor(e=new Un,t=new Bn,a=new Ln,n=new Mn,o=new Dn){this.exit=e,this.liquidity=t,this.spotPriceCalculator=a,this.priceImpactCalculator=n,this.join=o}}class qn{bptZeroPriceImpact(e,t){if(t.length!==e.tokensList.length)throw new vn(An.INPUT_LENGTH_MISMATCH);const{scalingFactorsRaw:a,totalSharesEvm:n,upScaledBalances:o,weights:i}=nt(e);let s=He;for(let e=0;e{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:s,pool:t,shouldUnwrapNativeAsset:o});const p=this.sortValuesExitExactBptIn({pool:t,wrappedNativeAsset:i,shouldUnwrapNativeAsset:o,singleTokenOut:s}),{minAmountsOut:d,expectedAmountsOut:l}=p.singleTokenOutIndex>=0?this.calcTokenOutGivenExactBptIn({...p,bptIn:a,slippage:n}):this.calcTokensOutGivenExactBptIn({...p,bptIn:a,slippage:n}),u=p.singleTokenOutIndex>=0?pe.exitExactBPTInForOneTokenOut(a,p.singleTokenOutIndex):pe.exitExactBPTInForTokensOut(a),c=this.encodeExitPool({poolTokens:p.poolTokens,poolId:t.id,exiter:e,minAmountsOut:d,userData:u,toInternalBalance:r}),y=(new qn).calcPriceImpact(t,l.map(BigInt),BigInt(a),!1);return{...c,expectedAmountsOut:l,minAmountsOut:d,priceImpact:y}},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{this.checkInputsExactTokensOut(n,a,t);const r=this.sortValuesExitExactTokensOut({pool:t,wrappedNativeAsset:i,amountsOut:n,tokensOut:a}),{expectedBPTIn:p,maxBPTIn:d}=this.calcBptInGivenExactTokensOut({...r,slippage:o}),{downScaledAmountsOut:l,poolTokens:u}=r,c=pe.exitBPTInForExactTokensOut(l,d);return{...this.encodeExitPool({poolId:t.id,userData:c,poolTokens:u,minAmountsOut:l,exiter:e,toInternalBalance:s}),expectedBPTIn:p,maxBPTIn:d,priceImpact:(new qn).calcPriceImpact(t,l.map(BigInt),BigInt(p),!1)}},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:void 0,pool:t,shouldUnwrapNativeAsset:!1}),t.tokens.forEach((e=>e.priceRate="1"));const i=nt(t),{minAmountsOut:s,expectedAmountsOut:r}=this.calcTokensOutGivenExactBptIn({...i,bptIn:a,slippage:n,singleTokenOutIndex:-1}),p=se.recoveryModeExit(a),d=this.encodeExitPool({poolTokens:i.poolTokens,poolId:t.id,exiter:e,minAmountsOut:s,userData:p,toInternalBalance:o}),l=(new qn).calcPriceImpact(t,r.map(BigInt),BigInt(a),!1);return{...d,expectedAmountsOut:r,minAmountsOut:s,priceImpact:l}},this.checkInputsExactBPTIn=({bptIn:e,singleTokenOut:t,pool:a,shouldUnwrapNativeAsset:n})=>{if(!e.length||d(e,18).isNegative())throw new vn(An.INPUT_OUT_OF_BOUNDS);if(t&&t!==o&&!a.tokens.map((e=>e.address)).some((e=>Vt(e,t))))throw new vn(An.TOKEN_MISMATCH);if(!n&&t===o)throw new Error("shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values");if(a.tokens.some((e=>void 0===e.decimals)))throw new vn(An.MISSING_DECIMALS)},this.checkInputsExactTokensOut=(e,t,a)=>{if(t.length!=e.length||t.length!=a.tokensList.length)throw new vn(An.INPUT_LENGTH_MISMATCH);if(a.tokens.some((e=>void 0===e.decimals)))throw new vn(An.MISSING_DECIMALS)},this.sortValuesExitExactBptIn=({pool:e,wrappedNativeAsset:t,shouldUnwrapNativeAsset:a,singleTokenOut:n})=>{const o=nt(e,t,a),{poolTokens:i}=o;let s=-1;return n&&(s=i.indexOf(n.toLowerCase())),{...o,singleTokenOutIndex:s}},this.sortValuesExitExactTokensOut=({pool:e,wrappedNativeAsset:t,amountsOut:a,tokensOut:n})=>{const i=n.some((e=>e===o)),s=nt(e,t,i),{scalingFactors:r}=s,p=new Le(t),[,d]=p.sortTokens(n,a),l=ze(d.map((e=>BigInt(e))),r.map((e=>BigInt(e))));return{...s,upScaledAmountsOut:l,downScaledAmountsOut:d}},this.calcTokenOutGivenExactBptIn=({poolTokens:e,weights:t,upScaledBalances:a,totalSharesEvm:n,swapFeeEvm:o,singleTokenOutIndex:i,bptIn:s,slippage:r,scalingFactors:d})=>{const l=M.WeightedMaths._calcTokenOutGivenExactBptIn(a[i],t[i],BigInt(s),n,o).toString(),u=Ze(BigInt(l)-BigInt(1),d[i]).toString(),c=Array(e.length).fill("0"),y=Array(e.length).fill("0");return c[i]=u,y[i]=Dt(p.from(u),p.from(r)).toString(),{minAmountsOut:y,expectedAmountsOut:c}},this.calcTokensOutGivenExactBptIn=({upScaledBalances:e,totalSharesEvm:t,scalingFactors:a,bptIn:n,slippage:o})=>{const i=Qe(M.WeightedMaths._calcTokensOutGivenExactBptIn(e,BigInt(n),t).map((e=>e.toString())).map((e=>BigInt(e))),a),s=i.map((e=>e.toString()));return{minAmountsOut:i.map((e=>Dt(p.from(e),p.from(o)).toString())),expectedAmountsOut:s}},this.calcBptInGivenExactTokensOut=({weights:e,upScaledBalances:t,upScaledAmountsOut:a,totalSharesEvm:n,swapFeeEvm:o,slippage:i})=>{const s=M.WeightedMaths._calcBptInGivenExactTokensOut(t,e,a,n,o).toString();return{maxBPTIn:Ut(p.from(s),p.from(i)).toString(),expectedBPTIn:s}},this.encodeExitPool=({poolId:e,exiter:t,poolTokens:a,minAmountsOut:n,userData:o,toInternalBalance:i})=>{const s=wn,r="exitPool",p={poolId:e,sender:t,recipient:t,exitPoolRequest:{assets:a,minAmountsOut:n,userData:o,toInternalBalance:i}};return{data:nn.createInterface().encodeFunctionData(r,[p.poolId,p.sender,p.recipient,p.exitPoolRequest]),to:s,functionName:r,attributes:p}}}}class Wn{constructor(){this.buildJoin=({joiner:e,pool:t,tokensIn:a,amountsIn:n,slippage:o,wrappedNativeAsset:i})=>{this.checkInputs(n,a,t);const s=this.sortValues({pool:t,wrappedNativeAsset:i,tokensIn:a,amountsIn:n}),{expectedBPTOut:r,minBPTOut:p}=this.calcBptOutGivenExactTokensIn({...s,slippage:o});return{...this.encodeJoinPool({...s,poolId:t.id,joiner:e,minBPTOut:p,tokensIn:a,amountsIn:n}),minBPTOut:p,expectedBPTOut:r,priceImpact:(new qn).calcPriceImpact(t,s.sortedAmountsIn.map(BigInt),BigInt(r),!0)}},this.checkInputs=(e,t,a)=>{if(e.length!=t.length||e.length!=a.tokensList.length)throw new vn(An.INPUT_LENGTH_MISMATCH);if(a.tokens.some((e=>void 0===e.decimals)))throw new vn(An.MISSING_DECIMALS);if(a.tokens.some((e=>!e.weight)))throw new vn(An.MISSING_WEIGHT)},this.sortValues=({pool:e,tokensIn:t,amountsIn:a,wrappedNativeAsset:n})=>{const i=t.some((e=>e===o)),s=nt(e,n,i),r=new Le(n),[,p]=r.sortTokens(t,a),d=ze(p.map(BigInt),s.scalingFactors);return{...s,sortedAmountsIn:p,upScaledAmountsIn:d}},this.calcBptOutGivenExactTokensIn=({upScaledBalances:e,weights:t,upScaledAmountsIn:a,totalSharesEvm:n,swapFeeEvm:o,slippage:i})=>{const s=N._calcBptOutGivenExactTokensIn(e,t,a,n,o).toString();return{expectedBPTOut:s,minBPTOut:Dt(p.from(s),p.from(i)).toString()}},this.encodeJoinPool=({sortedAmountsIn:e,poolTokens:t,poolId:a,joiner:n,minBPTOut:o,amountsIn:i,tokensIn:s})=>{const r="joinPool",p={poolId:a,sender:n,recipient:n,joinPoolRequest:{assets:t,maxAmountsIn:e,userData:pe.joinExactTokensInForBPTOut(e,o),fromInternalBalance:!1}};return{to:wn,functionName:r,data:nn.createInterface().encodeFunctionData(r,[p.poolId,p.sender,p.recipient,p.joinPoolRequest]),attributes:p,value:kt(s,i)}}}}class $n{calcTotal(e){var t;let a=p.from(0),n=p.from(0);for(let o=0;oe.add(Mt(t.weight||"0",18))),p.from(0));if(a.gt(0)){return Ct(n.mul(o).div(a),36)}return"0"}}class Hn{calcPoolSpotPrice(e,t,a){const n=e===a.address||t===a.address;if(n){const e={address:a.address,balance:a.totalShares,decimals:18,priceRate:"1",weight:"0"};a.tokens.push(e),a.tokensList.push(a.address)}const o=L.fromPool(a),i=o.parsePoolPairData(e,t),s=o._spotPriceAfterSwapExactTokenInForTokenOut(i,F).toString();return n&&(a.tokens.pop(),a.tokensList.pop()),s}}class Kn{constructor(e=new Gn,t=new Wn,a=new $n,n=new Hn,o=new qn){this.exit=e,this.join=t,this.liquidity=a,this.spotPriceCalculator=n,this.priceImpactCalculator=o}}class Jn{calcTotal(e){var t,a;let o=n,i=n;for(let a=0;a{throw new Error("Exit type not supported")},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{throw new Error("Exit type not supported")},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{throw new Error("Exit type not supported")}}}class zn{constructor(){this.buildJoin=({joiner:e,pool:t,tokensIn:a,amountsIn:n,slippage:o,wrappedNativeAsset:i})=>{throw new Error("Join type not supported")}}}class Zn{constructor(e=new jn,t=new zn,a=new Bn,n=new Ln,o=new Mn){this.exit=e,this.join=t,this.liquidity=a,this.spotPriceCalculator=n,this.priceImpactCalculator=o}}class Qn{bptZeroPriceImpact(e,t){throw new Error("Linear Pool bptZeroPriceImpact Not Implented")}calcPriceImpact(e,t,a,n){return"0"}}class eo{constructor(){this.buildExitExactBPTIn=({exiter:e,pool:t,bptIn:a,slippage:n,shouldUnwrapNativeAsset:o,wrappedNativeAsset:i,singleTokenOut:s,toInternalBalance:r})=>{throw new Error("Exit type not supported")},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{throw new Error("Exit type not supported")},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:void 0,pool:t,shouldUnwrapNativeAsset:!1}),t.tokens.forEach((e=>e.priceRate="1"));const i=nt(t),{minAmountsOut:s,expectedAmountsOut:r}=this.calcTokensOutGivenExactBptIn({...i,bptIn:a,slippage:n}),p=se.recoveryModeExit(a),d=qt(s,i.bptIndex,"0"),l=this.encodeExitPool({poolTokens:i.poolTokens,poolId:t.id,exiter:e,minAmountsOut:d,userData:p,toInternalBalance:o}),u=(new Qn).calcPriceImpact(t,r.map(BigInt),BigInt(a),!1);return{...l,expectedAmountsOut:r,minAmountsOut:s,priceImpact:u}},this.checkInputsExactBPTIn=({bptIn:e,pool:t})=>{if(p.from(e).lte(0))throw new vn(An.INPUT_OUT_OF_BOUNDS);if(t.tokens.some((e=>void 0===e.decimals)))throw new vn(An.MISSING_DECIMALS)},this.calcTokensOutGivenExactBptIn=({bptIndex:e,upScaledBalances:t,totalSharesEvm:a,scalingFactors:n,bptIn:o,slippage:i})=>{const s=Wt(Qe(M.LinearMaths._calcTokensOutGivenExactBptIn(t,BigInt(o),a,e),n),e).map((e=>e.toString()));return{minAmountsOut:s.map((e=>Dt(p.from(e),p.from(i)).toString())),expectedAmountsOut:s}},this.encodeExitPool=e=>{const{exiter:t,poolId:a,minAmountsOut:n,userData:o,poolTokens:i,toInternalBalance:s}=e,r="exitPool",p={poolId:a,sender:t,recipient:t,exitPoolRequest:{assets:i,minAmountsOut:n,userData:o,toInternalBalance:s}};return{to:wn,functionName:r,attributes:p,data:nn.createInterface().encodeFunctionData(r,[p.poolId,p.sender,p.recipient,p.exitPoolRequest])}}}}class to{constructor(){this.buildJoin=({joiner:e,pool:t,tokensIn:a,amountsIn:n,slippage:o,wrappedNativeAsset:i})=>{throw new Error("Join type not supported")}}}const ao=18,no=Mt("1",ao);class oo{calcTotal(e){var t,a;let o=n,i=n;for(let a=0;aBigInt(0)){const t=et.divDownFixed(o,n);for(let i=0;iBigInt(0)){const t=et.divDownFixed(o,n);for(let i=0;it.address!==e.address)),a=await Promise.all(t.map((async e=>{const t=await this.pools.findBy("address",e.address);if(!t)return;const a=Mt(await this.getLiquidity(t),18),n=Mt(t.totalShares,18),o=Mt(e.balance,18),i=n.eq(0)?0:a.mul(o).div(n);return{address:t.address,liquidity:i.toString()}}))),n=a.reduce(((e,t)=>e.add(t?t.liquidity:p.from(0))),p.from(0)),o=t.filter((e=>!a.find((t=>(null==t?void 0:t.address)===e.address)))),i=await Promise.all(o.map((async e=>{var t;const a=await this.tokenPrices.find(e.address);return{address:e.address,decimals:e.decimals,priceRate:e.priceRate,price:(null==a?void 0:a.usd)&&a||{usd:null===(t=e.token)||void 0===t?void 0:t.latestUSDPrice},balance:e.balance,weight:e.weight}}))),s=Mt(_o.from(e.poolType).liquidity.calcTotal(i),18);return Ct(n.add(s),18)}async getBptPrice(e){const t=await this.getLiquidity(e);return(parseFloat(t)/parseFloat(e.totalShares)).toString()}}const Po=p.from("0"),wo=e=>e?Object.keys(e).filter((t=>e[t].gt(Po))).reduce(((t,a)=>(t[a]=e[a],t)),{}):{},xo=(e,t,a)=>e.map((e=>((e,t,a)=>{if(!t[e.address]&&!a[e.address])return e;const n=wo(t[e.address]),o=wo(a[e.address]);return e.claimableTokens||(e.claimableTokens={...n,...o}),e})(e,t,a))).filter((e=>e.claimableTokens&&Object.keys(e.claimableTokens).length)),Eo=(e,t)=>{var a;if(t.rewardTokens)for(const n of Object.keys(t.rewardTokens))e[a=t.id]||(e[a]=[]),e[t.id].push(n);return e},Ao=new t(["function claim_rewards(address sender, address receiver) returns (uint256)","function claimable_tokens(address addr) view returns (uint256)","function claimable_reward(address addr, address token) view returns (uint256)"]),vo=new t(["function mintMany(address[] gauges) returns (uint256)"]),So=new t(["function getPendingRewards(address gauge, address user, address token) view returns (uint256)","function claimRewardsFromGauges(address[] gauges, address user)"]);class ko{constructor(e,t,a,n,o,i){this.multicall=n,this.liquidityGauges=e,this.feeDistributor=t,this.chainId=a,this.gaugeClaimHelperAddress=o,this.balancerMinterAddress=i}async getClaimableRewardTokens(e){const t=await this.getGauges();if(!t.length)throw new vn(An.GAUGES_NOT_FOUND);const a=t.map((e=>e.address)),n=this.getRewardTokens(t),o=await this.retrieveClaimableTokens(a,e),i=await this.retrieveClaimableRewards(n,e);return xo(t,i,o)}async buildClaimRewardTokensRequest(e,t){if(1===this.chainId||5===this.chainId){if(!this.balancerMinterAddress)throw new vn(An.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED)}else if(!this.gaugeClaimHelperAddress)throw new vn(An.GAUGES_HELPER_ADDRESS_NOT_PROVIDED);const a=(await this.getClaimableRewardTokens(t)).filter((t=>e.map((e=>e.toLowerCase())).includes(t.address.toLowerCase()))).filter((e=>e.claimableTokens&&Object.keys(e.claimableTokens).length)),n=Array.from(new Set(a.map((e=>e.claimableTokens)).map((e=>Object.keys(e||{}))).flatMap((e=>e))));if(!n.length)throw new vn(An.GAUGES_REWARD_TOKEN_EMPTY);const o=n.map((e=>a.reduce(((t,a)=>(a.claimableTokens&&a.claimableTokens[e]&&a.claimableTokens[e]!==Po&&(t=a.claimableTokens[e].add(t)),t)),p.from(0))));if(!o.length||o.every((e=>e.eq(Po))))throw new vn(An.REWARD_TOKEN_ZERO);if(1===this.chainId||5===this.chainId){if(!this.balancerMinterAddress)throw new vn(An.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED);const a=vo.encodeFunctionData("mintMany",[e]);return{to:this.balancerMinterAddress,from:t,callData:a,tokensOut:n,expectedTokensValue:o,functionName:"mintMany"}}{if(!this.gaugeClaimHelperAddress)throw new vn(An.GAUGES_HELPER_ADDRESS_NOT_PROVIDED);const a=So.encodeFunctionData("claimRewardsFromGauges",[e,t]);return{to:this.gaugeClaimHelperAddress,from:t,callData:a,tokensOut:n,expectedTokensValue:o,functionName:"claimRewardsFromGauges"}}}async getClaimableVeBalTokens(e,t){var a;if(!this.feeDistributor)throw new vn(An.FEE_PROVIDER_NOT_PROVIDED);return null===(a=this.feeDistributor)||void 0===a?void 0:a.getClaimableBalances(e,t)}async buildClaimVeBalTokensRequest(e,t){if(!this.feeDistributor)throw new vn(An.FEE_PROVIDER_NOT_PROVIDED);const a=await this.feeDistributor.getClaimableBalances(e,t),n=t.map((e=>{var t;return null!==(t=a[e])&&void 0!==t?t:Po}));if(n.every((e=>e.eq(Po))))throw new vn(An.REWARD_TOKEN_ZERO);const o=this.feeDistributor.claimBalances(e,t);return{to:this.feeDistributor.feeDistributor.address,from:e,callData:o,tokensOut:t,expectedTokensValue:n,functionName:"claimTokens"}}async getGauges(){return await this.liquidityGauges.fetch()}getRewardTokens(e){return e.reduce(Eo,{})}async retrieveClaimableRewards(e,t){const a=Object.keys(e),{payload:n,paths:o}=this.getPayload(a,e,t),[,i]=await this.multicall.callStatic.aggregate(n),s=i.map((e=>"0x"==e?"0x0":e));return o.reduce((e=>(t,a,n)=>{var o;const i=p.from(`${e[n]}`);return i.gt(Po)&&(t[o=a.gauge]||(t[o]={}),t[a.gauge][a.token]=i),t})(s),{})}getPayload(e,t,a){const n=[],o=[];for(const i of e)for(const e of t[i])o.push({gauge:i,token:e}),n.push(this.getArguments(a,i,e));return{payload:n,paths:o}}getArguments(e,t,a){if(1===this.chainId||5===this.chainId)return{target:t,callData:Ao.encodeFunctionData("claimable_reward",[e,a])};if(!this.gaugeClaimHelperAddress)throw new vn(An.GAUGES_HELPER_ADDRESS_NOT_PROVIDED);return{target:this.gaugeClaimHelperAddress,callData:So.encodeFunctionData("getPendingRewards",[t,e,a])}}async retrieveClaimableTokens(e,t){if(this.chainId===Pe.MAINNET||this.chainId===Pe.GOERLI){const a=xn[this.chainId].addresses.tokens.bal,n=e.map((e=>({target:e,callData:Ao.encodeFunctionData("claimable_tokens",[t])}))),[,o]=await this.multicall.callStatic.aggregate(n),i=o.map((e=>"0x"==e?"0x0":e));return e.reduce(((e,t)=>(a,n,o)=>{const i=p.from(`${e[o]}`);return i.gt(Po)&&(a[n]||(a[n]={}),a[n][t]=i),a})(i,a),{})}return{}}}async function Oo(e,t,a,n){const i={sender:o,recipient:o,fromInternalBalance:!1,toInternalBalance:!1};try{return(await e.callStatic.queryBatchSwap(t,a,n,i)).map((e=>e.toString()))}catch(e){throw`queryBatchSwap call error: ${e}`}}var Mo=function(){return Mo=Object.assign||function(e){for(var t,a=1,n=arguments.length;ae();function Hi(e,t=$i){return{PoolShare:(a,n)=>t((t=>e.request(Oi,a,{...n,...t})),"PoolShare","query"),PoolShares:(a,n)=>t((t=>e.request(Mi,a,{...n,...t})),"PoolShares","query"),Pools:(a,n)=>t((t=>e.request(Ci,a,{...n,...t})),"Pools","query"),AllPools:(a,n)=>t((t=>e.request(Fi,a,{...n,...t})),"AllPools","query"),Pool:(a,n)=>t((t=>e.request(Bi,a,{...n,...t})),"Pool","query"),PoolHistoricalLiquidities:(a,n)=>t((t=>e.request(Ri,a,{...n,...t})),"PoolHistoricalLiquidities","query"),PoolSnapshots:(a,n)=>t((t=>e.request(Ni,a,{...n,...t})),"PoolSnapshots","query"),JoinExits:(a,n)=>t((t=>e.request(Li,a,{...n,...t})),"JoinExits","query"),Balancers:(a,n)=>t((t=>e.request(Di,a,{...n,...t})),"Balancers","query"),TokenPrices:(a,n)=>t((t=>e.request(Ui,a,{...n,...t})),"TokenPrices","query"),TokenLatestPrices:(a,n)=>t((t=>e.request(Vi,a,{...n,...t})),"TokenLatestPrices","query"),TokenLatestPrice:(a,n)=>t((t=>e.request(qi,a,{...n,...t})),"TokenLatestPrice","query"),User:(a,n)=>t((t=>e.request(Gi,a,{...n,...t})),"User","query"),Users:(a,n)=>t((t=>e.request(Wi,a,{...n,...t})),"Users","query")}}var Ki,Ji,Xi,Yi,ji,zi,Zi,Qi,es,ts,as,ns,os,is,ss,rs,ps,ds;!function(e){e.Arbitrum="Arbitrum",e.Avalanche="Avalanche",e.Base="Base",e.Gnosis="Gnosis",e.Optimism="Optimism",e.Polygon="Polygon",e.PolygonZkEvm="PolygonZkEvm"}(Ki||(Ki={})),function(e){e.gauges="gauges",e.id="id",e.numGauges="numGauges"}(Ji||(Ji={})),function(e){e.balance="balance",e.gauge="gauge",e.gauge__id="gauge__id",e.gauge__isKilled="gauge__isKilled",e.gauge__isPreferentialGauge="gauge__isPreferentialGauge",e.gauge__poolAddress="gauge__poolAddress",e.gauge__poolId="gauge__poolId",e.gauge__relativeWeightCap="gauge__relativeWeightCap",e.gauge__streamer="gauge__streamer",e.gauge__symbol="gauge__symbol",e.gauge__totalSupply="gauge__totalSupply",e.id="id",e.user="user",e.user__id="user__id"}(Xi||(Xi={})),function(e){e.id="id",e.name="name"}(Yi||(Yi={})),function(e){e.gauge="gauge",e.gauge__addedTimestamp="gauge__addedTimestamp",e.gauge__address="gauge__address",e.gauge__id="gauge__id",e.id="id",e.timestamp="timestamp",e.user="user",e.user__id="user__id",e.weight="weight"}(ji||(ji={})),function(e){e.addedTimestamp="addedTimestamp",e.address="address",e.id="id",e.liquidityGauge="liquidityGauge",e.liquidityGauge__id="liquidityGauge__id",e.liquidityGauge__isKilled="liquidityGauge__isKilled",e.liquidityGauge__isPreferentialGauge="liquidityGauge__isPreferentialGauge",e.liquidityGauge__poolAddress="liquidityGauge__poolAddress",e.liquidityGauge__poolId="liquidityGauge__poolId",e.liquidityGauge__relativeWeightCap="liquidityGauge__relativeWeightCap",e.liquidityGauge__streamer="liquidityGauge__streamer",e.liquidityGauge__symbol="liquidityGauge__symbol",e.liquidityGauge__totalSupply="liquidityGauge__totalSupply",e.rootGauge="rootGauge",e.rootGauge__chain="rootGauge__chain",e.rootGauge__id="rootGauge__id",e.rootGauge__isKilled="rootGauge__isKilled",e.rootGauge__recipient="rootGauge__recipient",e.rootGauge__relativeWeightCap="rootGauge__relativeWeightCap",e.type="type",e.type__id="type__id",e.type__name="type__name"}(zi||(zi={})),function(e){e.factory="factory",e.factory__id="factory__id",e.factory__numGauges="factory__numGauges",e.gauge="gauge",e.gauge__addedTimestamp="gauge__addedTimestamp",e.gauge__address="gauge__address",e.gauge__id="gauge__id",e.id="id",e.isKilled="isKilled",e.isPreferentialGauge="isPreferentialGauge",e.pool="pool",e.poolAddress="poolAddress",e.poolId="poolId",e.pool__address="pool__address",e.pool__id="pool__id",e.pool__poolId="pool__poolId",e.relativeWeightCap="relativeWeightCap",e.rewardTokensList="rewardTokensList",e.shares="shares",e.streamer="streamer",e.symbol="symbol",e.tokens="tokens",e.totalSupply="totalSupply"}(Zi||(Zi={})),function(e){e.bias="bias",e.id="id",e.slope="slope",e.timestamp="timestamp",e.user="user",e.user__id="user__id"}(Qi||(Qi={})),function(e){e.bias="bias",e.dstChainId="dstChainId",e.id="id",e.localUser="localUser",e.localUser__id="localUser__id",e.remoteUser="remoteUser",e.slope="slope",e.timestamp="timestamp",e.votingEscrowID="votingEscrowID",e.votingEscrowID__id="votingEscrowID__id",e.votingEscrowID__stakedSupply="votingEscrowID__stakedSupply"}(es||(es={})),function(e){e.asc="asc",e.desc="desc"}(ts||(ts={})),function(e){e.address="address",e.gauges="gauges",e.gaugesList="gaugesList",e.id="id",e.poolId="poolId",e.preferentialGauge="preferentialGauge",e.preferentialGauge__id="preferentialGauge__id",e.preferentialGauge__isKilled="preferentialGauge__isKilled",e.preferentialGauge__isPreferentialGauge="preferentialGauge__isPreferentialGauge",e.preferentialGauge__poolAddress="preferentialGauge__poolAddress",e.preferentialGauge__poolId="preferentialGauge__poolId",e.preferentialGauge__relativeWeightCap="preferentialGauge__relativeWeightCap",e.preferentialGauge__streamer="preferentialGauge__streamer",e.preferentialGauge__symbol="preferentialGauge__symbol",e.preferentialGauge__totalSupply="preferentialGauge__totalSupply"}(as||(as={})),function(e){e.decimals="decimals",e.gauge="gauge",e.gauge__id="gauge__id",e.gauge__isKilled="gauge__isKilled",e.gauge__isPreferentialGauge="gauge__isPreferentialGauge",e.gauge__poolAddress="gauge__poolAddress",e.gauge__poolId="gauge__poolId",e.gauge__relativeWeightCap="gauge__relativeWeightCap",e.gauge__streamer="gauge__streamer",e.gauge__symbol="gauge__symbol",e.gauge__totalSupply="gauge__totalSupply",e.id="id",e.periodFinish="periodFinish",e.rate="rate",e.symbol="symbol",e.totalDeposited="totalDeposited"}(ns||(ns={})),function(e){e.chain="chain",e.factory="factory",e.factory__id="factory__id",e.factory__numGauges="factory__numGauges",e.gauge="gauge",e.gauge__addedTimestamp="gauge__addedTimestamp",e.gauge__address="gauge__address",e.gauge__id="gauge__id",e.id="id",e.isKilled="isKilled",e.recipient="recipient",e.relativeWeightCap="relativeWeightCap"}(os||(os={})),function(e){e.factory="factory",e.factory__id="factory__id",e.factory__numGauges="factory__numGauges",e.gauge="gauge",e.gauge__addedTimestamp="gauge__addedTimestamp",e.gauge__address="gauge__address",e.gauge__id="gauge__id",e.id="id",e.isKilled="isKilled",e.recipient="recipient",e.relativeWeightCap="relativeWeightCap"}(is||(is={})),function(e){e.gaugeShares="gaugeShares",e.gaugeVotes="gaugeVotes",e.id="id",e.omniVotingLocks="omniVotingLocks",e.votingLocks="votingLocks"}(ss||(ss={})),function(e){e.bias="bias",e.id="id",e.lockedBalance="lockedBalance",e.slope="slope",e.timestamp="timestamp",e.unlockTime="unlockTime",e.updatedAt="updatedAt",e.user="user",e.user__id="user__id",e.votingEscrowID="votingEscrowID",e.votingEscrowID__id="votingEscrowID__id",e.votingEscrowID__stakedSupply="votingEscrowID__stakedSupply"}(rs||(rs={})),function(e){e.id="id",e.locks="locks",e.omniLocks="omniLocks",e.stakedSupply="stakedSupply"}(ps||(ps={})),function(e){e.allow="allow",e.deny="deny"}(ds||(ds={}));const ls=gi` + fragment SubgraphGaugeShare on GaugeShare { + id + balance + user { + id + } + gauge { + id + isKilled + poolId + poolAddress + totalSupply + } +} + `,us=gi` + fragment SubgraphLiquidityGauge on LiquidityGauge { + id + symbol + poolAddress + poolId + streamer + factory { + id + numGauges + } + totalSupply + tokens { + id + symbol + decimals + totalDeposited + rate + periodFinish + } +} + `,cs=gi` + fragment SubgraphPoolWithPreferentialGauge on Pool { + id + poolId + preferentialGauge { + ...SubgraphLiquidityGauge + } +} + ${us}`,ys=gi` + query GaugeShare($id: ID!, $block: Block_height) { + gaugeShare(id: $id, block: $block) { + ...SubgraphGaugeShare + } +} + ${ls}`,bs=gi` + query GaugeShares($first: Int, $orderBy: GaugeShare_orderBy, $orderDirection: OrderDirection, $skip: Int, $where: GaugeShare_filter, $block: Block_height) { + gaugeShares( + first: $first + orderBy: $orderBy + orderDirection: $orderDirection + skip: $skip + where: $where + block: $block + ) { + ...SubgraphGaugeShare + } +} + ${ls}`,ms=gi` + query LiquidityGauges($skip: Int, $first: Int, $orderBy: LiquidityGauge_orderBy, $orderDirection: OrderDirection, $where: LiquidityGauge_filter, $block: Block_height) { + liquidityGauges( + skip: $skip + first: $first + orderBy: $orderBy + orderDirection: $orderDirection + where: $where + block: $block + ) { + ...SubgraphLiquidityGauge + } +} + ${us}`,fs=gi` + query Pools($skip: Int, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $where: Pool_filter, $block: Block_height) { + pools( + skip: $skip + first: $first + orderBy: $orderBy + orderDirection: $orderDirection + where: $where + block: $block + ) { + ...SubgraphPoolWithPreferentialGauge + } +} + ${cs}`,Ts=gi` + query PoolGauges($where: Pool_filter, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $skip: Int, $block: Block_height) { + pools( + where: $where + first: $first + orderBy: $orderBy + orderDirection: $orderDirection + skip: $skip + block: $block + ) { + gauges { + id + relativeWeightCap + } + preferentialGauge { + id + } + } +} + `,hs=(e,t,a)=>e();function Is(e){return Hi(new J(e))}function _s(e){return function(e,t=hs){return{GaugeShare:(a,n)=>t((t=>e.request(ys,a,{...n,...t})),"GaugeShare","query"),GaugeShares:(a,n)=>t((t=>e.request(bs,a,{...n,...t})),"GaugeShares","query"),LiquidityGauges:(a,n)=>t((t=>e.request(ms,a,{...n,...t})),"LiquidityGauges","query"),Pools:(a,n)=>t((t=>e.request(fs,a,{...n,...t})),"Pools","query"),PoolGauges:(a,n)=>t((t=>e.request(Ts,a,{...n,...t})),"PoolGauges","query")}}(new J(e))}class gs{constructor(e,a,n={}){this.options=n,this.calls=[],this.paths=[],this.address="0xcA11bde05977b3631167028862bE2a173976CA11",this.interface=new t(e),this.multicall=za.connect(this.address,a)}call(e,t,a,n){return this.calls.push([t,a,n]),this.paths.push(e),this}async execute(e={},t=1024){const a=e;return(await this.executeMulticall(t)).forEach(((e,t)=>g(a,this.paths[t],e.length>1?e:e[0]))),this.calls=[],this.paths=[],a}async executeMulticall(e){const t=Math.ceil(this.calls.length/e),a=[],n=[];for(let a=0;a({target:e,allowFailure:!0,callData:this.interface.encodeFunctionData(t,a)})));n.push(this.multicall.callStatic.aggregate3(t,this.options))}return(await Promise.all(n)).forEach(((t,n)=>{const o=n*e;for(let e=0;e{a.call(`${e}.weights`,t,"getNormalizedWeights")},xs=(e,t,a)=>{a.call(`${e}.targets`,t,"getTargets"),a.call(`${e}.wrappedTokenRate`,t,"getWrappedTokenRate")},Es=(e,t,a)=>{a.call(`${e}.amp`,t,"getAmplificationParameter")},As=(e,t,a)=>{a.call(`${e}.tokenRates`,t,"getTokenRates")},vs=async(e,t,a,n=1024)=>{if(0===e.length)return{};const o=new gs(Ps,a);e.forEach((({id:e,address:a,poolType:n,poolTypeVersion:i})=>{((e,t,a,n,o)=>{o.call(`${e}.poolTokens`,a,"getPoolTokens",[e]),o.call(`${e}.totalShares`,t,(e=>e.includes("Linear")||["StablePhantom"].includes(e)?"getVirtualSupply":"ComposableStable"===e?"getActualSupply":"totalSupply")(n)),o.call(`${e}.swapFee`,t,(e=>"Element"===e?"percentFee":"FX"===e?"protocolPercentFee":"getSwapFeePercentage")(n))})(e,a,t,n,o),((e,t=1)=>{const a=()=>({});switch(e){case"Weighted":case"LiquidityBootstrapping":case"Investment":return ws;case"Stable":case"StablePhantom":case"MetaStable":case"ComposableStable":return Es;case"GyroE":case"Gyro2":return 2===t?As:a;case"AaveLinear":return 1===t?xs:a;default:return a}})(n,i)(e,a,o)}));return await o.execute({},n)};async function Ss(e,t,a,n,o=1024){if(0===e.length)return e;const i=[],s=await vs(e,a,n,o);return e.forEach((e=>{const t=s[e.id];i.push(((e,t)=>({...e,tokens:t.poolTokens?e.tokens.map((a=>{const n=t.poolTokens[0].map((e=>e.toLowerCase())).indexOf(a.address),o=e.wrappedIndex&&e.tokensList[e.wrappedIndex],i=void 0===a.decimals?18:a.decimals;return{...a,balance:l(t.poolTokens[1][n],i),weight:t.weights&&l(t.weights[n],18)||a.weight,priceRate:t.wrappedTokenRate&&o&&o.toLowerCase()===a.address.toLowerCase()&&l(t.wrappedTokenRate,18)||a.priceRate}})):e.tokens,totalShares:t.totalShares?l(t.totalShares,18):e.totalShares,swapFee:t.swapFee?l(t.swapFee,18):e.swapFee,amp:t.amp&&t.amp[0]&&l(t.amp[0],String(t.amp[2]).length-1)||e.amp,lowerTarget:t.targets&&l(t.targets[0],18)||e.lowerTarget,upperTarget:t.targets&&l(t.targets[1],18)||e.upperTarget,tokenRates:t.tokenRates&&t.tokenRates.map((e=>l(e,18)))||e.tokenRates}))(e,t))})),i}class ks{constructor(e,t,a,n,o){this.client=e,this.provider=t,this.network=a,this.sorConfig=n,this.defaultArgs=(null==o?void 0:o.args)||{orderBy:pi.TotalLiquidity,orderDirection:ai.Desc,where:{swapEnabled:{eq:!0},totalShares:{gt:1e-12}}}}async getPools(e){const t=function(e){return e.map((e=>({...e,poolType:e.poolType||"",tokens:(e.tokens||[]).map((e=>({...e,weight:e.weight||null}))),totalWeight:e.totalWeight||void 0,amp:e.amp||void 0,expiryTime:e.expiryTime?P(e.expiryTime):void 0,unitSeconds:e.unitSeconds?P(e.unitSeconds):void 0,principalToken:e.principalToken||void 0,baseToken:e.baseToken||void 0})))}((await this.getSubgraphPools(e)).filter((e=>{if(!this.network.poolsToIgnore)return!0;return-1===this.network.poolsToIgnore.findIndex((t=>t.toLowerCase()===e.id.toLowerCase()))})));if(this.sorConfig&&!1===this.sorConfig.fetchOnChainBalances)return t;const a=Re.getInstance();a.time(`fetching on-chain balances for ${t.length} pools`);const n=await Ss(t,this.network.addresses.contracts.multicall,this.network.addresses.contracts.vault,this.provider,this.network.multicallBatchSize);return a.timeEnd(`fetching on-chain balances for ${t.length} pools`),n}async getSubgraphPools(e){const t=new zt(e||this.defaultArgs).format(new jt);if(t.first){const{pools:e}=await this.client.Pools(t);return e}const{pool0:a,pool1000:n,pool2000:o}=await this.client.AllPools(t);return[...a,...n,...o]}}class Os{constructor(e,t){this.client=e,this.weth=t.toLowerCase()}async getNativeAssetPriceInToken(e){const t=await this.getLatestPriceInEthFromSubgraph(e);if(!t)throw Error("No price found in the subgraph");return""+1/t}async getLatestPriceInEthFromSubgraph(e){e=e.toLowerCase();const{latestPrices:t}=await this.client.TokenLatestPrices({where:{asset_in:[e,this.weth]}}),a=w(t,"id");if(a[`${e}-${this.weth}`])return parseFloat(a[`${e}-${this.weth}`].price);const n=t.filter((t=>t.asset===e));for(const e of n){const t=a[`${e.pricingAsset}-${this.weth}`];if(t)return parseFloat(e.price)*parseFloat(t.price)}return null}}function Ms(e){var t,a;if("number"==typeof e.network){const a=xn[e.network];return{...a,urls:{...a.urls,subgraph:null!==(t=e.customSubgraphUrl)&&void 0!==t?t:a.urls.subgraph},tenderly:e.tenderly}}return{...e.network,urls:{...e.network.urls,subgraph:null!==(a=e.customSubgraphUrl)&&void 0!==a?a:e.network.urls.subgraph},tenderly:e.network.tenderly}}const Cs=["0x00c2a4be503869fa751c2dbcb7156cc970b5a8da000000000000000000000477","0x02d928e68d8f10c0358566152677db51e1e2dc8c00000000000000000000051e","0x04248aabca09e9a1a3d5129a7ba05b7f17de768400000000000000000000050e","0x05513ca725b6ce035ca2641075474eb469f05f4c00020000000000000000041f","0x0a0fb4ff697de5ac5b6770cd8ee1b72af80b57cf000000000000000000000496","0x0afbd58beca09545e4fb67772faf3858e610bcd00000000000000000000004b9","0x0d05aac44ac7dd3c7ba5d50be93eb884a057d23400000000000000000000051c","0x11839d635e2f0270da37e8ef4324d4d5d54329570002000000000000000004d8","0x126e7643235ec0ab9c103c507642dc3f4ca23c66000000000000000000000468","0x133d241f225750d2c92948e464a5a80111920331000000000000000000000476","0x159cb00338fb63f263fd6f621df619cef71da9540000000000000000000004d5","0x173063a30e095313eee39411f07e95a8a806014e0002000000000000000003ab","0x1bd2f176a812e312077bca87e37c08432bb09f3e0000000000000000000005a1","0x20b156776114e8a801e9767d90c6ccccc8adf398000000000000000000000499","0x246ffb4d928e394a02e45761fecdba6c2e79b8eb000000000000000000000541","0x25accb7943fd73dda5e23ba6329085a3c24bfb6a000200000000000000000387","0x26c2b83fc8535deead276f5cc3ad9c1a2192e02700020000000000000000056b","0x2b218683178d029bab6c9789b1073aa6c96e517600000000000000000000058c","0x2ba7aa2213fa2c909cd9e46fed5a0059542b36b00000000000000000000003a3","0x2bbf681cc4eb09218bee85ea2a5d3d13fa40fc0c0000000000000000000000fd","0x2e52c64fd319e380cdbcfc4577ea1fda558a32e40002000000000000000005ba","0x2f4eb100552ef93840d5adc30560e5513dfffacb000000000000000000000334","0x2ff1a9dbdacd55297452cfd8a4d94724bc22a5f7000000000000000000000484","0x3035917be42af437cbdd774be26b9ec90a2bd677000200000000000000000543","0x331d50e0b00fc1c32742f151e56b9b616227e23e00000000000000000000047c","0x334c96d792e4b26b841d28f53235281cec1be1f200020000000000000000038a","0x335d1709d4da9aca59d16328db5cd4ea66bfe06b0000000000000000000004d6","0x395d8a1d9ad82b5abe558f8abbfe183b27138af40000000000000000000004e5","0x3bb22fc9033b802f2ac47c18885f63476f158afc000000000000000000000483","0x3c640f0d3036ad85afa2d5a9e32be651657b874f00000000000000000000046b","0x3cdae4f12a67ba563499e102f309c73213cb241c000000000000000000000335","0x3dbb8d974b82e82ce79c20c0f5995f4f1f533ede000000000000000000000470","0x3f7a7fd7f214be45ec26820fd01ac3be4fc75aa70002000000000000000004c5","0x3fcb7085b8f2f473f80bf6d879cae99ea4de934400000000000000000000056d","0x41503c9d499ddbd1dcdf818a1b05e9774203bf46000000000000000000000594","0x4228290ee9cab692938ff0b4ba303fbcdb68e9f200020000000000000000057d","0x454ed96955d04d2f5cdd05e0fd1c77975bfe5307000000000000000000000410","0x481c5fc05d63a58aa2f0f2aa417c021b5d419cb200000000000000000000056a","0x483006684f422a9448023b2382615c57c5ecf18f000000000000000000000488","0x4a82b580365cff9b146281ab72500957a849abdc000000000000000000000494","0x4c81255cc9ed7062180ea99962fe05ac0d57350b0000000000000000000005a3","0x4c8d2e60863e8d7e1033eda2b3d84e92a641802000000000000000000000040f","0x4cbde5c4b4b53ebe4af4adb85404725985406163000000000000000000000595","0x4ce0bd7debf13434d3ae127430e9bd4291bfb61f00020000000000000000038b","0x4ce277df0feb5b4d07a0ca2adcf5326e4005239d000000000000000000000518","0x4fd4687ec38220f805b6363c3c1e52d0df3b5023000200000000000000000473","0x4fd63966879300cafafbb35d157dc5229278ed230000000000000000000000e9","0x50cf90b954958480b8df7958a9e965752f62712400000000000000000000046f","0x53bc3cba3832ebecbfa002c12023f8ab1aa3a3a0000000000000000000000411","0x5a6a8cffb4347ff7fc484bf5f0f8a2e234d34255000200000000000000000275","0x5b3240b6be3e7487d61cd1afdfc7fe4fa1d81e6400000000000000000000037b","0x60683b05e9a39e3509d8fdb9c959f23170f8a0fa000000000000000000000489","0x60d604890feaa0b5460b28a424407c24fe89374a0000000000000000000004fc","0x639883476960a23b38579acfd7d71561a0f408cf000200000000000000000505","0x652d486b80c461c397b0d95612a404da936f3db30000000000000000000000e7","0x6667c6fa9f2b3fc1cc8d85320b62703d938e43850000000000000000000004fb","0x6a1eb2e9b45e772f55bd9a34659a04b6f75da68700000000000000000000040d","0x6c56e72c551b5ac4bf54a620a76077ca768c8fe40002000000000000000004da","0x70b7d3b3209a59fb0400e17f67f3ee8c37363f4900020000000000000000018f","0x7337224d59cb16c2dc6938cd45a7b2c60c865d6a0000000000000000000004d4","0x74cbfaf94a3577c539a9dcee9870a6349a33b34f000000000000000000000534","0x779d01f939d78a918a3de18cc236ee89221dfd4e0000000000000000000004c7","0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe","0x804cdb9116a10bb78768d3252355a1b18067bf8f0000000000000000000000fb","0x813e3fe1761f714c502d1d2d3a7cceb33f37f59d00000000000000000000040c","0x82698aecc9e28e9bb27608bd52cf57f704bd1b83000000000000000000000336","0x8a6b25e33b12d1bb6929a8793961076bd1f9d3eb0002000000000000000003e8","0x8e6ec57a822c2f527f2df7c7d7d361df3e7530a1000000000000000000000498","0x8f4063446f5011bc1c9f79a819efe87776f23704000000000000000000000197","0x9001cbbd96f54a658ff4e6e65ab564ded76a543100000000000000000000050a","0x9210f1204b5a24742eba12f710636d76240df3d00000000000000000000000fc","0x9516a2d25958edb8da246a320f2c7d94a0dbe25d000000000000000000000519","0x959216bb492b2efa72b15b7aacea5b5c984c3cca000200000000000000000472","0x968024662b9566b42d78af23a0f441bc8723fa83000200000000000000000418","0x99c88ad7dc566616548adde8ed3effa730eb6c3400000000000000000000049a","0x9b1c8407a360443a9e5eca004713e4088fab8ac0000000000000000000000497","0x9b692f571b256140a39a34676bffa30634c586e100000000000000000000059d","0x9d7f992c900fbea0ec314bdd71b7cc1becf76a33000200000000000000000573","0x9fb771d530b0ceba5160f7bfe2dd1e8b8aa1340300000000000000000000040e","0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d","0xa1697f9af0875b63ddc472d6eebada8c1fab85680000000000000000000004f9","0xa3823e50f20982656557a4a6a9c06ba5467ae9080000000000000000000000e6","0xa718042e5622099e5f0ace4e7122058ab39e1bbe000200000000000000000475","0xa8b103a10a94f4f2d7ed2fdcd5545e807557330700000000000000000000048e","0xac5b4ef7ede2f2843a704e96dcaa637f4ba3dc3f00000000000000000000051d","0xac976bb42cb0c85635644e8c7c74d0e0286aa61c0000000000000000000003cb","0xae37d54ae477268b9997d4161b96b8200755935c000000000000000000000337","0xae8535c23afedda9304b03c68a3563b75fc8f92b0000000000000000000005a0","0xb0f75e97a114a4eb4a425edc48990e6760726709000000000000000000000198","0xb5e3de837f869b0248825e0175da73d4e8c3db6b000200000000000000000474","0xb841b062ea8ccf5c4cb78032e91de4ae875560420002000000000000000005b7","0xb9bd68a77ccf8314c0dfe51bc291c77590c4e9e6000200000000000000000385","0xbb6881874825e60e1160416d6c426eae65f2459e000000000000000000000592","0xbc0f2372008005471874e426e86ccfae7b4de79d000000000000000000000485","0xbf2ef8bdc2fc0f3203b3a01778e3ec5009aeef3300000000000000000000058d","0xbfa413a2ff0f20456d57b643746133f54bfe0cd20000000000000000000004c3","0xc2b021133d1b0cf07dba696fd5dd89338428225b000000000000000000000598","0xc443c15033fcb6cf72cc24f1bda0db070ddd9786000000000000000000000593","0xc50d4347209f285247bda8a09fc1c12ce42031c3000000000000000000000590","0xc5dc1316ab670a2eed5716d7f19ced321191f38200000000000000000000056e","0xc8c79fcd0e859e7ec81118e91ce8e4379a481ee6000000000000000000000196","0xcaa052584b462198a5a9356c28bce0634d65f65c0000000000000000000004db","0xcbfa4532d8b2ade2c261d3dd5ef2a2284f7926920000000000000000000004fa","0xcfae6e251369467f465f13836ac8135bd42f8a56000000000000000000000591","0xd4e7c1f3da1144c9e2cfd1b015eda7652b4a439900000000000000000000046a","0xd6e355036f41dc261b3f1ed3bbc6003e87aadb4f000000000000000000000495","0xd7edb56f63b2a0191742aea32df1f98ca81ed9c600000000000000000000058e","0xd997f35c9b1281b82c8928039d14cddab5e13c2000000000000000000000019c","0xdba274b4d04097b90a72b62467d828cefd708037000000000000000000000486","0xdc063deafce952160ec112fa382ac206305657e60000000000000000000004c4","0xdec02e6642e2c999af429f5ce944653cad15e093000000000000000000000469","0xe03af00fabe8401560c1ff7d242d622a5b601573000000000000000000000493","0xe0fcbf4d98f0ad982db260f86cf28b49845403c5000000000000000000000504","0xe2d16b0a39f3fbb4389a0e8f1efcbecfb3d1e6e10000000000000000000005a7","0xe4dc3c1998ac693d68f4c77476d7c815694c3e94000200000000000000000416","0xe6bcc79f328eec93d4ec8f7ed35534d9ab549faa0000000000000000000000e8","0xe8c56405bc405840154d9b572927f4197d110de10000000000000000000005a4","0xeb486af868aeb3b6e53066abc9623b1041b42bc000000000000000000000046c","0xeb567dde03f3da7fe185bdacd5ab495ab220769d000000000000000000000548","0xec3626fee40ef95e7c0cbb1d495c8b67b34d398300000000000000000000053d","0xf22ff21e17157340575158ad7394e068048dd98b0000000000000000000004b8","0xf57c794f42da72b38c8f610ff3b5e8502e48cbde00000000000000000000055c","0xf71d0774b214c4cf51e33eb3d30ef98132e4dbaa00000000000000000000046e","0xfa24a90a3f2bbe5feea92b95cd0d14ce709649f900000000000000000000058f","0xfd11ccdbdb7ab91cb9427a6d6bf570c95876d1950000000000000000000004c2","0xfebb0bbf162e64fb9d0dfe186e517d84c395f016000000000000000000000502","0xfef969638c52899f91781f1be594af6f40b99bad00000000000000000000047b","0x02e139d53ebf4033bf78ab66c6a1e7f1f204487f0002000000000000000009f9","0x03090a9811181a2afe830a3a0b467698ccf3a8b1000000000000000000000bf5","0x0320c1c5b6df19a194d48882aaec1c72940081d9000000000000000000000a7d","0x04b54ea92d73de2d62d651db7d9778f0c49157d8000200000000000000000ba2","0x0503dd6b2d3dd463c9bef67fb5156870af63393e00000000000000000000042e","0x0889b240a5876aae745ac19f1771853671dc5d36000000000000000000000b3f","0x0bc54e914f53f98d16035f4f0d948f3e09c2fac0000200000000000000000bac","0x0c06e87c7b88d998f645b91c1f53b51294b12bca000100000000000000000bb9","0x10b040038f87219d9b42e025e3bd9b8095c87dd9000000000000000000000b11","0x117a3d474976274b37b7b94af5dcade5c90c6e85000000000000000000000aca","0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000a5f","0x1379b816b9be611431d693290289c204720ca56d000100000000000000000b6f","0x150e7b885bdfce974f2abe88a72fdbd692175c6f0002000000000000000009fd","0x178e029173417b1f9c8bc16dcec6f697bc323746000000000000000000000758","0x1aafc31091d93c3ff003cff5d2d8f7ba2e7284250000000000000000000003b3","0x216690738aac4aa0c4770253ca26a28f0115c595000000000000000000000b2c","0x216d6db0c28204014618482c369d7fbf0a8f3232000100000000000000000b60","0x230ecdb2a7cee56d6889965a023aa0473d6da507000000000000000000000bf3","0x252ff6a3a6fd7b5e8e999de8e3f5c3b306ed1401000200000000000000000bec","0x25e57f4612912614e6c99616bd2abb9b5ae71e99000000000000000000000bf0","0x2645b13fd2c5295296e94a76280b968bdcbbdfed000000000000000000000c11","0x284eb68520c8fa83361c1a3a5910aec7f873c18b000000000000000000000ac9","0x2c8dbe8eb86135d9f2f26d196748c088d47f73e7000200000000000000000a29","0x31bccf9e28b94e5dacebaa67fe8bc1603cecd904000000000000000000000a01","0x341068a547c3cde3c09e338714010dd01b32f93f000200000000000000000a34","0x3db543faf7a92052de7860c5c9debabee59ed5bd000000000000000000000a62","0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd00000000000000000000070d","0x3efb91c4f9b103ee45885695c67794591916f34e000200000000000000000b43","0x402cfdb7781fa85d52f425352661128250b79e12000000000000000000000be3","0x43894de14462b421372bcfe445fa51b1b4a0ff3d000000000000000000000b36","0x4739e50b59b552d490d3fdc60d200977a38510c0000000000000000000000b10","0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b","0x4a0b73f0d13ff6d43e304a174697e3d5cfd310a400020000000000000000091c","0x4a77ef015ddcd972fd9ba2c7d5d658689d090f1a000000000000000000000b38","0x4ae3661afa119892f0cc8c43edaf6a94989ac171000000000000000000000c06","0x4ccb966d8246240afb7a1a24628efb930870b1c40002000000000000000009fc","0x52cc8389c6b93d740325729cc7c958066cee4262000000000000000000000b0f","0x5b77107fcdf2b41903bab2bc555d4fc14cf7667d000000000000000000000b32","0x5bae72b75caab1f260d21bc028c630140607d6e8000000000000000000000ac6","0x600bd01b6526611079e12e1ff93aba7a3e34226f0000000000000000000009e4","0x63ce19ccd39930725b8a3d2733627804718ab83d000000000000000000000bf2","0x64efad69f099813021b41f4cac6e749fd55e188f000000000000000000000b39","0x6933ec1ca55c06a894107860c92acdfd2dd8512f000000000000000000000428","0x6abe4e7a497b8293c258389c1b00d177e4f257ed00010000000000000000080d","0x6c8c7fc50247a47038015eb1fd5dc105d05dafba000200000000000000000ba0","0x7079a25dec33be61bbd81b2fb69b468e80d3e72c0000000000000000000009ff","0x71bd10c2a590b5858f5576550c163976a48af906000000000000000000000b27","0x7c82a23b4c48d796dee36a9ca215b641c6a8709d000000000000000000000acd","0x7f4f4942f2a14b6ab7b08b10ada1aacede4ee8d4000200000000000000000b44","0x86aef31951e0a3a54333bd9e72f9a95587d058c5000200000000000000000912","0x882c7a84231484b3e9f3fd45ac04b1eb5d35b076000200000000000000000a91","0x894c82800526e0391e709c0983a5aea3718b7f6d000000000000000000000ac5","0x89b28a9494589b09dbccb69911c189f74fdadc5a000000000000000000000b33","0x89bb15076c9f2d86aa98ec6cffc1a71e31c38953000000000000000000000bf1","0x89f1146fee52b5d9166e9c83cc388b6d8f69f1380001000000000000000009e7","0x8a819a4cabd6efcb4e5504fe8679a1abd831dd8f00000000000000000000042d","0x8b58a1e7fff52001c22386c2918d45938a6a9be30001000000000000000008d9","0x8b8225bfedebaf1708c55743acb4ad43fd4d0f21000200000000000000000918","0x8fbd0f8e490735cfc3abf4f29cbddd5c3289b9a7000000000000000000000b5b","0x8fd39252d683fdb60bddd4df4b53c9380b496d59000200000000000000000b45","0x9321e2250767d79bab5aa06daa8606a2b3b7b4c5000000000000000000000bf4","0x949a12b95ec5b80c375b98963a5d6b33b0d0efff0002000000000000000009fe","0x9a020bdc2faff5bd24c6acc2020d01ff9f2c627a000000000000000000000ae2","0x9cf9358300e34bf9373d30129a1e718d8d058b54000200000000000000000913","0x9e34631547adcf2f8cefa0f5f223955c7b137571000000000000000000000ad5","0xa5a935833f6a5312715f182733eab088452335d7000100000000000000000bee","0xa5fe91dde37d8bf2dacacc0168b115d28ed03f84000000000000000000000b35","0xa8bf1c584519be0184311c48adbdc4c15cb2e8c1000000000000000000000bf6","0xab269164a10fab22bc87c39946da06c870b172d6000000000000000000000bfc","0xac2cae8d2f78a4a8f92f20dbe74042cd0a8d5af3000000000000000000000be2","0xae646817e458c0be890b81e8d880206710e3c44e000000000000000000000acb","0xaef2c171dbe64b0c18977e16e70bfd29d4ee0256000000000000000000000ac8","0xb0c830dceb4ef55a60192472c20c8bf19df03488000000000000000000000be1","0xb266ac3b7c98d7bcb28731dac0ef42dba1b276be000000000000000000000be4","0xb371aa09f5a110ab69b39a84b5469d29f9b22b76000000000000000000000b37","0xb3d658d5b95bf04e2932370dd1ff976fe18dd66a000000000000000000000ace","0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e","0xb59be8f3c85a9dd6e2899103b6fbf6ea405b99a4000000000000000000000b34","0xb878ecce26838fbba4f78cb5b791a0e09152c067000000000000000000000427","0xb973ca96a3f0d61045f53255e319aedb6ed4924000000000000000000000042f","0xbd4e35784c832d0f9049b54cb3609e5907c5b495000100000000000000000b14","0xc55ec796a4debe625d95436a3531f4950b11bdcf000000000000000000000b3e","0xc7e6389e364f4275eb442ef215ed21877028e2af000000000000000000000ac7","0xc83b55bbd005f1f84906545fcdb145dee53523e0000200000000000000000b30","0xcb21a9e647c95127ed784626485b3104cb28d0e7000000000000000000000425","0xd00f9ca46ce0e4a63067c4657986f0167b0de1e5000000000000000000000b42","0xd2f3b9e67c69762dd1c88f1d3dadd1649a190761000200000000000000000bf7","0xd4accb350f9cf59fe3cf7a5ee6ed9ace6a568ea9000200000000000000000b75","0xda1cd1711743e57dd57102e9e61b75f3587703da000000000000000000000acc","0xdae301690004946424e41051ace1791083be42a1000000000000000000000b40","0xde0a77ab6689b980c30306b10f9131a007e1af81000200000000000000000ba1","0xe051605a83deae38d26a7346b100ef1ac2ef8a0b0000000000000000000003ce","0xe1fb90d0d3b47e551d494d7ebe8f209753526b01000000000000000000000ac4","0xe2272cddb2cc408e79e02a73d1db9acc24a843d5000200000000000000000ba7","0xe2dc0e0f2c358d6e31836dee69a558ab8d1390e70000000000000000000009fa","0xe4885ed2818cc9e840a25f94f9b2a28169d1aea7000000000000000000000b29","0xe6909c2f18a29d97217a6146f045e1780606991f000100000000000000000bfe","0xe78b25c06db117fdf8f98583cdaaa6c92b79e917000000000000000000000b2b","0xea11645ac7d8f2def94c9d8d86bd766296c9b6b6000000000000000000000b3a","0xeb480dbbdd921cd6c359e4cc4c65ddea6395e2a1000200000000000000000946","0xed35f28f837e96f81240ebb82e0e3f518c7e8a2f000100000000000000000bb5","0xf0211cceebe6fcc45052b4e57ee95d233f5669d2000100000000000000000c01","0xf22a66046b5307842f21b311ecb4c462c24c0635000000000000000000000b15","0xf28f17be00f8ca3c9b7f66a4aad5513757fb3341000200000000000000000b5a","0xf42ed61450458ee4620f5ef4f29adb25a6ef0fb6000000000000000000000bf8","0xf48f01dcb2cbb3ee1f6aab0e742c2d3941039d56000000000000000000000445","0xf93579002dbe8046c43fefe86ec78b1112247bb8000000000000000000000759","0xf984eb2b8a7ef780245a797a2fccd82f346409ca000000000000000000000a59","0xfa2c0bd8327c99db5bde4c9e9e5cbf30946351bb000000000000000000000948","0xff4ce5aaab5a627bf82f4a571ab1ce94aa365ea600000000000000000000075a","0x1ac55c31dac78ca943cb8ebfca5945ce09e036e2000000000000000000000024","0x225e0047671939a8d78e08ebd692788abe63f15c000000000000000000000009","0x41211bba6d37f5a74b22e667533f080c7c7f3f1300000000000000000000000b","0x4de21b365d6543661d0e105e579a34b963862497000200000000000000000045","0x581ec1f5e7ced12b186deae32256adb53bdd5b08000000000000000000000001","0x66f33ae36dd80327744207a48122f874634b3ada000100000000000000000013","0xa3ed6f78edc29f69df8a0d16b1d1ccf9871f918c000000000000000000000032","0xa611a551b95b205ccd9490657acf7899daee5db700000000000000000000002e","0xb95829adbacd8af89e291dee78bc09e24de51d6b000000000000000000000043","0xb973ca96a3f0d61045f53255e319aedb6ed49240000200000000000000000011","0xba1a5b19d09a79dada039b1f974015c5a989d5fd000100000000000000000046","0xbb9cd48d33033f5effbedec9dd700c7d7e1dcf5000000000000000000000000e","0xd16f72b02da5f51231fde542a8b9e2777a478c8800000000000000000000000f","0xd4015683b8153666190e0b2bec352580ebc4caca00000000000000000000000d","0xe15cac1df3621e001f76210ab12a7f1a1691481f000000000000000000000044","0xe7f88d7d4ef2eb18fcf9dd7216ba7da1c46f3dd600000000000000000000000a","0xf48f01dcb2cbb3ee1f6aab0e742c2d3941039d56000200000000000000000012","0xfedb19ec000d38d92af4b21436870f115db22725000000000000000000000010","0xffff76a3280e95dc855696111c2562da09db2ac000000000000000000000000c","0x00fcd3d55085e998e291a0005cedecf58ac14c4000020000000000000000047f","0x077794c30afeccdf5ad2abc0588e8cee7197b71a000000000000000000000352","0x117a3d474976274b37b7b94af5dcade5c90c6e85000000000000000000000381","0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000353","0x19b1c92631405a0a9495ccba0becf4f2e8e908bd000000000000000000000410","0x1e550b7764da9638fdd32c8a701364de31f45ee800000000000000000000047c","0x1fa7f727934226aedab636d62a084931b97d366b000000000000000000000411","0x23ca0306b21ea71552b148cf3c4db4fc85ae19290000000000000000000000c9","0x284eb68520c8fa83361c1a3a5910aec7f873c18b000000000000000000000380","0x2a96254ca32020b20ed3506f8f75318da24709f9000200000000000000000456","0x36942963e3b6f37ecc45a4e72349558514233f0000000000000000000000048a","0x3f53a862919ccfa023cb6ace91378a79fb0f6bf500000000000000000000040f","0x40af308e3d07ec769d85eb80afb116525ff4ac99000000000000000000000485","0x418de00ae109e6f874d872658767866d680eaa1900000000000000000000047d","0x45c4d1376943ab28802b995acffc04903eb5223f000000000000000000000470","0x4689122d360c4725d244c5cfea22861333d862e6000100000000000000000468","0x4739e50b59b552d490d3fdc60d200977a38510c0000000000000000000000409","0x49a0e3334496442a9706e481617724e7e37eaa080000000000000000000003ff","0x519cce718fcd11ac09194cff4517f12d263be067000000000000000000000382","0x52cc8389c6b93d740325729cc7c958066cee4262000000000000000000000408","0x567ecfcb22205d279bb8eed3e066989902bf03d5000000000000000000000452","0x585d95df0231fa08aeee35ff0c16b92fd0ecdc3300020000000000000000045f","0x5a7f39435fd9c381e4932fa2047c9a5136a5e3e7000000000000000000000400","0x5bae72b75caab1f260d21bc028c630140607d6e8000000000000000000000350","0x6cb787a419c3e6ee2e9ff365856c29cd10659113000000000000000000000474","0x7c82a23b4c48d796dee36a9ca215b641c6a8709d000000000000000000000406","0x81fc12c60ee5b753cf5fd0adc342dfb5f3817e3200000000000000000000035d","0x894c82800526e0391e709c0983a5aea3718b7f6d00000000000000000000034f","0x970712708a08e8fb152be4d81b2dc586923f5369000200000000000000000479","0x9bf7c3b63c77b4b4f2717776f15a4bec1b532a280000000000000000000000c8","0x9cebf13bb702f253abf1579294694a1edad00eaa000000000000000000000486","0x9e34631547adcf2f8cefa0f5f223955c7b137571000000000000000000000407","0x9fb7d6dcac7b6aa20108bad226c35b85a9e31b63000200000000000000000412","0xa1ea76c42b2938cfa9abea12357881006c52851300000000000000000000048f","0xa50f89e9f439fde2a6fe05883721a00475da3c4500000000000000000000048b","0xa612b6aed2e7ca1a3a4f23fbca9128461bbb7718000000000000000000000274","0xa8af146d79ac0bb981e4e0d8b788ec5711b1d5d000000000000000000000047b","0xad28940024117b442a9efb6d0f25c8b59e1c950b00000000000000000000046f","0xae646817e458c0be890b81e8d880206710e3c44e00000000000000000000039d","0xaef2c171dbe64b0c18977e16e70bfd29d4ee0256000000000000000000000351","0xbbf9d705b75f408cfcaee91da32966124d2c6f7d00000000000000000000047e","0xbd724eb087d4cc0f61a5fed1fffaf937937e14de000000000000000000000473","0xbe0f30217be1e981add883848d0773a86d2d2cd4000000000000000000000471","0xc46be4b8bb6b5a3d3120660efae9c5416318ed40000000000000000000000472","0xc69771058481551261709d8db44977e9afde645000010000000000000000042a","0xc6eee8cb7643ec2f05f46d569e9ec8ef8b41b389000000000000000000000475","0xcba9ff45cfb9ce238afde32b0148eb82cbe635620000000000000000000003fd","0xcf8b555b7754556cf2ac2165e77ee23ed8517d7900020000000000000000045e","0xd0dc20e6342db2de82692b8dc842301ff9121805000200000000000000000454","0xd3d5d45f4edf82ba0dfaf061d230766032a10e07000200000000000000000413","0xd6d20527c7b0669989ee082b9d3a1c63af742290000000000000000000000483","0xda1cd1711743e57dd57102e9e61b75f3587703da0000000000000000000003fc","0xe1fb90d0d3b47e551d494d7ebe8f209753526b0100000000000000000000034e","0xee02583596aee94cccb7e8ccd3921d955f17982a00000000000000000000040a","0xf984eb2b8a7ef780245a797a2fccd82f346409ca00000000000000000000034d","0xff8f84e8c87532af96aef5582ee451572233678b000200000000000000000478","0x054e7b0c73e1ee5aed6864fa511658fc2b54bcaa000000000000000000000015","0x3f1a2c4a3a751f6626bd90ef16e104f0772d4d6b00020000000000000000001b","0x7275c131b1f67e8b53b4691f92b0e35a4c1c6e22000000000000000000000010","0xa154009870e9b6431305f19b09f9cfd7284d4e7a000000000000000000000013","0xa1d14d922a575232066520eda11e27760946c991000000000000000000000012","0xa826a114b0c7db4d1ff4a4be845a78998c64564c000000000000000000000008","0xea67626e1f0b59e0d172a04f5702ef90bcdf440c00000000000000000000000f","0xeb496161099d45b3ea4892408ef745c6182eb56e00000000000000000000000e","0xece571847897fd61e764d455dc15cf1cd9de8d6f000000000000000000000014","0xed3e2f496cbcd8e212192fb8d1499842f04a0d19000000000000000000000009","0x02c9dcb975262719a61f9b40bdf0987ead9add3a000000000000000000000006","0x16c9a4d841e88e52b51936106010f27085a529ec00000000000000000000000c","0x32be2d0ddeaf3333501b24a28668ce373ba8e763000200000000000000000014","0x32f03464fdf909fdf3798f87ff3712b10c59bd86000000000000000000000005","0x4b718e0e2fea1da68b763cd50c446fba03ceb2ea00000000000000000000000b","0x68a69c596b3839023c0e08d09682314f582314e5000200000000000000000011","0x6f34a44fce1506352a171232163e7716dd073ade000200000000000000000015","0x9e2d87f904862671eb49cb358e74284762cc9f42000200000000000000000013","0xac4b72c01072a52b73ca71105504f1372efcce0d000000000000000000000003","0xbfd65c6160cfd638a85c645e6e6d8acac5dac935000000000000000000000004","0xe274c9deb6ed34cfe4130f8d0a8a948dea5bb28600000000000000000000000d"];class Fs{constructor(e){this.chainId=e,this.balancerApiUrl="https://api-v3.balancer.fi/",this.tokenPriceQuery=X` + query queryTokenPrices($chainKey: GqlChain!) { + tokenGetCurrentPrices(chains: [$chainKey]) { + address + price + } + } + `,this.chainKey=Pe[e]}async getNativeAssetPriceInToken(e){const{tokenGetCurrentPrices:t}=await Y(this.balancerApiUrl,this.tokenPriceQuery,{chainKey:this.chainKey}),a=t.find((({address:t})=>t.toLowerCase()===e.toLowerCase()));if(!a)throw new Error("Token Price not found in the API");const n=t.find((({address:e})=>e.toLowerCase()===Bs[this.chainKey]));if(!n)throw new Error("Native Token Price not found in the API");const o=a.price/n.price;return String(o)}}var Bs;function Rs(e=!0){return e?"https://api.coingecko.com/api/v3/":"https://pro-api.coingecko.com/api/v3/"}function Ns(e=!0){return e?"x-cg-demo-api-key":"x-cg-pro-api-key"}!function(e){e.MAINNET="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.POLYGON="0x0000000000000000000000000000000000001010",e.ARBITRUM="0x912ce59144191c1204e64559fe8253a0e49e6548",e.AVALANCHE="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.BASE="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.FANTOM="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.GNOSIS="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.OPTIMISM="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.ZKEVM="0xa2036f0538221a77a3937f1379699f44945018d0"}(Bs||(Bs={}));class Ls{constructor(e,t){this.chainId=e,this.urlBase=`${Rs(null==t?void 0:t.isDemoApiKey)}simple/token_price/${this.platformId}?vs_currencies=${this.nativeAssetId}`,this.coingeckoApiKeyHeaderName=Ns(null==t?void 0:t.isDemoApiKey),this.apiKey=t.coingeckoApiKey}async getNativeAssetPriceInToken(e){const t=await this.getTokenPriceInNativeAsset(e);return""+1/parseFloat(t)}async getTokenPriceInNativeAsset(e){var t;const a=`${this.urlBase}&contract_addresses=${e}`,{data:n}=await z.get(a,{headers:{Accept:"application/json","Content-Type":"application/json",[this.coingeckoApiKeyHeaderName]:null!==(t=this.apiKey)&&void 0!==t?t:""}});if(void 0===n[e.toLowerCase()]||void 0===n[e.toLowerCase()][this.nativeAssetId])throw Error("No price returned from Coingecko");return n[e.toLowerCase()][this.nativeAssetId]}get platformId(){return xn[this.chainId].thirdParty.coingecko.platformId||"2"}get nativeAssetId(){return xn[this.chainId].thirdParty.coingecko.nativeAssetId||""}}class Ds extends q{constructor(e){const t=Ms(e),a=Ds.getSorConfig(e),n=Ds.getSorNetworkConfig(t),o=new K(e.rpcUrl,e.network),i=Is(t.urls.subgraph);super(o,n,Ds.getPoolDataService(t,a,o,i),Ds.getTokenPriceService(t,a,i,e.coingecko))}static getSorConfig(e){return{tokenPriceService:"api",poolDataService:"subgraph",fetchOnChainBalances:!0,...e.sor}}static getSorNetworkConfig(e){var t;return{...e,vault:e.addresses.contracts.vault,weth:e.addresses.tokens.wrappedNativeAsset,lbpRaisingTokens:null===(t=e.addresses.tokens)||void 0===t?void 0:t.lbpRaisingTokens,wETHwstETH:e.pools.wETHwstETH,connectingTokens:e.sorConnectingTokens,triPathMidPoolIds:e.sorTriPathMidPoolIds}}static getPoolDataService(e,t,a,n){var o;const i=[...null!==(o=e.poolsToIgnore)&&void 0!==o?o:[],...Cs];return"object"==typeof t.poolDataService?t.poolDataService:new ks(n,a,{...e,poolsToIgnore:i},t)}static getTokenPriceService(e,t,a,n){return"coingecko"===t.tokenPriceService&&n?new Ls(e.chainId,n):"object"==typeof t.tokenPriceService?t.tokenPriceService:"subgraph"===t.tokenPriceService?new Os(a,e.addresses.tokens.wrappedNativeAsset):new Fs(e.chainId)}}function Us(e){if(e.poolIds.length>2)throw new Error("Simple flash swap only supports a maximum of two pools");if(e.assets.length>2)throw new Error("Simple flash swap only supports a maximum of to two assets (tokens)")}function Vs(e,t){return[{poolId:e[0],assetInIndex:0,assetOutIndex:1,amount:t,userData:"0x"},{poolId:e[1],assetInIndex:1,assetOutIndex:0,amount:"0",userData:"0x"}]}function qs(e){return-1*Number(e)}function Gs(e){return x(e)}const Ws={"0xae7ab96520de3a18e5e111b5eaab095312d7fe84":"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0","0xd46ba6d942050d489dbd938a2c909a5d5039a161":"0xedb171c18ce90b633db442f2a6f72874093b49ef","0x1e6bb68acec8fefbd87d192be09bb274170a0548":"0xF03387d8d0FF326ab586A58E0ab4121d106147DF"};function $s(e){let t=e;return Ws.hasOwnProperty(e)&&(t=Ws[e]),t}var Hs;function Ks(e,t,a){const{tokens:n,contracts:o}=En(a);let i={id:Hs.vault,address:o.vault};return n.stETH&&o.lidoRelayer&&[e,t].includes(n.stETH)&&(i={id:Hs.lido,address:o.lidoRelayer}),i}function Js(e){return e.id===Hs.lido?ma.abi.filter((e=>"function"===e.type&&e.name&&["swap","batchSwap"].includes(e.name))):nn.abi.filter((e=>"function"===e.type&&e.name&&["swap","batchSwap"].includes(e.name)))}function Xs(e){return{amount:e,max:t=>e.mul(1e4+t).div(1e4),min:t=>e.mul(1e4-t).div(1e4)}}function Ys(e,t){const a=t===In.SwapExactIn?e.swapAmount:e.returnAmount,n=t===In.SwapExactIn?e.returnAmount:e.swapAmount,o=t===In.SwapExactIn?e.swapAmountForSwaps||e.swapAmount:e.returnAmountFromSwaps||e.returnAmount,i=t===In.SwapExactIn?e.returnAmountFromSwaps||e.returnAmount:e.swapAmountForSwaps||e.swapAmount,s=$s(e.tokenIn),r=$s(e.tokenOut);return{...e,amountIn:a,amountOut:n,amountInForLimits:Xs(o),amountOutForLimits:Xs(i),tokenInForSwaps:s,tokenOutFromSwaps:r}}!function(e){e[e.vault=1]="vault",e[e.lido=2]="lido"}(Hs||(Hs={}));class js{constructor(e,t,a){this.kind=t,this.chainId=a,this.functionName="swap",this.swapInfo=Ys(e,t),this.relayer=Ks(this.swapInfo.tokenIn,this.swapInfo.tokenOut,this.chainId)}setFunds(e,t){this.funds={sender:e,recipient:t||e,fromInternalBalance:!1,toInternalBalance:!1}}setDeadline(e){this.deadline=e}get amount(){return this.kind===In.SwapExactOut?this.swapInfo.amountOutForLimits.amount:this.swapInfo.amountInForLimits.amount}setLimits(e){this.limit=this.kind===In.SwapExactIn?this.swapInfo.amountOutForLimits.min(e).toString():this.swapInfo.amountInForLimits.max(e).toString()}get singleSwap(){return{poolId:this.swapInfo.swaps[0].poolId,kind:this.kind,assetIn:this.swapInfo.tokenInForSwaps,assetOut:this.swapInfo.tokenOutFromSwaps,amount:this.amount.toString(),userData:"0x"}}attributes(){var e;if(!this.funds||!this.limit||!this.deadline)throw new Error("Uninitialized arguments");let t={request:this.singleSwap,funds:this.funds,limit:this.limit,deadline:this.deadline};const a=this.fragment();return a[0].inputs&&(null===(e=a[0].inputs)||void 0===e?void 0:e.length)>4&&(t={...t,value:"0",outputReference:"0"}),t}data(){return new t(this.fragment()).encodeFunctionData("swap",Object.values(this.attributes()))}value(e){let t=p.from(0);return this.swapInfo.tokenIn===o&&(t=this.kind===In.SwapExactIn?this.swapInfo.amountIn:this.swapInfo.amountInForLimits.max(e)),t}to(){return this.relayer.address}fragment(){return Js(this.relayer).filter((e=>e.name===this.functionName))}}class zs{constructor(e,t,a){this.kind=t,this.chainId=a,this.functionName="batchSwap",this.swapInfo=Ys(e,t),this.relayer=Ks(this.swapInfo.tokenIn,this.swapInfo.tokenOut,this.chainId)}setFunds(e,t){this.funds={sender:e,recipient:t||e,fromInternalBalance:!1,toInternalBalance:!1}}setDeadline(e){this.deadline=e}minAmountOut(e){return this.kind===In.SwapExactIn?this.swapInfo.amountOutForLimits.min(e):this.swapInfo.amountOutForLimits.amount}maxAmountIn(e){return this.kind===In.SwapExactOut?this.swapInfo.amountInForLimits.max(e):this.swapInfo.amountInForLimits.amount}setLimits(e){this.limits=this.swapInfo.tokenAddresses.map((t=>{let a=p.from(0);return t===this.swapInfo.tokenInForSwaps&&(a=this.maxAmountIn(e)),t===this.swapInfo.tokenOutFromSwaps&&(a=this.minAmountOut(e).mul(-1)),a})).map((e=>e.toString().split(".")[0]))}attributes(){var e;if(!this.funds||!this.limits||!this.deadline)throw new Error("Uninitialized arguments");let t={kind:this.kind,swaps:this.swapInfo.swaps,assets:this.swapInfo.tokenAddresses,funds:this.funds,limits:this.limits,deadline:this.deadline};const a=this.fragment();return a[0].inputs&&(null===(e=a[0].inputs)||void 0===e?void 0:e.length)>6&&(t={...t,value:"0",outputReferences:[]}),t}data(){return new t(this.fragment()).encodeFunctionData("batchSwap",Object.values(this.attributes()))}value(e){let t=p.from(0);return this.swapInfo.tokenIn===o&&(t=this.maxAmountIn(e)),t}to(){return this.relayer.address}fragment(){return Js(this.relayer).filter((e=>e.name===this.functionName))}}const Zs={maxPools:4,gasPrice:"1",deadline:"999999999999999999",maxSlippage:10};class Qs{constructor(e){e instanceof q?(this.sor=e,this.chainId=this.sor.provider._network.chainId):(this.sor=new Ds(e),"number"==typeof e.network?this.chainId=e.network:this.chainId=e.network.chainId),this.vaultContract=nn.connect(wn,this.sor.provider)}static getLimitsForSlippage(e,t,a,n,o,i){return gn(e,t,a,n,o,i).map((e=>e.toString()))}async findRouteGivenIn({tokenIn:e,tokenOut:t,amount:a,gasPrice:n,maxPools:o=4}){return this.sor.getSwaps(e,t,V.SwapExactIn,a,{gasPrice:n,maxPools:o})}async findRouteGivenOut({tokenIn:e,tokenOut:t,amount:a,gasPrice:n,maxPools:o=4}){return this.sor.getSwaps(e,t,V.SwapExactOut,a,{gasPrice:n,maxPools:o})}buildSwap({userAddress:e,recipient:t,swapInfo:a,kind:n,deadline:o,maxSlippage:i}){if(!this.chainId)throw"Missing network configuration";const s=a.swaps.length>1?new zs(a,n,this.chainId):new js(a,n,this.chainId);s.setFunds(e,t),s.setDeadline(o),s.setLimits(i);const r=s.to(),{functionName:p}=s;return{to:r,functionName:p,attributes:s.attributes(),data:s.data(),value:s.value(i)}}async buildRouteExactIn(e,t,a,n,o,i=Zs){const s={...Zs,...i},r=await this.findRouteGivenIn({tokenIn:a,tokenOut:n,amount:p.from(o),gasPrice:p.from(s.gasPrice),maxPools:s.maxPools});return this.buildSwap({userAddress:e,recipient:t,swapInfo:r,kind:In.SwapExactIn,deadline:s.deadline,maxSlippage:s.maxSlippage})}static encodeBatchSwap(e){return nn.createInterface().encodeFunctionData("batchSwap",[e.kind,e.swaps,e.assets,e.funds,e.limits,e.deadline])}static encodeSimpleFlashSwap(e){return this.encodeBatchSwap(function({poolIds:e,assets:t,flashLoanAmount:a,walletAddress:n}){Us({poolIds:e,assets:t});const o=Vs(e,a),i={sender:n,fromInternalBalance:!1,recipient:n,toInternalBalance:!1};return{kind:In.SwapExactIn,swaps:o,assets:t,funds:i,limits:["0","0"],deadline:"999999999999999999"}}(e))}async fetchPools(e){return this.sor.fetchPools(e)}getPools(){return this.sor.getPools()}async queryBatchSwap(e){return await Oo(this.vaultContract,e.kind,e.swaps,e.assets)}async querySimpleFlashSwap(e){return await async function(e){Us(e);const[t,a]=e.assets;try{const n=await Oo(e.vaultContract,In.SwapExactIn,Vs(e.poolIds,e.flashLoanAmount),e.assets),o={[t]:qs(n[0]).toString(),[a]:qs(n[1]).toString()};return{profits:o,isProfitable:Gs([o[t],o[a]])>0}}catch(e){throw`Failed to querySimpleFlashSwap: ${e}`}}({...e,vaultContract:this.vaultContract})}async getSorSwap(e){return await async function(e,t,a,n,o){const i=a===In.SwapExactIn?V.SwapExactIn:V.SwapExactOut;return await o.getSwaps(e.toLowerCase(),t.toLowerCase(),i,n)}(e.tokenIn,e.tokenOut,e.swapType,e.amount,this.sor)}async queryExactIn(e){const t=await this.query(e,In.SwapExactIn);return this.assetDeltas(t.map(String),e.tokenAddresses)}async queryExactOut(e){const t=await this.query(e,In.SwapExactOut);return this.assetDeltas(t.map(String),e.tokenAddresses)}query(e,t){const{swaps:a,tokenAddresses:n}=e,i={sender:o,recipient:o,fromInternalBalance:!1,toInternalBalance:!1};return this.vaultContract.callStatic.queryBatchSwap(t,a,n,i)}assetDeltas(e,t){return Object.fromEntries(e.map(((e,a)=>[t[a],e])))}}var er;!function(e){e[e.WEIGHTED=0]="WEIGHTED",e[e.LEGACY_STABLE=1]="LEGACY_STABLE",e[e.COMPOSABLE_STABLE=2]="COMPOSABLE_STABLE",e[e.COMPOSABLE_STABLE_V2=3]="COMPOSABLE_STABLE_V2"}(er||(er={}));const tr=ma.createInterface();class ar{static encodeApproveVault(e,t){return tr.encodeFunctionData("approveVault",[e,t])}static encodeSetRelayerApproval(e,t,a){return tr.encodeFunctionData("setRelayerApproval",[e,t,a])}static encodeGaugeWithdraw(e,t,a,n){return tr.encodeFunctionData("gaugeWithdraw",[e,t,a,n])}static encodeGaugeDeposit(e,t,a,n){return tr.encodeFunctionData("gaugeDeposit",[e,t,a,n])}static encodeSwap(e){return tr.encodeFunctionData("swap",[e.request,e.funds,e.limit,e.deadline,e.value,e.outputReference])}static encodeBatchSwap(e){return tr.encodeFunctionData("batchSwap",[e.swapType,e.swaps,e.assets,e.funds,e.limits,e.deadline,e.value,e.outputReferences])}static encodeExitPool(e){return tr.encodeFunctionData("exitPool",[e.poolId,e.poolKind,e.sender,e.recipient,e.exitPoolRequest,e.outputReferences])}static encodeJoinPool(e){return tr.encodeFunctionData("joinPool",[e.poolId,e.kind,e.sender,e.recipient,e.joinPoolRequest,e.value,e.outputReference])}static encodeWrapAaveDynamicToken(e){return tr.encodeFunctionData("wrapAaveDynamicToken",[e.staticToken,e.sender,e.recipient,e.amount,e.fromUnderlying,e.outputReference])}static encodeUnwrapAaveStaticToken(e){return tr.encodeFunctionData("unwrapAaveStaticToken",[e.staticToken,e.sender,e.recipient,e.amount,e.toUnderlying,e.outputReference])}static encodeUnwrapWstETH(e){return tr.encodeFunctionData("unwrapWstETH",[e.sender,e.recipient,e.amount,e.outputReference])}static encodeUnwrap(e,t){let a;switch(t){case"AaveLinear":return this.encodeUnwrapAaveStaticToken({staticToken:e.wrappedToken,sender:e.sender,recipient:e.recipient,amount:e.amount,toUnderlying:!0,outputReference:e.outputReference});case"BeefyLinear":case"ERC4626Linear":a="unwrapERC4626";break;case"EulerLinear":a="unwrapEuler";break;case"GearboxLinear":a="unwrapGearbox";break;case"ReaperLinear":a="unwrapReaperVaultToken";break;case"TetuLinear":a="unwrapTetu";break;case"YearnLinear":a="unwrapYearn";break;case"MidasLinear":a="unwrapCompoundV2";break;case"SiloLinear":a="unwrapShareToken";break;default:throw new Error("Unwrapping not supported for this pool type: "+t)}return tr.encodeFunctionData(a,[e.wrappedToken,e.sender,e.recipient,e.amount,e.outputReference])}static encodePeekChainedReferenceValue(e){return tr.encodeFunctionData("peekChainedReferenceValue",[e])}static toChainedReference(e,t=!0){const a=t?ar.CHAINED_REFERENCE_TEMP_PREFIX:ar.CHAINED_REFERENCE_READONLY_PREFIX,n=`0x${a}${"0".repeat(64-a.length)}`;return p.from(n).add(e)}static fromChainedReference(e,t=!0){const a=t?ar.CHAINED_REFERENCE_TEMP_PREFIX:ar.CHAINED_REFERENCE_READONLY_PREFIX,n=`0x${a}${"0".repeat(64-a.length)}`;return p.from(e).sub(p.from(n))}static isChainedReference(e){const t=p.from(e),a=p.from("0xfff0000000000000000000000000000000000000000000000000000000000000"),n=t.toBigInt()&a.toBigInt();return"0xba10000000000000000000000000000000000000000000000000000000000000"===p.from(n)._hex.toString()}static formatExitPoolInput(e){const{assets:t,minAmountsOut:a,userData:n,toInternalBalance:o,poolId:i,poolKind:s,sender:r,recipient:p,outputReferences:d}=e;return{poolId:i,poolKind:s,sender:r,recipient:p,outputReferences:d,exitPoolRequest:{assets:t,minAmountsOut:a,userData:n,toInternalBalance:o}}}static formatJoinPoolInput(e){const{assets:t,maxAmountsIn:a,userData:n,fromInternalBalance:o,poolId:i,kind:s,sender:r,recipient:p,value:d,outputReference:l}=e;return{poolId:i,kind:s,sender:r,recipient:p,value:d,outputReference:l,joinPoolRequest:{assets:t,maxAmountsIn:a,userData:n,fromInternalBalance:o}}}}ar.CHAINED_REFERENCE_TEMP_PREFIX="ba10",ar.CHAINED_REFERENCE_READONLY_PREFIX="ba11",ar.signRelayerApproval=async(e,t,a,n)=>{const o=n.interface.encodeFunctionData("setRelayerApproval",[t,e,!0]),s=await Ge.signSetRelayerApprovalAuthorization(n,a,e,o);return Ge.encodeCalldataAuthorization("0x",i,s)};class nr{constructor(e){this.url=Ms(e).urls.subgraph,this.client=this.initClient()}initClient(){return Hi(new J(this.url))}}class or{constructor(e,t){this.swaps=t||new Qs(e)}async fetchPools(){return this.swaps.fetchPools()}getPools(){return this.swaps.getPools()}async getSpotPrice(e,t,a=[]){0===a.length&&(await this.fetchPools(),a=this.getPools());const n=G(a,0),o=this.swaps.sor.routeProposer.getCandidatePathsFromDict(e,t,0,n,4);if(0===o.length)throw new vn(An.UNSUPPORTED_PAIR);return W(o[0],0,F).toString()}}const ir=["function getPoolId() view returns (bytes32)","function getSwapFeePercentage() view returns (uint256)","function getProtocolFeesCollector() view returns (address)","function inRecoveryMode() view returns (bool)"];class sr{constructor(e,a,n={}){this.multicall=e,this.options=n,this.calls=[],this.paths=[],this.interface=new t(a)}call(e,t,a,n){return this.calls.push([t,a,n]),this.paths.push(e),this}async execute(e={}){const t=e;return(await this.executeMulticall()).forEach(((e,a)=>g(t,this.paths[a],e.length>1?e:e[0]))),this.calls=[],this.paths=[],t}async executeMulticall(){const[,e]=await this.multicall.callStatic.aggregate(this.calls.map((([e,t,a])=>({target:e,callData:this.interface.encodeFunctionData(t,a)}))),this.options);return e.map(((e,t)=>this.interface.decodeFunctionResult(this.calls[t][1],e)))}}function rr(e){return Math.round(Date.now()/1e3)-e<86400}class pr{constructor(e,t){this.veBalAddress=e,this.multicall=t}async getLockInfo(e){if(!this.veBalAddress)throw new Error("veBal address must be defined");const t=new sr(this.multicall,[...fn.abi]);t.call("locked",this.veBalAddress,"locked",[e]),t.call("epoch",this.veBalAddress,"epoch"),t.call("totalSupply",this.veBalAddress,"totalSupply()");const a=await t.execute();return this.formatLockInfo(a)}formatLockInfo(e){const[t,a]=e.locked,n=t.gt(0),o=1e3*a.toNumber();const i=n&&Date.now()>o;return{lockedEndDate:o,lockedAmount:It(t),totalSupply:It(e.totalSupply),epoch:It(e.epoch,0),hasExistingLock:n,isExpired:i}}}class dr{constructor(e,t){if(!e.veBalProxy)throw new Error("veBalProxy address must be defined");this.instance=hn.connect(e.veBalProxy,t)}async getAdjustedBalance(e){return It(await this.instance.adjustedBalanceOf(e))}}class lr{constructor(e,t){this.getLiquidityGauge=Ja.connect,this.contractAddresses="number"==typeof e?xn[e].addresses.contracts:e;const a=nn.connect(this.contractAddresses.vault,t),n=ra.connect(this.contractAddresses.balancerHelpers,t);let o;this.contractAddresses.lidoRelayer&&(o=Wa.connect(this.contractAddresses.lidoRelayer,t));const i=Ya.connect(this.contractAddresses.multicall,t),s=ya.connect(this.contractAddresses.balancerRelayer,t);let r,p,d,l,u,c,y,b,m,f,T;this.contractAddresses.veBal&&(r=new pr(this.contractAddresses.veBal,i)),this.contractAddresses.veBalProxy&&(p=new dr(this.contractAddresses,t)),this.contractAddresses.gaugeClaimHelper&&(d=Ra.connect(this.contractAddresses.gaugeClaimHelper,t)),this.contractAddresses.composableStablePoolFactory&&(l=Ia.connect(this.contractAddresses.composableStablePoolFactory,t)),this.contractAddresses.weightedPoolFactory&&(u=pn.connect(this.contractAddresses.weightedPoolFactory,t)),this.contractAddresses.aaveLinearPoolFactory&&(c=ta.connect(this.contractAddresses.aaveLinearPoolFactory,t)),this.contractAddresses.erc4626LinearPoolFactory&&(y=va.connect(this.contractAddresses.erc4626LinearPoolFactory,t)),this.contractAddresses.eulerLinearPoolFactory&&(b=Ma.connect(this.contractAddresses.eulerLinearPoolFactory,t)),this.contractAddresses.gearboxLinearPoolFactory&&(m=Ua.connect(this.contractAddresses.gearboxLinearPoolFactory,t)),this.contractAddresses.yearnLinearPoolFactory&&(f=cn.connect(this.contractAddresses.yearnLinearPoolFactory,t)),this.contractAddresses.gyroConfigProxy&&(T=qa.connect(this.contractAddresses.gyroConfigProxy,t)),this.instances={aaveLinearPoolFactory:c,balancerHelpers:n,BasePool:this.getBasePool,composableStablePoolFactory:l,ERC20:this.getErc20,erc4626LinearPoolFactory:y,eulerLinearPoolFactory:b,gaugeClaimHelper:d,gearboxLinearPoolFactory:m,gyroConfig:T,liquidityGauge:this.getLiquidityGauge,lidoRelayer:o,multicall:i,relayer:s,veBal:r,veBalProxy:p,weightedPoolFactory:u,yearnLinearPoolFactory:f,vault:a}}get contracts(){return this.instances}getErc20(e,t){return wa.connect(e,t)}getBasePool(e,t){return((e,t)=>new Z(e,ir,t))(e,t)}}class ur{constructor(e,t){this.tokenPrices=e,this.tokenHistoricalPrices=t}async calcImpLoss(e,t){if(1e3*e>=Date.now())throw console.error(`[ImpermanentLossService][calcImpLoss]Error: ${vn.getMessage(An.TIMESTAMP_IN_THE_FUTURE)}`),new vn(An.TIMESTAMP_IN_THE_FUTURE);const a=await this.prepareData(e,t),n=this.getPoolValueDelta(a),o=this.getHoldValueDelta(a);return this.calculateImpermanentLoss(n,o)}calculateImpermanentLoss(e,t){return Math.floor(100*Math.abs(e/t-1)*100)/100}getPoolValueDelta(e){return e.reduce(((e,t)=>e*Math.pow(Math.abs(t.priceDelta+1),t.weight)),1)}getHoldValueDelta(e){return e.reduce(((e,t)=>e+Math.abs(t.priceDelta+1)*t.weight),0)}async prepareData(e,t){const a=t.tokens.filter((e=>e.address!==t.address)),n=this.getWeights(a),o=a.map((e=>e.address)),i=await this.getEntryPrices(e,o),s=await this.getExitPrices(a);return this.getAssets(a,s,i,n)}getAssets(e,t,a,n){return e.map(((e,o)=>({priceDelta:this.getDelta(a[e.address],t[e.address]),weight:n[o]})))}getDelta(e,t){if(0===e)throw console.error(`[ImpermanentLossService][getDelta]Error: ${vn.getMessage(An.ILLEGAL_PARAMETER)}: entry price is 0`),new vn(An.ILLEGAL_PARAMETER);return(t-e)/e}getWeights(e){const t=e.every((e=>!e.weight)),a=Math.round(1/e.length*100)/100,n=t?e.map((()=>a)):e.map((e=>{var t;return Number(null!==(t=e.weight)&&void 0!==t?t:0)}));if(n.some((e=>0===e)))throw console.error(`[ImpermanentLossService][getWeights]Error: ${vn.getMessage(An.MISSING_WEIGHT)}`),new vn(An.MISSING_WEIGHT);return n}async getExitPrices(e){var t;const a=await Promise.all(e.map((e=>this.tokenPrices.find(e.address)))).catch((()=>[]));if(!a.length||a.some((e=>void 0===(null==e?void 0:e.usd))))throw console.error(`[ImpermanentLossService][getExitPrices]Error: ${vn.getMessage(An.MISSING_PRICE_RATE)}`),new vn(An.MISSING_PRICE_RATE);const n=e.map(((e,t)=>({...e,price:a[t]}))),o={};for(const e of n)(null===(t=e.price)||void 0===t?void 0:t.usd)&&(o[e.address]=+e.price.usd);return o}async getEntryPrices(e,t){const a={};for(const n of t){const t=await this.tokenHistoricalPrices.findBy(n,e).catch((e=>{Re.getInstance().warn(`[ImpermanentLossService][getEntryPrices]Error: ${e.message}`)}));if(!(null==t?void 0:t.usd)){throw Re.getInstance().warn(`[ImpermanentLossService][getEntryPrices]Error: ${vn.getMessage(An.MISSING_PRICE_RATE)}`),new vn(An.MISSING_PRICE_RATE)}a[n]=+t.usd}return a}}const cr=145e3,yr=1648465251,br=31536e3,mr=2**(1/4),fr=(e=Math.round((new Date).getTime()/1e3))=>{const t=Math.floor((e-yr)/br);return cr*mr**-t},Tr=e=>365*(cr*mr**-e/7);var hr=Object.freeze({__proto__:null,INITIAL_RATE:cr,START_EPOCH_TIME:yr,weekly:fr,total:Tr,between:(e,t)=>{if(et.address!==e.address)),n=await Promise.all(a.map((async t=>{let a=0;const n=await this.tokenYields.find(t.address);if(n)a="MetaStable"===e.poolType||e.poolType.includes("Gyro")?n*(1-await this.protocolSwapFeePercentage(e)):"ComposableStable"===e.poolType||"Weighted"===e.poolType&&e.poolTypeVersion>=2?t.isExemptFromYieldProtocolFee?n:n*(1-parseFloat(e.protocolYieldFeeCache||"0.5")):n;else{const n=await this.pools.findBy("address",t.address);if(n){const o=await this.swapFees(n);let i=(await this.tokenAprs(n)).total;("ComposableStable"===e.poolType||"Weighted"===e.poolType&&2===e.poolTypeVersion)&&(t.isExemptFromYieldProtocolFee||(i*=1-parseFloat(e.protocolYieldFeeCache||"0.5"))),a=o+i}}return a}))),o=async e=>{var a,n,o,i,s;let r;if(e.weight)return parseFloat(e.weight);if(null===(n=null===(a=e.token)||void 0===a?void 0:a.pool)||void 0===n?void 0:n.poolType){const t=await this.pools.findBy("address",e.address);t&&(r=(await this.bptPrice(t)).toString())}else r=(null===(o=e.price)||void 0===o?void 0:o.usd)||(null===(i=await this.tokenPrices.find(e.address))||void 0===i?void 0:i.usd)||(null===(s=e.token)||void 0===s?void 0:s.latestUSDPrice);if(r){return parseFloat(e.balance)*parseFloat(r)/parseFloat(t)}throw`No price for ${e.address}`},i=await Promise.all(a.map((async(e,t)=>{if(0===n[t])return 0;try{const a=await o(e);return Math.round(n[t]*a)}catch(e){return Re.getInstance().error(e),0}}))),s=i.reduce(((e,t)=>e+t),0);return{total:s,breakdown:E(A(a.map((e=>e.address)),i),v)}}async stakingApr(e,t=1){if(!this.liquidityGauges)return 0;const a=await this.liquidityGauges.findBy("poolId",e.id);if(!a||1==e.chainId&&0===a.workingSupply||e.chainId>1&&0===a.totalSupply||e.chainId>1&&0===a.balInflationRate)return 0;const n=xn[e.chainId].addresses.tokens.bal;if(!n)return 0;const[o,i]=await Promise.all([this.tokenPrices.find(n),this.bptPrice(e)]);if(!(null==o?void 0:o.usd))throw"Missing BAL price";const s=(a.workingSupply+.4)/.4*i;if(a.balInflationRate){const e=86400*a.balInflationRate*365*parseFloat(o.usd);return Math.round(1e4*t*e/s)}if(e.chainId>1){if(!a.rewardTokens)return 0;const e=n&&a.rewardTokens[n];if(!e)return 0;{let t;try{t=await this.rewardTokenApr(n,e);const o=a.totalSupply*i,s=t.value/o;return Math.round(1e4*s)}catch(e){return 0}}}const r=parseFloat(o.usd),p=Math.round((new Date).getTime()/1e3),d=fr(p)/7*365*a.relativeWeight*r;return Math.round(1e4*t*d/s)}async rewardAprs(e){if(!this.liquidityGauges)return{total:0,breakdown:{}};const t=await this.liquidityGauges.findBy("poolId",e.id);if(!t||!t.rewardTokens||Object.keys(t.rewardTokens).length<1)return{total:0,breakdown:{}};const a=xn[e.chainId].addresses.tokens.bal,n=Object.keys(t.rewardTokens).filter((e=>e!=a)).map((async e=>{const a=t.rewardTokens[e];try{return await this.rewardTokenApr(e,a)}catch(t){return{address:e,value:0}}})),o=await this.bptPrice(e),i=t.totalSupply*o;if(0==i)return{total:0,breakdown:{}};const s={};let r=0;for await(const e of Object.values(n)){const t=e.value/i,a=Math.round(1e4*t);r+=a,s[e.address]=a}return{total:r,breakdown:s}}async protocolApr(e){if("0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014"!=e.id||!this.feeDistributor)return 0;const t=new Ir(this.feeDistributor,this.tokenPrices),{lastWeekBalRevenue:a,lastWeekBBAUsdRevenue:n,veBalSupply:o}=await t.data(),i=await this.bptPrice(e);if(!i)throw"bptPrice for veBal pool missing";const s=(a+n)/7;return Math.round(365*s*1e4/(i*o))}async apr(e){if(Cs.includes(e.id))return{swapFees:0,tokenAprs:{total:0,breakdown:{}},stakingApr:{min:0,max:0},rewardAprs:{total:0,breakdown:{}},protocolApr:0,min:0,max:0};const[t,a,n,o,i,s]=await Promise.all([this.swapFees(e),this.tokenAprs(e),this.stakingApr(e),this.stakingApr(e,2.5),this.rewardAprs(e),this.protocolApr(e)]);return{swapFees:t,tokenAprs:a,stakingApr:{min:n,max:o},rewardAprs:i,protocolApr:s,min:t+a.total+i.total+n,max:t+a.total+i.total+s+o}}async last24hFees(e){return new _r(this.yesterdaysPools).last24h(e)}async totalLiquidity(e){try{const t=new go(this.pools,this.tokenPrices);return await t.getLiquidity(e)}catch(t){return Re.getInstance().warn("Liquidity calculcation failed, falling back to subgraph"),e.totalLiquidity}}async bptPrice(e){return parseFloat(await this.totalLiquidity(e))/parseFloat(e.totalShares)}async protocolSwapFeePercentage(e){let t=.5;return t=e.poolType.includes("Gyro")&&this.gyroConfigRepository?await this.gyroConfigRepository.getGyroProtocolFee(e.address):e.protocolSwapFeeCache?parseFloat(e.protocolSwapFeeCache):await this.feeCollector.find("")||.5,t}async rewardTokenApr(e,t){if(t.period_finish.toNumber(){e.includes("Linear")&&Pr.includes(e)&&wr.set(e,"batchSwap")})),wr.set(Be.Element,"batchSwap"),wr.set(Be.Investment,"joinPool"),wr.set(Be.LiquidityBootstrapping,"joinPool"),wr.set(Be.MetaStable,"joinPool"),wr.set(Be.Stable,"joinPool"),wr.set(Be.StablePhantom,"batchSwap"),wr.set(Be.Weighted,"joinPool"),wr.set(Be.ComposableStable,"joinPool");const xr=new Map;Pr.forEach((e=>{e.includes("Linear")&&Pr.includes(e)&&xr.set(e,"batchSwap")})),xr.set(Be.Element,"batchSwap"),xr.set(Be.Investment,"exitPool"),xr.set(Be.LiquidityBootstrapping,"exitPool"),xr.set(Be.MetaStable,"exitPool"),xr.set(Be.Stable,"exitPool"),xr.set(Be.StablePhantom,"batchSwap"),xr.set(Be.Weighted,"exitPool"),xr.set(Be.ComposableStable,"exitPool");class Er{constructor(e){this.pools=e,this.getGraphNodes=async(e,t,a)=>{if(!await this.pools.find(t))throw new vn(An.POOL_DOESNT_EXIST);const n=await this.buildGraphFromRootPool(t,a);if(n.id!==t)throw new Error("Error creating graph nodes");return e?Er.orderByBfs(n).reverse():Er.orderByBfs(n)}}async buildGraphFromRootPool(e,t){const n=await this.pools.find(e);if(!n)throw new vn(An.POOL_DOESNT_EXIST);return(await this.buildGraphFromPool(n.address,0,void 0,a,t))[0]}getTokenTotal(e){const t=e.tokensList.indexOf(e.address);let a=n;const{balancesEvm:o}=nt(e);return o.forEach(((e,n)=>{t!==n&&(a=a.add(e))})),a}async buildGraphFromPool(e,t,n,o,i){var s;const r=await this.pools.findBy("address",e);if(!r){if(n){const a=await this.pools.findBy("address",n.address),i=a.tokensList.indexOf(e),r=null!==(s=a.tokens[i].decimals)&&void 0!==s?s:18,{balancesEvm:p}=nt(a);return Er.createInputTokenNode(t,e,r,n,o,p[i].toString())}throw new vn(An.POOL_DOESNT_EXIST)}const l=wr.get(r.poolType),u=xr.get(r.poolType);if(!l||!u)throw new vn(An.UNSUPPORTED_POOL_TYPE);const c=this.getTokenTotal(r),{spotPriceCalculator:y}=_o.from(r.poolType),b={};let m=18;r.tokens.forEach((e=>{if(Vt(e.address,r.address))return void(m=e.decimals?e.decimals:18);const t=y.calcPoolSpotPrice(e.address,r.address,r);b[e.address]=t}));let f={address:r.address,id:r.id,type:r.poolType,joinAction:l,exitAction:u,isProportionalExit:!1,children:[],marked:!1,index:t.toString(),parent:n,proportionOfParent:o,isLeaf:!1,spotPrices:b,decimals:m,balance:r.totalShares,priceRate:a.toString()};if(this.updateNodeIfProportionalExit(r,f),t++,r.poolType.toString().includes("Linear"))[f,t]=this.createLinearNodeChildren(f,t,r,i);else{const{balancesEvm:e}=nt(r);for(let a=0;a2)&&(t.isProportionalExit=!0)}createLinearNodeChildren(e,t,a,n){var o;if(void 0===a.mainIndex)throw new Error("Issue With Linear Pool");if(n.map((e=>e.toLowerCase())).includes(a.tokensList[a.mainIndex].toLowerCase())){const n=this.createWrappedTokenNode(a,t,e,e.proportionOfParent);return e.children.push(n[0]),[e,n[1]]}{const{balancesEvm:n}=nt(a),i=null!==(o=a.tokens[a.mainIndex].decimals)&&void 0!==o?o:18,s=Er.createInputTokenNode(t,a.tokensList[a.mainIndex],i,e,e.proportionOfParent,n[a.mainIndex].toString());return e.children.push(s[0]),[e,t=s[1]]}}createWrappedTokenNode(e,t,a,n){var o;if(void 0===e.wrappedIndex||void 0===e.mainIndex)throw new Error("Issue With Linear Pool");const{balancesEvm:i,upScaledBalances:s,scalingFactorsRaw:r,priceRates:p}=nt(e),d={type:"WrappedToken",address:e.tokensList[e.wrappedIndex],id:"N/A",children:[],marked:!1,joinAction:"wrap",exitAction:"unwrap",isProportionalExit:!1,index:t.toString(),parent:a,proportionOfParent:n,isLeaf:!1,spotPrices:{},decimals:18,balance:i[e.wrappedIndex].toString(),priceRate:p[e.wrappedIndex].toString()};t++;const l=null!==(o=e.tokens[e.mainIndex].decimals)&&void 0!==o?o:18,u=Ze(s[e.wrappedIndex],r[e.mainIndex]).toString(),c=Er.createInputTokenNode(t,e.tokensList[e.mainIndex],l,d,n,u);return d.children=[c[0]],[d,t=c[1]]}static createInputTokenNode(e,t,n,o,i,s){return[{address:t,id:"N/A",type:"Input",children:[],marked:!1,joinAction:"input",exitAction:"output",isProportionalExit:!1,index:e.toString(),parent:o,proportionOfParent:i,isLeaf:!0,spotPrices:{},decimals:n,balance:s,priceRate:a.toString()},e+1]}static orderByBfs(e){const t=[],a=[];for(e.marked=!0,t.push(e);t.length>0;){const e=t.shift();e&&a.push(e),null==e||e.children.forEach((e=>{e.marked||(e.marked=!0,t.push(e))}))}return a}static getLeafAddresses(e){return e.filter((e=>e.isLeaf)).map((e=>e.address))}static isProportionalPools(e){return e.every((e=>!(e.children.length>1)||e.isProportionalExit))}}class Ar{constructor(){}}Ar.joinInit=t=>e.decode(["uint256","uint256[]"],t),Ar.joinExactTokensInForBPTOut=t=>e.decode(["uint256","uint256[]","uint256"],t),Ar.joinTokenInForExactBPTOut=t=>e.decode(["uint256","uint256","uint256"],t),Ar.joinAllTokensInForExactBPTOut=t=>e.decode(["uint256","uint256"],t),Ar.exitExactBPTInForOneTokenOut=t=>e.decode(["uint256","uint256","uint256"],t),Ar.exitExactBPTInForTokensOut=t=>e.decode(["uint256","uint256"],t),Ar.exitBPTInForExactTokensOut=t=>e.decode(["uint256","uint256[]","uint256"],t);class vr{constructor(e){this.relayerModel=e}joinKind(t){const a=e.decode(["uint256"],t)[0];if(!a)throw new Error("No exit kind.");return a.toNumber()}decodeJoinData(e,t){if(t===oe.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT){return Ar.joinAllTokensInForExactBPTOut(e).toString()}if(t===oe.EXACT_TOKENS_IN_FOR_BPT_OUT){const[,t]=Ar.joinExactTokensInForBPTOut(e);return t}if(t===oe.TOKEN_IN_FOR_EXACT_BPT_OUT){const[,t,a]=Ar.joinTokenInForExactBPTOut(e);return[t.toString(),a]}throw new Error("Non supported join data")}allTokensInForExactBPTOut(){throw new Error("joinAllTokensInForExactBPTOut not supported")}joinExactTokensInForBPTOut(e,t){const a=this.decodeJoinData(e,oe.EXACT_TOKENS_IN_FOR_BPT_OUT),n=this.relayerModel.doChainedRefReplacements(a),o=t._calcBptOutGivenExactTokensIn(n.map((e=>p.from(e))));if("StablePhantom"==t.SubgraphType||"ComposableStable"==t.SubgraphType){const e=t.tokens.find((e=>Vt(e.address,t.address)));if(!e)throw new Error("Pool does not contain BPT as a token");const a=d(e.balance.toString(),e.decimals);t.updateTokenBalanceForPool(t.address,a.sub(o))}else t.updateTokenBalanceForPool(t.address,t.totalShares.add(o));const i=t.tokens.filter((e=>!Vt(e.address,t.address)));return n.forEach(((e,a)=>{const n=d(i[a].balance.toString(),i[a].decimals);t.updateTokenBalanceForPool(i[a].address,n.add(e))})),[o.toString(),i.map((e=>e.address)),n]}joinTokenInForExactBPTOut(e,t){const[a,n]=this.decodeJoinData(e,oe.TOKEN_IN_FOR_EXACT_BPT_OUT),o=this.relayerModel.doChainedRefReplacement(a),i=t.parsePoolPairData(t.tokensList[Number(n)],t.address),s=l(o,18),r=t._tokenInForExactTokenOut(i,$(s.toString())).dp(i.decimalsIn),p=d(r.toString(),i.decimalsIn);return t.updateTokenBalanceForPool(i.tokenIn,i.balanceIn.add(p)),t.updateTokenBalanceForPool(i.tokenOut,i.balanceOut.add(o)),[p.toString(),i.tokenIn,p.toString()]}async doJoinPool(e,t){const a=t[e.poolId],o=this.joinKind(e.encodedUserData);let i="0",s=[],r=[];if(o===oe.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT)i=this.allTokensInForExactBPTOut();else if(o===oe.EXACT_TOKENS_IN_FOR_BPT_OUT)[i,s,r]=this.joinExactTokensInForBPTOut(e.encodedUserData,a);else{if(o!==oe.TOKEN_IN_FOR_EXACT_BPT_OUT)throw new Error("Exit type not implemented");{let t,n;[i,t,n]=this.joinTokenInForExactBPTOut(e.encodedUserData,a),s.push(t),r.push(n)}}return s.push(a.address),r.push(n.sub(i).toString()),e.outputReference&&ar.isChainedReference(e.outputReference)&&this.relayerModel.setChainedReferenceValue(e.outputReference,i),[s,r]}}class Sr{constructor(e){this.relayerModel=e}exitKind(t,a){const n=e.decode(["uint256"],a)[0];if(!n)throw new Error("No exit kind.");return"ComposableStable"===t?n.toNumber()===ye.BPT_IN_FOR_EXACT_TOKENS_OUT?ie.BPT_IN_FOR_EXACT_TOKENS_OUT:n.toNumber()===ye.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT?ie.EXACT_BPT_IN_FOR_TOKENS_OUT:ie.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT:n.toNumber()}decodeExitData(e,t){if(t===ie.BPT_IN_FOR_EXACT_TOKENS_OUT){const[,t,a]=Ar.exitBPTInForExactTokensOut(e);return[t.toString(),a.toString()]}if(t===ie.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT){const[,t,a]=Ar.exitExactBPTInForOneTokenOut(e);return[t.toString(),a.toString()]}if(t===ie.EXACT_BPT_IN_FOR_TOKENS_OUT){const[,t]=Ar.exitExactBPTInForTokensOut(e);return[t.toString()]}throw new Error("Non supported exit data")}exactBptInForTokensOut(e,t){const[a]=this.decodeExitData(e,ie.EXACT_BPT_IN_FOR_TOKENS_OUT),n=this.relayerModel.doChainedRefReplacement(a),o=t._calcTokensOutGivenExactBptIn(p.from(n)).map((e=>e.toString()));if("StablePhantom"==t.SubgraphType||"ComposableStable"==t.SubgraphType){const e=t.tokens.find((e=>Vt(e.address,t.address)));if(!e)throw new Error("Pool does not contain BPT as a token");const a=d(e.balance.toString(),e.decimals);t.updateTokenBalanceForPool(t.address,a.add(n))}else t.updateTokenBalanceForPool(t.address,t.totalShares.sub(n));const i=t.tokens.filter((e=>!Vt(e.address,t.address)));return o.forEach(((e,a)=>{const n=d(i[a].balance.toString(),i[a].decimals);t.updateTokenBalanceForPool(i[a].address,n.sub(e))})),[n,i.map((e=>e.address)),o]}exactBptInForOneTokenOut(e,t){const[a,n]=this.decodeExitData(e,ie.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT),o=this.relayerModel.doChainedRefReplacement(a),i=t.parsePoolPairData(t.address,t.tokensList[Number(n)]),s=l(o,i.decimalsIn),r=t._exactTokenInForTokenOut(i,$(s)).dp(i.decimalsOut),u=d(r.toString(),i.decimalsOut),c=function(e,t){const a=[];return t.forEach((t=>{const n=e.tokens.findIndex((e=>Vt(e.address,t)));if(n<0)throw"Pool does not contain tokenIn";a.push(d(e.tokens[n].balance,e.tokens[n].decimals).toString())})),a}(t,[t.address,i.tokenOut]);t.updateTokenBalanceForPool(i.tokenOut,p.from(c[1]).sub(u)),"StablePhantom"==t.SubgraphType||"ComposableStable"==t.SubgraphType?t.updateTokenBalanceForPool(t.address,p.from(c[0]).add(o)):t.updateTokenBalanceForPool(t.address,t.totalShares.sub(o));const y=t.tokensList.filter((e=>!Vt(e,t.address))),b=new Array(y.length).fill("0");return b[Number(n)]=u.toString(),[o,y,b]}async doExitPool(e,t){const a=t[e.poolId],o=this.exitKind(a.SubgraphType,e.encodedUserData);let i,s=[],r=[];const p=[],d=[];if(o===ie.EXACT_BPT_IN_FOR_TOKENS_OUT)[i,r,s]=this.exactBptInForTokensOut(e.encodedUserData,a);else{if(o!==ie.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT)throw new Error("Exit type not implemented");[i,r,s]=this.exactBptInForOneTokenOut(e.encodedUserData,a)}for(let t=0;tn.sub(e).toString()))),[p,d]}}class kr{constructor(e){this.relayerModel=e}async doSingleSwap(e,t){const a=this.relayerModel.doChainedRefReplacement(e.request.amount.toString()),o=t[e.request.poolId],[,i]=this.doSwap(e.request.assetIn,e.request.assetOut,o,e.request.kind,a),s=n.sub(i);if(!e.outputReference)throw new Error("Missing outputReference");return this.relayerModel.setChainedReferenceValue(e.outputReference.toString(),s.abs().toString()),[s.toString(),a]}async doBatchSwap(e,t){const a=e.assets,o=new Array(a.length).fill(n);let i;for(let t=0;t{const s=a[n.assetInIndex],r=a[n.assetOutIndex],p=t[n.poolId];let d=n.amount;"0"===d&&(d=i);const[l,u]=this.doSwap(s,r,p,e.swapType,d);i=e.swapType===In.SwapExactIn?u.toString():l.toString(),o[n.assetInIndex]=o[n.assetInIndex].add(l),o[n.assetOutIndex]=o[n.assetOutIndex].sub(u)}));for(let t=0;te.toString()))}doSwap(e,t,a,o,i){const s=a.parsePoolPairData(e,t),r=o===In.SwapExactIn;let u=r?p.from(i):n,c=r?n:p.from(i);const y=l(u,s.decimalsIn),b=l(c,s.decimalsOut);if(r){const e=a._exactTokenInForTokenOut(s,$(y.toString())).dp(s.decimalsOut);c=d(e.toString(),s.decimalsOut)}else{const e=a._tokenInForExactTokenOut(s,$(b.toString())).dp(s.decimalsIn);u=d(e.toString(),s.decimalsIn)}return a.updateTokenBalanceForPool(s.tokenIn,s.balanceIn.add(u)),a.updateTokenBalanceForPool(s.tokenOut,s.balanceOut.sub(c)),[u,c]}}class Or{constructor(e){this.relayerModel=e}async doUnwrap(e,t){const o=t[e.poolId],i=o.tokens[o.wrappedIndex],s=o.tokens[o.mainIndex],r=this.relayerModel.doChainedRefReplacement(e.amount.toString()),p=et.divDownFixed(et.mulDownFixed(BigInt(r),d(i.priceRate,18).toBigInt()),a.toBigInt()).toString();this.relayerModel.setChainedReferenceValue(e.outputReference.toString(),p);return[[i.address,s.address],[r,n.sub(p).toString()]]}}class Mr{constructor(e){this.relayerModel=e,this.joinModel=new vr(e),this.exitModel=new Sr(e),this.swapModel=new kr(e),this.unwrapModel=new Or(e)}async doJoin(e,t){return this.joinModel.doJoinPool(e,t)}async doExit(e,t){return this.exitModel.doExitPool(e,t)}async doBatchSwap(e,t){return this.swapModel.doBatchSwap(e,t)}async doSingleSwap(e,t){return this.swapModel.doSingleSwap(e,t)}async doUnwrap(e,t){return this.unwrapModel.doUnwrap(e,t)}}class Cr{constructor(){this.chainedRefs={}}setChainedReferenceValue(e,t){this.chainedRefs[e]=t}getChainedReferenceValue(e){return this.chainedRefs[e]}doChainedRefReplacement(e){return ar.isChainedReference(e.toString())?this.getChainedReferenceValue(e.toString()):e}doChainedRefReplacements(e){return e.map((e=>this.doChainedRefReplacement(e).toString()))}}class Fr{constructor(e,t){this.poolDataService=e,this.wrappedNativeAsset=t,this.poolsArray=[],this.poolsDict={}}dataSource(){return this.poolDataService}async all(e=!1){if(e||0===this.poolsArray.length){const e=S(await this.dataSource().getPools());for(const t of e)if(["Weighted","Investment","Stable","LiquidityBootstrapping"].includes(t.poolType)){const e={address:t.address,balance:t.totalShares,decimals:18,priceRate:"1",weight:"0"};t.tokens.push(e),t.tokensList.push(t.address)}this.poolsArray=e}return this.poolsArray}parseToPoolsDict(e){return Object.fromEntries(S(e).filter((e=>e.tokensList.length>0&&"0"!==e.tokens[0].balance)).map((e=>[e.id,this.parseNewPool(e)])).filter((([,e])=>void 0!==e)))}parseNewPool(e){if(!e.swapEnabled)return;let t={};try{if(["Weighted","Investment","LiquidityBootstrapping"].includes(e.poolType)){t=L.fromPool(e,!1)}else if("Stable"===e.poolType){t=C.fromPool(e)}else if("MetaStable"===e.poolType){t=D.fromPool(e)}else if(e.poolType.toString().includes("Linear")){t=U.fromPool(e)}else if("StablePhantom"===e.poolType){t=B.fromPool(e)}else{if("ComposableStable"!==e.poolType){return void Re.getInstance().warn(`Unknown pool type or type field missing: ${e.poolType} ${e.id}`)}t=H.fromPool(e)}if(!t)throw new Error("Issue with Pool");t.SubgraphType=e.poolType}catch(e){return void console.error("Error parseNewPool")}return t}async poolsDictionary(e=!1){if(e||0===Object.keys(this.poolsDict).length){const t=await this.all(e);this.poolsDict=this.parseToPoolsDict(t)}return this.poolsDict}}var Br,Rr;!function(e){e[e.BatchSwap=0]="BatchSwap",e[e.Join=1]="Join",e[e.Exit=2]="Exit",e[e.Swap=3]="Swap",e[e.Unwrap=4]="Unwrap"}(Br||(Br={}));class Nr{constructor(e,t){this.poolsSource=new Fr(e,t)}updateDeltas(e,t,a){return t.forEach(((t,o)=>{e[t]||(e[t]=n),e[t]=e[t].add(a[o])})),e}async multicall(e,t=!1){const a=new Cr,n=new Mr(a),o=await this.poolsSource.poolsDictionary(t),i={};for(const t of e){let e=[],a=[];switch(t.actionType){case Br.Join:[e,a]=await n.doJoin(t,o);break;case Br.Exit:[e,a]=await n.doExit(t,o);break;case Br.BatchSwap:e=t.assets,a=await n.doBatchSwap(t,o);break;case Br.Swap:e=[t.request.assetOut,t.request.assetIn],a=await n.doSingleSwap(t,o);break;case Br.Unwrap:[e,a]=await n.doUnwrap(t,o)}this.updateDeltas(i,e,a)}return i}static mapSwapRequest(e){return{actionType:Br.Swap,request:e.request,funds:e.funds,outputReference:e.outputReference}}static mapBatchSwapRequest(e){return{actionType:Br.BatchSwap,swaps:e.swaps,assets:e.assets,funds:e.funds,swapType:e.swapType,outputReferences:e.outputReferences}}static mapJoinPoolRequest(e){return{actionType:Br.Join,poolId:e.poolId,encodedUserData:e.joinPoolRequest.userData,outputReference:e.outputReference}}static mapExitPoolRequest(e){return{actionType:Br.Exit,poolId:e.poolId,encodedUserData:e.exitPoolRequest.userData,outputReferences:e.outputReferences}}static mapUnwrapRequest(e,t,a){return{actionType:Br.Unwrap,poolId:a,amount:e,outputReference:t}}}const Lr=ya.createInterface();function Dr(e){Re.getInstance()}class Ur{constructor(e,t,a){this.poolGraph=e,this.simulationService=a,this.createCalls=async(e,t,a,n,o)=>{const{multiRequests:i,encodedCalls:s,outputIndexes:r,deltas:p}=this.createActionCalls(e,t,a,n);o&&s.unshift(this.createSetRelayerApproval(o));return{multiRequests:i,encodedCall:Lr.encodeFunctionData("multicall",[s]),outputIndexes:o?r.map((e=>e+1)):r,deltas:p}},this.amountsOutByJoinPath=async(e,t,a,o,i,s,r,d)=>{const l=await this.simulationService.simulateGeneralisedJoin(this.relayer,t,a,i,e,o,s,r,d),u=l.reduce(((e,t)=>e.add(p.from(t))),n).toString();return{amountsOut:l,totalAmountOut:u}},this.minAmountsOutByJoinPath=(e,t,a)=>({minAmountsOut:t.map((t=>Dt(p.from(t),p.from(e)).toString())),totalMinAmountOut:Dt(p.from(a),p.from(e)).toString()}),this.createActionCalls=(e,t,a,n)=>{const o=[],i=[],s=[],r=!n,p={};return e.forEach(((e,d)=>{const l=e[0].isLeaf,u=[];if(e.forEach(((o,s)=>{var c,y;if(o.children.length>0&&0===o.children.filter((e=>this.shouldBeConsidered(e))).length)return void(o.index="0");const b=o.children.filter((e=>this.shouldBeConsidered(e))).some((e=>"input"===e.joinAction))?t:this.relayer,m=s===e.length-1,f=null!==(y=l&&(null===(c=o.parent)||void 0===c?void 0:c.children.filter((e=>this.shouldBeConsidered(e))).some((e=>"input"===e.joinAction))))&&void 0!==y&&y,T=m||f?t:this.relayer,h=m&&n?n[d]:"0";switch(o.joinAction){case"batchSwap":{const{modelRequest:e,encodedCall:t,assets:n,amounts:s}=this.createSwap(o,d,h,b,T,a,r);u.push(e),i.push(t),this.updateDeltas(p,n,s)}break;case"joinPool":{const{modelRequest:e,encodedCall:t,assets:n,amounts:s,minBptOut:l}=this.createJoinPool(o,d,h,b,T,a,r);u.push(e),i.push(t),this.updateDeltas(p,[o.address,...n],[l,...s])}break;default:return}})),r){const e=100*d,t=ar.encodePeekChainedReferenceValue(ar.toChainedReference(e,!1));i.push(t),s.push(i.indexOf(t))}o.push(u)})),{multiRequests:o,encodedCalls:i,outputIndexes:s,deltas:p}},this.createSetRelayerApproval=e=>ar.encodeSetRelayerApproval(this.relayer,!0,e),this.createSwap=(e,t,a,o,i,s,r)=>{var d;if(1!==e.children.length)throw new Error("Unsupported swap");const l=e.children[0].address,u=this.getOutputRefValue(t,e.children[0]),c=a,y=s&&!r?this.replaceWrappedNativeAsset([l])[0]:l,b={poolId:e.id,kind:In.SwapExactIn,assetIn:y,assetOut:e.address,amount:u.value,userData:"0x"},m={sender:o,recipient:i,fromInternalBalance:this.allImmediateChildrenSendToInternal(e),toInternalBalance:this.allSiblingsSendToInternal(e)},f=p.from(this.getOutputRefValue(t,e).value),T=s&&!r?kt([y],[u.value]):n,h={request:b,funds:m,limit:c,deadline:p.from(Math.ceil(Date.now()/1e3)+3600),value:T,outputReference:f},I=ar.encodeSwap(h);Dr(),Dr(JSON.stringify(h)),Dr(JSON.stringify(null===(d=h.value)||void 0===d?void 0:d.toString()));const _=Nr.mapSwapRequest(h),g=e.children.some((e=>"input"===e.joinAction))?u.value:"0",P=null!=e.parent?"0":p.from(a).mul(-1).toString();return{modelRequest:_,encodedCall:I,assets:[e.address,l],amounts:[P,g]}},this.createJoinPool=(e,t,a,o,i,s,r)=>{var p;const d=[],l=[];e.children.forEach((e=>{d.push(e.address),this.shouldBeConsidered(e)?l.push(this.getOutputRefValue(t,e).value):l.push("0")})),e.type===Be.ComposableStable&&(d.push(e.address),l.push("0"));const u=new Le(this.wrappedNativeAsset),[c,y]=u.sortTokens(d,l);let b=[];const m=c.map((e=>e.toLowerCase())).indexOf(e.address.toLowerCase());let f;b=-1===m?y:[...y.slice(0,m),...y.slice(m+1)],f=e.type===Be.Weighted?pe.joinExactTokensInForBPTOut(b,a):re.joinExactTokensInForBPTOut(b,a);const T=s&&!r?kt(this.replaceWrappedNativeAsset(c),y):n,h=this.allImmediateChildrenSendToInternal(e),I=ar.formatJoinPoolInput({poolId:e.id,kind:0,sender:o,recipient:i,value:T,outputReference:this.getOutputRefValue(t,e).value,joinPoolRequest:{},assets:s&&!r?this.replaceWrappedNativeAsset(c):c,maxAmountsIn:y,userData:f,fromInternalBalance:h}),_=ar.encodeJoinPool(I);Dr(),Dr(JSON.stringify(I)),Dr(JSON.stringify(null===(p=I.value)||void 0===p?void 0:p.toString()));const g=Nr.mapJoinPoolRequest(I),P=y.map((e=>ar.isChainedReference(e)?"0":e)),w=ar.isChainedReference(a)?"0":a,x=e.children.filter((e=>this.shouldBeConsidered(e))).some((e=>"input"===e.joinAction));return{modelRequest:g,encodedCall:_,assets:x?c:[],amounts:x?P:[],minBptOut:null!=e.parent?n.toString():n.sub(w).toString()}},this.getOutputRefValue=(e,t)=>"input"===t.joinAction?{value:t.index,isRef:!1}:"0"===t.index&&t.parent?{value:"0",isRef:!0}:{value:ar.toChainedReference(p.from(t.index).add(100*e)).toString(),isRef:!0},this.shouldBeConsidered=e=>"0"!==e.index,this.sendsToInternalBalance=e=>"input"!==e.joinAction&&"joinPool"!==e.joinAction,this.allImmediateChildrenSendToInternal=e=>{const t=e.children.filter((e=>this.shouldBeConsidered(e)));return 0!==t.length&&t.filter((e=>this.sendsToInternalBalance(e))).length===t.length},this.allSiblingsSendToInternal=e=>{if(!e.parent)return!1;const t=e.parent.children.filter((e=>this.shouldBeConsidered(e)));return t.filter((e=>this.sendsToInternalBalance(e))).length===t.length},this.replaceWrappedNativeAsset=e=>{const t=e.findIndex((e=>e.toLowerCase()===this.wrappedNativeAsset.toLowerCase()));return Gt(e,t,o)};const{tokens:i,contracts:s}=En(t.chainId);this.relayer=s.balancerRelayer,this.wrappedNativeAsset=i.wrappedNativeAsset}checkInputs(e,t){if(0===e.length)throw new vn(An.MISSING_TOKENS);if(t.every((e=>"0"===e)))throw new vn(An.JOIN_WITH_ZERO_AMOUNT);if(e.length!=t.length)throw new vn(An.INPUT_LENGTH_MISMATCH);if(e.some((e=>e===o))&&e.some((e=>e.toLowerCase()===this.wrappedNativeAsset.toLowerCase())))throw new vn(An.INPUT_TOKEN_INVALID)}async joinPool(e,t,a,i,s,r,p,d){this.checkInputs(t,a);const l=await this.poolGraph.getGraphNodes(!0,e,[]),u=t.findIndex((e=>e===o)),c=-1!==u,y=Gt(t,u,this.wrappedNativeAsset.toLowerCase()),b=Ur.getJoinPaths(l,y,a),m=Ur.totalBptZeroPriceImpact(b);Dr();const{multiRequests:f,encodedCall:T,outputIndexes:h}=await this.createCalls(b,i,c,void 0,d),{amountsOut:I,totalAmountOut:_}=await this.amountsOutByJoinPath(i,f,T,y,h,r,p,"0"),{minAmountsOut:g,totalMinAmountOut:P}=this.minAmountsOutByJoinPath(s,I,_),w=Sn(BigInt(_),m.toBigInt(),!0).toString();Dr();const{encodedCall:x,deltas:E}=await this.createCalls(b,i,c,g,d),A=c?E[this.wrappedNativeAsset.toLowerCase()]:n;return Dr(A.toString()),this.assertDeltas(e,E,y,a,P),{to:this.relayer,encodedCall:x,expectedOut:_,minOut:P,priceImpact:w,value:A}}assertDeltas(e,t,a,n,o){var i;const s=Ie(e);if(t[s.toLowerCase()].add(o).abs().gt(3))throw console.error("join assertDeltas, bptOut: ",s,o,null===(i=t[s.toLowerCase()])||void 0===i?void 0:i.toString()),new vn(An.JOIN_DELTA_AMOUNTS);delete t[s.toLowerCase()],a.forEach(((e,a)=>{var o,i;if(!p.from(n[a]).eq(0)&&(null===(o=t[e.toLowerCase()])||void 0===o?void 0:o.toString())!==n[a])throw console.error("join assertDeltas, tokenIn: ",e,n[a],null===(i=t[e.toLowerCase()])||void 0===i?void 0:i.toString()),new vn(An.JOIN_DELTA_AMOUNTS);delete t[e.toLowerCase()]}));for(const e in t)if("0"!==t[e].toString())throw console.error("join assertDeltas, non-input token should be 0: ",e,t[e].toString()),new vn(An.JOIN_DELTA_AMOUNTS)}updateDeltas(e,t,a){return t.forEach(((t,o)=>{const i=t.toLowerCase();e[i]||(e[i]=n),e[i]=e[i].add(a[o])})),e}}Rr=Ur,Ur.getJoinPaths=(e,t,n)=>{const o=[],i=e.filter((e=>t.filter(((e,t)=>p.from(n[t]).gt(0))).map((e=>e.toLowerCase())).includes(e.address.toLowerCase())));i.some((e=>e.isLeaf))&&o.push(e);const s=i.filter((e=>!e.isLeaf));return s.forEach((e=>{const i=n.find(((a,n)=>Vt(t[n],e.address))),r=s.filter((t=>Vt(t.address,e.address))).reduce(((e,t)=>e.add(t.proportionOfParent)),p.from(0)),d=p.from(i).mul(e.proportionOfParent).div(r).toString(),[l]=Er.createInputTokenNode(0,e.address,e.decimals,e.parent,a,e.balance);l.index=d,l.isLeaf=!1;const u=[l];let c=l.parent,y=l;for(;c;){const e=S(c);e.children=e.children.map((e=>e.address===y.address?y:{...e,index:"0"})),u.push(e),y=e,c=e.parent}o.push(u)})),Rr.updateInputAmounts(o,t,n),o},Ur.updateInputAmounts=(e,t,a)=>{const n=(e,t)=>{if(e.length>1){const a=e.reduce(((e,t)=>e.add(t.index)),p.from(0)),n=p.from(t).sub(a);e[0].index=n.add(e[0].index).toString()}},o=e.find((e=>e[0].isLeaf));if(o){const e=Rr.updateTotalProportions(o);o.forEach((n=>{"input"===n.joinAction&&(n=Rr.updateNodeAmount(n,t,a,e))})),t.forEach(((e,t)=>{const i=o.filter((t=>t.isLeaf&&Vt(t.address,e)));n(i,a[t])}))}const i=e.filter((e=>!e[0].isLeaf));i.length>1&&t.forEach(((e,t)=>{const o=i.map((e=>e[0])).filter((t=>Vt(t.address,e)));n(o,a[t])}))},Ur.totalBptZeroPriceImpact=e=>{let t=p.from("0");return e.forEach((e=>{if(e[0].isLeaf){e.filter((e=>e.isLeaf)).forEach((e=>{const a=Rr.bptOutZeroPiForInputNode(e);t=t.add(a)}))}else{const a=Rr.bptOutZeroPiForInputNode(e[0]);t=t.add(a)}})),t},Ur.bptOutZeroPiForInputNode=e=>{if("0"===e.index||"input"!==e.joinAction)return BigInt(0);let t=1,a=e.parent,n=e.address;for(;void 0!==a;){if("batchSwap"===a.joinAction||"joinPool"===a.joinAction){const e=a.spotPrices[n.toLowerCase()];t*=parseFloat(e),n=a.address}a=a.parent}const o=d(t.toFixed(18),18),i=Ye(BigInt(e.decimals)),s=je(BigInt(e.index),i);return et.divDownFixed(s,o.toBigInt())},Ur.updateTotalProportions=e=>{const t={};return e.forEach((e=>{t[e.address]?t[e.address]=t[e.address].add(e.proportionOfParent):t[e.address]=e.proportionOfParent})),t},Ur.updateNodeAmount=(e,t,a,n)=>{const o=t.map((e=>e.toLowerCase())).indexOf(e.address.toLowerCase());if(-1===o)return e.index="0",e;const i=n[e.address],s=e.proportionOfParent.mul(1e18.toString()).div(i).mul(a[o]).div(1e18.toString());return e.index=s.toString(),e};class Vr{constructor(e,t){this.chainId=e,this.simulateMulticall=async(e,t,a,n,o="0")=>{const i={...await this.encodeBalanceAndAllowanceOverrides(a,n),...await this.encodeRelayerApprovalOverride(a,e)};return this.simulateTransaction(e,t,a,i,o)},this.simulateTransaction=async(e,t,a,n,o)=>{const i={...Object.fromEntries(Object.keys(n).map((e=>[e,{storage:n[e].value}]))),[a]:{balance:d("100",18).toHexString()}},s={network_id:this.chainId.toString(),block_number:this.blockNumber,from:a,to:e,input:t,value:o,save_if_fails:!0,simulation_type:"quick",state_objects:i},r=this.tenderlyUrl+"simulate";return(await z.post(r,s,this.opts)).data.transaction.transaction_info.call_trace.output},this.encodeRelayerApprovalOverride=async(e,t)=>{const a={[`${this.vaultAddress}`]:{value:{[`_approvedRelayers[${e}][${t}]`]:(!0).toString()}}};return await this.requestStateOverrides(a)},this.encodeBalanceAndAllowanceOverrides=async(e,t)=>{const a=t.filter((e=>e!==o));if(0===a.length)return{};let n={};a.forEach((t=>n={...n,[`${t}`]:{value:{[`_balances[${e}]`]:s.toString(),[`_allowances[${e}][${this.vaultAddress}]`]:s.toString(),[`balanceOf[${e}]`]:s.toString(),[`allowance[${e}][${this.vaultAddress}]`]:s.toString(),[`balances[${e}]`]:s.toString(),[`allowed[${e}][${this.vaultAddress}]`]:s.toString()}}}));const i=await this.requestStateOverrides(n);if(Object.keys(i).some((e=>2!==Object.keys(i[e].value).length)))throw new Error("Couldn't encode state overrides - states should match the ones in the contracts");return i},this.requestStateOverrides=async e=>{const t=this.tenderlyUrl+"contracts/encode-states",a={networkID:this.chainId.toString(),stateOverrides:e},n=(await z.post(t,a,this.opts)).data.stateOverrides;if(!n||Object.keys(n).length!==Object.keys(e).length)throw new Error("Couldn't encode state overrides - contracts should be verified and whitelisted on Tenderly");return n};const{contracts:a}=En(this.chainId);this.vaultAddress=a.vault,this.tenderlyUrl=`https://api.tenderly.co/api/v1/account/${t.user}/project/${t.project}/`,this.opts={headers:{"X-Access-Key":t.accessKey}},this.blockNumber=t.blockNumber}}var qr;!function(e){e[e.Tenderly=0]="Tenderly",e[e.VaultModel=1]="VaultModel",e[e.Static=2]="Static"}(qr||(qr={}));class Gr{constructor(t,a){this.simulateGeneralisedJoin=async(e,t,a,n,o,i,s,r,p)=>{const d=[];switch(r){case qr.Tenderly:{if(!this.tenderlyHelper)throw new Error("Missing Tenderly config");const t=await this.tenderlyHelper.simulateMulticall(e,a,o,i,p);d.push(...this.decodeResult(t,n));break}case qr.VaultModel:{const e=await this.simulateRequests(t);d.push(...e);break}case qr.Static:{const t=await s.call({to:e,data:a,value:p});try{d.push(...this.decodeResult(t,n))}catch(e){const a=Buffer.from(t.split("x")[1],"hex").toString("utf8");throw new Error(`Transaction reverted with error: ${a}`)}break}default:throw new Error("Simulation type not supported")}return d},this.simulateGeneralisedExit=async(e,t,a,n,o,i,s,r)=>{const p=[];switch(r){case qr.Tenderly:{if(!this.tenderlyHelper)throw new Error("Missing Tenderly config");const t=await this.tenderlyHelper.simulateMulticall(e,a,o,[i]);p.push(...this.decodeResult(t,n));break}case qr.VaultModel:{const e=await this.simulateRequests(t);p.push(...e);break}case qr.Static:{const t=await s.call({to:e,data:a});try{p.push(...this.decodeResult(t,n))}catch(e){const a=Buffer.from(t.split("x")[1],"hex").toString("utf8");throw new Error(`Transaction reverted with error: ${a}`)}break}default:throw new Error("Simulation type not supported")}return p},this.decodeResult=(t,a)=>{const n=e.decode(["bytes[]"],t)[0];return a.map((t=>e.decode(["uint256"],n[t]).toString()))},this.simulateRequests=async e=>{if(void 0===this.vaultModel)throw new Error("Missing Vault Model Config.");const t=[];for(const[a,n]of e.entries()){const e=await this.vaultModel.multicall(n,0===a),o=Object.values(e).filter((e=>e.lt(0)));if(0===o.length)throw new Error("No delta found for token out.");t.push(...o.map((e=>e.mul(-1).toString())))}return t},t.tenderly&&(this.tenderlyHelper=new Vr(t.chainId,t.tenderly)),this.vaultModel=a?new Nr(a,t.addresses.tokens.wrappedNativeAsset):void 0}}const Wr=ya.createInterface();function $r(e){Re.getInstance()}class Hr{constructor(e,t,o){this.poolGraph=e,this.simulationService=o,this.amountsOutByExitPath=async(e,t,a,n,o,i,s)=>await this.simulationService.simulateGeneralisedExit(this.relayer,t,a,o,e,n,i,s),this.amountsOutByTokenOut=(e,t,a)=>{const o={};t.forEach(((e,t)=>{var i;return o[e]=(null!==(i=o[e])&&void 0!==i?i:n).add(a[t])}));return e.map((e=>o[e].toString()))},this.minAmountsOut=(e,t,a)=>({minAmountsOutByExitPath:e.map((e=>Dt(p.from(e),p.from(a)).toString())),minAmountsOutByTokenOut:t.map((e=>Dt(p.from(e),p.from(a)).toString()))}),this.getExitPaths=(e,t)=>{const o=e.map((e=>{const n=[e];for(;n[0].parent;)n.unshift(S(n[0].parent));return n[0].index=n[n.length-1].proportionOfParent.mul(t).div(a).toString(),n})),i=o.reduce(((e,t)=>{const a=t[0].index;return p.from(a).add(e)}),n),s=p.from(t).sub(i);return o[o.length-1][0].index=s.add(o[o.length-1][0].index).toString(),o},this.createUnwrap=(e,t,a,o,i,s)=>{var r,p;const d=ar.toChainedReference(this.getOutputRef(a,e.index)).toString(),l=ar.toChainedReference(this.getOutputRef(a,t.index)),u=null===(r=e.parent)||void 0===r?void 0:r.type,c={wrappedToken:e.address,sender:i,recipient:s,amount:d,outputReference:l},y=ar.encodeUnwrap(c,u);$r(),$r(),$r(JSON.stringify(c));return{modelRequest:Nr.mapUnwrapRequest(d,l,null===(p=e.parent)||void 0===p?void 0:p.id),encodedCall:y,assets:[t.address],amounts:[n.sub(o).toString()]}},this.getOutputRef=(e,t)=>100*e+parseInt(t),this.receivesFromInternal=e=>!!e.parent&&("output"!==e.exitAction&&"unwrap"!==e.exitAction&&"exitPool"!==e.exitAction);const{tokens:i,contracts:s}=En(t.chainId);this.wrappedNativeAsset=i.wrappedNativeAsset,this.relayer=s.balancerRelayer}async getExitInfo(e,t,a,n){$r();const o=await this.getExit(e,t,a,n,[],qr.VaultModel);return{tokensOut:o.tokensOut,estimatedAmountsOut:o.expectedAmountsOut,priceImpact:o.priceImpact,tokensToUnwrap:o.tokensToUnwrap}}async buildExitCall(e,t,a,n,o,i,s,r){$r();const p=await this.getExit(e,t,a,o,null!=r?r:[],i,s),{minAmountsOutByExitPath:d,minAmountsOutByTokenOut:l}=this.minAmountsOut(p.expectedAmountsOutByExitPath,p.expectedAmountsOut,n);$r();const{encodedCall:u,deltas:c}=await this.createCalls(p.exitPaths,a,p.isProportional,d,s);return this.assertDeltas(e,c,t,p.tokensOut,l),{to:this.relayer,encodedCall:u,tokensOut:p.tokensOut,expectedAmountsOut:p.expectedAmountsOut,minAmountsOut:l,priceImpact:p.priceImpact}}async getExit(e,t,a,n,o,i,s){const r=await this.poolGraph.getGraphNodes(!1,e,o),d=Er.isProportionalPools(r);$r();let l=[],u=[],c=[];const y=r.filter((e=>"output"===e.exitAction));if(u=y.map((e=>e.address.toLowerCase())),c=[...new Set(u)].sort(),d){const e=r.map(((e,a)=>(0===a&&(e.index=t),e)));l[0]=e}else l=this.getExitPaths(y,t);const{multiRequests:b,encodedCall:m,outputIndexes:f}=await this.createCalls(l,a,d,void 0,s),T=await this.amountsOutByExitPath(a,b,m,r[0].address,f,n,i),h=y.filter(((e,t)=>p.from(T[t]).gt(e.balance))).map((e=>e.address.toLowerCase()));if(o.some((e=>h.includes(e.toLowerCase()))))throw new Error("Insufficient pool balance to perform generalised exit - try exitting with smaller amounts");if(h.length>0)return await this.getExit(e,t,a,n,[...new Set(h)].sort(),i,s);{const a=this.amountsOutByTokenOut(c,u,T),n=await this.calculatePriceImpact(e,this.poolGraph,c,a,t);return{tokensToUnwrap:o,tokensOut:c,exitPaths:l,isProportional:d,expectedAmountsOut:a,expectedAmountsOutByExitPath:T,priceImpact:n}}}async calculatePriceImpact(e,t,a,n,o){const i=await t.getGraphNodes(!0,e,[]),s=Ur.getJoinPaths(i,a,n),r=Ur.totalBptZeroPriceImpact(s);return Sn(BigInt(o),r.toBigInt(),!1).toString()}assertDeltas(e,t,a,n,o){var i;const s=Ie(e);if(t[s.toLowerCase()].sub(a).abs().gt(3))throw console.error("exit assertDeltas, bptIn: ",s,a,null===(i=t[s.toLowerCase()])||void 0===i?void 0:i.toString()),new vn(An.EXIT_DELTA_AMOUNTS);delete t[s.toLowerCase()],n.forEach(((e,a)=>{var n;if(t[e.toLowerCase()].add(o[a]).abs().gt(1))throw console.error("exit assertDeltas, tokenOut: ",e,o[a],null===(n=t[e.toLowerCase()])||void 0===n?void 0:n.toString()),new vn(An.EXIT_DELTA_AMOUNTS);delete t[e.toLowerCase()]}));for(const e in t)if("0"!==t[e].toString())throw console.error("exit assertDeltas, non-input token should be 0: ",e,t[e].toString()),new vn(An.EXIT_DELTA_AMOUNTS)}async createCalls(e,t,a,n,o){const{multiRequests:i,calls:s,outputIndexes:r,deltas:p}=this.createActionCalls(S(e),t,a,n);o&&s.unshift(ar.encodeSetRelayerApproval(this.relayer,!0,o));return{multiRequests:i,encodedCall:Wr.encodeFunctionData("multicall",[s]),outputIndexes:o?r.map((e=>e+1)):r,deltas:p}}updateDeltas(e,t,a){return t.forEach(((t,o)=>{const i=t.toLowerCase();e[i]||(e[i]=n),e[i]=e[i].add(a[o])})),e}createActionCalls(e,t,n,o){const i=[],s=[],r=[],p=!o,d={},l=(e,a)=>a.children.filter((t=>e.map((e=>e.index)).includes(t.index))).some((e=>"output"===e.exitAction))?t:this.relayer;return e.forEach(((e,u)=>{const c=[],y=e.filter((e=>"output"===e.exitAction));e.forEach((i=>{const b=i.children.find((t=>e.map((e=>e.index)).includes(t.index))),m=((e,a)=>a.parent?l(e,a.parent):t)(e,i),f=l(e,i),T=i.children.filter((t=>e.map((e=>e.index)).includes(t.index))).some((e=>"output"===e.exitAction||"unwrap"===e.exitAction));let h="0";const I=Array(i.children.length).fill("0");switch(o&&T&&(n?i.children.forEach(((e,t)=>{let n;"unwrap"===e.exitAction?(n=y.indexOf(e.children[0]),h=a.mul(o[n]).div(e.priceRate).toString()):"output"===e.exitAction?(n=y.indexOf(e),h=o[n]):h="0",I[t]=h})):h="unwrap"===(null==b?void 0:b.exitAction)?a.mul(o[u]).div(b.priceRate).toString():o[u]),i.exitAction){case"unwrap":{const{modelRequest:e,encodedCall:t,assets:a,amounts:n}=this.createUnwrap(i,b,u,h,m,f);c.push(e),s.push(t),this.updateDeltas(d,a,n);break}case"batchSwap":{const{modelRequest:e,encodedCall:t,assets:a,amounts:n}=this.createSwap(i,b,u,h,m,f);c.push(e),s.push(t),this.updateDeltas(d,a,n);break}case"exitPool":{let e;e=n?this.createExitPoolProportional(i,I,m,f):this.createExitPool(i,b,u,h,m,f);const{modelRequest:t,encodedCall:a,bptIn:o,tokensOut:r,amountsOut:p}=e;c.push(t),s.push(a),this.updateDeltas(d,[i.address,...r],[o,...p]);break}case"output":p&&(s.push(ar.encodePeekChainedReferenceValue(ar.toChainedReference(this.getOutputRef(u,i.index),!1))),r.push(s.length-1));break;default:return}})),i.push(c)})),{multiRequests:i,calls:s,outputIndexes:r,deltas:d}}createSwap(e,t,a,n,o,i){const s=!e.parent,r=s?e.index:ar.toChainedReference(this.getOutputRef(a,e.index)).toString(),d=t.address,l=[d,e.address],u=n,c={poolId:e.id,kind:In.SwapExactIn,assetIn:e.address,assetOut:d,amount:r,userData:"0x"},y={sender:o,recipient:i,fromInternalBalance:this.receivesFromInternal(e),toInternalBalance:this.receivesFromInternal(t)},b=ar.toChainedReference(this.getOutputRef(a,t.index)),m={request:c,funds:y,limit:u,deadline:p.from(Math.ceil(Date.now()/1e3)+3600),value:"0",outputReference:b};$r(),$r(JSON.stringify(m));const f=ar.encodeSwap(m),T=s?r:"0";return{modelRequest:Nr.mapSwapRequest(m),encodedCall:f,assets:l,amounts:["output"!==t.exitAction?"0":p.from(n).mul(-1).toString(),T]}}createBatchSwap(e,t,n,o,i,s){const r=!e.parent,d=r?e.index:ar.toChainedReference(this.getOutputRef(n,e.index)).toString(),l=[...t.map((e=>e.address)),e.address],u=[...o];u.push(d);const c=[],y=[];t.forEach(((t,n)=>{const o=t.proportionOfParent.mul(d).div(a).toString(),i={poolId:e.id,assetInIndex:l.length-1,assetOutIndex:n,amount:o,userData:"0x"};c.push(i),y.push({index:n,key:ar.toChainedReference(this.getOutputRef(0,t.index))})}));const b=c.reduce(((e,t)=>e.add(t.amount)),p.from(0)),m=p.from(d).sub(b);c[0].amount=m.add(c[0].amount).toString();const f={sender:i,recipient:s,fromInternalBalance:this.receivesFromInternal(e),toInternalBalance:this.receivesFromInternal(t[0])},T={swapType:In.SwapExactIn,swaps:c,assets:l,funds:f,limits:u,deadline:p.from(Math.ceil(Date.now()/1e3)+3600),value:"0",outputReferences:y};$r(),$r(JSON.stringify(T));const h=ar.encodeBatchSwap(T),I=Nr.mapBatchSwapRequest(T),_=r?d:"0",g=[...t.map(((e,t)=>"output"!==e.exitAction?"0":p.from(o[t]).mul(-1).toString())),_];return{modelRequest:I,encodedCall:h,assets:l,amounts:g}}createExitPool(e,t,a,o,i,s){const r=t.address,p=!e.parent,d=p?e.index:ar.toChainedReference(this.getOutputRef(a,e.index)).toString(),l=[],u=[];e.children.forEach((e=>{l.push(e.address),u.push(e.address===r?o:"0")})),e.type===Be.ComposableStable&&(l.push(e.address),u.push("0"));const c=new Le(this.wrappedNativeAsset),[y,b]=c.sortTokens(l,u);let m=[];const f=y.map((e=>e.toLowerCase())).indexOf(e.address.toLowerCase());let T;m=-1===f?y:[...y.slice(0,f),...y.slice(f+1)],T=e.type===Be.Weighted?pe.exitExactBPTInForOneTokenOut(d,m.indexOf(r)):re.exitExactBPTInForOneTokenOut(d,m.indexOf(r));const h=[{index:y.map((e=>e.toLowerCase())).indexOf(r.toLowerCase()),key:ar.toChainedReference(this.getOutputRef(a,t.index))}],I=this.receivesFromInternal(t),_=ar.formatExitPoolInput({poolId:e.id,poolKind:0,sender:i,recipient:s,outputReferences:h,exitPoolRequest:{},assets:y,minAmountsOut:b,userData:T,toInternalBalance:I});$r(),$r(JSON.stringify(_));const g=ar.encodeExitPool(_),P=Nr.mapExitPoolRequest(_),w=b.map((e=>ar.isChainedReference(e)?"0":n.sub(e).toString())),x=ar.isChainedReference(d)?"0":d;return{modelRequest:P,encodedCall:g,bptIn:p?x:n.toString(),tokensOut:"output"!==t.exitAction?[]:y,amountsOut:"output"!==t.exitAction?[]:w}}createExitPoolProportional(e,t,a,o){const i=!e.parent,s=i?e.index:ar.toChainedReference(this.getOutputRef(0,e.index)).toString(),r=e.children.map((e=>e.address)),p=[...t];e.type===Be.ComposableStable&&(r.push(e.address),p.push("0"));const d=new Le(this.wrappedNativeAsset),[l,u]=d.sortTokens(r,p);let c;c=e.type===Be.Weighted?pe.exitExactBPTInForTokensOut(s):e.type===Be.ComposableStable?be.exitExactBPTInForAllTokensOut(s):re.exitExactBPTInForTokensOut(s);const y=e.children.map((e=>({index:l.map((e=>e.toLowerCase())).indexOf(e.address.toLowerCase()),key:ar.toChainedReference(this.getOutputRef(0,e.index))})));let b=0;e.type===Be.ComposableStable&&(b=3);const m=e.children.every((e=>this.receivesFromInternal(e))),f=ar.formatExitPoolInput({poolId:e.id,poolKind:b,sender:a,recipient:o,outputReferences:y,exitPoolRequest:{},assets:l,minAmountsOut:u,userData:c,toInternalBalance:m});$r(),$r(JSON.stringify(f));const T=ar.encodeExitPool(f),h=Nr.mapExitPoolRequest(f),I=u.map((e=>ar.isChainedReference(e)?"0":n.sub(e).toString())),_=ar.isChainedReference(s)?"0":s,g=i?_:n.toString(),P=l.filter((t=>e.children.filter((e=>"output"===e.exitAction)).map((e=>e.address)).includes(t))),w=I.filter(((e,t)=>P.includes(l[t])));return{modelRequest:h,encodedCall:T,bptIn:g,tokensOut:P,amountsOut:w}}}class Kr{constructor(e){this.yesterdaysPools=e}async last24h(e){let t;return this.yesterdaysPools&&(t=await this.yesterdaysPools.find(e.id)),e.totalSwapVolume?(null==t?void 0:t.totalSwapVolume)?parseFloat(e.totalSwapVolume)-parseFloat(t.totalSwapVolume):e.createTime&&rr(e.createTime)?parseFloat(e.totalSwapVolume):0:0}}class Jr{constructor(e,t){this.checkCreateInputs=({tokenAddresses:e,tokenRateCacheDurations:t,exemptFromYieldProtocolFeeFlags:a,rateProviders:n,swapFeeEvm:o})=>{if(e.length!==t.length||t.length!==a.length||a.length!==n.length)throw new vn(An.INPUT_LENGTH_MISMATCH);if(BigInt(o)<=BigInt(0)||BigInt(o)>BigInt(1e17))throw new vn(An.INVALID_SWAP_FEE_PERCENTAGE)},this.parseCreateParamsForEncoding=({name:e,symbol:t,tokenAddresses:a,amplificationParameter:n,rateProviders:o,tokenRateCacheDurations:i,exemptFromYieldProtocolFeeFlags:s,swapFeeEvm:r,owner:p,salt:d})=>{const l=new Le(this.wrappedNativeAsset),[u,c,y,b]=l.sortTokens(a,o,i,s);return[e,t,u,n,c,y,b,r.toString(),p,d||Xt()]},this.encodeCreateFunctionData=e=>Ia.createInterface().encodeFunctionData("create",e),this.checkInitJoinInputs=({poolId:e,poolAddress:t,tokensIn:a,amountsIn:n})=>{if(!e||!t)throw new vn(An.NO_POOL_DATA);if(a.length!==n.length)throw new vn(An.INPUT_LENGTH_MISMATCH)},this.parseParamsForInitJoin=({joiner:e,poolId:t,poolAddress:a,tokensIn:n,amountsIn:o})=>{const i=new Le(this.wrappedNativeAsset),s=[...n,a],r=[...o,"0"],p=[...o,BigInt.asUintN(256,BigInt(-1)).toString()],[d,l,u]=i.sortTokens(s,r,p),c={poolId:t,sender:e,recipient:e,joinPoolRequest:{assets:d,maxAmountsIn:u,userData:be.joinInit(l),fromInternalBalance:!1}};return{attributes:c,params:[c.poolId,c.sender,c.recipient,c.joinPoolRequest]}},this.encodeInitJoinFunctionData=e=>{const t="joinPool";return{functionName:t,data:nn.createInterface().encodeFunctionData(t,e)}},this.getPoolAddressAndIdWithReceipt=async(e,t)=>{var a;const n=Jt({receipt:t,to:(null===(a=this.contracts.composableStablePoolFactory)||void 0===a?void 0:a.address)||"",contractInterface:Ia.createInterface(),logName:"PoolCreated"}).args.pool,o=this.getPoolInterface(),i=new Z(n,o,e);return{poolAddress:n,poolId:await i.getPoolId()}};const{tokens:a}=En(e.chainId);this.wrappedNativeAsset=a.wrappedNativeAsset,this.contracts=t}create({name:e,symbol:t,tokenAddresses:a,amplificationParameter:n,rateProviders:o,tokenRateCacheDurations:i,exemptFromYieldProtocolFeeFlags:s,swapFeeEvm:r,owner:p,salt:d}){var l;this.checkCreateInputs({rateProviders:o,tokenAddresses:a,tokenRateCacheDurations:i,exemptFromYieldProtocolFeeFlags:s,swapFeeEvm:r});const u=this.parseCreateParamsForEncoding({name:e,symbol:t,tokenAddresses:a,amplificationParameter:n,rateProviders:o,tokenRateCacheDurations:i,exemptFromYieldProtocolFeeFlags:s,swapFeeEvm:r,owner:p,salt:d}),c=this.encodeCreateFunctionData(u);return{to:null===(l=this.contracts.composableStablePoolFactory)||void 0===l?void 0:l.address,data:c}}buildInitJoin({joiner:e,poolId:t,poolAddress:a,tokensIn:n,amountsIn:o}){this.checkInitJoinInputs({tokensIn:n,amountsIn:o,poolId:t,poolAddress:a});const{attributes:i,params:s}=this.parseParamsForInitJoin({joiner:e,poolId:t,poolAddress:a,tokensIn:n,amountsIn:o}),{functionName:r,data:p}=this.encodeInitJoinFunctionData(s);return{to:wn,functionName:r,data:p,attributes:i}}getPoolInterface(){return Ta.createInterface()}}class Xr{constructor(e,t){this.parseCreateParamsForEncoding=({name:e,symbol:t,tokenAddresses:a,normalizedWeights:n,rateProviders:o,swapFeeEvm:i,owner:s,salt:r})=>{const p=new Le(this.wrappedNativeAsset),[d,l,u]=p.sortTokens(a,n,o);return[e,t,d,l,u,i.toString(),s,r||Xt()]},this.encodeCreateFunctionData=e=>pn.createInterface().encodeFunctionData("create",e),this.parseParamsForInitJoin=({joiner:e,poolId:t,tokensIn:a,amountsIn:n})=>{const o=new Le(this.wrappedNativeAsset),[i,s]=o.sortTokens(a,n),r={poolId:t,sender:e,recipient:e,joinPoolRequest:{assets:i,maxAmountsIn:s,userData:pe.joinInit(s),fromInternalBalance:!1}};return{attributes:r,params:[r.poolId,r.sender,r.recipient,r.joinPoolRequest]}},this.encodeInitJoinFunctionData=e=>{const t="joinPool";return{functionName:t,data:nn.createInterface().encodeFunctionData(t,e)}},this.checkInitJoinInputs=({poolId:e,tokensIn:t,amountsIn:a})=>{if(!e)throw new vn(An.NO_POOL_DATA);if(t.length!==a.length)throw new vn(An.INPUT_LENGTH_MISMATCH)};const{tokens:a}=En(e.chainId);this.wrappedNativeAsset=a.wrappedNativeAsset,this.contracts=t}create({name:e,symbol:t,tokenAddresses:a,normalizedWeights:n,rateProviders:o,swapFeeEvm:i,owner:s,salt:r}){var p;this.checkCreateInputs({tokenAddresses:a,normalizedWeights:n,swapFeeEvm:i,rateProviders:o});const d=this.parseCreateParamsForEncoding({name:e,symbol:t,tokenAddresses:a,normalizedWeights:n,rateProviders:o,swapFeeEvm:i,owner:s,salt:r}),l=this.encodeCreateFunctionData(d);return{to:null===(p=this.contracts.weightedPoolFactory)||void 0===p?void 0:p.address,data:l}}checkCreateInputs({tokenAddresses:e,normalizedWeights:t,swapFeeEvm:a,rateProviders:n}){if(e.length!==t.length||t.length!==n.length)throw new vn(An.INPUT_LENGTH_MISMATCH);if(e.length<2)throw new vn(An.BELOW_MIN_TOKENS);if(e.length>8)throw new vn(An.ABOVE_MAX_TOKENS);if(BigInt(a)<=BigInt(0)||BigInt(a)>BigInt(1e17))throw new vn(An.INVALID_SWAP_FEE_PERCENTAGE);if(t.reduce(((e,t)=>et.add(e,BigInt(t))),BigInt(0))!==BigInt(1e18))throw new vn(An.INVALID_WEIGHTS)}buildInitJoin({joiner:e,poolId:t,tokensIn:a,amountsIn:n}){this.checkInitJoinInputs({poolId:t,tokensIn:a,amountsIn:n});const{attributes:o,params:i}=this.parseParamsForInitJoin({joiner:e,poolId:t,tokensIn:a,amountsIn:n}),{functionName:s,data:r}=this.encodeInitJoinFunctionData(i);return{to:wn,functionName:s,data:r,attributes:o}}async getPoolAddressAndIdWithReceipt(e,t){var a;const n=Jt({receipt:t,to:(null===(a=this.contracts.weightedPoolFactory)||void 0===a?void 0:a.address)||"",contractInterface:pn.createInterface(),logName:"PoolCreated"}).args.pool,o=this.getPoolInterface(),i=new Z(n,o,e);return{poolAddress:n,poolId:await i.getPoolId()}}getPoolInterface(){return sn.createInterface()}}var Yr;!function(e){e[e.AAVE_V1=0]="AAVE_V1",e[e.AAVE_V2=1]="AAVE_V2",e[e.AAVE_V3=2]="AAVE_V3",e[e.AMPLEFORTH=3]="AMPLEFORTH",e[e.BEEFY=4]="BEEFY",e[e.EULER=5]="EULER",e[e.GEARBOX=6]="GEARBOX",e[e.IDLE=7]="IDLE",e[e.MORPHO=8]="MORPHO",e[e.RADIANT=9]="RADIANT",e[e.REAPER=10]="REAPER",e[e.SILO=11]="SILO",e[e.STARGATE=12]="STARGATE",e[e.STURDY=13]="STURDY",e[e.TESSERA=14]="TESSERA",e[e.TETU=15]="TETU",e[e.YEARN=16]="YEARN",e[e.MIDAS=17]="MIDAS",e[e.AGAVE=18]="AGAVE"}(Yr||(Yr={}));class jr{constructor(e,t){this.getPoolFactoryInterface=()=>{switch(this.poolType){case Be.AaveLinear:return ta.createInterface();case Be.Linear:case Be.ERC4626Linear:return va.createInterface();case Be.EulerLinear:return Ma.createInterface();case Be.GearboxLinear:return Ua.createInterface();case Be.YearnLinear:return cn.createInterface();default:throw new vn(An.UNSUPPORTED_POOL_TYPE)}},this.getPoolInterface=()=>{switch(this.poolType){case Be.AaveLinear:return Qt.createInterface();case Be.Linear:case Be.ERC4626Linear:return Ea.createInterface();case Be.EulerLinear:return ka.createInterface();case Be.GearboxLinear:return La.createInterface();case Be.YearnLinear:return ln.createInterface();default:throw new vn(An.UNSUPPORTED_POOL_TYPE)}},this.checkCreateInputs=({swapFeeEvm:e,protocolId:t})=>{if(!Yr[t])throw new vn(An.INVALID_PROTOCOL_ID);if(BigInt(e)<=BigInt(0)||BigInt(e)>BigInt(1e17))throw new vn(An.INVALID_SWAP_FEE_PERCENTAGE);this.getFactoryAddress()},this.parseCreateParamsForEncoding=({name:e,symbol:t,mainToken:a,wrappedToken:n,upperTargetEvm:o,swapFeeEvm:i,owner:s,protocolId:r,salt:p})=>this.poolType===Be.EulerLinear?[e,t,a,n,o,i,s,r.toString()]:[e,t,a,n,o,i,s,r.toString(),p||Xt()],this.encodeCreateFunctionData=e=>{const t=this.getPoolFactoryInterface();return this.poolType,Be.EulerLinear,t.encodeFunctionData("create",e)},this.getFactoryAddress=()=>{switch(this.poolType){case Be.AaveLinear:if(this.contracts.aaveLinearPoolFactory)return this.contracts.aaveLinearPoolFactory.address;throw new vn(An.UNSUPPORTED_POOL_TYPE);case Be.Linear:case Be.ERC4626Linear:if(this.contracts.erc4626LinearPoolFactory)return this.contracts.erc4626LinearPoolFactory.address;throw new vn(An.UNSUPPORTED_POOL_TYPE);case Be.EulerLinear:if(this.contracts.eulerLinearPoolFactory)return this.contracts.eulerLinearPoolFactory.address;throw new vn(An.UNSUPPORTED_POOL_TYPE);case Be.GearboxLinear:if(this.contracts.gearboxLinearPoolFactory)return this.contracts.gearboxLinearPoolFactory.address;throw new vn(An.UNSUPPORTED_POOL_TYPE);case Be.YearnLinear:if(this.contracts.yearnLinearPoolFactory)return this.contracts.yearnLinearPoolFactory.address;throw new vn(An.UNSUPPORTED_POOL_TYPE);default:throw new vn(An.UNSUPPORTED_POOL_TYPE)}},this.getPoolAddressAndIdWithReceipt=async(e,t)=>{const a=Jt({receipt:t,to:this.getFactoryAddress()||"",contractInterface:this.getPoolFactoryInterface(),logName:"PoolCreated"}).args.pool,n=this.getPoolInterface(),o=new Z(a,n,e);return{poolAddress:a,poolId:await o.getPoolId()}},this.contracts=e,this.poolType=t}buildInitJoin(){throw new vn(An.UNSUPPORTED_POOL_TYPE)}create({name:e,symbol:t,mainToken:a,wrappedToken:n,upperTargetEvm:o,swapFeeEvm:i,owner:s,protocolId:r,salt:p}){this.checkCreateInputs({swapFeeEvm:i,protocolId:r});const d=this.parseCreateParamsForEncoding({name:e,symbol:t,mainToken:a,wrappedToken:n,upperTargetEvm:o,swapFeeEvm:i,owner:s,protocolId:r,salt:p}),l=this.encodeCreateFunctionData(d);return{to:this.getFactoryAddress(),data:l}}}class zr{constructor(e,t){this.networkConfig=e,this.contracts=t.contracts}of(e){switch(e){case"Weighted":return new Xr(this.networkConfig,this.contracts);case"Investment":case"LiquidityBootstrapping":case"Stable":case"MetaStable":case"StablePhantom":default:throw new vn(An.UNSUPPORTED_POOL_TYPE);case"ComposableStable":return new Jr(this.networkConfig,this.contracts);case"Linear":case"AaveLinear":case"ERC4626Linear":case"EulerLinear":case"GearboxLinear":case"YearnLinear":return new jr(this.contracts,e)}}}class Zr{constructor(e){this.pool=e;const t=(e=>{switch(e){case Be.Weighted:return pe;case Be.Stable:case Be.MetaStable:case Be.StablePhantom:case Be.Element:case Be.Gyro2:case Be.Gyro3:return re;case Be.ComposableStable:return be;default:if(Ht(e))return re}})(e.poolType);if(!t)throw"Pool type not supported";this.encoder=t}buildQueryJoinExactIn({maxAmountsInByToken:e,minimumBPT:t=n}){const a=this.pool.tokensList.findIndex((e=>this.pool.id.includes(e))),i=[...this.pool.tokensList],s=this.pool.tokensList.map((t=>{var a;return null!==(a=e.get(t))&&void 0!==a?a:p.from("0")}));let r;r=a>-1?Wt(s,a):s;const d=this.encoder.joinExactTokensInForBPTOut(r,t);return[this.pool.id,o,o,{assets:i,maxAmountsIn:s,userData:d,fromInternalBalance:!1}]}buildQueryJoinExactOut({maxAmountIn:e,bptOut:t,tokenIn:a}){const n=this.pool.tokensList.findIndex((e=>this.pool.id.includes(e)));let i=[...this.pool.tokensList];n>-1&&(i=Wt(this.pool.tokensList,n));const s=i.indexOf(a),r=this.encoder.joinTokenInForExactBPTOut(t,s),p=e?this.pool.tokensList.map((t=>t===a?e:"0")):[];return[this.pool.id,o,o,{assets:this.pool.tokensList,maxAmountsIn:p,userData:r,fromInternalBalance:!1}]}buildQueryExitToSingleToken({minAmountOut:e,bptIn:t,tokenOut:a}){const n=this.pool.tokensList.findIndex((e=>this.pool.id.includes(e)));let i=[...this.pool.tokensList];n>-1&&(i=Wt(this.pool.tokensList,n));const s=i.indexOf(a),r=this.encoder.exitExactBPTInForOneTokenOut(t,s),p=e?this.pool.tokensList.map((t=>t===a?e:"0")):[];return[this.pool.id,o,o,{assets:this.pool.tokensList,minAmountsOut:p,userData:r,toInternalBalance:!1}]}buildQueryExitProportionally({minAmountsOut:e=[],bptIn:t}){if(!this.encoder.exitExactBPTInForTokensOut)throw"Proportional exit not implemented";const a=this.encoder.exitExactBPTInForTokensOut(t);return[this.pool.id,o,o,{assets:this.pool.tokensList,minAmountsOut:e,userData:a,toInternalBalance:!1}]}buildQueryExitExactOut({minAmountsOut:e,maxBptIn:t=i}){const a=this.pool.tokensList.findIndex((e=>this.pool.id.includes(e)));let n=[...e];a>-1&&(n=Wt(e,a));const s=this.encoder.exitBPTInForExactTokensOut(n,t);return[this.pool.id,o,o,{assets:this.pool.tokensList,minAmountsOut:e,userData:s,toInternalBalance:!1}]}}class Qr{constructor(e){this.liquidityGaugesRepository=e}async relativeWeight(e){const t=await this.liquidityGaugesRepository.findBy("poolId",e);return t?t.relativeWeight:0}async weekly(e){return fr()*await this.relativeWeight(e)}}const ep=(e,t,a)=>{const n=e.tokens.filter((t=>!e.id.toLowerCase().includes(t.address.toLowerCase()))),o=n.findIndex((e=>e.address.toLowerCase()===t.toLowerCase()));if(-1==o)throw new Error("Token not found in pool");const i=n.map((e=>_t(e.balance,e.decimals))),s=p.from(a),r=i.map((e=>e.mul(s).div(i[o])));return{tokens:n.map((e=>e.address)),amounts:r.map((e=>e.toString()))}},tp=(e,t)=>()=>{throw`${t} for poolType ${e} not implemented`};class ap{constructor(e,t,a){this.networkConfig=e,this.repositories=t,this.balancerContracts=a,this.aprService=new gr(this.repositories.pools,this.repositories.tokenPrices,this.repositories.tokenMeta,this.repositories.tokenYields,this.repositories.feeCollector,this.repositories.yesterdaysPools,this.repositories.liquidityGauges,this.repositories.feeDistributor,this.repositories.gyroConfigRepository),this.liquidityService=new go(t.pools,t.tokenPrices),this.simulationService=new Gr(e,this.repositories.poolsForSimulations),this.graphService=new Er(this.repositories.poolsOnChain),this.joinService=new Ur(this.graphService,e,this.simulationService),this.exitService=new Hr(this.graphService,e,this.simulationService),this.feesService=new _r(t.yesterdaysPools),this.volumeService=new Kr(t.yesterdaysPools),this.poolFactory=new zr(e,a),this.impermanentLossService=new ur(t.tokenPrices,t.tokenHistoricalPrices),t.liquidityGauges&&(this.emissionsService=new Qr(t.liquidityGauges)),this.proportionalAmounts=ep}static wrap(e,t){let a,n,o;try{a=_o.from(e.poolType),o={buildJoin:(t,n,o,s)=>a.join.buildJoin({joiner:t,pool:e,tokensIn:n,amountsIn:o,slippage:s,wrappedNativeAsset:i}),calcPriceImpact:async(t,n,o)=>a.priceImpactCalculator.calcPriceImpact(e,t.map(BigInt),BigInt(n),o),buildExitExactBPTIn:(t,n,o,s=!1,r,p=!1)=>{if(a.exit.buildExitExactBPTIn)return a.exit.buildExitExactBPTIn({exiter:t,pool:e,bptIn:n,slippage:o,shouldUnwrapNativeAsset:s,wrappedNativeAsset:i,singleTokenOut:r,toInternalBalance:p});throw"ExitExactBPTIn not supported"},buildExitExactTokensOut:(t,n,o,s,r=!1)=>a.exit.buildExitExactTokensOut({exiter:t,pool:e,tokensOut:n,amountsOut:o,slippage:s,wrappedNativeAsset:i,toInternalBalance:r}),buildRecoveryExit:(t,n,o,i=!1)=>a.exit.buildRecoveryExit({exiter:t,pool:e,bptIn:n,slippage:o,toInternalBalance:i}),calcSpotPrice:(t,n)=>a.spotPriceCalculator.calcPoolSpotPrice(t,n,e),calcProportionalAmounts:(t,a)=>ep(e,t,a)}}catch(t){if("UNSUPPORTED_POOL_TYPE"!=t.code){Re.getInstance().warn(t)}o={buildJoin:tp(e.poolType,"buildJoin"),calcPriceImpact:tp(e.poolType,"calcPriceImpact"),buildExitExactBPTIn:tp(e.poolType,"buildExitExactBPTIn"),buildExitExactTokensOut:tp(e.poolType,"buildExitExactTokensOut"),calcSpotPrice:tp(e.poolType,"calcSpotPrice"),buildRecoveryExit:tp(e.poolType,"buildRecoveryExit")}}try{n=new Zr(e),o={...o,buildQueryJoinExactIn:n.buildQueryJoinExactIn.bind(n),buildQueryJoinExactOut:n.buildQueryJoinExactOut.bind(n),buildQueryExitExactOut:n.buildQueryExitExactOut.bind(n),buildQueryExitToSingleToken:n.buildQueryExitToSingleToken.bind(n),buildQueryExitProportionally:n.buildQueryExitProportionally.bind(n)}}catch(t){o={...o,buildQueryJoinExactIn:tp(e.poolType,"buildQueryJoinExactIn"),buildQueryJoinExactOut:tp(e.poolType,"buildQueryJoinExactOut"),buildQueryExitExactOut:tp(e.poolType,"buildQueryExitExactOut"),buildQueryExitToSingleToken:tp(e.poolType,"buildQueryExitToSingleToken"),buildQueryExitProportionally:tp(e.poolType,"buildQueryExitProportionally")}}const i=t.addresses.tokens.wrappedNativeAsset.toLowerCase(),s=e.tokensList.indexOf(e.address);return{...e,...o,bptIndex:s}}dataSource(){return this.repositories.pools}async apr(e){return this.aprService.apr(e)}async impermanentLoss(e,t){return this.impermanentLossService.calcImpLoss(e,t)}async liquidity(e){return this.liquidityService.getLiquidity(e)}async bptPrice(e){return this.liquidityService.getBptPrice(e)}buildJoin({pool:e,tokensIn:t,amountsIn:a,userAddress:n,slippage:o}){const i=_o.from(e.poolType);if(!i)throw`buildJoin for poolType ${e.poolType} not implemented`;return i.join.buildJoin({joiner:n,pool:e,tokensIn:t,amountsIn:a,slippage:o,wrappedNativeAsset:this.networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase()})}buildExitExactBPTIn({pool:e,bptAmount:t,userAddress:a,slippage:n,shouldUnwrapNativeAsset:o,singleTokenOut:i}){const s=_o.from(e.poolType);if(!s||!s.exit.buildExitExactBPTIn)throw`buildExit for poolType ${e.poolType} not implemented`;return s.exit.buildExitExactBPTIn({pool:e,exiter:a,bptIn:t,slippage:n,wrappedNativeAsset:this.networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase(),shouldUnwrapNativeAsset:null!=o&&o,singleTokenOut:null!=i?i:void 0,toInternalBalance:!1})}buildRecoveryExit({pool:e,bptAmount:t,userAddress:a,slippage:n,toInternalBalance:o}){const i=_o.from(e.poolType);if(!i||!i.exit.buildRecoveryExit)throw`buildRecoveryExit for poolType ${e.poolType} not implemented`;return i.exit.buildRecoveryExit({exiter:a,pool:e,bptIn:t,slippage:n,toInternalBalance:!!o})}async generalisedJoin(e,t,a,n,o,i,s,r){return this.joinService.joinPool(e,t,a,n,o,i,s,r)}async generalisedExit(e,t,a,n,o,i,s,r){return this.exitService.buildExitCall(e,t,a,n,o,i,s,r)}calcPriceImpact({pool:e,tokenAmounts:t,bptAmount:a,isJoin:n}){return _o.from(e.poolType).priceImpactCalculator.calcPriceImpact(e,t.map(BigInt),BigInt(a),n)}async getExitInfo(e,t,a,n){return this.exitService.getExitInfo(e,t,a,n)}async fees(e){return this.feesService.last24h(e)}async volume(e){return this.volumeService.last24h(e)}async find(e){const t=await this.dataSource().find(e);if(t)return ap.wrap(t,this.networkConfig)}async findBy(e,t){if("id"==e)return this.find(t);if("address"==e){const e=await this.dataSource().findBy("address",t);if(!e)return;return ap.wrap(e,this.networkConfig)}throw`search by ${e} not implemented`}async all(){const e=await this.dataSource().all();return e?e.map((e=>ap.wrap(e,this.networkConfig))).filter((e=>e)):[]}async where(e){const t=await this.dataSource().where(e);if(!t)return[];return t.map((e=>ap.wrap(e,this.networkConfig))).filter((e=>e))}}const np=new ft("strings/5.7.0");var op,ip;function sp(e,t,a,n,o){if(e===ip.BAD_PREFIX||e===ip.UNEXPECTED_CONTINUE){let e=0;for(let n=t+1;n>6==2;n++)e++;return e}return e===ip.OVERRUN?a.length-t-1:0}function rp(e,t=op.current){t!=op.current&&(np.checkNormalize(),e=e.normalize(t));let a=[];for(let t=0;t>6|192),a.push(63&n|128);else if(55296==(64512&n)){t++;const o=e.charCodeAt(t);if(t>=e.length||56320!=(64512&o))throw new Error("invalid utf-8 string");const i=65536+((1023&n)<<10)+(1023&o);a.push(i>>18|240),a.push(i>>12&63|128),a.push(i>>6&63|128),a.push(63&i|128)}else a.push(n>>12|224),a.push(n>>6&63|128),a.push(63&n|128)}return m(a)}function pp(e){const t=rp(e);if(t.length>31)throw new Error("bytes32 string must be less than 32 bytes");return f(T([t,r]).slice(0,32))}!function(e){e.current="",e.NFC="NFC",e.NFD="NFD",e.NFKC="NFKC",e.NFKD="NFKD"}(op||(op={})),function(e){e.UNEXPECTED_CONTINUE="unexpected continuation byte",e.BAD_PREFIX="bad codepoint prefix",e.OVERRUN="string overrun",e.MISSING_CONTINUE="missing continuation byte",e.OUT_OF_RANGE="out of UTF-8 range",e.UTF16_SURROGATE="UTF-16 surrogate",e.OVERLONG="overlong representation"}(ip||(ip={})),Object.freeze({error:function(e,t,a,n,o){return np.throwArgumentError(`invalid codepoint at offset ${t}; ${e}`,"bytes",a)},ignore:sp,replace:function(e,t,a,n,o){return e===ip.OVERLONG?(n.push(o),0):(n.push(65533),sp(e,t,a))}});var dp,lp="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},up={exports:{}};dp=up,function(){var e="input is invalid type",t="object"==typeof window,a=t?window:{};a.JS_SHA3_NO_WINDOW&&(t=!1);var n=!t&&"object"==typeof self;!a.JS_SHA3_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node?a=lp:n&&(a=self);var o=!a.JS_SHA3_NO_COMMON_JS&&dp.exports,i=!a.JS_SHA3_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,s="0123456789abcdef".split(""),r=[4,1024,262144,67108864],p=[0,8,16,24],d=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],l=[224,256,384,512],u=[128,256],c=["hex","buffer","arrayBuffer","array","digest"],y={128:168,256:136};!a.JS_SHA3_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!i||!a.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer});for(var b=function(e,t,a){return function(n){return new k(e,t,e).update(n)[a]()}},m=function(e,t,a){return function(n,o){return new k(e,t,o).update(n)[a]()}},f=function(e,t,a){return function(t,n,o,i){return g["cshake"+e].update(t,n,o,i)[a]()}},T=function(e,t,a){return function(t,n,o,i){return g["kmac"+e].update(t,n,o,i)[a]()}},h=function(e,t,a,n){for(var o=0;o>5,this.byteCount=this.blockCount<<2,this.outputBlocks=a>>5,this.extraBytes=(31&a)>>3;for(var n=0;n<50;++n)this.s[n]=0}function O(e,t,a){k.call(this,e,t,a)}k.prototype.update=function(t){if(this.finalized)throw new Error("finalize already called");var a,n=typeof t;if("string"!==n){if("object"!==n)throw new Error(e);if(null===t)throw new Error(e);if(i&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||i&&ArrayBuffer.isView(t)))throw new Error(e);a=!0}for(var o,s,r=this.blocks,d=this.byteCount,l=t.length,u=this.blockCount,c=0,y=this.s;c>2]|=t[c]<>2]|=s<>2]|=(192|s>>6)<>2]|=(128|63&s)<=57344?(r[o>>2]|=(224|s>>12)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<>2]|=(240|s>>18)<>2]|=(128|s>>12&63)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<=d){for(this.start=o-d,this.block=r[u],o=0;o>=8);a>0;)o.unshift(a),a=255&(e>>=8),++n;return t?o.push(n):o.unshift(n),this.update(o),o.length},k.prototype.encodeString=function(t){var a,n=typeof t;if("string"!==n){if("object"!==n)throw new Error(e);if(null===t)throw new Error(e);if(i&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||i&&ArrayBuffer.isView(t)))throw new Error(e);a=!0}var o=0,s=t.length;if(a)o=s;else for(var r=0;r=57344?o+=3:(p=65536+((1023&p)<<10|1023&t.charCodeAt(++r)),o+=4)}return o+=this.encode(8*o),this.update(t),o},k.prototype.bytepad=function(e,t){for(var a=this.encode(t),n=0;n>2]|=this.padding[3&t],this.lastByteIndex===this.byteCount)for(e[0]=e[a],t=1;t>4&15]+s[15&e]+s[e>>12&15]+s[e>>8&15]+s[e>>20&15]+s[e>>16&15]+s[e>>28&15]+s[e>>24&15];r%t==0&&(M(a),i=0)}return o&&(e=a[i],p+=s[e>>4&15]+s[15&e],o>1&&(p+=s[e>>12&15]+s[e>>8&15]),o>2&&(p+=s[e>>20&15]+s[e>>16&15])),p},k.prototype.arrayBuffer=function(){this.finalize();var e,t=this.blockCount,a=this.s,n=this.outputBlocks,o=this.extraBytes,i=0,s=0,r=this.outputBits>>3;e=o?new ArrayBuffer(n+1<<2):new ArrayBuffer(r);for(var p=new Uint32Array(e);s>8&255,p[e+2]=t>>16&255,p[e+3]=t>>24&255;r%a==0&&M(n)}return i&&(e=r<<2,t=n[s],p[e]=255&t,i>1&&(p[e+1]=t>>8&255),i>2&&(p[e+2]=t>>16&255)),p},O.prototype=new k,O.prototype.finalize=function(){return this.encode(this.outputBits,!0),k.prototype.finalize.call(this)};var M=function(e){var t,a,n,o,i,s,r,p,l,u,c,y,b,m,f,T,h,I,_,g,P,w,x,E,A,v,S,k,O,M,C,F,B,R,N,L,D,U,V,q,G,W,$,H,K,J,X,Y,j,z,Z,Q,ee,te,ae,ne,oe,ie,se,re,pe,de,le;for(n=0;n<48;n+=2)o=e[0]^e[10]^e[20]^e[30]^e[40],i=e[1]^e[11]^e[21]^e[31]^e[41],s=e[2]^e[12]^e[22]^e[32]^e[42],r=e[3]^e[13]^e[23]^e[33]^e[43],p=e[4]^e[14]^e[24]^e[34]^e[44],l=e[5]^e[15]^e[25]^e[35]^e[45],u=e[6]^e[16]^e[26]^e[36]^e[46],c=e[7]^e[17]^e[27]^e[37]^e[47],t=(y=e[8]^e[18]^e[28]^e[38]^e[48])^(s<<1|r>>>31),a=(b=e[9]^e[19]^e[29]^e[39]^e[49])^(r<<1|s>>>31),e[0]^=t,e[1]^=a,e[10]^=t,e[11]^=a,e[20]^=t,e[21]^=a,e[30]^=t,e[31]^=a,e[40]^=t,e[41]^=a,t=o^(p<<1|l>>>31),a=i^(l<<1|p>>>31),e[2]^=t,e[3]^=a,e[12]^=t,e[13]^=a,e[22]^=t,e[23]^=a,e[32]^=t,e[33]^=a,e[42]^=t,e[43]^=a,t=s^(u<<1|c>>>31),a=r^(c<<1|u>>>31),e[4]^=t,e[5]^=a,e[14]^=t,e[15]^=a,e[24]^=t,e[25]^=a,e[34]^=t,e[35]^=a,e[44]^=t,e[45]^=a,t=p^(y<<1|b>>>31),a=l^(b<<1|y>>>31),e[6]^=t,e[7]^=a,e[16]^=t,e[17]^=a,e[26]^=t,e[27]^=a,e[36]^=t,e[37]^=a,e[46]^=t,e[47]^=a,t=u^(o<<1|i>>>31),a=c^(i<<1|o>>>31),e[8]^=t,e[9]^=a,e[18]^=t,e[19]^=a,e[28]^=t,e[29]^=a,e[38]^=t,e[39]^=a,e[48]^=t,e[49]^=a,m=e[0],f=e[1],J=e[11]<<4|e[10]>>>28,X=e[10]<<4|e[11]>>>28,k=e[20]<<3|e[21]>>>29,O=e[21]<<3|e[20]>>>29,re=e[31]<<9|e[30]>>>23,pe=e[30]<<9|e[31]>>>23,W=e[40]<<18|e[41]>>>14,$=e[41]<<18|e[40]>>>14,R=e[2]<<1|e[3]>>>31,N=e[3]<<1|e[2]>>>31,T=e[13]<<12|e[12]>>>20,h=e[12]<<12|e[13]>>>20,Y=e[22]<<10|e[23]>>>22,j=e[23]<<10|e[22]>>>22,M=e[33]<<13|e[32]>>>19,C=e[32]<<13|e[33]>>>19,de=e[42]<<2|e[43]>>>30,le=e[43]<<2|e[42]>>>30,te=e[5]<<30|e[4]>>>2,ae=e[4]<<30|e[5]>>>2,L=e[14]<<6|e[15]>>>26,D=e[15]<<6|e[14]>>>26,I=e[25]<<11|e[24]>>>21,_=e[24]<<11|e[25]>>>21,z=e[34]<<15|e[35]>>>17,Z=e[35]<<15|e[34]>>>17,F=e[45]<<29|e[44]>>>3,B=e[44]<<29|e[45]>>>3,E=e[6]<<28|e[7]>>>4,A=e[7]<<28|e[6]>>>4,ne=e[17]<<23|e[16]>>>9,oe=e[16]<<23|e[17]>>>9,U=e[26]<<25|e[27]>>>7,V=e[27]<<25|e[26]>>>7,g=e[36]<<21|e[37]>>>11,P=e[37]<<21|e[36]>>>11,Q=e[47]<<24|e[46]>>>8,ee=e[46]<<24|e[47]>>>8,H=e[8]<<27|e[9]>>>5,K=e[9]<<27|e[8]>>>5,v=e[18]<<20|e[19]>>>12,S=e[19]<<20|e[18]>>>12,ie=e[29]<<7|e[28]>>>25,se=e[28]<<7|e[29]>>>25,q=e[38]<<8|e[39]>>>24,G=e[39]<<8|e[38]>>>24,w=e[48]<<14|e[49]>>>18,x=e[49]<<14|e[48]>>>18,e[0]=m^~T&I,e[1]=f^~h&_,e[10]=E^~v&k,e[11]=A^~S&O,e[20]=R^~L&U,e[21]=N^~D&V,e[30]=H^~J&Y,e[31]=K^~X&j,e[40]=te^~ne&ie,e[41]=ae^~oe&se,e[2]=T^~I&g,e[3]=h^~_&P,e[12]=v^~k&M,e[13]=S^~O&C,e[22]=L^~U&q,e[23]=D^~V&G,e[32]=J^~Y&z,e[33]=X^~j&Z,e[42]=ne^~ie&re,e[43]=oe^~se&pe,e[4]=I^~g&w,e[5]=_^~P&x,e[14]=k^~M&F,e[15]=O^~C&B,e[24]=U^~q&W,e[25]=V^~G&$,e[34]=Y^~z&Q,e[35]=j^~Z&ee,e[44]=ie^~re&de,e[45]=se^~pe&le,e[6]=g^~w&m,e[7]=P^~x&f,e[16]=M^~F&E,e[17]=C^~B&A,e[26]=q^~W&R,e[27]=G^~$&N,e[36]=z^~Q&H,e[37]=Z^~ee&K,e[46]=re^~de&te,e[47]=pe^~le&ae,e[8]=w^~m&T,e[9]=x^~f&h,e[18]=F^~E&v,e[19]=B^~A&S,e[28]=W^~R&L,e[29]=$^~N&D,e[38]=Q^~H&J,e[39]=ee^~K&X,e[48]=de^~te&ne,e[49]=le^~ae&oe,e[0]^=d[n],e[1]^=d[n+1]};if(o)dp.exports=g;else for(w=0;w256)&&fp.throwArgumentError("invalid number type","type",e),a&&(o=256),t=p.from(t).toTwos(o),h(t,o/8)}if(n=e.match(yp),n){const o=parseInt(n[1]);return(String(o)!==n[1]||0===o||o>32)&&fp.throwArgumentError("invalid bytes type","type",e),m(t).byteLength!==o&&fp.throwArgumentError(`invalid value for ${e}`,"value",t),a?m((t+"0000000000000000000000000000000000000000000000000000000000000000").substring(0,66)):t}if(n=e.match(mp),n&&Array.isArray(t)){const a=n[1];parseInt(n[2]||String(t.length))!=t.length&&fp.throwArgumentError(`invalid array length for ${e}`,"value",t);const o=[];return t.forEach((function(e){o.push(Tp(a,e,!0))})),T(o)}return fp.throwArgumentError("invalid type","type",e)}function hp(e,t){e.length!=t.length&&fp.throwArgumentError("wrong number of values; expected ${ types.length }","values",t);const a=[];return e.forEach((function(e,n){a.push(Tp(e,t[n]))})),f(T(a))}function Ip(e,t){return a=hp(e,t),"0x"+cp.keccak_256(m(a));var a}const _p=pp("PROTOCOL_SWAP_FEE_PERC"),gp=pp("E-CLP"),Pp=Ip(["bytes"],[e.encode(["bytes32","bytes32"],[_p,gp])]);class wp{constructor(e,t,a){this.gyroConfigAddress=e,this.multicall=t,this.gyroConfigInterface=qa.createInterface(),this.gyroConfig=qa.connect(e,a)}async getGyroProtocolFee(t){let a;const n=Ip(["bytes"],[e.encode(["bytes32","uint256"],[_p,t])]),o=[{target:this.gyroConfigAddress,callData:this.gyroConfigInterface.encodeFunctionData("hasKey",[n])},{target:this.gyroConfigAddress,callData:this.gyroConfigInterface.encodeFunctionData("hasKey",[Pp])},{target:this.gyroConfigAddress,callData:this.gyroConfigInterface.encodeFunctionData("hasKey",[_p])}],[,[i,s,r]]=await this.multicall.callStatic.aggregate(o),d=p.from(i).eq(1),u=p.from(s).eq(1),c=p.from(r).eq(1);return a=d?parseFloat(l(await this.gyroConfig.getUint(n),18)):u?parseFloat(l(await this.gyroConfig.getUint(Pp),18)):c?parseFloat(l(await this.gyroConfig.getUint(_p),18)):0,a}}const xp=new t(["function gauge_relative_weight(address gauge, uint timestamp) view returns (uint)"]),Ep=new t(["function gauge_relative_weight(address gauge) view returns (uint)"]);class Ap{constructor(e,t,a){this.multicall=e,this.gaugeControllerAddress=t,this.gaugeControllerCheckpointerAddress=a}async getRelativeWeights(e,t){const a=e.map((e=>this.gaugeControllerCheckpointerAddress&&!t?{target:this.gaugeControllerCheckpointerAddress,callData:Ep.encodeFunctionData("gauge_relative_weight",[u(e)])}:{target:this.gaugeControllerAddress,callData:xp.encodeFunctionData("gauge_relative_weight",[u(e),t||Math.floor(Date.now()/1e3)])})),[,n]=await this.multicall.callStatic.aggregate(a);return e.reduce(((e,t,a)=>(e[t]||(e[t]=parseFloat(It(n[a],18))),e)),{})}}class vp{async get(e){const t=await this.query(e);return(null==t?void 0:t.length)>0?t[0]:void 0}async find(e){return this.get({where:{id:e}})}async findBy(e,t){return this.get({where:{[String(e)]:t}})}async findAllBy(e,t,a=1e3,n=0){const o={where:{[String(e)]:t},first:a,skip:n};return this.query(o)}}class Sp extends vp{constructor(e,t,a){super(),this.chainId=t,this.blockHeight=a,this.client=Is(e)}}class kp extends vp{constructor(e,t,a){super(),this.chainId=t,this.blockHeight=a,this.client=_s(e)}}class Op extends kp{async query(e){e.orderBy||(e.orderBy=Xi.balance),e.orderDirection||(e.orderDirection=ts.desc),!e.block&&this.blockHeight&&(e.block={number:await this.blockHeight()});const{gaugeShares:t}=await this.client.GaugeShares(e);return t.map(this.mapType)}mapType(e){var t;return{id:e.id,balance:e.balance,userAddress:null===(t=e.user)||void 0===t?void 0:t.id,gauge:{id:e.gauge.id,poolId:e.gauge.poolId||void 0,isKilled:e.gauge.isKilled,totalSupply:e.gauge.totalSupply}}}async findByUser(e,t,a){return this.findAllBy(Oe.UserAddress,e,t,a)}async findByGauge(e,t,a){return this.findAllBy(Oe.GaugeId,e,t,a)}}const Mp=new t(["function totalSupply() view returns (uint)","function working_supply() view returns (uint)","function reward_count() view returns (uint)","function reward_tokens(uint rewardIndex) view returns (address)","function reward_data(address rewardToken) view returns (tuple(address token, address distributor, uint period_finish, uint rate, uint last_update, uint integral) data)"]),Cp=new t(["function inflation_rate(uint currentWeekTimestamp) view returns (uint)"]);class Fp{constructor(e,t){this.multicall=e,this.chainId=t}async getTotalSupplies(e){const t=e.map((e=>({target:e,callData:Mp.encodeFunctionData("totalSupply",[])}))),[,a]=await this.multicall.callStatic.aggregate(t),n=a.map((e=>"0x"==e?"0x0":e));return e.reduce(((e,t,a)=>(e[t]||(e[t]=parseFloat(It(n[a],18))),e)),{})}async getWorkingSupplies(e){const t=e.map((e=>({target:e,callData:Mp.encodeFunctionData("working_supply",[])}))),[,a]=await this.multicall.callStatic.aggregate(t),n=a.map((e=>"0x"==e?"0x0":e));return e.reduce(((e,t,a)=>(e[t]||(e[t]=parseFloat(It(n[a],18))),e)),{})}async getInflationRates(e){const t=Math.floor(Date.now()/1e3/604800),a=e.map((e=>({target:e,callData:Cp.encodeFunctionData("inflation_rate",[t])}))),[,n]=await this.multicall.callStatic.aggregate(a),o=n.map((e=>"0x"==e?"0x0":e));return e.reduce(((e,t,a)=>(e[t]||(e[t]=parseFloat(It(o[a],18))),e)),{})}async getRewardCounts(e){let t;if(1==this.chainId){const a=e.map((e=>({target:e,callData:Mp.encodeFunctionData("reward_count",[])}))),[,n]=await this.multicall.callStatic.aggregate(a),o=n.map((e=>"0x"==e?"0x0":e));t=e.reduce(((e,t,a)=>(e[t]||(e[t]=parseInt(o[a])),e)),{})}else t=e.reduce(((e,t)=>(e[t]||(e[t]=1),e)),{});return t}async getRewardTokens(e,t){const a=t||await this.getRewardCounts(e),n=e.filter((e=>a[e]>0)),o=[0],i=n.map(((e,t)=>{const n=[];for(let t=0;t{const n=o[a],i=o[a+1],r=[];for(let e=n;e{const o=[];for(let t=0;tMp.decodeFunctionResult("reward_data",e)[0]));return Object.keys(a).reduce(((e,t,o)=>{const i=n[o],r=a[t].reduce(((e,t,a)=>(e[t]||(e[t]=s[i+a]),e)),{});return e[t]||(e[t]=r),e}),{})}}class Bp{constructor(e){this.gauges=[],this.client=_s(e)}async fetch(){const e=(await this.client.Pools({first:1e3,where:{preferentialGauge_not:null}})).pools.map((e=>e.preferentialGauge));return this.gauges=e,this.gauges}async find(e){return 0==this.gauges.length&&await this.fetch(),this.gauges.find((t=>t.id==e))}async findBy(e,t){if(0==this.gauges.length&&await this.fetch(),"id"==e)return this.find(t);if("poolId"==e)return this.gauges.find((e=>e.poolId==t));if("poolAddress"==e)return this.gauges.find((e=>e.poolAddress==t));throw`search by ${e} not implemented`}}class Rp{constructor(e,t,a,n,o){this.chainId=n,this.workingSupplies={},this.relativeWeights={},this.inflationRates={},this.rewardData={},a&&(this.gaugeController=new Ap(t,a,o)),this.multicall=new Fp(t,n),this.subgraph=new Bp(e)}async fetch(){const e=await this.subgraph.fetch(),t=e.map((e=>e.id));if(1==this.chainId)this.workingSupplies=await this.multicall.getWorkingSupplies(t);else{const t=["0x3b8ca519122cdd8efb272b0d3085453404b25bd0","0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2","0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647","0x809b79b53f18e9bc08a961ed4678b901ac93213a"],a=e.filter((e=>!t.includes(e.factory.id.toLowerCase()))).map((e=>e.id));a.length>0&&(this.inflationRates=await this.multicall.getInflationRates(a),this.workingSupplies=await this.multicall.getWorkingSupplies(a))}return this.gaugeController&&(this.relativeWeights=await this.gaugeController.getRelativeWeights(t)),this.rewardData=e.reduce(((e,t)=>{var a;return e[a=t.id]||(e[a]=t.tokens?Object.fromEntries(t.tokens.map((e=>[e.id.split("-")[0],{distributor:"",last_update:p.from(0),integral:p.from(0),token:e.id.split("-")[0],decimals:e.decimals,rate:_t(e.rate||"0",e.decimals),period_finish:p.from(e.periodFinish||"0")}]))):{}),e}),{}),e.map(this.compose.bind(this))}async find(e){return this.gauges||(this.gauges=this.fetch()),(await this.gauges).find((t=>t.id==e))}async findBy(e,t){let a;if(this.gauges||(this.gauges=this.fetch()),"id"==e)return this.find(t);if("address"==e)return this.find(t);if("poolId"==e)a=(await this.gauges).find((e=>e.poolId==t));else{if("poolAddress"!=e)throw`search by ${e} not implemented`;a=(await this.gauges).find((e=>e.poolAddress==t))}return a}compose(e){return{id:e.id,address:e.id,name:e.symbol,poolId:e.poolId,poolAddress:e.poolAddress,totalSupply:parseFloat(e.totalSupply),workingSupply:this.workingSupplies[e.id],relativeWeight:this.relativeWeights[e.id],rewardTokens:this.rewardData[e.id],balInflationRate:this.inflationRates[e.id]}}}class Np{constructor(e,t){this.url=e,this.apiKey=t}async get(e){try{const t=this.toPayload(e),{data:a}=await z.post(this.url,t,{headers:{"x-api-key":this.apiKey}});if(a.errors)throw new Error(a.errors.map((e=>e.message)).join(","));return a.data}catch(e){throw console.error(e),e}return[]}toPayload(e){return JSON.stringify({query:Q({query:e})})}}function Lp(e){return new Promise((t=>setTimeout(t,e)))}class Dp{constructor(e){var t,a;this.pools=[],this.skip=0,this.hasFetched=!1,this.isFetching=!1,this.client=new Np(e.url,e.apiKey);this.query={args:Object.assign({},(null===(t=e.query)||void 0===t?void 0:t.args)||{chainId:1,orderBy:"totalLiquidity",orderDirection:"desc",where:{swapEnabled:{eq:!0},totalShares:{gt:.05}}}),attrs:Object.assign({},(null===(a=e.query)||void 0===a?void 0:a.attrs)||{id:!0,address:!0})},delete this.query.args.skip}fetchFromCache(e,t){return this.pools.slice(t,e+t)}async fetch(e){const t=(null==e?void 0:e.first)||10,a=(null==e?void 0:e.skip)||0;return this.hasFetched||this.fetchAll(e),await this.awaitEnoughPoolsFetched(t,a),this.fetchFromCache(t,a)}async fetchAll(e){this.isFetching=!0,this.hasFetched=!0,this.nextToken&&(this.query.args.nextToken=this.nextToken),this.query.args.first=1e3;const t=new zt(this.query.args).format(new Yt),a=this.query.attrs;a.nextToken=!0;const n={pools:{__args:t,...a}},o=(await this.client.get(n)).pools;if(this.nextToken=o.nextToken,this.pools=this.pools.concat(o.pools.map(this.format)),this.nextToken)return await this.fetchAll(e);this.isFetching=!1}async awaitEnoughPoolsFetched(e,t){for(let a=0;a<1e3;a++){if(this.pools.length>e+t)return;if(!this.isFetching)return;await Lp(10)}}async find(e){return 0==this.pools.length&&await this.fetch(),this.findBy("id",e)}async findBy(e,t){0==this.pools.length&&await this.fetch();const a=this.pools.find((a=>a[e]==t));if(a)return this.format(a)}format(e){var t,a,n,o;if(null===(t=e.apr)||void 0===t?void 0:t.rewardAprs.breakdown){const t=JSON.parse(null===(a=e.apr)||void 0===a?void 0:a.rewardAprs.breakdown);e.apr.rewardAprs.breakdown=t}if(null===(n=e.apr)||void 0===n?void 0:n.tokenAprs.breakdown){const t=JSON.parse(null===(o=e.apr)||void 0===o?void 0:o.tokenAprs.breakdown);e.apr.tokenAprs.breakdown=t}return e}}class Up{constructor(e,t={}){this.providers=e,this.currentProviderIdx=0,this.timeout=t.timeout||1e4}async fetch(e){return this.fallbackQuery("fetch",[e])}get currentProvider(){if(this.providers.length&&!(this.currentProviderIdx>=this.providers.length))return this.providers[this.currentProviderIdx]}async find(e){return this.fallbackQuery("find",[e])}async findBy(e,t){return this.fallbackQuery("findBy",[e,t])}async fallbackQuery(e,t){if(this.currentProviderIdx>=this.providers.length)throw new Error("No working providers found");let a;try{const n=this.providers[this.currentProviderIdx];a=await Promise.race([n[e].apply(n,t),new Promise(((e,t)=>setTimeout((()=>t(new Error("timeout"))),this.timeout)))])}catch(n){const o=n.message;if("timeout"===o){Re.getInstance().warn("Provider "+this.currentProviderIdx+" timed out, falling back to next provider")}else{const e=Re.getInstance();e.warn(`Provider ${this.currentProviderIdx} failed with error, falling back to next provider.`),e.warn(o)}this.currentProviderIdx++,a=await this.fallbackQuery.call(this,e,t)}return a}}class Vp{constructor(e){this.pools=e}async find(e){return this.pools.find((t=>t.id.toLowerCase()===e.toLowerCase()))}async findBy(e,t){return this.pools.find((a=>a[e]===t))}async all(){return this.pools}async where(e){return(await this.all()).filter(e)}}const qp=(e,t)=>{var a,n,o,i,s,r,p,d,l,u,c;return{id:e.id,name:e.name||"",address:e.address,chainId:t,poolType:e.poolType,poolTypeVersion:e.poolTypeVersion||1,swapFee:e.swapFee,swapEnabled:e.swapEnabled,protocolYieldFeeCache:e.protocolYieldFeeCache||"0.5",protocolSwapFeeCache:e.protocolSwapFeeCache||"0.5",amp:null!==(a=e.amp)&&void 0!==a?a:void 0,owner:null!==(n=e.owner)&&void 0!==n?n:void 0,factory:null!==(o=e.factory)&&void 0!==o?o:void 0,symbol:null!==(i=e.symbol)&&void 0!==i?i:void 0,tokens:(e.tokens||[]).map(Gp),tokensList:e.tokensList,tokenAddresses:(e.tokens||[]).map((e=>e.address)),totalLiquidity:e.totalLiquidity,totalShares:e.totalShares,totalSwapFee:e.totalSwapFee,totalSwapVolume:e.totalSwapVolume,priceRateProviders:null!==(s=e.priceRateProviders)&&void 0!==s?s:void 0,createTime:e.createTime,mainIndex:null!==(r=e.mainIndex)&&void 0!==r?r:void 0,wrappedIndex:null!==(p=e.wrappedIndex)&&void 0!==p?p:void 0,totalWeight:e.totalWeight||"1",lowerTarget:null!==(d=e.lowerTarget)&&void 0!==d?d:"0",upperTarget:null!==(l=e.upperTarget)&&void 0!==l?l:"0",isInRecoveryMode:null!==(u=e.isInRecoveryMode)&&void 0!==u&&u,isPaused:null!==(c=e.isPaused)&&void 0!==c&&c}},Gp=e=>{const t=Wp(e.token);return{...e,isExemptFromYieldProtocolFee:e.isExemptFromYieldProtocolFee||!1,token:t}},Wp=e=>{let t=null;return e.pool&&(t={id:e.pool.id,address:e.pool.address,totalShares:e.pool.totalShares,poolType:e.pool.poolType,mainIndex:e.pool.mainIndex||0},(null==e?void 0:e.pool.tokens)&&(t.tokens=e.pool.tokens.map($p))),{pool:t,latestUSDPrice:e.latestUSDPrice||void 0}},$p=e=>({address:e.address,decimals:e.decimals,symbol:e.symbol,balance:e.balance,priceRate:e.priceRate,weight:e.weight,isExemptFromYieldProtocolFee:e.isExemptFromYieldProtocolFee||void 0,token:e.token?Wp(e.token):void 0});class Hp{constructor(e){var t,a;this.skip=0,this.client=Is(e.url),this.blockHeight=e.blockHeight,this.chainId=e.chainId;const n={orderBy:pi.TotalLiquidity,orderDirection:ai.Desc,where:{totalShares:{gt:1e-12}}},o=Object.assign({},(null===(t=e.query)||void 0===t?void 0:t.args)||n),i=Object.assign({},(null===(a=e.query)||void 0===a?void 0:a.attrs)||{});this.query={args:o,attrs:i}}async fetchAllPools(){const e=Re.getInstance();e.time("fetching pools"),this.blockHeight&&(this.query.args.block={number:await this.blockHeight()});const t=new zt(this.query.args).format(new jt),{pool0:a,pool1000:n,pool2000:o}=await this.client.AllPools(t);return e.timeEnd("fetching pools"),[...a,...n,...o].map((e=>qp(e,this.chainId)))}async fetch(e){const t=Re.getInstance();t.time("fetching pools"),(null==e?void 0:e.skip)&&(this.query.args.skip=e.skip),this.blockHeight&&(this.query.args.block={number:await this.blockHeight()}),this.query.args.first=(null==e?void 0:e.first)||this.query.args.first||1e3;const a=new zt(this.query.args).format(new jt),{pools:n}=await this.client.Pools(a);return this.skip=((null==e?void 0:e.skip)||0)+n.length,t.timeEnd("fetching pools"),n.map((e=>qp(e,this.chainId)))}async find(e){return await this.findBy("id",e)}async findBy(e,t){return this.pools||(this.pools=this.fetchAllPools()),(await this.pools).find((a=>a[e]==t))}async all(){return this.pools||(this.pools=this.fetchAllPools()),this.pools}async block(){return this.blockHeight?{number:await this.blockHeight()}:void 0}async where(e){return this.pools||(this.pools=this.fetchAllPools()),(await this.pools).filter(e)}}class Kp{constructor(e,t,a,n){this.poolsSubgraph=e,this.poolsToIgnore=a,this.batchSize=n,this.skip=0,this.provider=t.provider,this.multicall=t.multicall,this.vault=t.vault}filterPools(e){return e.filter((e=>{if(!1===e.swapEnabled)return!1;if(!this.poolsToIgnore)return!0;return-1===this.poolsToIgnore.findIndex((t=>t.toLowerCase()===e.id.toLowerCase()))}))}async fetchDefault(){const e=await this.poolsSubgraph.all(),t=this.filterPools(e),a=Re.getInstance();a.time(`fetching onchain ${t.length} pools`);const n=await Ss(t,this.multicall,this.vault,this.provider,this.batchSize);return a.timeEnd(`fetching onchain ${t.length} pools`),n}async fetch(e){const t=await this.poolsSubgraph.fetch(e),a=this.filterPools(t),n=Re.getInstance();n.time(`fetching onchain ${a.length} pools`);const o=await Ss(a,this.multicall,this.vault,this.provider,this.batchSize);return n.timeEnd(`fetching onchain ${a.length} pools`),o}async find(e,t=!1){return await this.findBy("id",e,t)}async findBy(e,t,a=!1){return this.pools&&!a||(this.pools=this.fetchDefault()),(await this.pools).find((a=>a[e]==t))}async all(){return this.pools||(this.pools=this.fetchDefault()),this.pools}async where(e){return this.pools||(this.pools=this.fetchDefault()),(await this.pools).filter(e)}async refresh(e){const t=await Ss([e],this.multicall,this.vault,this.provider);if(this.pools){const a=(await this.pools).findIndex((t=>t.address===e.address));-1!==a&&(this.pools=Promise.resolve([...(await this.pools).splice(a,1),t[0]]))}return t[0]}}class Jp extends kp{async query(e){!e.block&&this.blockHeight&&(e.block={number:await this.blockHeight()});const{pools:t}=await this.client.PoolGauges(e);return t.map(this.mapType)}mapType(e){return e}}var Xp;!function(e){e.Pool="pool",e.Sender="sender"}(Xp||(Xp={}));class Yp extends Sp{async query(e){e.orderBy||(e.orderBy=Zo.Timestamp),e.orderDirection||(e.orderDirection=ai.Asc),!e.block&&this.blockHeight&&(e.block={number:await this.blockHeight()});const{joinExits:t}=await this.client.JoinExits(e);return t.map(this.mapType)}mapType(e){return{id:e.id,userAddress:e.user.id,poolId:e.pool.id,timestamp:e.timestamp,type:e.type,amounts:e.amounts,tokens:e.pool.tokensList}}async findByUser(e,t,a){return this.findAllBy(Xp.Sender,e,t,a)}async findJoins(e,t){return this.query({where:{sender:e,pool:t,type:"Join"}})}async findExits(e,t){return this.query({where:{sender:e,pool:t,type:"Exit"}})}async findByPool(e,t,a){return this.findAllBy(Xp.Pool,e,t,a)}}class jp extends Sp{async query(e){e.orderBy||(e.orderBy=ii.Balance),e.orderDirection||(e.orderDirection=ai.Desc),!e.block&&this.blockHeight&&(e.block={number:await this.blockHeight()});const{poolShares:t}=await this.client.PoolShares(e);return t.map(this.mapType)}mapType(e){return{id:e.id,userAddress:e.userAddress.id,poolId:e.poolId.id,balance:e.balance}}async findByUser(e,t,a){return this.findAllBy(ke.UserAddress,e,t,a)}async findByPool(e,t,a){return this.findAllBy(ke.PoolId,e,t,a)}}class zp{constructor(e){this.tokens=e}async find(e){return this.tokens.find((t=>t.address.toLowerCase()===e.toLowerCase()))}async findBy(e,t){return this.tokens.find((a=>a[e]===t))}}class Zp{constructor(e){this.tokenPrices=Object.fromEntries(Object.entries(e).map((([e,t])=>[e.toLowerCase(),t])))}async find(e){const t=e.toLowerCase(),a=this.tokenPrices[t];if(a)return a}async findBy(e,t){if("address"==e)return this.find(t)}}class Qp{constructor(e,t=1,a){var n;this.chainId=t,this.prices={},this.baseTokenAddresses=e.map(At),this.url=`${Rs(null==a?void 0:a.isDemoApiKey)}simple/token_price/${this.platform(t)}?vs_currencies=usd,eth`,this.urlNative=`${Rs(null==a?void 0:a.isDemoApiKey)}simple/price/?vs_currencies=eth,usd&ids=`,this.coingeckoApiKeyHeaderName=Ns(null==a?void 0:a.isDemoApiKey),this.apiKey=null==a?void 0:a.coingeckoApiKey,this.debouncer=new Ot(this.fetch.bind(this),200,null!==(n=null==a?void 0:a.tokensPerPriceRequest)&&void 0!==n?n:10)}async fetch(e,{signal:t}={}){var a,n,o;try{const{data:n}=await z.get(`${this.url}&contract_addresses=${e.join(",")}`,{signal:t,headers:{[this.coingeckoApiKeyHeaderName]:null!==(a=this.apiKey)&&void 0!==a?a:""}});return n}catch(e){const t=["Error fetching token prices from coingecko"];return e.isAxiosError?void 0!==(null===(n=e.response)||void 0===n?void 0:n.status)&&t.push(`with status ${null===(o=e.response)||void 0===o?void 0:o.status}`):t.push(e),Promise.reject(t.join(" "))}}fetchNative({signal:e}={}){var t;let a;!function(e){e.ETH="ethereum",e.MATIC="matic-network",e.XDAI="xdai"}(a||(a={}));let n=a.ETH;return 137===this.chainId&&(n=a.MATIC),100===this.chainId&&(n=a.XDAI),z.get(`${this.urlNative}${n}`,{signal:e,headers:{[this.coingeckoApiKeyHeaderName]:null!==(t=this.apiKey)&&void 0!==t?t:""}}).then((({data:e})=>e[n])).catch((e=>{var t;const a=["Error fetching native token from coingecko"];return e.isAxiosError?(null===(t=e.response)||void 0===t?void 0:t.status)&&a.push(`with status ${e.response.status}`):a.push(e),Promise.reject(a.join(" "))})).finally((()=>{}))}find(e){const t=At(e,this.chainId);if(!this.prices[t]){if(0===Object.keys(this.prices).length)for(const e of this.baseTokenAddresses)this.prices[e]=this.debouncer.fetch(e).then((t=>t[e]));if(t===st(this.chainId).Addresses.nativeAsset.toLowerCase())return this.nativePrice||(this.prices[t]=this.fetchNative()),this.prices[t];this.prices[t]=this.debouncer.fetch(t).then((e=>e[t]))}return this.prices[t]}async findBy(e,t){if("address"==e)return this.find(t)}platform(e){switch(e){case 1:case 5:case 42:case 31337:return"ethereum";case 100:return"xdai";case 137:return"polygon-pos";case 250:return"fantom";case 1101:return"polygon-zkevm";case 8453:return"base";case 42161:return"arbitrum-one";case 43114:return"avalanche"}return"2"}}class ed{constructor(e=1,t){this.chainId=e,this.prices={},this.urlBase=`${Rs(null==t?void 0:t.isDemoApiKey)}coins/${this.platform(e)}/contract/%TOKEN_ADDRESS%/market_chart/range?vs_currency=usd`,this.apiKey=null==t?void 0:t.coingeckoApiKey,this.coingeckoApiKeyHeaderName=Ns(null==t?void 0:t.isDemoApiKey)}async fetch(e,t,{signal:a}={}){var n,o;const i=this.urlRange(e,t);try{const{data:e}=await z.get(i,{signal:a,headers:{[this.coingeckoApiKeyHeaderName]:null!==(n=this.apiKey)&&void 0!==n?n:""}});return e}catch(e){if(e.isAxiosError)throw new Error("Error fetching historical token prices from coingecko - "+e.message+" - "+(null===(o=e.response)||void 0===o?void 0:o.statusText));throw new Error("Unknown Error: "+e)}}async find(e){throw"Historic price requires point-in-time timestamp, please use findBy(address, timestamp)"}async findBy(e,t){const a=At(e,this.chainId);return{usd:`${(await this.fetch(a,t)).prices[0][1]}`}}platform(e){switch(e){case 1:case 5:case 42:case 31337:return"ethereum";case 137:return"polygon-pos";case 42161:return"arbitrum-one";case 100:return"xdai"}return"2"}urlRange(e,t){const a=t-3600,n=t+3600;return`${this.urlBase.replace("%TOKEN_ADDRESS%",e)}&from=${a}&to=${n}`}}class td{constructor(e,t=1){this.subgraphUrl=e,this.chainId=t,this.prices={},this.debouncer=new Ot(this.fetch.bind(this),200)}async fetch(e,{signal:t}={}){return e.length,z.post(this.subgraphUrl,{variables:{addresses:e},query:"query($addresses: [String!]) {\n tokens(\n where: {\n id_in: $addresses\n }\n ) {\n address\n latestUSDPrice\n }\n }"},{signal:t}).then((e=>e.data.data)).then((({tokens:e})=>Object.fromEntries(e.map((e=>[e.address,{usd:e.latestUSDPrice||void 0}]))))).finally((()=>{e.length}))}async find(e){const t=At(e,this.chainId);return this.prices[t]||(this.prices[t]=this.debouncer.fetch(t).then((e=>e[t]))),this.prices[t]}async findBy(e,t){if("address"==e)return this.find(t)}}class ad{constructor(e,t,a){this.coingeckoRepository=e,this.subgraphRepository=t,this.aaveRates=a}async find(e){let t;try{if(t=await this.coingeckoRepository.find(e),!(null==t?void 0:t.usd))throw new Error("Price not found")}catch(a){Re.getInstance().warn(a),t=await this.subgraphRepository.find(e)}const a=await this.aaveRates.getRate(e)||1;return t&&t.usd?{...t,usd:(parseFloat(t.usd)*a).toString()}:t}async findBy(e,t){if("address"===e)return this.find(t);throw`Token price search by ${e} not implemented`}}class nd{constructor(e,t){this.coingeckoRepository=e,this.aaveRates=t}async find(e){return this.findBy(e,Math.floor(Date.now()/1e3))}async findBy(e,t){const a=await this.coingeckoRepository.findBy(e,t),n=await this.aaveRates.getRate(e)||1;return a&&a.usd?{...a,usd:(parseFloat(a.usd)*n).toString()}:a}}const od=["function claimTokens(address user, address[] tokens) returns (uint256[])","function claimToken(address user, address token) returns (uint256)"],id=new t(["function getTokensDistributedInWeek(address token, uint timestamp) view returns (uint)","function claimTokens(address user, address[] tokens) returns (uint256[])","function claimToken(address user, address token) returns (uint256)"]),sd=new t(["function totalSupply() view returns (uint)"]);class rd{constructor(e,t,a,n,o,i){this.multicall=e,this.feeDistributorAddress=t,this.balAddress=a,this.veBalAddress=n,this.bbAUsdAddress=o,this.feeDistributor=((e,t)=>new Z(e,od,t))(t,i)}async fetch(e){const t=this.getPreviousWeek(e),a=[{target:this.feeDistributorAddress,callData:id.encodeFunctionData("getTokensDistributedInWeek",[u(this.balAddress),t])},{target:this.feeDistributorAddress,callData:id.encodeFunctionData("getTokensDistributedInWeek",[u(this.bbAUsdAddress),t])},{target:this.veBalAddress,callData:sd.encodeFunctionData("totalSupply",[])}],[,n]=await this.multicall.callStatic.aggregate(a);return{balAmount:parseFloat(It(n[0],18)),bbAUsdAmount:parseFloat(It(n[1],18)),veBalSupply:parseFloat(It(n[2],18)),bbAUsdPrice:parseFloat("1.0"),balAddress:this.balAddress}}async multicallData(e){return this.data||(this.data=await this.fetch(e)),this.data}getPreviousWeek(e){const t=new Date(e);t.setUTCHours(0),t.setUTCMinutes(0),t.setUTCSeconds(0),t.setUTCMilliseconds(0);let a=t.getUTCDay()-4;return a<0&&(a+=7),a+=7,Math.floor(t.getTime()/1e3)-86400*a}async getClaimableBalances(e,t){try{const a=await this.feeDistributor.callStatic.claimTokens(e,t);return this.extractTokenBalance(t,a)}catch(e){return{}}}claimBalances(e,t){return id.encodeFunctionData("claimTokens",[e,t])}extractTokenBalance(e,t){return e.reduce(((e,a,n)=>{var o;return e[a]=null!==(o=t[n])&&void 0!==o?o:p.from(0),e}),{})}}const pd=new t(["function getProtocolFeesCollector() view returns (address)"]),dd=new t(["function getSwapFeePercentage() view returns (uint)"]);let ld;class ud{constructor(e,t){this.provider=t,this.vault=new Z(e,pd,this.provider)}async fetch(){const e=await this.vault.getProtocolFeesCollector(),t=new Z(e,dd,this.provider),a=await t.getSwapFeePercentage();return parseFloat(It(a,18))}async find(){return ld||(ld=this.fetch()),this.swapFeePercentage=await ld,this.swapFeePercentage}async findBy(){return this.find()}}const cd=new t(["function getSwapFeePercentage() view returns (uint)"]);let yd;class bd{constructor(e,t){this.multicall=e,this.protocolFeePercentagesProviderAddress=t}async fetch(){const e=[{target:this.protocolFeePercentagesProviderAddress,callData:cd.encodeFunctionData("getFeeTypePercentage",[0])},{target:this.protocolFeePercentagesProviderAddress,callData:cd.encodeFunctionData("getFeeTypePercentage",[2])}],[,t]=await this.multicall.callStatic.aggregate(e);return{swapFee:parseFloat(It(t[0],18)),yieldFee:parseFloat(It(t[2],18))}}async getFees(){return yd||(yd=this.fetch()),this.protocolFees=await yd,this.protocolFees}}class md{constructor(e="https://yield-tokens.balancer.workers.dev/"){this.url=e}async fetch(){let e={};try{e=(await z.get(this.url)).data}catch(e){Re.getInstance().warn(`Failed to fetch yield tokens: ${e}`)}return e}async find(e){const t=e.toLocaleLowerCase();return this.yields||(this.yields=this.fetch()),this.yields.then((e=>e[t]&&e[t]>0?e[t]:0))}async findBy(e,t){return"address"!=e?0:this.find(t)}}const fd=e=>`{\n blocks(first: 1, orderBy: timestamp, orderDirection: asc, where: { timestamp_gt: ${e} }) {\n number\n }\n}`,Td=async(e,t)=>{const a={query:fd(t)},n=await z.post(e,a),{data:{blocks:o}}=n.data;return parseInt(o[0].number)};class hd{constructor(e){this.endpoint=e,this.blocks={}}async find(e){if("dayAgo"==e){const e=""+(Math.floor(Date.now()/1e3)-86400);return this.blocks[e]||(this.blocks={...this.blocks,[e]:Td(this.endpoint,e)}),this.blocks[e]}}async findBy(e="",t=""){}}var Id=[{chainId:1,address:"0x8888801af4d980682e47f1a9036e589479e835c5",symbol:"mph"},{chainId:1,address:"0x27054b13b1b798b345b591a4d22e6562d47ea75a",symbol:"ast"},{chainId:1,address:"0x3301ee63fb29f863f2333bd4466acb46cd8323e6",symbol:"akita"},{chainId:1,address:"0x616e8bfa43f920657b3497dbf40d6b1a02d4608d",symbol:"aurabal"},{chainId:1,address:"0xc0c293ce456ff0ed870add98a0828dd4d2903dbf",symbol:"aura"},{chainId:1,address:"0x3472a5a71965499acd81997a54bba8d852c6e53d",symbol:"badger"},{chainId:1,address:"0xba100000625a3754423978a60c9317c58a424e3d",symbol:"bal"},{chainId:1,address:"0x804cdb9116a10bb78768d3252355a1b18067bf8f",symbol:"bb-a-dai"},{chainId:1,address:"0x9210f1204b5a24742eba12f710636d76240df3d0",symbol:"bb-a-usdc"},{chainId:1,address:"0x2bbf681cc4eb09218bee85ea2a5d3d13fa40fc0c",symbol:"bb-a-usdt"},{chainId:1,address:"0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb2",symbol:"bb-a-usd"},{chainId:1,address:"0x2d94aa3e47d9d5024503ca8491fce9a2fb4da198",symbol:"bank"},{chainId:1,address:"0x0d8775f648430679a709e98d2b0cb6250d2887ef",symbol:"bat"},{chainId:1,address:"0xf17e65822b568b3903685a7c9f496cf7656cc6c2",symbol:"bico"},{chainId:1,address:"0x799ebfabe77a6e34311eeee9825190b9ece32824",symbol:"btrst"},{chainId:1,address:"0x514910771af9ca656af840dff83e8264ecf986ca",symbol:"link"},{chainId:1,address:"0x3506424f91fd33084466f402d5d97f05f8e3b4af",symbol:"chz"},{chainId:1,address:"0x41e5560054824ea6b0732e656e3ad64e20e94e45",symbol:"cvc"},{chainId:1,address:"0xc00e94cb662c3520282e6f5717214004a7f26888",symbol:"comp"},{chainId:1,address:"0xdef1ca1fb7fbcdc777520aa7f396b4e015f497ab",symbol:"cow"},{chainId:1,address:"0xd533a949740bb3306d119cc777fa900ba034cd52",symbol:"crv"},{chainId:1,address:"0x6b175474e89094c44da98b954eedeac495271d0f",symbol:"dai"},{chainId:1,address:"0xf2051511b9b121394fa75b8f7d4e7424337af687",symbol:"haus"},{chainId:1,address:"0x888888435fde8e7d4c54cab67f206e4199454c60",symbol:"dfx"},{chainId:1,address:"0x798d1be841a82a273720ce31c822c61a67a601c3",symbol:"digg"},{chainId:1,address:"0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c",symbol:"enj"},{chainId:1,address:"0xc18360217d8f7ab5e7c516566761ea12ce7f9d72",symbol:"ens"},{chainId:1,address:"0x4e15361fd6b4bb609fa63c81a2be19d873717870",symbol:"ftm"},{chainId:1,address:"0x956f47f50a910163d8bf957cf5846d573e7f87ca",symbol:"fei"},{chainId:1,address:"0xed1480d12be41d92f36f5f7bdd88212e381a3677",symbol:"fdt"},{chainId:1,address:"0x586aa273f262909eef8fa02d90ab65f5015e0516",symbol:"fiat"},{chainId:1,address:"0xde30da39c46104798bb5aa3fe8b9e0e1f348163f",symbol:"gtc"},{chainId:1,address:"0x900db999074d9277c5da2a43f252d74366230da0",symbol:"giv"},{chainId:1,address:"0x6810e776880c02933d47db1b9fc05908e5386b96",symbol:"gno"},{chainId:1,address:"0xba485b556399123261a5f9c95d413b4f93107407",symbol:"graviaura"},{chainId:1,address:"0x3ec8798b81485a254928b70cda1cf0a2bb0b74d7",symbol:"gro"},{chainId:1,address:"0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f",symbol:"snx"},{chainId:1,address:"0x5a98fcbea516cf06857215779fd812ca3bef1b32",symbol:"ldo"},{chainId:1,address:"0x6dea81c8171d0ba574754ef6f8b412f2ed88c54d",symbol:"lqty"},{chainId:1,address:"0x5f98805a4e8be255a32880fdec7f6728c6568ba0",symbol:"lusd"},{chainId:1,address:"0x965d79f1a1016b574a62986e13ca8ab04dfdd15c",symbol:"m2"},{chainId:1,address:"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2",symbol:"mkr"},{chainId:1,address:"0xd084944d3c05cd115c09d072b9f44ba3e0e45921",symbol:"fold"},{chainId:1,address:"0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0",symbol:"matic"},{chainId:1,address:"0xa3bed4e1c75d00fa6f4e5e6922db7261b5e9acd2",symbol:"mta"},{chainId:1,address:"0x4b13006980acb09645131b91d259eaa111eaf5ba",symbol:"myc"},{chainId:1,address:"0x333a4823466879eef910a04d473505da62142069",symbol:"nation"},{chainId:1,address:"0xcfeaead4947f0705a14ec42ac3d44129e1ef3ed5",symbol:"note"},{chainId:1,address:"0x967da4048cd07ab37855c090aaf366e4ce1b9f48",symbol:"ocean"},{chainId:1,address:"0x64aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5",symbol:"ohm"},{chainId:1,address:"0xab846fb6c81370327e784ae7cbb6d6a6af6ff4bf",symbol:"pal"},{chainId:1,address:"0xcafe001067cdef266afb7eb5a286dcfd277f3de5",symbol:"psp"},{chainId:1,address:"0x68037790a0229e9ce6eaa8a99ea92964106c4703",symbol:"par"},{chainId:1,address:"0x45804880de22913dafe09f4980848ece6ecbaf78",symbol:"paxg"},{chainId:1,address:"0x89ab32156e46f46d02ade3fecbe5fc4243b9aaed",symbol:"pnt"},{chainId:1,address:"0x9992ec3cf6a55b00978cddf2b27bc6882d88d1ec",symbol:"poly"},{chainId:1,address:"0x43d4a3cd90ddd2f8f4f693170c9c8098163502ad",symbol:"d2d"},{chainId:1,address:"0xeb4c2781e4eba804ce9a9803c67d0893436bb27d",symbol:"renbtc"},{chainId:1,address:"0x408e41876cccdc0f92210600ef50372656052a38",symbol:"ren"},{chainId:1,address:"0xfb5453340c03db5ade474b27e68b6a9c6b2823eb",symbol:"robot"},{chainId:1,address:"0xd33526068d116ce69f19a9ee46f0bd304f21a51f",symbol:"rpl"},{chainId:1,address:"0xae78736cd615f374d3085123a210448e74fc6393",symbol:"reth"},{chainId:1,address:"0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6",symbol:"sbtc"},{chainId:1,address:"0x476c5e26a75bd202a9683ffd34359c0cc15be0ff",symbol:"srm"},{chainId:1,address:"0x35e78b3982e87ecfd5b3f3265b601c046cdbe232",symbol:"xai"},{chainId:1,address:"0x3affcca64c2a6f4e3b6bd9c64cd2c969efd1ecbe",symbol:"dsla"},{chainId:1,address:"0xf24d8651578a55b0c119b9910759a351a3458895",symbol:"sdbal"},{chainId:1,address:"0x11c1a6b3ed6bb362954b29d3183cfa97a0c806aa",symbol:"str"},{chainId:1,address:"0x8f693ca8d21b157107184d29d398a8d082b38b76",symbol:"data"},{chainId:1,address:"0x470ebf5f030ed85fc1ed4c2d36b9dd02e77cf1b7",symbol:"temple"},{chainId:1,address:"0xa36fdbbae3c9d55a1d67ee5821d53b50b63a1ab9",symbol:"temp"},{chainId:1,address:"0xdac17f958d2ee523a2206206994597c13d831ec7",symbol:"usdt"},{chainId:1,address:"0x9c4a4204b79dd291d6b6571c5be8bbcd0622f050",symbol:"tcr"},{chainId:1,address:"0x226f7b842e0f0120b7e194d05432b3fd14773a9d",symbol:"unn"},{chainId:1,address:"0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",symbol:"uni"},{chainId:1,address:"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",symbol:"usdc"},{chainId:1,address:"0x81f8f0bb1cb2a06649e51913a151f0e7ef6fa321",symbol:"vita"},{chainId:1,address:"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",symbol:"weth"},{chainId:1,address:"0xedb171c18ce90b633db442f2a6f72874093b49ef",symbol:"wampl"},{chainId:1,address:"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",symbol:"wbtc"},{chainId:1,address:"0xf203ca1769ca8e9e8fe1da9d147db68b6c919817",symbol:"wncg"},{chainId:1,address:"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",symbol:"wsteth"},{chainId:1,address:"0x79c71d3436f39ce382d0f58f1b011d88100b9d91",symbol:"xns"},{chainId:1,address:"0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e",symbol:"yfi"},{chainId:1,address:"0xbcca60bb61934080951369a648fb03df4f96263c",symbol:"ausdc"},{chainId:1,address:"0x028171bca77440897b824ca71d1c56cac55b68a3",symbol:"adai"},{chainId:1,address:"0x3ed3b47dd13ec9a98b44e6204a523e766b225811",symbol:"ausdt"},{chainId:137,address:"0x9c2c5fd7b07e95ee044ddeba0e97a665f142394f",symbol:"1inch"},{chainId:137,address:"0xd6df932a45c0f255f85145f286ea0b292b21c90b",symbol:"aave"},{chainId:137,address:"0xc3fdbadc7c795ef1d6ba111e06ff8f16a20ea539",symbol:"addy"},{chainId:137,address:"0xf84bd51eab957c2e7b7d646a3427c5a50848281d",symbol:"agar"},{chainId:137,address:"0x033d942a6b495c4071083f4cde1f17e986fe856c",symbol:"aga"},{chainId:137,address:"0x0e9b89007eee9c958c0eda24ef70723c2c93dd58",symbol:"amaticc"},{chainId:137,address:"0x034b2090b579228482520c589dbd397c53fc51cc",symbol:"vision"},{chainId:137,address:"0x2c89bbc92bd86f8075d1decc58c7f4e0107f286b",symbol:"avax"},{chainId:137,address:"0x49690541e3f6e933a9aa3cffee6010a7bb5b72d7",symbol:"axiav3"},{chainId:137,address:"0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3",symbol:"bal"},{chainId:137,address:"0xdb7cb471dd0b49b29cab4a1c14d070f27216a0ab",symbol:"bank"},{chainId:137,address:"0xfbdd194376de19a88118e84e279b977f165d01b8",symbol:"bifi"},{chainId:137,address:"0xd6ca869a4ec9ed2c7e618062cdc45306d8dbbc14",symbol:"btc2x-fli-p"},{chainId:137,address:"0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39",symbol:"link"},{chainId:137,address:"0x172370d5cd63279efa6d502dab29171933a610af",symbol:"crv"},{chainId:137,address:"0x8f3cf7ad23cd3cadbd9735aff958023239c6a063",symbol:"dai"},{chainId:137,address:"0x1d607faa0a51518a7728580c238d912747e71f7a",symbol:"data"},{chainId:137,address:"0x85955046df4668e1dd369d2de9f3aeb98dd2a369",symbol:"dpi"},{chainId:137,address:"0xe7804d91dfcde7f776c90043e03eaa6df87e6395",symbol:"dfx"},{chainId:137,address:"0xf28164a485b0b2c90639e47b0f377b4a438a16b1",symbol:"dquick"},{chainId:137,address:"0x45c32fa6df82ead1e2ef74d17b76547eddfaff89",symbol:"frax"},{chainId:137,address:"0x50b728d8d964fd00c2d0aad81718b71311fef68a",symbol:"snx"},{chainId:137,address:"0x72928d5436ff65e57f72d5566dcd3baedc649a88",symbol:"hdao"},{chainId:137,address:"0x3ad707da309f3845cd602059901e39c4dcd66473",symbol:"eth2x-fli-p"},{chainId:137,address:"0x4f025829c4b13df652f38abd2ab901185ff1e609",symbol:"ieth-fli-p"},{chainId:137,address:"0x340f412860da7b7823df372a2b59ff78b7ae6abc",symbol:"imatic-fli-p"},{chainId:137,address:"0xf287d97b6345bad3d88856b26fb7c0ab3f2c7976",symbol:"matic2x-fli-p"},{chainId:137,address:"0x130ce4e4f76c2265f94a961d70618562de0bb8d2",symbol:"ibtc-fli-p"},{chainId:137,address:"0x596ebe76e2db4470966ea395b0d063ac6197a8c5",symbol:"jrt"},{chainId:137,address:"0x3a58a54c066fdc0f2d55fc9c89f0415c92ebf3c4",symbol:"stmatic"},{chainId:137,address:"0xf501dd45a1198c2e1b5aef5314a68b9006d842e0",symbol:"mta"},{chainId:137,address:"0xeaecc18198a475c921b24b8a6c1c1f0f5f3f7ea0",symbol:"seed"},{chainId:137,address:"0xfe712251173a2cd5f5be2b46bb528328ea3565e1",symbol:"mvi"},{chainId:137,address:"0xa3fa99a148fa48d14ed51d610c367c61876997f1",symbol:"mimatic"},{chainId:137,address:"0xa486c6bc102f409180ccb8a94ba045d39f8fc7cb",symbol:"nex"},{chainId:137,address:"0xe2aa7db6da1dae97c5f5c6914d285fbfcc32a128",symbol:"par"},{chainId:137,address:"0x580a84c73811e1839f75d86d75d88cca0c241ff4",symbol:"qi"},{chainId:137,address:"0x831753dd7087cac61ab5644b308642cc1c33dc13",symbol:"quick"},{chainId:137,address:"0xb5c064f955d8e7f38fe0460c556a72987494ee17",symbol:"quick"},{chainId:137,address:"0x00e5646f60ac6fb446f621d146b6e1886f002905",symbol:"rai"},{chainId:137,address:"0x431cd3c9ac9fc73644bf68bf5691f4b83f9e104f",symbol:"rbw"},{chainId:137,address:"0xdbf31df14b66535af65aac99c32e9ea844e14501",symbol:"renbtc"},{chainId:137,address:"0x501ace9c35e60f03a2af4d484f49f9b1efde9f40",symbol:"solace"},{chainId:137,address:"0xfa68fb4628dff1028cfec22b4162fccd0d45efb6",symbol:"maticx"},{chainId:137,address:"0x0b3f868e0be5597d5db7feb59e1cadbb0fdda50a",symbol:"sushi"},{chainId:137,address:"0xdf7837de1f2fa4631d716cf2502f8b230f1dcc32",symbol:"tel"},{chainId:137,address:"0xe6469ba6d2fd6130788e0ea9c0a0515900563b59",symbol:"ust"},{chainId:137,address:"0xc2132d05d31c914a87c6611c10748aeb04b58e8f",symbol:"usdt"},{chainId:137,address:"0x5fe2b58c013d7601147dcdd68c143a77499f5531",symbol:"grt"},{chainId:137,address:"0xbbba073c31bf03b8acf7c28ef0738decf3695683",symbol:"sand"},{chainId:137,address:"0x2934b36ca9a4b31e633c5be670c8c8b28b6aa015",symbol:"thx"},{chainId:137,address:"0x2f800db0fdb5223b3c3f354886d907a671414a7f",symbol:"bct"},{chainId:137,address:"0x2e1ad108ff1d8c782fcbbb89aad783ac49586756",symbol:"tusd"},{chainId:137,address:"0x3809dcdd5dde24b37abe64a5a339784c3323c44f",symbol:"swap"},{chainId:137,address:"0x7fbc10850cae055b27039af31bd258430e714c62",symbol:"ubt"},{chainId:137,address:"0x2791bca1f2de4661ed88a30c99a7a9449aa84174",symbol:"usdc"},{chainId:137,address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",symbol:"weth"},{chainId:137,address:"0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270",symbol:"wmatic"},{chainId:137,address:"0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6",symbol:"wbtc"},{chainId:137,address:"0x24834bbec7e39ef42f4a75eaf8e5b6486d3f0e57",symbol:"lunc"},{chainId:137,address:"0xf153eff70dc0bf3b085134928daeea248d9b30d0",symbol:"xmark"},{chainId:42161,address:"0x9f20de1fc9b161b34089cbeae888168b44b03461",symbol:"arbis"},{chainId:42161,address:"0x040d1edc9569d4bab2d15287dc5a4f10f56a56b8",symbol:"bal"},{chainId:42161,address:"0x031d35296154279dc1984dcd93e392b1f946737b",symbol:"cap"},{chainId:42161,address:"0xf97f4df75117a78c1a5a0dbb814af92458539fb4",symbol:"link"},{chainId:42161,address:"0x354a6da3fcde098f8389cad84b0182725c6c91de",symbol:"comp"},{chainId:42161,address:"0xf4d48ce3ee1ac3651998971541badbb9a14d7234",symbol:"cream"},{chainId:42161,address:"0x11cdb42b0eb46d95f990bedd4695a6e3fa034978",symbol:"crv"},{chainId:42161,address:"0xda10009cbd5d07dd0cecc66161fc93d7c9000da1",symbol:"dai"},{chainId:42161,address:"0x8038f3c971414fd1fc220ba727f2d4a0fc98cb65",symbol:"dht"},{chainId:42161,address:"0xf0b5ceefc89684889e5f7e0a7775bd100fcd3709",symbol:"dusd"},{chainId:42161,address:"0x6c2c06790b3e3e3c38e12ee22f8183b37a13ee55",symbol:"dpx"},{chainId:42161,address:"0x32eb7902d4134bf98a28b963d26de779af92a212",symbol:"rdpx"},{chainId:42161,address:"0xc3ae0333f0f34aa734d5493276223d95b8f9cb37",symbol:"dxd"},{chainId:42161,address:"0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a",symbol:"gmx"},{chainId:42161,address:"0xa0b862f60edef4452f25b4160f177db44deb6cf1",symbol:"gno"},{chainId:42161,address:"0xb965029343d55189c25a7f3e0c9394dc0f5d41b1",symbol:"ndx"},{chainId:42161,address:"0x539bde0d7dbd336b79148aa742883198bbf60342",symbol:"magic"},{chainId:42161,address:"0x4e352cf164e64adcbad318c3a1e222e9eba4ce42",symbol:"mcb"},{chainId:42161,address:"0x3f56e0c36d275367b8c502090edf38289b3dea0d",symbol:"mimatic"},{chainId:42161,address:"0x965772e0e9c84b6f359c8597c891108dcf1c5b1a",symbol:"pickle"},{chainId:42161,address:"0x6694340fc020c5e6b96567843da2df01b2ce1eb6",symbol:"stg"},{chainId:42161,address:"0xd4d42f0b6def4ce0383636770ef773390d85c61a",symbol:"sushi"},{chainId:42161,address:"0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9",symbol:"usdt"},{chainId:42161,address:"0x23a941036ae778ac51ab04cea08ed6e2fe103614",symbol:"grt"},{chainId:42161,address:"0xa72159fc390f0e3c6d415e658264c7c4051e9b87",symbol:"tcr"},{chainId:42161,address:"0x4d15a3a2286d883af0aa1b3f21367843fac63e07",symbol:"tusd"},{chainId:42161,address:"0xfa7f8980b0f1e64a2062791cc3b0871572f1f7f0",symbol:"uni"},{chainId:42161,address:"0xff970a61a04b1ca14834a43f5de4533ebddb5cc8",symbol:"usdc"},{chainId:42161,address:"0xa684cd057951541187f288294a1e1c2646aa2d24",symbol:"vsta"},{chainId:42161,address:"0x64343594ab9b56e99087bfa6f2335db24c2d1f17",symbol:"vst"},{chainId:42161,address:"0x82af49447d8a07e3bd95bd0d56f35241523fbab1",symbol:"weth"},{chainId:42161,address:"0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",symbol:"wbtc"},{chainId:42161,address:"0x82e3a8f066a6989666b031d916c43672085b1582",symbol:"yfi"}];class _d{constructor(e,t,a,n,o){if(this.pools=new Hp({url:e.urls.subgraph,chainId:e.chainId,query:n}),this.poolsForSimulations=new ks(Is(e.urls.subgraph),t,e,void 0,n),this.poolsOnChain=new Kp(this.pools,{provider:t,multicall:e.addresses.contracts.multicall,vault:e.addresses.contracts.vault},e.poolsToIgnore,e.multicallBatchSize),this.poolShares=new jp(e.urls.subgraph,e.chainId),this.poolJoinExits=new Yp(e.urls.subgraph,e.chainId),e.urls.gaugesSubgraph&&(this.poolGauges=new Jp(e.urls.gaugesSubgraph,e.chainId),this.gaugeShares=new Op(e.urls.gaugesSubgraph,e.chainId)),e.urls.blockNumberSubgraph){this.blockNumbers=new hd(e.urls.blockNumberSubgraph);const t=async()=>{if(this.blockNumbers)return await this.blockNumbers.find("dayAgo")};this.yesterdaysPools=new Hp({url:e.urls.subgraph,chainId:e.chainId,blockHeight:t,query:n})}else if(e.averageBlockTime){const a=async()=>await t.getBlockNumber()-Math.round(86400/(e.averageBlockTime||2));this.yesterdaysPools=new Hp({url:e.urls.subgraph,chainId:e.chainId,blockHeight:a,query:n})}const i=Id.filter((t=>t.chainId==e.chainId)).map((e=>e.address)),s=new Qp(i,e.chainId,o),r=new td(e.urls.subgraph,e.chainId),p=new xt(a.contracts.multicall,e.chainId);this.tokenPrices=new ad(s,r,p);const d=new ed(e.chainId,o);this.tokenHistoricalPrices=new nd(d,p),this.tokenMeta=new zp([]),e.urls.gaugesSubgraph&&(this.liquidityGauges=new Rp(e.urls.gaugesSubgraph,a.contracts.multicall,e.addresses.contracts.gaugeController||"",e.chainId,e.addresses.contracts.gaugeControllerCheckpointer)),e.addresses.contracts.feeDistributor&&e.addresses.tokens.bal&&e.addresses.tokens.veBal&&e.addresses.tokens.bbaUsd&&(this.feeDistributor=new rd(a.contracts.multicall,e.addresses.contracts.feeDistributor,e.addresses.tokens.bal,e.addresses.tokens.veBal,e.addresses.tokens.bbaUsd,t)),this.feeCollector=new ud(e.addresses.contracts.vault,t),e.addresses.contracts.protocolFeePercentagesProvider&&(this.protocolFees=new bd(a.contracts.multicall,e.addresses.contracts.protocolFeePercentagesProvider)),this.tokenYields=new md,e.addresses.contracts.gyroConfigProxy&&(this.gyroConfigRepository=new wp(e.addresses.contracts.gyroConfigProxy,a.contracts.multicall,t))}}const gd=(e,t)=>"Stable"===e?er.LEGACY_STABLE:"ComposableStable"===e&&1===t?er.COMPOSABLE_STABLE:"ComposableStable"===e?er.COMPOSABLE_STABLE_V2:er.WEIGHTED,Pd=ar.encodeSetRelayerApproval,wd=ar.encodeGaugeWithdraw,xd=ar.encodeGaugeDeposit,Ed=ar.encodePeekChainedReferenceValue,Ad=ya.createInterface(),vd=(e,t)=>{var a;return(null===(a=e.poolType)||void 0===a?void 0:a.match(/.*Linear.*/))?Sd(e,t):[]},Sd=(e,t)=>{if(!(e.id&&t.id&&e.tokens&&t.tokens&&e.mainIndex&&t.mainIndex))throw"Missing tokens";const a=e.tokens[e.mainIndex];return[{poolId:e.id,assetIn:e.address,assetOut:a.address},{poolId:t.id,assetIn:a.address,assetOut:t.address}]},kd=async(e,t)=>{const a=await t.find(e);if(!a)throw`Pool ${e} not found`;const n=async(e,a)=>{let o=[{address:e}];const i=await t.findBy("address",e);if(i&&e!=a){const t=i.tokens.sort(Od),a=await Promise.all(t.map((({address:e})=>n(e,i.address))));o=[{address:e,id:i.id,poolType:i.poolType,poolTypeVersion:i.poolTypeVersion,mainIndex:i.mainIndex,tokens:a.flat()}]}return o},o=a.tokens.sort(Od);return{id:e,address:a.address,tokens:(await Promise.all(o.map((({address:e})=>n(e,a.address))))).flat(),poolType:a.poolType,poolTypeVersion:a.poolTypeVersion,mainIndex:a.mainIndex}},Od=(e,t)=>e.address.toLowerCase()>t.address.toLowerCase()?1:-1,Md=(e,t,a,n,o,i,r=!1,d,l,u)=>{if(!(o.id&&i.id&&o.tokens&&i.tokens&&o.poolType&&i.poolType))throw"Pool data is missing";const c=o.tokens.flatMap((({address:e})=>e)),y=i.tokens.flatMap((({address:e})=>e)),b="ComposableStable"==o.poolType&&1==o.poolTypeVersion?0:-1;let m,f=[];b>-1?(m=[{index:b,key:ar.toChainedReference(`10${b}`)}],f=[ar.toChainedReference(`20${b}`)]):(m=c.map(((e,t)=>({index:t,key:ar.toChainedReference(`10${t}`)}))),f=c.map(((e,t)=>ar.toChainedReference(`20${t}`))));const T=ar.toChainedReference("999"),h=[];let I=!1;"ComposableStable"===o.poolType&&(I=!0),u&&h.push(Pd(t,!0,u)),d&&h.push(wd(d,e,t,a)),h.push(((e,t,a,n,o=-1,i,s,r,p,d=!0)=>{let l;const u="ComposableStable"===t&&1===a;l=o>-1?re.exitExactBPTInForOneTokenOut(s,o):(u?be.exitExactBPTInForAllTokensOut:re.exitExactBPTInForTokensOut)(s);const c=gd(t,a);return ar.encodeExitPool({poolId:e,poolKind:c,sender:r,recipient:p,outputReferences:i,exitPoolRequest:{assets:n,minAmountsOut:new Array(n.length).fill("0"),userData:l,toInternalBalance:d}})})(o.id,o.poolType,o.poolTypeVersion||1,c,b,m,a,d?t:e,t));const _=((e,t,a)=>{const n=({tokens:e,mainIndex:t})=>e&&t&&e[t].address||"",o=e.flatMap(n),i=t.flatMap(n),s=o.map(((e,t)=>e&&[t,i.indexOf(e)]||[-1,-1])).map((([a,n])=>{if(-1===a||-1===n)return[];const o=e[a],i=t[n];return vd(o,i)}));return a>-1?[s[a]]:s})(o.tokens,i.tokens,b);if(_.flat().length>0){const e=_.map(((e,t)=>({path:e,inputAmount:String(m[t].key),outputReference:f[t]}))).filter((({path:e})=>e.length>0));h.push(((e,t,a,n,o=!0)=>{const i=[],r=[],d=[],l=[];a.forEach((e=>{const{path:t,inputAmount:a,outputReference:n}=e;for(let e=0;ei.address!=e)).map((e=>{var t;const a=c.indexOf(e);return String(I&&f[a]||(null===(t=m[a])||void 0===t?void 0:t.key)||0)}));h.push(((e,t,a,n,o,i,r,p,d,l=!0)=>{const u=n.map((()=>s)),c=re.joinExactTokensInForBPTOut(o,i),y=gd(t,a);return ar.encodeJoinPool({poolId:e,kind:y,sender:p,recipient:d,joinPoolRequest:{assets:n,maxAmountsIn:u,userData:c,fromInternalBalance:l},value:"0",outputReference:r})})(i.id,i.poolType,i.poolTypeVersion||1,y,g,n,String(T),t,l?t:e,!0)),!0===r&&h.push(Ed(String(T))),l&&h.push(xd(l,t,e,String(T)));return Ad.encodeFunctionData("multicall",[h])};class Cd{constructor({relayerAddress:e,poolsRepository:t,gaugesRepository:a,provider:n}){this.getExpectedBptOut=Cd.getExpectedBptOut,this.relayerAddress=e,this.poolsRepository=t,this.gaugesRepository=a,this.provider=n}async pool2pool({user:e,from:t,to:a,balance:n,minBptOut:o="0",authorisation:i}){const s=await kd(t,this.poolsRepository),r=await kd(a,this.poolsRepository),p=Md(e,this.relayerAddress,String(n),o,s,r,"0"==o,void 0,void 0,i);return{to:this.relayerAddress,data:p}}async pool2poolWithGauges({user:e,from:t,to:a,balance:n,minBptOut:o="0",authorisation:i}){const s=await this.gaugesRepository.findBy("poolId",t),r=await this.gaugesRepository.findBy("poolId",a);if(!(s&&s.poolId&&r&&r.poolId))throw new Error("Gauge not found");const p=await kd(s.poolId,this.poolsRepository),d=await kd(r.poolId,this.poolsRepository),l=Md(e,this.relayerAddress,String(n),o,p,d,"0"==o,s.id,r.id,i);return{to:this.relayerAddress,data:l}}async gauge2gauge({user:e,from:t,to:a,balance:n,authorisation:o}){const i=[wd(t,e,this.relayerAddress,n),xd(a,this.relayerAddress,e,n)];o&&i.unshift(Pd(this.relayerAddress,!0,o));const s=Ad.encodeFunctionData("multicall",[i]);return{to:this.relayerAddress,data:s}}}Cd.getExpectedBptOut=e=>{const t=Ad.decodeFunctionResult("multicall",e)[0].slice(-2).filter((e=>"0x"!==e));return String(BigInt(t))};class Fd{constructor(e,t=new Ds(e),a=new nr(e)){this.config=e,this.sor=t,this.subgraph=a;Re.getInstance().setLoggingEnabled(!!e.enableLogging),this.networkConfig=Ms(e),this.provider=t.provider,this.balancerContracts=new lr(this.networkConfig.addresses.contracts,t.provider),this.data=new _d(this.networkConfig,t.provider,this.balancerContracts,e.subgraphQuery,e.coingecko),this.swaps=new Qs(this.config),this.relayer=new ar,this.pricing=new or(e,this.swaps),this.pools=new ap(this.networkConfig,this.data,this.balancerContracts),this.data.liquidityGauges&&(this.claimService=new ko(this.data.liquidityGauges,this.data.feeDistributor,this.networkConfig.chainId,this.contracts.multicall,this.networkConfig.addresses.contracts.gaugeClaimHelper,this.networkConfig.addresses.contracts.balancerMinter),this.migrationService=new Cd({relayerAddress:this.networkConfig.addresses.contracts.balancerRelayer,poolsRepository:this.data.pools,gaugesRepository:this.data.liquidityGauges.subgraph,provider:this.provider})),this.vaultModel=new Nr(this.data.poolsForSimulations,this.networkConfig.addresses.tokens.wrappedNativeAsset)}get contracts(){return this.balancerContracts.contracts}}var Bd,Rd;!function(e){e[e.Direct=0]="Direct",e[e.TokenIn=1]="TokenIn",e[e.TokenOut=2]="TokenOut",e[e.Middle=3]="Middle"}(Bd||(Bd={})),function(e){e[e.BatchSwap=0]="BatchSwap",e[e.Join=1]="Join",e[e.Exit=2]="Exit"}(Rd||(Rd={}));class Nd{constructor(e,t,a,n,o,i,s,r,p,d){const l=this.getActionStep(e,t,a,n);this.amountIn=this.getActionAmount(o,Rd.BatchSwap,l,s),this.hasTokenIn=this.actionHasTokenIn(l),this.hasTokenOut=this.actionHasTokenOut(l);const u=this.hasTokenOut?i:"0";this.minOut=this.getActionMinOut(u,r);const[c,y]=this.getActionOutputRef(l,n,s);this.nextOpRefKey=y,this.opRefStart=c,this.sender=this.getSender(this.hasTokenIn,p,d),this.receiver=this.getReceiver(this.hasTokenOut,p,d)}getActionAmount(e,t,a,n){let o=e;return(a===Bd.TokenOut||a===Bd.Middle&&t===Rd.Join||a===Bd.Middle&&t===Rd.Exit)&&(o=ar.toChainedReference(n-1).toString()),o}getActionOutputRef(e,t,a){let n={};return e!==Bd.TokenIn&&e!==Bd.Middle||(n=this.getOutputRef(a,t),a++),[n,a]}getActionMinOut(e,t){return Dt(p.from(e),p.from(t)).toString()}getActionStep(e,t,a,n){let o;return o=a===e&&n===t?Bd.Direct:a===e?Bd.TokenIn:n===t?Bd.TokenOut:Bd.Middle,o}getOutputRef(e,t){return{index:t,key:ar.toChainedReference(e)}}getFromInternal(e,t){return!e&&!t}getToInternal(e,t){return!e&&!t}actionHasTokenIn(e){return e===Bd.Direct||e===Bd.TokenIn}actionHasTokenOut(e){return e===Bd.Direct||e===Bd.TokenOut}getSender(e,t,a){return e?t:a}getReceiver(e,t,a){return e?t:a}getPoolKind(e){let t=0;return["MetaStable","Stable","StablePhantom"].includes(e)?t=1:"ComposableStable"===e&&(t=3),t}}class Ld extends Nd{constructor(e,t,a,n,o,i,s,r){var p;super(t,a,e.assetInIndex,e.assetOutIndex,e.amount,null!==(p=e.returnAmount)&&void 0!==p?p:"0",n,i,s,r),this.opRefKey=n,this.type=Rd.Exit,this.poolId=e.poolId,this.tokenOut=o[e.assetOutIndex],this.toInternalBalance=this.getToInternal(this.hasTokenOut),this.opRef=this.opRefStart}callData(e,t){const a=e.tokensList,n=new Le(t),[o]=n.sortTokens(a),i=this.tokenOut,s=o.findIndex((e=>e.toLowerCase()===i.toLowerCase())),r=Array(a.length).fill("0");r[s]=this.minOut;const p=this.amountIn,d={assets:o,minAmountsOut:r,userData:pe.exitExactBPTInForOneTokenOut(p,s),toInternalBalance:this.toInternalBalance,poolId:this.poolId,poolKind:this.getPoolKind(e.poolType),sender:this.sender,recipient:this.receiver,outputReferences:this.opRef.key?[this.opRef]:[],exitPoolRequest:{}},l=ar.formatExitPoolInput(d);return{params:d,encoded:ar.encodeExitPool(l)}}getAmountIn(){return this.hasTokenIn?this.amountIn:"0"}getAmountOut(){return this.hasTokenOut?this.minOut:"0"}}class Dd extends Nd{constructor(e,t,a,n,o,i,s,r){var p;super(t,a,e.assetInIndex,e.assetOutIndex,e.amount,null!==(p=e.returnAmount)&&void 0!==p?p:"0",n,i,s,r),this.opRefKey=n,this.type=Rd.Join,this.poolId=e.poolId,this.tokenIn=o[e.assetInIndex],this.fromInternal=this.getFromInternal(this.hasTokenIn),this.opRef=this.opRefStart}callData(e,t){const a=e.tokensList,n=new Le(t),[o]=n.sortTokens(a),i=this.tokenIn,s=o.findIndex((e=>e.toLowerCase()===i.toLowerCase())),r=Array(a.length).fill("0");r[s]=this.amountIn;const p=this.minOut,d=pe.joinExactTokensInForBPTOut(r,p),l={poolId:this.poolId,sender:this.sender,recipient:this.receiver,kind:this.getPoolKind(e.poolType),joinPoolRequest:{assets:o,maxAmountsIn:r,userData:d,fromInternalBalance:this.fromInternal},value:"0",outputReference:this.opRef.key?this.opRef.key.toString():"0"};return{params:l,encoded:ar.encodeJoinPool(l)}}getAmountIn(){return this.hasTokenIn?this.amountIn:"0"}getAmountOut(){return this.hasTokenOut?this.minOut:"0"}}class Ud extends Nd{constructor(e,t,a,n,o,i,s,r,p){var d;super(t,a,e.assetInIndex,e.assetOutIndex,e.amount,null!==(d=e.returnAmount)&&void 0!==d?d:"0",n,i,r,p),this.mainTokenInIndex=t,this.mainTokenOutIndex=a,this.opRefKey=n,this.assets=o,this.slippage=i,this.pools=s,this.user=r,this.relayer=p,this.approveTokens=[],this.opRef=[],this.type=Rd.BatchSwap,this.swaps=[{...e,amount:this.amountIn}];const l=this.isBpt(s,o[e.assetInIndex]);l&&this.approveTokens.push(o[e.assetInIndex]),this.fromInternal=this.getFromInternal(this.hasTokenIn,l);const u=this.isBpt(s,o[e.assetOutIndex]);this.toInternal=this.getToInternal(this.hasTokenOut,u),this.limits=this.getLimits(o,e.assetInIndex,e.assetOutIndex,e.amount,this.hasTokenIn,this.hasTokenOut,this.minOut),this.opRefStart.index&&this.opRef.push(this.opRefStart)}getLimits(e,t,a,n,o,i,r){const d=e.map((()=>p.from(0)));return d[t]=o?p.from(n):s,i&&(d[a]=p.from(r).mul(-1)),d}updateLimits(e,t){t.hasTokenIn&&(e[t.swaps[0].assetInIndex]=e[t.swaps[0].assetInIndex].add(t.amountIn)),t.hasTokenOut&&(e[t.swaps[0].assetOutIndex]=e[t.swaps[0].assetOutIndex].sub(t.minOut))}isChainedSwap(e){return this.opRef[this.swaps.length-1]&&this.toInternal===e.fromInternal&&this.receiver===e.sender&&this.opRef[this.swaps.length-1].key.toString()===e.amountIn}canAddSwap(e){return!!this.isChainedSwap(e)||e.fromInternal===this.fromInternal&&e.toInternal===this.toInternal&&e.receiver===this.receiver&&e.sender===this.sender}callData(){const e=[];for(const t of this.approveTokens){const a=ar.encodeApproveVault(t,i.toString());e.push(a)}const t={sender:this.sender,recipient:this.receiver,fromInternalBalance:this.fromInternal,toInternalBalance:this.toInternal},a={swapType:In.SwapExactIn,swaps:this.swaps,assets:this.assets,funds:t,limits:this.limits.map((e=>e.toString())),deadline:p.from(Math.ceil(Date.now()/1e3)+3600),value:"0",outputReferences:this.opRef},n=ar.encodeBatchSwap(a);return e.push(n),{params:a,encoded:e}}getAmountIn(){return this.limits[this.mainTokenInIndex].toString()}getAmountOut(){return this.limits[this.mainTokenOutIndex].abs().toString()}copy(){return new Ud(this.swaps[0],this.mainTokenInIndex,this.mainTokenOutIndex,this.opRefKey,this.assets,this.slippage,this.pools,this.user,this.relayer)}addSwap(e){const t=this.isChainedSwap(e);this.swaps.push(e.swaps[0]),this.approveTokens=[...new Set([...this.approveTokens,...e.approveTokens])],this.toInternal=e.toInternal,this.receiver=e.receiver,this.hasTokenOut=e.hasTokenOut,this.minOut=e.minOut,this.opRef=[...this.opRef,...e.opRef],t||(this.amountIn=p.from(this.amountIn).add(e.amountIn).toString()),this.updateLimits(this.limits,e)}isBpt(e,t){return e.some((e=>e.address.toLowerCase()===t.toLowerCase()))}}function Vd(e){const t=function(e){const t=[],a=[],n=[];for(const o of e)o.type===Rd.Exit||o.type===Rd.Join?o.hasTokenIn?t.push(o):o.hasTokenOut?a.push(o):n.push(o):n.push(o);return[...t,...n,...a]}(e);return function(e){const t=[];let a;for(const n of e)n.type===Rd.BatchSwap?a?a.canAddSwap(n)?a.addSwap(n):(t.push(a),a=n.copy()):a=n.copy():(a&&(t.push(a),a=void 0),t.push(n));return a&&t.push(a),t}(t)}const qd=new t([{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"address",name:"libraryAddress",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"getLibrary",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"results",type:"bytes[]"}],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}]);function Gd(e){Re.getInstance()}function Wd(e,t,a){return e!==V.SwapExactOut&&t.toLowerCase()!==o.toLowerCase()&&a.toLowerCase()!==o.toLowerCase()}function $d(e,t,a){if("Weighted"!==a)return!1;const n=t[e.assetOutIndex],o=Ie(e.poolId);return n.toLowerCase()===o.toLowerCase()}function Hd(e,t,a){if("Weighted"!==a)return!1;const n=t[e.assetInIndex],o=Ie(e.poolId);return n.toLowerCase()===o.toLowerCase()}function Kd(e,t,a){return t.some((t=>function(e,t,a){const n=e.find((e=>e.id===t.poolId));return"Weighted"===(null==n?void 0:n.poolType)&&[a[t.assetInIndex],a[t.assetOutIndex]].includes(n.address)}(e,t,a)))}function Jd(e,t,a,n,o,i,s){const r=function(e,t,a,n,o,i,s,r){var p;const d=n.findIndex((t=>t.toLowerCase()===e.toLowerCase())),l=n.findIndex((e=>e.toLowerCase()===t.toLowerCase())),u=[];let c=0;for(const e of a){const t=null===(p=i.find((t=>t.id===e.poolId)))||void 0===p?void 0:p.poolType;if($d(e,n,t)){const t=new Dd(e,d,l,c,n,o,s,r);c=t.nextOpRefKey,u.push(t)}else{if(!Hd(e,n,t)){const t=new Ud(e,d,l,c,n,o,i,s,r);c=t.nextOpRefKey,u.push(t);continue}{const t=new Ld(e,d,l,c,n,o,s,r);c=t.nextOpRefKey,u.push(t)}}}return u}(e.tokenIn,e.tokenOut,e.swaps,e.tokenAddresses,i,t,a,n),d=Vd(r),l=[],u=[];s&&l.push(ar.encodeSetRelayerApproval(n,!0,s));for(const e of d){if(e.type===Rd.Exit||e.type===Rd.Join){const a=t.find((t=>t.id===e.poolId));if(void 0===a)throw new vn(An.NO_POOL_DATA);const{params:n,encoded:i}=e.callData(a,o);l.push(i),u.push(n)}if(e.type===Rd.BatchSwap){const{params:t,encoded:a}=e.callData();l.push(...a),u.push(t)}}!function(e,t,a,n){const o=e.reduce(((e=p.from(0),t)=>e.add(t))),i=t.reduce(((e=p.from(0),t)=>e.add(t)));Gd(o.toString()),Gd(a.swapAmount.toString()),Gd(i.toString()),Gd(Dt(a.returnAmount,p.from(n)).toString()),Gd(a.returnAmount.toString());const s=i.sub(Dt(a.returnAmount,p.from(n)));if(!o.eq(a.swapAmount)||!s.lt("3"))throw new vn(An.RELAY_SWAP_AMOUNTS)}(d.map((e=>p.from(e.getAmountIn()))),d.map((e=>p.from(e.getAmountOut()))),e,i);return{to:n,data:qd.encodeFunctionData("multicall",[l]),rawCalls:l,inputs:u}}export{at as AMP_PRECISION,we as APR_THRESHOLD,ta as AaveLinearPoolFactory__factory,Qt as AaveLinearPool__factory,xt as AaveRates,na as AaveWrapping__factory,Le as AssetHelpers,ia as Authoriser__factory,xn as BALANCER_NETWORK_CONFIG,Yt as BalancerAPIArgsFormatter,vn as BalancerError,An as BalancerErrorCode,Ue as BalancerErrors,ra as BalancerHelpers__factory,We as BalancerMinterAuthorization,da as BalancerMinter__factory,ua as BalancerPoolDataQueries__factory,ya as BalancerRelayer__factory,Fd as BalancerSDK,se as BasePoolEncoder,ma as BatchRelayerLibrary__factory,hd as BlockNumberRepository,ed as CoingeckoHistoricalPriceRepository,Qp as CoingeckoPriceRepository,be as ComposableStablePoolEncoder,ye as ComposableStablePoolExitKind,Ia as ComposableStablePoolFactory__factory,ce as ComposableStablePoolJoinKind,Ta as ComposableStablePool__factory,ga as ConvergentCurvePool__factory,_d as Data,Ot as Debouncer,wa as ERC20__factory,va as ERC4626LinearPoolFactory__factory,Ea as ERC4626LinearPool__factory,Ma as EulerLinearPoolFactory__factory,ka as EulerLinearPool__factory,Fa as FXPool__factory,ud as FeeCollectorRepository,rd as FeeDistributorRepository,Ra as GaugeClaimHelper__factory,Ap as GaugeControllerMulticallRepository,Oe as GaugeShareAttributes,Op as GaugeSharesRepository,Ua as GearboxLinearPoolFactory__factory,La as GearboxLinearPool__factory,zt as GraphQLArgsBuilder,qa as GyroConfig__factory,bn as GyroEV2__factory,nd as HistoricalPriceProvider,Wa as LidoRelayer__factory,Ha as LinearPool__factory,go as Liquidity,Rp as LiquidityGaugeSubgraphRPCProvider,Ja as LiquidityGaugeV5__factory,Fp as LiquidityGaugesMulticallRepository,Bp as LiquidityGaugesSubgraphRepository,de as ManagedPoolEncoder,Cd as Migrations,za as Multicall3__factory,Ya as Multicall__factory,Pe as Network,ve as POOLS,Fe as PoolBalanceOpKind,Se as PoolGaugesAttributes,Jp as PoolGaugesRepository,Xp as PoolJoinExitAttributes,Yp as PoolJoinExitRepository,er as PoolKind,ke as PoolShareAttributes,jp as PoolSharesRepository,Me as PoolSpecialization,Be as PoolType,ap as Pools,Dp as PoolsBalancerAPIRepository,Up as PoolsFallbackRepository,Vp as PoolsStaticRepository,Kp as PoolsSubgraphOnChainRepository,Hp as PoolsSubgraphRepository,bd as ProtocolFeesProvider,Yr as ProtocolId,ar as Relayer,qe as RelayerAction,Ge as RelayerAuthorization,xe as SHALLOW_COMPOSABLE_STABLE_BUFFER,qr as SimulationType,Ds as Sor,ae as StablePhantomPoolJoinKind,re as StablePoolEncoder,ne as StablePoolExitKind,te as StablePoolJoinKind,Qa as StablePool__factory,tn as StaticATokenRateProvider__factory,Zp as StaticTokenPriceProvider,zp as StaticTokenProvider,nr as Subgraph,jt as SubgraphArgsFormatter,td as SubgraphPriceRepository,In as SwapType,Qs as Swaps,ad as TokenPriceProvider,md as TokenYieldsRepository,Ce as UserBalanceOpKind,nn as Vault__factory,fn as VeBal__factory,hn as VeDelegationProxy__factory,pe as WeightedPoolEncoder,ie as WeightedPoolExitKind,pn as WeightedPoolFactory__factory,oe as WeightedPoolJoinKind,sn as WeightedPool__factory,cn as YearnLinearPoolFactory__factory,ln as YearnLinearPool__factory,Ve as accountToAddress,Ut as addSlippage,vt as addressMapIn,hr as balEmissions,Rt as bn,Jd as buildRelayerCalls,Wd as canUseJoinExit,_n as factories,vs as fetchOnChainPoolData,Jt as findEventInReceiptLogs,Ct as formatFixed,Bt as formatFromBigInt18,kt as getEthValue,gn as getLimitsForSlippage,Ss as getOnChainBalances,Ie as getPoolAddress,ge as getPoolNonce,_e as getPoolSpecialization,Xt as getRandomBytes32,qt as insert,Ht as isLinearish,ue as isNormalizedWeights,Vt as isSameAddress,Lt as mulSlippage,Mt as parseFixed,nt as parsePoolInfo,Ft as parseToBigInt18,Wt as removeItem,$t as reorderArrays,Gt as replace,$e as signPermit,Kd as someJoinExit,he as splitPoolId,Dt as subSlippage,le as toNormalizedWeights,At as tokenAddressForPricing,Et as tokensToTokenPrices,Kt as truncateAddresses,St as unwrapToken,Pt as wrappedTokensMap,gt as yieldTokens}; +//# sourceMappingURL=index.esm.js.map diff --git a/package/dist/index.esm.js.map b/package/dist/index.esm.js.map new file mode 100644 index 000000000..92187ace6 --- /dev/null +++ b/package/dist/index.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.esm.js","sources":["../../src/pool-base/encoder.ts","../../src/pool-stable/encoder.ts","../../src/pool-weighted/encoder.ts","../../src/pool-weighted/normalizedWeights.ts","../../src/pool-composable-stable/encoder.ts","../node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../../src/pool-utils/poolId.ts","../../src/lib/constants/network.ts","../../src/lib/constants/pools.ts","../../src/modules/data/pool-gauges/types.ts","../../src/modules/data/pool-shares/types.ts","../../src/modules/data/gauge-shares/types.ts","../../src/types.ts","../../src/lib/utils/logger.ts","../../src/lib/utils/assetHelpers.ts","../../src/lib/utils/errors.ts","../../src/lib/utils/signatures.ts","../../src/lib/utils/permit.ts","../../src/lib/utils/solidityMaths.ts","../../src/lib/utils/poolHelper.ts","../../src/lib/constants/tokens.ts","../node_modules/@ethersproject/logger/lib.esm/index.js","../node_modules/@ethersproject/logger/lib.esm/_version.js","../node_modules/@ethersproject/units/lib.esm/_version.js","../node_modules/@ethersproject/units/lib.esm/index.js","../../src/modules/data/token-prices/aave-rates.ts","../../src/lib/utils/tokens.ts","../../src/lib/utils/debouncer.ts","../../src/lib/utils/math.ts","../../src/lib/utils/slippageHelper.ts","../../src/lib/utils/index.ts","../../src/lib/graphql/formatters/balancer-api.ts","../../src/lib/graphql/formatters/subgraph.ts","../../src/lib/graphql/args-builder.ts","../../src/contracts/factories/AaveLinearPool__factory.ts","../../src/contracts/factories/AaveLinearPoolFactory__factory.ts","../../src/contracts/factories/AaveWrapping__factory.ts","../../src/contracts/factories/Authoriser__factory.ts","../../src/contracts/factories/BalancerHelpers__factory.ts","../../src/contracts/factories/BalancerMinter__factory.ts","../../src/contracts/factories/BalancerPoolDataQueries__factory.ts","../../src/contracts/factories/BalancerRelayer__factory.ts","../../src/contracts/factories/BatchRelayerLibrary__factory.ts","../../src/contracts/factories/ComposableStablePool__factory.ts","../../src/contracts/factories/ComposableStablePoolFactory__factory.ts","../../src/contracts/factories/ConvergentCurvePool__factory.ts","../../src/contracts/factories/ERC20__factory.ts","../../src/contracts/factories/ERC4626LinearPool__factory.ts","../../src/contracts/factories/ERC4626LinearPoolFactory__factory.ts","../../src/contracts/factories/EulerLinearPool__factory.ts","../../src/contracts/factories/EulerLinearPoolFactory__factory.ts","../../src/contracts/factories/FXPool__factory.ts","../../src/contracts/factories/GaugeClaimHelper__factory.ts","../../src/contracts/factories/GearboxLinearPool__factory.ts","../../src/contracts/factories/GearboxLinearPoolFactory__factory.ts","../../src/contracts/factories/GyroConfig__factory.ts","../../src/contracts/factories/LidoRelayer__factory.ts","../../src/contracts/factories/LinearPool__factory.ts","../../src/contracts/factories/LiquidityGaugeV5__factory.ts","../../src/contracts/factories/Multicall__factory.ts","../../src/contracts/factories/Multicall3__factory.ts","../../src/contracts/factories/StablePool__factory.ts","../../src/contracts/factories/StaticATokenRateProvider__factory.ts","../../src/contracts/factories/Vault__factory.ts","../../src/contracts/factories/WeightedPool__factory.ts","../../src/contracts/factories/WeightedPoolFactory__factory.ts","../../src/contracts/factories/YearnLinearPool__factory.ts","../../src/contracts/factories/YearnLinearPoolFactory__factory.ts","../../src/contracts/factories/GyroEV2__factory.ts","../../src/contracts/factories/VeBal__factory.ts","../../src/contracts/factories/VeDelegationProxy__factory.ts","../../src/modules/swaps/types.ts","../../src/modules/swaps/helpers.ts","../../src/lib/constants/config.ts","../../src/balancerErrors.ts","../../src/modules/pricing/priceImpact.ts","../../src/lib/utils/stableMathHelpers.ts","../../src/modules/pools/pool-types/concerns/stable/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/stable/exit.concern.ts","../../src/modules/pools/pool-types/concerns/stable/join.concern.ts","../../src/modules/pools/pool-types/concerns/stable/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/stable/spotPrice.concern.ts","../../src/modules/pools/pool-types/stable.module.ts","../../src/modules/pools/pool-types/concerns/stablePhantom/spotPrice.concern.ts","../../src/modules/pools/pool-types/concerns/composableStable/join.concern.ts","../../src/modules/pools/pool-types/concerns/composableStable/exit.concern.ts","../../src/modules/pools/pool-types/composableStable.module.ts","../../src/modules/pools/pool-types/concerns/weighted/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/weighted/exit.concern.ts","../../src/modules/pools/pool-types/concerns/weighted/join.concern.ts","../../src/modules/pools/pool-types/concerns/weighted/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/weighted/spotPrice.concern.ts","../../src/modules/pools/pool-types/weighted.module.ts","../../src/modules/pools/pool-types/concerns/metaStable/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/metaStable/spotPrice.concern.ts","../../src/modules/pools/pool-types/metaStable.module.ts","../../src/modules/pools/pool-types/concerns/stablePhantom/exit.concern.ts","../../src/modules/pools/pool-types/concerns/stablePhantom/join.concern.ts","../../src/modules/pools/pool-types/stablePhantom.module.ts","../../src/modules/pools/pool-types/concerns/linear/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/linear/exit.concern.ts","../../src/modules/pools/pool-types/concerns/linear/join.concern.ts","../../src/modules/pools/pool-types/concerns/linear/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/linear/spotPrice.concern.ts","../../src/modules/pools/pool-types/linear.module.ts","../../src/modules/pools/pool-types/concerns/fx/exit.concern.ts","../../src/modules/pools/pool-types/concerns/fx/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/fx/spotPrice.concern.ts","../../src/modules/pools/pool-types/concerns/fx/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/fx/join.concern.ts","../../src/modules/pools/pool-types/fx.module.ts","../../src/modules/pools/pool-types/concerns/gyro/exit.concern.ts","../../src/modules/pools/pool-types/concerns/gyro/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/gyro/spotPrice.concern.ts","../../src/modules/pools/pool-types/concerns/gyro/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/gyro/join.concern.ts","../../src/modules/pools/pool-types/gyro.module.ts","../../src/modules/pools/pool-type-concerns.ts","../../src/modules/liquidity/liquidity.module.ts","../../src/modules/claims/helper.ts","../../src/modules/claims/ClaimService.ts","../../src/modules/swaps/queryBatchSwap.ts","../node_modules/tslib/tslib.es6.js","../node_modules/graphql-tag/lib/index.js","../../src/modules/subgraph/generated/balancer-subgraph-types.ts","../../src/modules/subgraph/generated/balancer-gauges.ts","../../src/modules/subgraph/subgraph.ts","../../src/lib/utils/multiCaller3.ts","../../src/modules/data/pool/onchain-data.ts","../../src/modules/sor/pool-data/subgraphPoolDataService.ts","../../src/modules/sor/token-price/subgraphTokenPriceService.ts","../../src/modules/sdk.helpers.ts","../../src/lib/constants/poolsToIgnore.ts","../../src/modules/sor/token-price/apiTokenPriceService.ts","../../src/lib/utils/coingecko-api.ts","../../src/modules/sor/token-price/coingeckoTokenPriceService.ts","../../src/modules/sor/sor.module.ts","../../src/modules/swaps/flashSwap/index.ts","../../src/modules/swaps/swap_builder/swap_utils.ts","../../src/modules/swaps/swap_builder/swap_info_decorator.ts","../../src/modules/swaps/swap_builder/single_swap_builder.ts","../../src/modules/swaps/swap_builder/batch_swap_builder.ts","../../src/modules/swaps/swaps.module.ts","../../src/modules/relayer/types.ts","../../src/modules/relayer/relayer.module.ts","../../src/modules/subgraph/subgraph.module.ts","../../src/modules/pricing/pricing.module.ts","../../src/modules/contracts/implementations/base-pool.ts","../../src/lib/utils/multiCaller.ts","../../src/lib/utils/time.ts","../../src/modules/contracts/implementations/veBAL.ts","../../src/modules/contracts/implementations/veBAL-proxy.ts","../../src/modules/contracts/contracts.module.ts","../../src/modules/pools/impermanentLoss/impermanentLossService.ts","../../src/modules/data/bal/emissions.ts","../../src/modules/pools/apr/protocol-revenue.ts","../../src/modules/pools/fees/fees.ts","../../src/modules/pools/apr/apr.ts","../../src/modules/graph/graph.ts","../../src/pool-weighted/decoder.ts","../../src/modules/vaultModel/poolModel/join.ts","../../src/modules/vaultModel/poolModel/exit.ts","../../src/modules/vaultModel/poolModel/swap.ts","../../src/modules/vaultModel/poolModel/unwrap.ts","../../src/modules/vaultModel/poolModel/poolModel.ts","../../src/modules/vaultModel/relayer.ts","../../src/modules/vaultModel/poolSource.ts","../../src/modules/vaultModel/vaultModel.module.ts","../../src/modules/joins/joins.module.ts","../../src/lib/utils/tenderlyHelper.ts","../../src/modules/simulation/simulation.module.ts","../../src/modules/exits/exits.module.ts","../../src/modules/pools/volume/volume.ts","../../src/modules/pools/factory/composable-stable/composable-stable.factory.ts","../../src/modules/pools/factory/weighted/weighted.factory.ts","../../src/modules/pools/factory/types.ts","../../src/modules/pools/factory/linear/linear.factory.ts","../../src/modules/pools/pool-factory__factory.ts","../../src/modules/pools/queries/params_builder.ts","../../src/modules/pools/queries/get_encoder.ts","../../src/modules/pools/emissions/index.ts","../../src/modules/pools/proportional-amounts/index.ts","../../src/modules/pools/index.ts","../node_modules/@ethersproject/strings/lib.esm/_version.js","../node_modules/@ethersproject/strings/lib.esm/utf8.js","../node_modules/@ethersproject/strings/lib.esm/bytes32.js","../node_modules/js-sha3/src/sha3.js","../node_modules/@ethersproject/solidity/lib.esm/_version.js","../node_modules/@ethersproject/solidity/lib.esm/index.js","../node_modules/@ethersproject/keccak256/lib.esm/index.js","../../src/modules/data/gyro-config/repository.ts","../../src/modules/data/gauge-controller/multicall.ts","../../src/modules/subgraph/repository/abstract-subgraph-repository.ts","../../src/modules/subgraph/repository/balancer-subgraph-repository.ts","../../src/modules/subgraph/repository/gauges-subgraph-repository.ts","../../src/modules/data/gauge-shares/repository.ts","../../src/modules/data/liquidity-gauges/multicall.ts","../../src/modules/data/liquidity-gauges/subgraph.ts","../../src/modules/data/liquidity-gauges/provider.ts","../../src/modules/api/balancer-api.client.ts","../../src/modules/data/pool/balancer-api.ts","../../src/modules/data/pool/fallback.ts","../../src/modules/data/pool/static.ts","../../src/modules/data/pool/subgraph-helpers.ts","../../src/modules/data/pool/subgraph.ts","../../src/modules/data/pool/subgraphOnChain.ts","../../src/modules/data/pool-gauges/repository.ts","../../src/modules/data/pool-joinExit/types.ts","../../src/modules/data/pool-joinExit/repository.ts","../../src/modules/data/pool-shares/repository.ts","../../src/modules/data/token/static.ts","../../src/modules/data/token-prices/static.ts","../../src/modules/data/token-prices/coingecko.ts","../../src/modules/data/token-prices/coingecko-historical.ts","../../src/modules/data/token-prices/subgraph.ts","../../src/modules/data/token-prices/provider.ts","../../src/modules/data/token-prices/historical-price-provider.ts","../../src/modules/contracts/implementations/feeDistributor.ts","../../src/modules/data/fee-distributor/repository.ts","../../src/modules/data/fee-collector/repository.ts","../../src/modules/data/protocol-fees/provider.ts","../../src/modules/data/token-yields/repository.ts","../../src/modules/data/block-number/index.ts","../../src/modules/data/index.ts","../../src/modules/relayer/actions.ts","../../src/modules/liquidity-managment/migrations/helpers.ts","../../src/modules/liquidity-managment/migrations/builder.ts","../../src/modules/liquidity-managment/migrations.ts","../../src/modules/sdk.module.ts","../../src/modules/swaps/joinExit/actions/types.ts","../../src/modules/swaps/joinExit/actions/baseAction.ts","../../src/modules/swaps/joinExit/actions/exit.ts","../../src/modules/swaps/joinExit/actions/join.ts","../../src/modules/swaps/joinExit/actions/swap.ts","../../src/modules/swaps/joinExit/actions/helpers.ts","../../src/modules/swaps/joinExit/joinAndExit.ts"],"sourcesContent":["import { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\n\n// RECOVERY_MODE must match BasePoolUserData.RECOVERY_MODE_EXIT_KIND, the value that (Legacy)BasePool uses to detect the special exit enabled in recovery mode.\nenum BasePoolExitKind {\n RECOVERY_MODE = 255,\n}\n\nexport class BasePoolEncoder {\n /**\n * Encodes the userData parameter for exiting any Pool in recovery mode, by removing tokens in return for\n * an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n */\n static recoveryModeExit = (bptAmountIn: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [BasePoolExitKind.RECOVERY_MODE, bptAmountIn]\n );\n}\n","import { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\n\nexport enum StablePoolJoinKind {\n INIT = 0,\n EXACT_TOKENS_IN_FOR_BPT_OUT,\n TOKEN_IN_FOR_EXACT_BPT_OUT,\n}\n\nexport enum StablePhantomPoolJoinKind {\n INIT = 0,\n COLLECT_PROTOCOL_FEES,\n}\n\nexport enum StablePoolExitKind {\n EXACT_BPT_IN_FOR_ONE_TOKEN_OUT = 0,\n EXACT_BPT_IN_FOR_TOKENS_OUT,\n BPT_IN_FOR_EXACT_TOKENS_OUT,\n}\n\nexport class StablePoolEncoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Encodes the userData parameter for providing the initial liquidity to a StablePool\n * @param initialBalances - the amounts of tokens to send to the pool to form the initial balances\n */\n static joinInit = (amountsIn: BigNumberish[]): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]'],\n [StablePoolJoinKind.INIT, amountsIn]\n );\n\n /**\n * Encodes the userData parameter for collecting protocol fees for StablePhantomPool\n */\n static joinCollectProtocolFees = (): string =>\n defaultAbiCoder.encode(\n ['uint256'],\n [StablePhantomPoolJoinKind.COLLECT_PROTOCOL_FEES]\n );\n\n /**\n * Encodes the userData parameter for joining a StablePool with exact token inputs\n * @param amountsIn - the amounts each of token to deposit in the pool as liquidity\n * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens\n */\n static joinExactTokensInForBPTOut = (\n amountsIn: BigNumberish[],\n minimumBPT: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [StablePoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT, amountsIn, minimumBPT]\n );\n\n /**\n * Encodes the userData parameter for joining a StablePool with to receive an exact amount of BPT\n * @param bptAmountOut - the amount of BPT to be minted\n * @param enterTokenIndex - the index of the token to be provided as liquidity\n */\n static joinTokenInForExactBPTOut = (\n bptAmountOut: BigNumberish,\n enterTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n StablePoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,\n bptAmountOut,\n enterTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a StablePool by removing a single token in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n * @param enterTokenIndex - the index of the token to removed from the pool\n */\n static exitExactBPTInForOneTokenOut = (\n bptAmountIn: BigNumberish,\n exitTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n StablePoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,\n bptAmountIn,\n exitTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a StablePool by removing tokens in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n */\n static exitExactBPTInForTokensOut = (bptAmountIn: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [StablePoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT, bptAmountIn]\n );\n\n /**\n * Encodes the userData parameter for exiting a StablePool by removing exact amounts of tokens\n * @param amountsOut - the amounts of each token to be withdrawn from the pool\n * @param maxBPTAmountIn - the minimum acceptable BPT to burn in return for withdrawn tokens\n */\n static exitBPTInForExactTokensOut = (\n amountsOut: BigNumberish[],\n maxBPTAmountIn: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n StablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,\n amountsOut,\n maxBPTAmountIn,\n ]\n );\n}\n","import { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\n\nexport enum WeightedPoolJoinKind {\n INIT = 0,\n EXACT_TOKENS_IN_FOR_BPT_OUT,\n TOKEN_IN_FOR_EXACT_BPT_OUT,\n ALL_TOKENS_IN_FOR_EXACT_BPT_OUT,\n}\n\nexport enum WeightedPoolExitKind {\n EXACT_BPT_IN_FOR_ONE_TOKEN_OUT = 0,\n EXACT_BPT_IN_FOR_TOKENS_OUT,\n BPT_IN_FOR_EXACT_TOKENS_OUT,\n MANAGEMENT_FEE_TOKENS_OUT,\n}\n\nexport class WeightedPoolEncoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Encodes the userData parameter for providing the initial liquidity to a WeightedPool\n * @param initialBalances - the amounts of tokens to send to the pool to form the initial balances\n */\n static joinInit = (amountsIn: BigNumberish[]): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]'],\n [WeightedPoolJoinKind.INIT, amountsIn]\n );\n\n /**\n * Encodes the userData parameter for joining a WeightedPool with exact token inputs\n * @param amountsIn - the amounts each of token to deposit in the pool as liquidity\n * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens\n */\n static joinExactTokensInForBPTOut = (\n amountsIn: BigNumberish[],\n minimumBPT: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT, amountsIn, minimumBPT]\n );\n\n /**\n * Encodes the userData parameter for joining a WeightedPool with a single token to receive an exact amount of BPT\n * @param bptAmountOut - the amount of BPT to be minted\n * @param enterTokenIndex - the index of the token to be provided as liquidity\n */\n static joinTokenInForExactBPTOut = (\n bptAmountOut: BigNumberish,\n enterTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,\n bptAmountOut,\n enterTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for joining a WeightedPool proportionally to receive an exact amount of BPT\n * @param bptAmountOut - the amount of BPT to be minted\n */\n static joinAllTokensInForExactBPTOut = (bptAmountOut: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT, bptAmountOut]\n );\n\n /**\n * Encodes the userData parameter for exiting a WeightedPool by removing a single token in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n * @param enterTokenIndex - the index of the token to removed from the pool\n */\n static exitExactBPTInForOneTokenOut = (\n bptAmountIn: BigNumberish,\n exitTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,\n bptAmountIn,\n exitTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a WeightedPool by removing tokens in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n */\n static exitExactBPTInForTokensOut = (bptAmountIn: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT, bptAmountIn]\n );\n\n /**\n * Encodes the userData parameter for exiting a WeightedPool by removing exact amounts of tokens\n * @param amountsOut - the amounts of each token to be withdrawn from the pool\n * @param maxBPTAmountIn - the minimum acceptable BPT to burn in return for withdrawn tokens\n */\n static exitBPTInForExactTokensOut = (\n amountsOut: BigNumberish[],\n maxBPTAmountIn: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,\n amountsOut,\n maxBPTAmountIn,\n ]\n );\n}\n\nexport class ManagedPoolEncoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Encodes the userData parameter for exiting a ManagedPool for withdrawing management fees.\n * This can only be done by the pool owner.\n */\n static exitForManagementFees = (): string =>\n defaultAbiCoder.encode(\n ['uint256'],\n [WeightedPoolExitKind.MANAGEMENT_FEE_TOKENS_OUT]\n );\n}\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { Zero, WeiPerEther as ONE } from '@ethersproject/constants';\n\n// Should match MAX_WEIGHTED_TOKENS from v2-helpers/constants\n// Including would introduce a dependency\nconst MaxWeightedTokens = 100;\n\n/**\n * Normalize an array of token weights to ensure they sum to `1e18`\n * @param weights - an array of token weights to be normalized\n * @returns an equivalent set of normalized weights\n */\nexport function toNormalizedWeights(weights: BigNumber[]): BigNumber[] {\n // When the number is exactly equal to the max, normalizing with common inputs\n // leads to a value < 0.01, which reverts. In this case fill in the weights exactly.\n if (weights.length == MaxWeightedTokens) {\n return Array(MaxWeightedTokens).fill(ONE.div(MaxWeightedTokens));\n }\n\n const sum = weights.reduce((total, weight) => total.add(weight), Zero);\n if (sum.eq(ONE)) return weights;\n\n const normalizedWeights = [];\n let normalizedSum = Zero;\n for (let index = 0; index < weights.length; index++) {\n if (index < weights.length - 1) {\n normalizedWeights[index] = weights[index].mul(ONE).div(sum);\n normalizedSum = normalizedSum.add(normalizedWeights[index]);\n } else {\n normalizedWeights[index] = ONE.sub(normalizedSum);\n }\n }\n\n return normalizedWeights;\n}\n\n/**\n * Check whether a set of weights are normalized\n * @param weights - an array of potentially unnormalized weights\n * @returns a boolean of whether the weights are normalized\n */\nexport const isNormalizedWeights = (weights: BigNumberish[]): boolean => {\n const totalWeight = weights.reduce(\n (total: BigNumber, weight) => total.add(weight),\n Zero\n );\n return totalWeight.eq(ONE);\n};\n","import { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\nimport { StablePhantomPoolJoinKind } from '../pool-stable/index';\n\nexport enum ComposableStablePoolJoinKind {\n INIT = 0,\n EXACT_TOKENS_IN_FOR_BPT_OUT,\n TOKEN_IN_FOR_EXACT_BPT_OUT,\n}\n\nexport enum ComposableStablePoolExitKind {\n EXACT_BPT_IN_FOR_ONE_TOKEN_OUT = 0,\n BPT_IN_FOR_EXACT_TOKENS_OUT,\n EXACT_BPT_IN_FOR_ALL_TOKENS_OUT,\n}\n\nexport class ComposableStablePoolEncoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Encodes the userData parameter for providing the initial liquidity to a ComposableStablePool\n * @param initialBalances - the amounts of tokens to send to the pool to form the initial balances\n */\n static joinInit = (amountsIn: BigNumberish[]): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]'],\n [ComposableStablePoolJoinKind.INIT, amountsIn]\n );\n\n /**\n * Encodes the userData parameter for collecting protocol fees for StablePhantomPool\n */\n static joinCollectProtocolFees = (): string =>\n defaultAbiCoder.encode(\n ['uint256'],\n [StablePhantomPoolJoinKind.COLLECT_PROTOCOL_FEES]\n );\n\n /**\n * Encodes the userData parameter for joining a ComposableStablePool with exact token inputs\n * @param amountsIn - the amounts each of token to deposit in the pool as liquidity\n * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens\n */\n static joinExactTokensInForBPTOut = (\n amountsIn: BigNumberish[],\n minimumBPT: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n ComposableStablePoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT,\n amountsIn,\n minimumBPT,\n ]\n );\n\n /**\n * Encodes the userData parameter for joining a ComposableStablePool with to receive an exact amount of BPT\n * @param bptAmountOut - the amount of BPT to be minted\n * @param enterTokenIndex - the index of the token to be provided as liquidity\n */\n static joinTokenInForExactBPTOut = (\n bptAmountOut: BigNumberish,\n enterTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n ComposableStablePoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,\n bptAmountOut,\n enterTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a ComposableStablePool by removing a single token in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n * @param enterTokenIndex - the index of the token to removed from the pool\n */\n static exitExactBPTInForOneTokenOut = (\n bptAmountIn: BigNumberish,\n exitTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,\n bptAmountIn,\n exitTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a StablePool by removing tokens in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n */\n static exitExactBPTInForAllTokensOut = (bptAmountIn: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [\n ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT,\n bptAmountIn,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a ComposableStablePool by removing exact amounts of tokens\n * @param amountsOut - the amounts of each token to be withdrawn from the pool\n * @param maxBPTAmountIn - the max acceptable BPT to burn in return for withdrawn tokens\n */\n static exitBPTInForExactTokensOut = (\n amountsOut: BigNumberish[],\n maxBPTAmountIn: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n ComposableStablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,\n amountsOut,\n maxBPTAmountIn,\n ]\n );\n}\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n var provided = typeof message === 'function' ? message() : message;\n var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n throw new Error(value);\n}\n\nexport { invariant as default };\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { PoolSpecialization } from '../types';\nimport invariant from 'tiny-invariant';\n\n/**\n * Splits a poolId into its components, i.e. pool address, pool specialization and its nonce\n * @param poolId - a bytes32 string of the pool's ID\n * @returns an object with the decomposed poolId\n */\nexport const splitPoolId = (\n poolId: string\n): {\n address: string;\n specialization: PoolSpecialization;\n nonce: BigNumber;\n} => {\n return {\n address: getPoolAddress(poolId),\n specialization: getPoolSpecialization(poolId),\n nonce: getPoolNonce(poolId),\n };\n};\n\n/**\n * Extracts a pool's address from its poolId\n * @param poolId - a bytes32 string of the pool's ID\n * @returns the pool's address\n */\nexport const getPoolAddress = (poolId: string): string => {\n invariant(poolId.length === 66, 'Invalid poolId length');\n return poolId.slice(0, 42);\n};\n\n/**\n * Extracts a pool's specialization from its poolId\n * @param poolId - a bytes32 string of the pool's ID\n * @returns the pool's specialization\n */\nexport const getPoolSpecialization = (poolId: string): PoolSpecialization => {\n invariant(poolId.length === 66, 'Invalid poolId length');\n\n // Only have 3 pool specializations so we can just pull the relevant character\n const specializationCode = parseInt(poolId[45]);\n invariant(specializationCode < 3, 'Invalid pool specialization');\n\n return specializationCode;\n};\n\n/**\n * Extracts a pool's nonce from its poolId\n * @param poolId - a bytes32 string of the pool's ID\n * @returns the pool's nonce\n */\nexport const getPoolNonce = (poolId: string): BigNumber => {\n invariant(poolId.length === 66, 'Invalid poolId length');\n return BigNumber.from(`0x${poolId.slice(46)}`);\n};\n","export enum Network {\n MAINNET = 1,\n GOERLI = 5,\n GÖRLI = 5,\n OPTIMISM = 10,\n GNOSIS = 100,\n POLYGON = 137,\n FANTOM = 250,\n BASE = 8453,\n ZKEVM = 1101,\n ARBITRUM = 42161,\n AVALANCHE = 43114,\n SEPOLIA = 11155111,\n}\n","import { Network } from '@/lib/constants/network';\n\n// Do not display APR values greater than this amount; they are likely to be nonsensical\n// These can arise from pools with extremely low balances (e.g., completed LBPs)\nexport const APR_THRESHOLD = 10_000;\n\n/**\n * For proportional exits from ComposableStable pools the ExactBPTInForTokensOut\n * exit type was removed. Therefore we have to use BPTInForExactTokensOut which\n * makes proportional exits using a user's total BPT balance impossible. In\n * order to 'fix' this we need to subtract a little bit from the bptIn value\n * when calculating the ExactTokensOut. The variable below is that \"little bit\".\n */\nexport const SHALLOW_COMPOSABLE_STABLE_BUFFER = 1e6; // EVM scale, so this is 1 Mwei\n\ntype FactoryType =\n | 'oracleWeightedPool'\n | 'weightedPool'\n | 'stablePool'\n | 'managedPool'\n | 'liquidityBootstrappingPool'\n | 'boostedPool'\n | 'composableStablePool';\n\ntype PoolMetadata = {\n name: string;\n hasIcon: boolean;\n};\n\nexport type NamedPools = {\n staBAL: string;\n bbAaveUSD: {\n v1: string;\n v2: string;\n };\n xMatic: {\n v1: string;\n v2: string;\n };\n stMatic: {\n v1: string;\n v2: string;\n };\n mai4: {\n mai4: string;\n maiBbaUsd: string;\n };\n veBAL: string;\n};\n\ntype Pools = {\n IdsMap: Partial;\n Pagination: {\n PerPage: number;\n PerPool: number;\n PerPoolInitial: number;\n };\n DelegateOwner: string;\n ZeroAddress: string;\n DynamicFees: {\n Gauntlet: string[];\n };\n BlockList: string[];\n ExcludedPoolTypes: string[];\n Stable: {\n AllowList: string[];\n };\n Investment: {\n AllowList: string[];\n };\n Factories: Record;\n Stakable: {\n AllowList: string[];\n };\n Metadata: Record;\n};\n\nconst POOLS_GOERLI: Pools = {\n IdsMap: {\n staBAL:\n '0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062',\n bbAaveUSD: {\n v1: '0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f',\n v2: '0x3d5981bdd8d3e49eb7bbdc1d2b156a3ee019c18e0000000000000000000001a7',\n },\n veBAL: '0xf8a0623ab66f985effc1c69d05f1af4badb01b00000200000000000000000060',\n },\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [\n '0x22d398c68030ef6b1c55321cca6e0cecc5c93b2f000200000000000000000678',\n ],\n ExcludedPoolTypes: ['Element', 'AaveLinear', 'Linear', 'ERC4626Linear', 'FX'],\n Stable: {\n AllowList: [\n '0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f',\n '0xb60e46d90f2de35f7062a27d3a98749414036d5d000200000000000000000061',\n '0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062',\n '0xc957b1acceb21707b782eb8eee2ed8e20088463d000200000000000000000076',\n '0x3d5981bdd8d3e49eb7bbdc1d2b156a3ee019c18e0000000000000000000001a7',\n '0x14f93df8a4e37bfdb49d2cec4789df7a010603d700000000000000000000011d',\n '0x00a62d31b6c776b6813543bc99ff265f7222dbe100000000000000000000011e',\n '0x0c925fce89a22e36ebd9b3c6e0262234e853d2f600000000000000000000019c',\n ],\n },\n Investment: {\n AllowList: [],\n },\n Factories: {\n '0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0': 'oracleWeightedPool',\n '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9': 'weightedPool',\n '0x44afeb87c871d8fea9398a026dea2bd3a13f5769': 'stablePool',\n '0xa55f73e2281c60206ba43a3590db07b8955832be': 'stablePool', // Metastable\n '0xb48cc42c45d262534e46d5965a9ac496f1b7a830': 'liquidityBootstrappingPool',\n '0xb0c726778c3ae4b3454d85557a48e8fa502bdd6a': 'liquidityBootstrappingPool', // LBP (zero protocol fee)\n '0x41e9036ae350baedcc7107760a020dca3c0731ec': 'boostedPool',\n '0xb848f50141f3d4255b37ac288c25c109104f2158': 'composableStablePool',\n '0x94f68b54191f62f781fe8298a8a5fa3ed772d227': 'weightedPool', // weighted pool v2\n },\n Stakable: {\n AllowList: [\n '0x16faf9f73748013155b7bc116a3008b57332d1e600020000000000000000005b',\n '0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f',\n '0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062',\n '0x67f8fcb9d3c463da05de1392efdbb2a87f8599ea000200000000000000000059',\n ],\n },\n Metadata: {\n '0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: false,\n },\n },\n};\n\nconst POOLS_MAINNET: Pools = {\n IdsMap: {\n staBAL:\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063',\n bbAaveUSD: {\n v1: '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe',\n v2: '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d',\n },\n veBAL: '0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014',\n },\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: [\n 'Element',\n 'AaveLinear',\n 'Linear',\n 'ERC4626Linear',\n 'Gyro2',\n 'Gyro3',\n 'GyroE',\n 'FX',\n ],\n Stable: {\n AllowList: [\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063', // staBAL3 (DAI-USD-USDC)\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066', // WBTC-renBTC-sBTC\n '0x9f19a375709baf0e8e35c2c5c65aca676c4c719100000000000000000000006e', // PAR-sEUR-EURS\n '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080', // Lido Metastable\n '0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112', // Rocket Pool Metastable\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe', // Mainnet bb-a-USD\n '0x851523a36690bf267bbfec389c823072d82921a90002000000000000000001ed', // wstETH/WETH #2\n '0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249', // b-auraBAL-Stable (auraBal / 8020 BALETH)\n '0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d', // sdBAL Stable Pool (sdBAL / 8020 BALETH)\n '0x178e029173417b1f9c8bc16dcec6f697bc32374600000000000000000000025d', // Fiat DAO Stable Pool\n '0xf93579002dbe8046c43fefe86ec78b1112247bb80000000000000000000002bc', // USDD 3 pool\n '0xf3aeb3abba741f0eece8a1b1d2f11b85899951cb000200000000000000000351', // MAI stable pool\n '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d', // bb-a-USD V2\n '0x5b3240b6be3e7487d61cd1afdfc7fe4fa1d81e6400000000000000000000037b', // DOLA/INV stable pool\n ],\n },\n Investment: {\n AllowList: [\n '0xccf5575570fac94cec733a58ff91bb3d073085c70002000000000000000000af', // iROBOT mainnet\n '0xe7b1d394f3b40abeaa0b64a545dbcf89da1ecb3f00010000000000000000009a', // Techemy mainnet\n '0x3b40d7d5ae25df2561944dd68b252016c4c7b2800001000000000000000000c2', // WSB-DEFI mainnet\n ],\n },\n Factories: {\n '0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0': 'oracleWeightedPool',\n '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9': 'weightedPool',\n '0xc66ba2b6595d3613ccab350c886ace23866ede24': 'stablePool',\n '0x67d27634e44793fe63c467035e31ea8635117cd4': 'stablePool', // Metastable\n '0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de': 'liquidityBootstrappingPool', // Mainnet LBP\n '0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e': 'liquidityBootstrappingPool', // Mainnet LBP (zero protocol fee)\n '0x48767f9f868a4a7b86a90736632f6e44c2df7fa9': 'managedPool', // Mainnet Managed\n '0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2': 'boostedPool', // mainnet stablephantom\n '0x8df6efec5547e31b0eb7d1291b511ff8a2bf987c': 'stablePool', // stable pool v2\n '0xf9ac7b9df2b3454e841110cce5550bd5ac6f875f': 'composableStablePool', // ComposableStable\n '0xcc508a455f5b0073973107db6a878ddbdab957bc': 'weightedPool', // weighted pool v2\n },\n Stakable: {\n AllowList: [\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063',\n '0x072f14b85add63488ddad88f855fda4a99d6ac9b000200000000000000000027',\n '0x0b09dea16768f0799065c475be02919503cb2a3500020000000000000000001a',\n '0x186084ff790c65088ba694df11758fae4943ee9e000200000000000000000013',\n '0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112',\n '0x27c9f71cc31464b906e0006d4fcbc8900f48f15f00020000000000000000010f',\n '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080',\n '0x350196326aeaa9b98f1903fb5e8fc2686f85318c000200000000000000000084',\n '0x3e5fa9518ea95c3e533eb377c001702a9aacaa32000200000000000000000052',\n '0x51735bdfbfe3fc13dea8dc6502e2e958989429610002000000000000000000a0',\n '0x5d66fff62c17d841935b60df5f07f6cf79bd0f4700020000000000000000014c',\n '0x5f7fa48d765053f8dd85e052843e12d23e3d7bc50002000000000000000000c0',\n '0x702605f43471183158938c1a3e5f5a359d7b31ba00020000000000000000009f',\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe',\n '0x7edde0cb05ed19e03a9a47cd5e53fc57fde1c80c0002000000000000000000c8',\n '0x8f4205e1604133d1875a3e771ae7e4f2b086563900020000000000000000010e',\n '0x90291319f1d4ea3ad4db0dd8fe9e12baf749e84500020000000000000000013c',\n '0x96646936b91d6b9d7d0c47c496afbf3d6ec7b6f8000200000000000000000019',\n '0x96ba9025311e2f47b840a1f68ed57a3df1ea8747000200000000000000000160',\n '0xa02e4b3d18d4e6b8d18ac421fbc3dfff8933c40a00020000000000000000004b',\n '0xa6f548df93de924d73be7d25dc02554c6bd66db500020000000000000000000e',\n '0xbaeec99c90e3420ec6c1e7a769d2a856d2898e4d00020000000000000000008a',\n '0xbf96189eee9357a95c7719f4f5047f76bde804e5000200000000000000000087',\n '0xe2469f47ab58cf9cf59f9822e3c5de4950a41c49000200000000000000000089',\n '0xe99481dc77691d8e2456e5f3f61c1810adfc1503000200000000000000000018',\n '0xec60a5fef79a92c741cb74fdd6bfc340c0279b01000200000000000000000015',\n '0xedf085f65b4f6c155e13155502ef925c9a756003000200000000000000000123',\n '0xefaa1604e82e1b3af8430b90192c1b9e8197e377000200000000000000000021',\n '0xf4c0dd9b82da36c07605df83c8a416f11724d88b000200000000000000000026',\n '0xf5aaf7ee8c39b651cebf5f1f50c10631e78e0ef9000200000000000000000069',\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066',\n '0x92762b42a06dcdddc5b7362cfb01e631c4d44b40000200000000000000000182',\n '0xde8c195aa41c11a0c4787372defbbddaa31306d2000200000000000000000181',\n '0x17ddd9646a69c9445cd8a9f921d4cd93bf50d108000200000000000000000159',\n '0xc45d42f801105e861e86658648e3678ad7aa70f900010000000000000000011e',\n '0x2d344a84bac123660b021eebe4eb6f12ba25fe8600020000000000000000018a',\n '0xb460daa847c45f1c4a41cb05bfb3b51c92e41b36000200000000000000000194',\n '0x5122e01d819e58bb2e22528c0d68d310f0aa6fd7000200000000000000000163',\n '0x851523a36690bf267bbfec389c823072d82921a90002000000000000000001ed',\n '0xe8cc7e765647625b95f59c15848379d10b9ab4af0002000000000000000001de',\n '0x85370d9e3bb111391cc89f6de344e801760461830002000000000000000001ef',\n '0xa7ff759dbef9f3efdd1d59beee44b966acafe214000200000000000000000180',\n '0x3f7c10701b14197e2695dec6428a2ca4cf7fc3b800020000000000000000023c',\n '0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d',\n '0x178e029173417b1f9c8bc16dcec6f697bc32374600000000000000000000025d',\n '0xcfca23ca9ca720b6e98e3eb9b6aa0ffc4a5c08b9000200000000000000000274',\n '0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249',\n '0x0578292cb20a443ba1cde459c985ce14ca2bdee5000100000000000000000269',\n '0x8eb6c82c3081bbbd45dcac5afa631aac53478b7c000100000000000000000270',\n '0x1b65fe4881800b91d4277ba738b567cbb200a60d0002000000000000000002cc',\n '0x99a14324cfd525a34bbc93ac7e348929909d57fd00020000000000000000030e',\n '0x9b532ab955417afd0d012eb9f7389457cd0ea712000000000000000000000338',\n '0x48607651416a943bf5ac71c41be1420538e78f87000200000000000000000327',\n '0x6a5ead5433a50472642cd268e584dafa5a394490000200000000000000000366',\n '0x0fd5663d4893ae0d579d580584806aadd2dd0b8b000200000000000000000367',\n '0x441b8a1980f2f2e43a9397099d15cc2fe6d3625000020000000000000000035f',\n '0xf3aeb3abba741f0eece8a1b1d2f11b85899951cb000200000000000000000351',\n '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d',\n ],\n },\n Metadata: {\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: true,\n },\n '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: true,\n },\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063': {\n name: 'Balancer Stable USD',\n hasIcon: true,\n },\n '0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249': {\n name: 'AuraBAL Stable Pool',\n hasIcon: false,\n },\n },\n};\n\nconst POOLS_POLYGON: Pools = {\n IdsMap: {\n xMatic: {\n v1: '0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4',\n v2: '0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c',\n },\n stMatic: {\n v1: '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366',\n v2: '0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d',\n },\n mai4: {\n mai4: '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012',\n maiBbaUsd:\n '0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e',\n },\n },\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: [\n 'Element',\n 'AaveLinear',\n 'Linear',\n 'ERC4626Linear',\n 'Gyro2',\n 'Gyro3',\n 'GyroE',\n 'FX',\n ],\n Stable: {\n AllowList: [\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012', // polygon MAI/DAI/USDC/USDT\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e', // polygon WBTC/renBTC\n '0xf38cf113d2d4f60c36cbd95af2f48a9a0167045a00000000000000000000005b', // polygon,\n '0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068', // tusd polygon\n '0x5028497af0c9a54ea8c6d42a054c0341b9fc616800020000000000000000007b', // dusd polygon\n '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366', // polygon staked matic\n '0xb4670d1389c758e4380c4211bcbc85342688b9c50002000000000000000003d8', // vQi,\n '0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455', // 4pool\n '0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4', // maticx metastable\n '0xb4b22bd6cdad0ab828be6f8a4086dfa54e9b373600020000000000000000058f', // Polygon tetuBAL-80BAL-20WETH\n '0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba', // tetuBAL-80BAL-20WETH V2 (with short name)\n '0x0b8319061732b34cab22445fa83b81f950e4b7ed000000000000000000000709',\n '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366',\n '0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d',\n '0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c',\n '0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e', // mai / bb-am-USD\n '0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b', // bb-am-USD\n '0xa48d164f6eb0edc68bd03b56fa59e12f24499ad10000000000000000000007c4', // ageur stable\n ],\n },\n Investment: {\n AllowList: [''],\n },\n Factories: {\n '0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0': 'oracleWeightedPool',\n '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9': 'weightedPool',\n '0xc66ba2b6595d3613ccab350c886ace23866ede24': 'stablePool',\n '0xdae7e32adc5d490a43ccba1f0c736033f2b4efca': 'stablePool', // Metastable\n '0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de': 'liquidityBootstrappingPool', // LBP\n '0x41b953164995c11c81da73d212ed8af25741b7ac': 'liquidityBootstrappingPool', // LBP (zero protocol fee)\n '0x0f7bb7ce7b6ed9366f9b6b910adefe72dc538193': 'managedPool', // Polygon Managed\n '0xc128a9954e6c874ea3d62ce62b468ba073093f25': 'boostedPool', // polygon stablephantom\n '0xca96c4f198d343e251b1a01f3eba061ef3da73c1': 'stablePool', // stable pool v2,\n '0x136fd06fa01ecf624c7f2b3cb15742c1339dc2c4': 'composableStablePool', // ComposableStable\n '0x0e39c3d9b2ec765efd9c5c70bb290b1fcd8536e3': 'weightedPool', // weighted pool v2\n },\n Stakable: {\n AllowList: [\n '0x0297e37f1873d2dab4487aa67cd56b58e2f27875000100000000000000000002',\n '0x03cd191f589d12b0582a99808cf19851e468e6b500010000000000000000000a',\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012',\n '0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068',\n '0x10f21c9bd8128a29aa785ab2de0d044dcdd79436000200000000000000000059',\n '0x186084ff790c65088ba694df11758fae4943ee9e000200000000000000000032',\n '0x36128d5436d2d70cab39c9af9cce146c38554ff0000100000000000000000008',\n '0x5a6ae1fd70d04ba4a279fc219dfabc53825cb01d00020000000000000000020e',\n '0x614b5038611729ed49e0ded154d8a5d3af9d1d9e00010000000000000000001d',\n '0x7c9cf12d783821d5c63d8e9427af5c44bad92445000100000000000000000051',\n '0x805ca3ccc61cc231851dee2da6aabff0a7714aa7000200000000000000000361',\n '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366',\n '0xb204bf10bc3a5435017d3db247f56da601dfe08a0002000000000000000000fe',\n '0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455',\n '0xce66904b68f1f070332cbc631de7ee98b650b499000100000000000000000009',\n '0xcf354603a9aebd2ff9f33e1b04246d8ea204ae9500020000000000000000005a',\n '0xdb1db6e248d7bb4175f6e5a382d0a03fe3dcc813000100000000000000000035',\n '0xea4e073c8ac859f2994c07e627178719c8002dc00002000000000000000003dc',\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e',\n '0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4',\n '0x2dbc9ab0160087ae59474fb7bed95b9e808fa6bc0001000000000000000003db',\n '0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba',\n '0x8f9dd2064eb38e8e40f2ab67bde27c0e16ea9b080002000000000000000004ca',\n '0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b',\n '0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e',\n '0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d',\n '0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c',\n ],\n },\n Metadata: {},\n};\n\nconst POOLS_ARBITRUM: Pools = {\n IdsMap: {},\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: ['Element', 'AaveLinear', 'Linear', 'ERC4626Linear', 'FX'],\n Stable: {\n AllowList: [\n '0x9be7de742865d021c0e8fb9d64311b2c040c1ec1000200000000000000000012', // arbitrum\n '0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016', // arbitrum\n '0x386b5d43ba8b97c43d4afb4cdae7877a1b295e8a000000000000000000000020', // tusd arbitrum\n '0x0510ccf9eb3ab03c1508d3b9769e8ee2cfd6fdcf00000000000000000000005d', // mai\n '0x5a5884fc31948d59df2aeccca143de900d49e1a300000000000000000000006f', // VST\n '0xd89746affa5483627a87e55713ec1905114394950002000000000000000000bf', // fluid stable\n '0x7bceaa9c5e7f4836fec3bce2d5346637c9b13970000000000000000000000102', // vesta new stable\n '0xfb5e6d0c1dfed2ba000fbc040ab8df3615ac329c000000000000000000000159', // stETH\n ],\n },\n Investment: {\n AllowList: [''],\n },\n Factories: {\n '0x7dfdef5f355096603419239ce743bfaf1120312b': 'weightedPool', // Arbitrum Weighted\n '0xcf0a32bbef8f064969f21f7e02328fb577382018': 'weightedPool', // Arbitrum WeightedOracle\n '0x2433477a10fc5d31b9513c638f19ee85caed53fd': 'stablePool', // Arbitrum Stable\n '0xebfd5681977e38af65a7487dc70b8221d089ccad': 'stablePool', // Arbitrum MetaStable\n '0x142b9666a0a3a30477b052962dda81547e7029ab': 'liquidityBootstrappingPool', // Arbitrum LBP (old)\n '0x1802953277fd955f9a254b80aa0582f193cf1d77': 'liquidityBootstrappingPool', // Arbitrum LBP (new)\n '0xacd615b3705b9c880e4e7293f1030b34e57b4c1c': 'managedPool', // arbitrum managed\n '0xdae7e32adc5d490a43ccba1f0c736033f2b4efca': 'boostedPool', // arbitrum stablephantom\n '0xef44d6786b2b4d544b7850fe67ce6381626bf2d6': 'stablePool', // stable pool v2\n '0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33': 'composableStablePool', // ComposableStable\n '0x8df6efec5547e31b0eb7d1291b511ff8a2bf987c': 'weightedPool', // weighted pool v2\n },\n Stakable: {\n AllowList: [\n '0x0510ccf9eb3ab03c1508d3b9769e8ee2cfd6fdcf00000000000000000000005d',\n '0x0adeb25cb5920d4f7447af4a0428072edc2cee2200020000000000000000004a',\n '0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016',\n '0x1779900c7707885720d39aa741f4086886307e9e00020000000000000000004b',\n '0x4a3a22a3e7fee0ffbb66f1c28bfac50f75546fc7000200000000000000000008',\n '0x5a5884fc31948d59df2aeccca143de900d49e1a300000000000000000000006f',\n '0x64541216bafffeec8ea535bb71fbc927831d0595000100000000000000000002',\n '0x651e00ffd5ecfa7f3d4f33d62ede0a97cf62ede2000200000000000000000006',\n '0xb28670b3e7ad27bd41fb5938136bf9e9cba90d6500020000000000000000001e',\n '0xb340b6b1a34019853cb05b2de6ee8ffd0b89a008000100000000000000000036',\n '0xb5b77f1ad2b520df01612399258e7787af63025d000200000000000000000010',\n '0xc2f082d33b5b8ef3a7e3de30da54efd3114512ac000200000000000000000017',\n '0xc61ff48f94d801c1ceface0289085197b5ec44f000020000000000000000004d',\n '0xcc65a812ce382ab909a11e434dbf75b34f1cc59d000200000000000000000001',\n '0xe1b40094f1446722c424c598ac412d590e0b3ffb000200000000000000000076',\n '0xb3028ca124b80cfe6e9ca57b70ef2f0ccc41ebd40002000000000000000000ba',\n '0x7bceaa9c5e7f4836fec3bce2d5346637c9b13970000000000000000000000102',\n '0xfb5e6d0c1dfed2ba000fbc040ab8df3615ac329c000000000000000000000159',\n '0x178e029173417b1f9c8bc16dcec6f697bc323746000200000000000000000158',\n ],\n },\n Metadata: {},\n};\n\nconst POOLS_GNOSIS: Pools = {\n IdsMap: {},\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: [\n 'Element',\n 'AaveLinear',\n 'Linear',\n 'ERC4626Linear',\n 'FX',\n 'Gyro2',\n 'Gyro3',\n 'GyroE',\n 'HighAmpComposableStable',\n 'FX',\n ],\n Stable: {\n AllowList: [\n '0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000004',\n '0x707b7d4a1bae449d546dcab869256591bbb3d70b000000000000000000000000',\n ],\n },\n Investment: {\n AllowList: [],\n },\n Factories: {},\n Stakable: {\n AllowList: [],\n },\n Metadata: {},\n};\n\nconst POOLS_GENERIC: Pools = {\n IdsMap: {},\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: ['Element', 'AaveLinear', 'Linear', 'ERC4626Linear', 'FX'],\n Stable: {\n AllowList: [\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063',\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066',\n '0x9f19a375709baf0e8e35c2c5c65aca676c4c719100000000000000000000006e',\n '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080', // Lido Metastable\n '0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112', // Rocket Pool Metastable\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012', // polygon\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e', // polygon\n '0x9be7de742865d021c0e8fb9d64311b2c040c1ec1000200000000000000000012', // arbitrum\n '0x9f19a375709baf0e8e35c2c5c65aca676c4c7191000200000000000000000022', // polygon PAR/PAR,\n '0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016', // arbitrum\n '0xf38cf113d2d4f60c36cbd95af2f48a9a0167045a00000000000000000000005b', // polygon,\n '0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068', // tusd polygon\n '0x386b5d43ba8b97c43d4afb4cdae7877a1b295e8a000000000000000000000020', // tusd arbitrum\n '0x5028497af0c9a54ea8c6d42a054c0341b9fc616800020000000000000000007b', // dusd polygon\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe', // Mainnet bb-a-USD\n '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366', // staked matic\n ],\n },\n Investment: {\n AllowList: [\n '0xccf5575570fac94cec733a58ff91bb3d073085c70002000000000000000000af', // iROBOT mainnet\n '0xe7b1d394f3b40abeaa0b64a545dbcf89da1ecb3f00010000000000000000009a', // Techemy mainnet\n '0x3b40d7d5ae25df2561944dd68b252016c4c7b2800001000000000000000000c2', // WSB-DEFI mainnet\n ],\n },\n Factories: {\n '0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0': 'oracleWeightedPool',\n '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9': 'weightedPool',\n '0xc66ba2b6595d3613ccab350c886ace23866ede24': 'stablePool',\n '0x67d27634e44793fe63c467035e31ea8635117cd4': 'stablePool', // Metastable\n '0x7dfdef5f355096603419239ce743bfaf1120312b': 'weightedPool', // Arbitrum Weighted\n '0xcf0a32bbef8f064969f21f7e02328fb577382018': 'weightedPool', // Arbitrum WeightedOracle\n '0x2433477a10fc5d31b9513c638f19ee85caed53fd': 'stablePool', // Arbitrum Stable\n '0xebfd5681977e38af65a7487dc70b8221d089ccad': 'stablePool', // Arbitrum MetaStable\n '0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de': 'liquidityBootstrappingPool', // Mainnet LBP\n '0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e': 'liquidityBootstrappingPool', // Mainnet LBP (zero protocol fee)\n '0x142b9666a0a3a30477b052962dda81547e7029ab': 'liquidityBootstrappingPool', // Arbitrum LBP (old)\n '0x1802953277fd955f9a254b80aa0582f193cf1d77': 'liquidityBootstrappingPool', // Arbitrum LBP (new)\n '0x48767f9f868a4a7b86a90736632f6e44c2df7fa9': 'managedPool', // Mainnet Managed\n '0x0f7bb7ce7b6ed9366f9b6b910adefe72dc538193': 'managedPool', // Polygon Managed\n '0xacd615b3705b9c880e4e7293f1030b34e57b4c1c': 'managedPool', // arbitrum managed\n '0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2': 'boostedPool', // mainnet stablephantom\n '0xdae7e32adc5d490a43ccba1f0c736033f2b4efca': 'boostedPool', // arbitrum stablephantom\n '0xc128a9954e6c874ea3d62ce62b468ba073093f25': 'boostedPool', // polygon stablephantom\n },\n Stakable: {\n AllowList: [],\n },\n Metadata: {\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: true,\n },\n '0x8fd162f338b770f7e879030830cde9173367f3010000000000000000000004d8': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: true,\n },\n '0xd387dfd3a786e7caa06e6cf0c675352c7ffff30400000000000000000000063e': {\n name: 'Balancer Stable USD',\n hasIcon: true,\n },\n },\n};\n\nconst POOLS_MAP = {\n [Network.GOERLI]: POOLS_GOERLI,\n [Network.MAINNET]: POOLS_MAINNET,\n [Network.POLYGON]: POOLS_POLYGON,\n [Network.ARBITRUM]: POOLS_ARBITRUM,\n [Network.GNOSIS]: POOLS_GNOSIS,\n};\n\nexport function POOLS(networkId: Network): Pools {\n const id = networkId as keyof typeof POOLS_MAP;\n return POOLS_MAP[id] ? POOLS_MAP[id] : POOLS_GENERIC;\n}\n","export enum PoolGaugesAttributes {\n Id = 'id',\n Address = 'address',\n PoolId = 'poolId',\n}\n\nexport interface PoolGauges {\n preferentialGauge: {\n id: string;\n };\n gauges: {\n id: string;\n relativeWeightCap?: string | null;\n }[];\n}\n","export enum PoolShareAttributes {\n Balance = 'balance',\n Id = 'id',\n PoolId = 'poolId',\n UserAddress = 'userAddress',\n}\n\nexport interface PoolShare {\n id: string;\n userAddress: string;\n poolId: string;\n balance: string;\n}\n","export enum GaugeShareAttributes {\n Id = 'id',\n UserAddress = 'user',\n GaugeId = 'gauge',\n Balance = 'balance',\n}\n\nexport interface GaugeShare {\n id: string;\n balance: string;\n userAddress: string;\n gauge: {\n id: string;\n poolId?: string;\n isKilled: boolean;\n totalSupply: string;\n };\n}\n","import { Network } from './lib/constants/network';\nimport type { BigNumberish } from '@ethersproject/bignumber';\nimport type { Contract } from '@ethersproject/contracts';\nimport type { PoolDataService, TokenPriceService } from '@balancer-labs/sor';\nimport type {\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n JoinPoolAttributes,\n} from './modules/pools/pool-types/concerns/types';\nimport type {\n Findable,\n Searchable,\n LiquidityGauge,\n PoolAttribute,\n TokenAttribute,\n Cacheable,\n} from '@/modules/data/types';\nimport type {\n BaseFeeDistributor,\n GaugeSharesRepository,\n PoolGaugesRepository,\n PoolSharesRepository,\n ProtocolFeesProvider,\n PoolJoinExitRepository,\n} from './modules/data';\nimport type { GraphQLArgs } from './lib/graphql';\nimport type { AprBreakdown } from '@/modules/pools/apr/apr';\nimport { SubgraphPoolDataService } from '@/modules/sor/pool-data/subgraphPoolDataService';\nimport * as Queries from '@/modules/pools/queries/types';\nimport { GyroConfigRepository } from '@/modules/data/gyro-config/repository';\n\nexport * from '@/modules/data/types';\nexport { Network, AprBreakdown };\n\nexport type Address = string;\n\nexport interface BalancerSdkConfig {\n //use a known network or provide an entirely custom config\n network: Network | BalancerNetworkConfig;\n rpcUrl: string;\n //overwrite the subgraph url if you don't want to use the balancer labs maintained version\n customSubgraphUrl?: string;\n subgraphQuery?: GraphQLQuery;\n //optionally overwrite parts of the standard SOR config\n sor?: Partial;\n tenderly?: BalancerTenderlyConfig;\n enableLogging?: boolean;\n coingecko?: CoingeckoConfig;\n}\n\nexport interface BalancerTenderlyConfig {\n accessKey: string;\n user: string;\n project: string;\n blockNumber?: number;\n}\n\nexport interface BalancerSdkSorConfig {\n //use a built-in service or provide a custom implementation of a TokenPriceService\n //defaults to coingecko\n tokenPriceService: 'api' | 'coingecko' | 'subgraph' | TokenPriceService;\n //use a built-in service or provide a custom implementation of a PoolDataService\n //defaults to subgraph\n poolDataService: 'subgraph' | PoolDataService;\n //if a custom PoolDataService is provided, on chain balance fetching needs to be handled externally\n //default to true.\n fetchOnChainBalances: boolean;\n}\n\nexport interface ContractAddresses {\n vault: string;\n multicall: string;\n poolDataQueries: string;\n gaugeClaimHelper?: string;\n balancerHelpers: string;\n balancerMinter?: string;\n lidoRelayer?: string;\n balancerRelayer: string;\n gaugeController?: string;\n feeDistributor?: string;\n veBal?: string;\n veBalProxy?: string;\n protocolFeePercentagesProvider?: string;\n weightedPoolFactory?: string;\n composableStablePoolFactory?: string;\n\n aaveLinearPoolFactory?: string;\n erc4626LinearPoolFactory?: string;\n eulerLinearPoolFactory?: string;\n gearboxLinearPoolFactory?: string;\n yearnLinearPoolFactory?: string;\n\n [key: string]: string | undefined;\n}\n\nexport interface BalancerNetworkConfig {\n chainId: Network;\n addresses: {\n contracts: ContractAddresses;\n tokens: {\n wrappedNativeAsset: string;\n lbpRaisingTokens?: string[];\n stETH?: string;\n wstETH?: string;\n bal: string;\n veBal?: string;\n bbaUsd?: string;\n };\n };\n tenderly?: BalancerTenderlyConfig;\n urls: {\n subgraph: string;\n gaugesSubgraph?: string;\n blockNumberSubgraph?: string;\n };\n thirdParty: {\n coingecko: {\n nativeAssetId: string;\n platformId: string;\n };\n };\n averageBlockTime?: number; // In seconds, used if blockNumberSubgraph not set\n multicallBatchSize?: number; // Only zkEVM needs a smaller batch size of 128, defaults to 1024\n pools: {\n wETHwstETH?: PoolReference;\n };\n poolsToIgnore?: string[];\n sorConnectingTokens?: { symbol: string; address: string }[];\n sorTriPathMidPoolIds?: string[];\n}\n\nexport interface BalancerDataRepositories {\n feeDistributor?: BaseFeeDistributor;\n feeCollector: Findable;\n gaugeShares?: GaugeSharesRepository;\n gyroConfigRepository?: GyroConfigRepository;\n liquidityGauges?: Findable;\n protocolFees?: ProtocolFeesProvider;\n /**\n * Why do we need 3 different pools repositories?\n */\n pools: Findable & Searchable;\n // Does it need to be different from the pools repository?\n poolsForSimulations: SubgraphPoolDataService;\n poolGauges?: PoolGaugesRepository;\n poolJoinExits: PoolJoinExitRepository;\n // Perhaps better to use a function to get upto date balances when needed.\n poolsOnChain: Findable &\n Searchable &\n Cacheable;\n poolShares: PoolSharesRepository;\n tokenHistoricalPrices: Findable;\n tokenMeta: Findable;\n tokenPrices: Findable;\n tokenYields: Findable;\n // Replace with a swapFeeRepository, we don't need historic pools for any other reason than to get the swap fee\n yesterdaysPools?: Findable & Searchable;\n}\n\nexport type PoolReference = {\n id: string;\n address: string;\n};\n\nexport enum PoolSpecialization {\n GeneralPool = 0,\n MinimalSwapInfoPool,\n TwoTokenPool,\n}\n\n// Joins\n\nexport type JoinPoolRequest = {\n assets: string[];\n maxAmountsIn: BigNumberish[];\n userData: string;\n fromInternalBalance: boolean;\n};\n\n// Exit\n\nexport type ExitPoolRequest = {\n assets: string[];\n minAmountsOut: string[];\n userData: string;\n toInternalBalance: boolean;\n};\n\n// Balance Operations\n\nexport enum UserBalanceOpKind {\n DepositInternal = 0,\n WithdrawInternal,\n TransferInternal,\n TransferExternal,\n}\n\nexport type UserBalanceOp = {\n kind: UserBalanceOpKind;\n asset: string;\n amount: BigNumberish;\n sender: string;\n recipient: string;\n};\n\nexport enum PoolBalanceOpKind {\n Withdraw = 0,\n Deposit = 1,\n Update = 2,\n}\n\nexport type PoolBalanceOp = {\n kind: PoolBalanceOpKind;\n poolId: string;\n token: string;\n amount: BigNumberish;\n};\n\nexport interface TransactionData {\n contract?: Contract;\n function: string;\n params: string[];\n outputs?: {\n amountsIn?: string[];\n amountsOut?: string[];\n };\n}\n\nexport type Currency = 'eth' | 'usd';\n\nexport type Price = { [currency in Currency]?: string };\nexport type TokenPrices = { [address: string]: Price };\nexport type HistoricalPrices = {\n prices: [[number, number]];\n market_caps: [[number, number]];\n total_volumes: [[number, number]];\n};\n\nexport interface Token {\n address: string;\n decimals?: number;\n symbol?: string;\n price?: Price;\n}\n\nexport interface PoolToken extends Token {\n balance: string;\n priceRate?: string;\n weight?: string | null;\n isExemptFromYieldProtocolFee?: boolean;\n token?: SubPoolMeta;\n}\n\nexport interface SubPoolMeta {\n pool: SubPool | null;\n latestUSDPrice?: string;\n latestFXPrice?: string;\n}\n\nexport interface SubPool {\n id: string;\n address: string;\n poolType: PoolType;\n totalShares: string;\n mainIndex: number;\n tokens?: PoolToken[];\n}\n\nexport interface OnchainTokenData {\n balance: string;\n weight: number;\n decimals: number;\n logoURI: string | undefined;\n name: string;\n symbol: string;\n}\n\nexport interface OnchainPoolData {\n tokens: Record;\n totalSupply: string;\n decimals: number;\n swapFee: string;\n amp?: string;\n swapEnabled: boolean;\n tokenRates?: string[];\n}\n\nexport enum PoolType {\n Weighted = 'Weighted',\n Investment = 'Investment',\n Stable = 'Stable',\n ComposableStable = 'ComposableStable',\n MetaStable = 'MetaStable',\n StablePhantom = 'StablePhantom',\n LiquidityBootstrapping = 'LiquidityBootstrapping',\n Element = 'Element',\n Gyro2 = 'Gyro2',\n Gyro3 = 'Gyro3',\n GyroE = 'GyroE',\n Managed = 'Managed',\n // Linear Pools defined below all operate the same mathematically but have different factories and names in Subgraph\n AaveLinear = 'AaveLinear',\n Linear = 'Linear',\n EulerLinear = 'EulerLinear',\n ERC4626Linear = 'ERC4626Linear',\n BeefyLinear = 'BeefyLinear',\n GearboxLinear = 'GearboxLinear',\n MidasLinear = 'MidasLinear',\n ReaperLinear = 'ReaperLinear',\n SiloLinear = 'SiloLinear',\n TetuLinear = 'TetuLinear',\n YearnLinear = 'YearnLinear',\n FX = 'FX',\n}\n\nexport interface Pool {\n id: string;\n name: string;\n address: string;\n chainId: number;\n poolType: PoolType;\n poolTypeVersion: number;\n swapFee: string;\n protocolYieldFeeCache: string;\n protocolSwapFeeCache: string;\n owner?: string;\n factory?: string;\n tokens: PoolToken[];\n tokensList: string[];\n tokenAddresses?: string[];\n totalLiquidity: string;\n totalShares: string;\n totalSwapFee?: string;\n totalSwapVolume?: string;\n onchain?: OnchainPoolData;\n createTime?: number;\n mainTokens?: string[];\n wrappedTokens?: string[];\n unwrappedTokens?: string[];\n isNew?: boolean;\n volumeSnapshot?: string;\n feesSnapshot?: string;\n boost?: string;\n symbol?: string;\n swapEnabled: boolean;\n amp?: string;\n wrappedIndex?: number;\n mainIndex?: number;\n apr?: AprBreakdown;\n liquidity?: string;\n totalWeight: string;\n lowerTarget: string;\n upperTarget: string;\n priceRateProviders?: PriceRateProvider[];\n lastJoinExitInvariant?: string;\n isInRecoveryMode?: boolean;\n isPaused?: boolean;\n tokenRates?: string[];\n}\n\nexport interface PriceRateProvider {\n address: string;\n token: {\n address: string;\n };\n}\n\n/**\n * Pool use-cases / controller layer\n */\nexport interface PoolWithMethods extends Pool, Queries.ParamsBuilder {\n /**\n * Build join pool transaction parameters with exact tokens in and minimum BPT out based on slippage tolerance\n * @param joiner Account address joining pool\n * @param tokensIn Token addresses provided for joining pool (same length and order as amountsIn)\n * @param amountsIn Token amounts provided for joining pool in EVM scale\n * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildJoin: (\n joiner: string,\n tokensIn: string[],\n amountsIn: string[],\n slippage: string\n ) => JoinPoolAttributes;\n\n /**\n * Calculate price impact of bptAmount against zero price impact BPT amount.\n * @param tokenAmounts Token amounts. Needs a value for each pool token.\n * @param bptAmount BPT amount for comparison (in EVM scale).\n * @param isJoin boolean indicating if the price impact is for a join or exit.\n * @returns price impact in EVM scale.\n */\n calcPriceImpact: (\n tokenAmounts: string[],\n bptAmount: string,\n isJoin: boolean\n ) => Promise;\n\n /**\n * Build exit pool transaction parameters with exact BPT in and minimum token amounts out based on slippage tolerance\n * @param exiter Account address exiting pool\n * @param bptIn BPT provided for exiting pool in EVM scale\n * @param slippage Maximum slippage tolerance in bps. i.e. 50 = 5%\n * @param shouldUnwrapNativeAsset Indicates whether wrapped native asset should be unwrapped after exit. Defaults to false.\n * @param singleTokenOut Optional: token address that if provided will exit to given token\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildExitExactBPTIn: (\n exiter: string,\n bptIn: string,\n slippage: string,\n shouldUnwrapNativeAsset?: boolean,\n singleTokenOut?: string,\n toInternalBalance?: boolean\n ) => ExitExactBPTInAttributes;\n\n /**\n * Build exit pool transaction parameters with exact tokens out and maximum BPT in based on slippage tolerance\n * @param exiter Account address exiting pool\n * @param tokensOut Tokens provided for exiting pool (same length and order as amountsOut)\n * @param amountsOut Amounts provided for exiting pool in EVM scale\n * @param slippage Maximum slippage tolerance in bps. i.e. 50 = 5%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildExitExactTokensOut: (\n exiter: string,\n tokensOut: string[],\n amountsOut: string[],\n slippage: string,\n toInternalBalance?: boolean\n ) => ExitExactTokensOutAttributes;\n\n /**\n * Build recovery exit pool transaction parameters with exact BPT in and minimum token amounts out based on slippage tolerance\n * @param exiter Account address exiting pool\n * @param bptIn BPT amount in EVM scale\n * @param slippage Maximum slippage tolerance in basis points. i.e. 50 = 5%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildRecoveryExit: (\n exiter: string,\n bptIn: string,\n slippage: string,\n toInternalBalance?: boolean\n ) => ExitExactBPTInAttributes;\n\n /**\n * Calculate spot price for swapping tokenIn with tokenOut\n * @param tokenIn Token address\n * @param tokenOut Token address\n * @returns spot price for swapping tokenIn with tokenOut in EVM scale\n */\n calcSpotPrice: (tokenIn: string, tokenOut: string) => string;\n\n bptIndex: number;\n}\n\nexport interface GraphQLQuery {\n args: GraphQLArgs;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attrs: any;\n}\n\nexport type CoingeckoConfig = {\n coingeckoApiKey: string;\n tokensPerPriceRequest?: number;\n isDemoApiKey?: boolean;\n};\n","export class Logger {\n private enableLogging: boolean;\n\n private static instance: Logger;\n\n private constructor() {\n this.enableLogging = true; // Logging is initially enabled\n }\n\n static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger();\n }\n return Logger.instance;\n }\n\n setLoggingEnabled(enabled: boolean): void {\n this.enableLogging = enabled;\n }\n\n info(message: string): void {\n if (this.enableLogging) {\n console.log(`[INFO] ${message}`);\n }\n }\n\n warn(message: string): void {\n if (this.enableLogging) {\n console.warn(`[WARN] ${message}`);\n }\n }\n\n error(message: string): void {\n if (this.enableLogging) {\n console.error(`[ERROR] ${message}`);\n }\n }\n\n time(message: string): void {\n if (this.enableLogging) {\n console.time(`[TIME] ${message}`);\n }\n }\n\n timeEnd(message: string): void {\n if (this.enableLogging) {\n console.timeEnd(`[TIME] ${message}`);\n }\n }\n}\n","import { getAddress } from '@ethersproject/address';\nimport { AddressZero } from '@ethersproject/constants';\nimport invariant from 'tiny-invariant';\n\nconst cmpTokens = (tokenA: string, tokenB: string): number =>\n tokenA.toLowerCase() > tokenB.toLowerCase() ? 1 : -1;\n\nconst transposeMatrix = (matrix: unknown[][]): unknown[][] =>\n matrix[0].map((_, columnIndex) => matrix.map((row) => row[columnIndex]));\n\nexport class AssetHelpers {\n public readonly ETH: string = AddressZero;\n public readonly WETH: string;\n\n constructor(wethAddress: string) {\n this.WETH = getAddress(wethAddress);\n }\n\n static isEqual = (addressA: string, addressB: string): boolean =>\n getAddress(addressA) === getAddress(addressB);\n\n /**\n * Tests whether `token` is ETH (represented by `0x0000...0000`).\n *\n * @param token - the address of the asset to be checked\n */\n isETH = (token: string): boolean => AssetHelpers.isEqual(token, this.ETH);\n\n /**\n * Tests whether `token` is WETH.\n *\n * @param token - the address of the asset to be checked\n */\n isWETH = (token: string): boolean => AssetHelpers.isEqual(token, this.WETH);\n\n /**\n * Converts an asset to the equivalent ERC20 address.\n *\n * For ERC20s this will return the passed address but passing ETH (`0x0000...0000`) will return the WETH address\n * @param token - the address of the asset to be translated to an equivalent ERC20\n * @returns the address of translated ERC20 asset\n */\n translateToERC20 = (token: string): string =>\n this.isETH(token) ? this.WETH : token;\n\n /**\n * Sorts an array of token addresses into ascending order to match the format expected by the Vault.\n *\n * Passing additional arrays will result in each being sorted to maintain relative ordering to token addresses.\n *\n * The zero address (representing ETH) is sorted as if it were the WETH address.\n * This matches the behaviour expected by the Vault when receiving an array of addresses.\n *\n * @param tokens - an array of token addresses to be sorted in ascending order\n * @param others - a set of arrays to be sorted in the same order as the tokens, e.g. token weights or asset manager addresses\n * @returns an array of the form `[tokens, ...others]` where each subarray has been sorted to maintain its ordering relative to `tokens`\n *\n * @example\n * const [tokens] = sortTokens([tokenB, tokenC, tokenA])\n * const [tokens, weights] = sortTokens([tokenB, tokenC, tokenA], [weightB, weightC, weightA])\n * // where tokens = [tokenA, tokenB, tokenC], weights = [weightA, weightB, weightC]\n */\n sortTokens(\n tokens: string[],\n ...others: unknown[][]\n ): [string[], ...unknown[][]] {\n others.forEach((array) =>\n invariant(tokens.length === array.length, 'array length mismatch')\n );\n\n // We want to sort ETH as if were WETH so we translate to ERC20s\n const erc20Tokens = tokens.map(this.translateToERC20);\n\n const transpose = transposeMatrix([erc20Tokens, ...others]) as [\n string,\n ...unknown[]\n ][];\n const sortedTranspose = transpose.sort(([tokenA], [tokenB]) =>\n cmpTokens(tokenA, tokenB)\n );\n const [sortedErc20s, ...sortedOthers] = transposeMatrix(\n sortedTranspose\n ) as [string[], ...unknown[][]];\n\n // If one of the tokens was ETH, we need to translate back from WETH\n const sortedTokens = tokens.includes(this.ETH)\n ? sortedErc20s.map((token) => (this.isWETH(token) ? this.ETH : token))\n : sortedErc20s;\n return [sortedTokens, ...sortedOthers];\n }\n}\n","const balancerErrorCodes: Record = {\n '000': 'ADD_OVERFLOW',\n '001': 'SUB_OVERFLOW',\n '002': 'SUB_UNDERFLOW',\n '003': 'MUL_OVERFLOW',\n '004': 'ZERO_DIVISION',\n '005': 'DIV_INTERNAL',\n '006': 'X_OUT_OF_BOUNDS',\n '007': 'Y_OUT_OF_BOUNDS',\n '008': 'PRODUCT_OUT_OF_BOUNDS',\n '009': 'INVALID_EXPONENT',\n '100': 'OUT_OF_BOUNDS',\n '101': 'UNSORTED_ARRAY',\n '102': 'UNSORTED_TOKENS',\n '103': 'INPUT_LENGTH_MISMATCH',\n '104': 'ZERO_TOKEN',\n '200': 'MIN_TOKENS',\n '201': 'MAX_TOKENS',\n '202': 'MAX_SWAP_FEE_PERCENTAGE',\n '203': 'MIN_SWAP_FEE_PERCENTAGE',\n '204': 'MINIMUM_BPT',\n '205': 'CALLER_NOT_VAULT',\n '206': 'UNINITIALIZED',\n '207': 'BPT_IN_MAX_AMOUNT',\n '208': 'BPT_OUT_MIN_AMOUNT',\n '209': 'EXPIRED_PERMIT',\n '210': 'NOT_TWO_TOKENS',\n '211': 'DISABLED',\n '300': 'MIN_AMP',\n '301': 'MAX_AMP',\n '302': 'MIN_WEIGHT',\n '303': 'MAX_STABLE_TOKENS',\n '304': 'MAX_IN_RATIO',\n '305': 'MAX_OUT_RATIO',\n '306': 'MIN_BPT_IN_FOR_TOKEN_OUT',\n '307': 'MAX_OUT_BPT_FOR_TOKEN_IN',\n '308': 'NORMALIZED_WEIGHT_INVARIANT',\n '309': 'INVALID_TOKEN',\n '310': 'UNHANDLED_JOIN_KIND',\n '311': 'ZERO_INVARIANT',\n '312': 'ORACLE_INVALID_SECONDS_QUERY',\n '313': 'ORACLE_NOT_INITIALIZED',\n '314': 'ORACLE_QUERY_TOO_OLD',\n '315': 'ORACLE_INVALID_INDEX',\n '316': 'ORACLE_BAD_SECS',\n '317': 'AMP_END_TIME_TOO_CLOSE',\n '318': 'AMP_ONGOING_UPDATE',\n '319': 'AMP_RATE_TOO_HIGH',\n '320': 'AMP_NO_ONGOING_UPDATE',\n '321': 'STABLE_INVARIANT_DIDNT_CONVERGE',\n '322': 'STABLE_GET_BALANCE_DIDNT_CONVERGE',\n '323': 'RELAYER_NOT_CONTRACT',\n '324': 'BASE_POOL_RELAYER_NOT_CALLED',\n '325': 'REBALANCING_RELAYER_REENTERED',\n '326': 'GRADUAL_UPDATE_TIME_TRAVEL',\n '327': 'SWAPS_DISABLED',\n '328': 'CALLER_IS_NOT_LBP_OWNER',\n '329': 'PRICE_RATE_OVERFLOW',\n '330': 'INVALID_JOIN_EXIT_KIND_WHILE_SWAPS_DISABLED',\n '331': 'WEIGHT_CHANGE_TOO_FAST',\n '332': 'LOWER_GREATER_THAN_UPPER_TARGET',\n '333': 'UPPER_TARGET_TOO_HIGH',\n '334': 'UNHANDLED_BY_LINEAR_POOL',\n '335': 'OUT_OF_TARGET_RANGE',\n '336': 'UNHANDLED_EXIT_KIND ',\n '337': 'UNAUTHORIZED_EXIT',\n '338': 'MAX_MANAGEMENT_SWAP_FEE_PERCENTAGE',\n '339': 'UNHANDLED_BY_MANAGED_POOL',\n '340': 'UNHANDLED_BY_PHANTOM_POOL',\n '341': 'TOKEN_DOES_NOT_HAVE_RATE_PROVIDER',\n '342': 'INVALID_INITIALIZATION',\n '343': 'OUT_OF_NEW_TARGET_RANGE',\n '344': 'UNAUTHORIZED_OPERATION',\n '345': 'UNINITIALIZED_POOL_CONTROLLER',\n '400': 'REENTRANCY',\n '401': 'SENDER_NOT_ALLOWED',\n '402': 'PAUSED',\n '403': 'PAUSE_WINDOW_EXPIRED',\n '404': 'MAX_PAUSE_WINDOW_DURATION',\n '405': 'MAX_BUFFER_PERIOD_DURATION',\n '406': 'INSUFFICIENT_BALANCE',\n '407': 'INSUFFICIENT_ALLOWANCE',\n '408': 'ERC20_TRANSFER_FROM_ZERO_ADDRESS',\n '409': 'ERC20_TRANSFER_TO_ZERO_ADDRESS',\n '410': 'ERC20_MINT_TO_ZERO_ADDRESS',\n '411': 'ERC20_BURN_FROM_ZERO_ADDRESS',\n '412': 'ERC20_APPROVE_FROM_ZERO_ADDRESS',\n '413': 'ERC20_APPROVE_TO_ZERO_ADDRESS',\n '414': 'ERC20_TRANSFER_EXCEEDS_ALLOWANCE',\n '415': 'ERC20_DECREASED_ALLOWANCE_BELOW_ZERO',\n '416': 'ERC20_TRANSFER_EXCEEDS_BALANCE',\n '417': 'ERC20_BURN_EXCEEDS_ALLOWANCE',\n '418': 'SAFE_ERC20_CALL_FAILED',\n '419': 'ADDRESS_INSUFFICIENT_BALANCE',\n '420': 'ADDRESS_CANNOT_SEND_VALUE',\n '421': 'SAFE_CAST_VALUE_CANT_FIT_INT256',\n '422': 'GRANT_SENDER_NOT_ADMIN',\n '423': 'REVOKE_SENDER_NOT_ADMIN',\n '424': 'RENOUNCE_SENDER_NOT_ALLOWED',\n '425': 'BUFFER_PERIOD_EXPIRED',\n '426': 'CALLER_IS_NOT_OWNER',\n '427': 'NEW_OWNER_IS_ZERO',\n '428': 'CODE_DEPLOYMENT_FAILED',\n '429': 'CALL_TO_NON_CONTRACT',\n '430': 'LOW_LEVEL_CALL_FAILED',\n '431': 'NOT_PAUSED',\n '432': 'ADDRESS_ALREADY_ALLOWLISTED',\n '433': 'ADDRESS_NOT_ALLOWLISTED',\n '434': 'ERC20_BURN_EXCEEDS_BALANCE',\n '500': 'INVALID_POOL_ID',\n '501': 'CALLER_NOT_POOL',\n '502': 'SENDER_NOT_ASSET_MANAGER',\n '503': 'USER_DOESNT_ALLOW_RELAYER',\n '504': 'INVALID_SIGNATURE',\n '505': 'EXIT_BELOW_MIN',\n '506': 'JOIN_ABOVE_MAX',\n '507': 'SWAP_LIMIT',\n '508': 'SWAP_DEADLINE',\n '509': 'CANNOT_SWAP_SAME_TOKEN',\n '510': 'UNKNOWN_AMOUNT_IN_FIRST_SWAP',\n '511': 'MALCONSTRUCTED_MULTIHOP_SWAP',\n '512': 'INTERNAL_BALANCE_OVERFLOW',\n '513': 'INSUFFICIENT_INTERNAL_BALANCE',\n '514': 'INVALID_ETH_INTERNAL_BALANCE',\n '515': 'INVALID_POST_LOAN_BALANCE',\n '516': 'INSUFFICIENT_ETH',\n '517': 'UNALLOCATED_ETH',\n '518': 'ETH_TRANSFER',\n '519': 'CANNOT_USE_ETH_SENTINEL',\n '520': 'TOKENS_MISMATCH',\n '521': 'TOKEN_NOT_REGISTERED',\n '522': 'TOKEN_ALREADY_REGISTERED',\n '523': 'TOKENS_ALREADY_SET',\n '524': 'TOKENS_LENGTH_MUST_BE_2',\n '525': 'NONZERO_TOKEN_BALANCE',\n '526': 'BALANCE_TOTAL_OVERFLOW',\n '527': 'POOL_NO_TOKENS',\n '528': 'INSUFFICIENT_FLASH_LOAN_BALANCE',\n '600': 'SWAP_FEE_PERCENTAGE_TOO_HIGH',\n '601': 'FLASH_LOAN_FEE_PERCENTAGE_TOO_HIGH',\n '602': 'INSUFFICIENT_FLASH_LOAN_FEE_AMOUNT',\n};\n\nexport class BalancerErrors {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n static isErrorCode = (error: string): boolean => {\n if (!error.includes('BAL#')) return false;\n\n const errorCode = error.replace('BAL#', '');\n return Object.keys(balancerErrorCodes).includes(errorCode);\n };\n\n /**\n * Decodes a Balancer error code into the corresponding reason\n * @param error - a Balancer error code of the form `BAL#000`\n * @returns The decoded error reason\n */\n static parseErrorCode = (error: string): string => {\n if (!error.includes('BAL#')) throw new Error('Error code not found');\n const errorCode = error.replace('BAL#', '');\n\n const actualError = balancerErrorCodes[errorCode];\n\n if (!actualError) throw new Error('Error code not found');\n\n return actualError;\n };\n\n /**\n * Decodes a Balancer error code into the corresponding reason\n * @param error - a Balancer error code of the form `BAL#000`\n * @returns The decoded error reason if passed a valid error code, otherwise returns passed input\n */\n static tryParseErrorCode = (error: string): string => {\n try {\n return BalancerErrors.parseErrorCode(error);\n } catch {\n return error;\n }\n };\n\n /**\n * Tests whether a string is a known Balancer error message\n * @param error - a string to be checked verified as a Balancer error message\n */\n static isBalancerError = (error: string): boolean =>\n Object.values(balancerErrorCodes).includes(error);\n\n /**\n * Encodes an error string into the corresponding error code\n * @param error - a Balancer error message string\n * @returns a Balancer error code of the form `BAL#000`\n */\n static encodeError = (error: string): string => {\n const encodedError = Object.entries(balancerErrorCodes).find(\n ([, message]) => message === error\n );\n\n if (!encodedError) throw Error('Error message not found');\n\n return `BAL#${encodedError[0]}`;\n };\n}\n","import { MaxUint256 as MAX_DEADLINE } from '@ethersproject/constants';\nimport { Contract } from '@ethersproject/contracts';\nimport { hexValue, hexZeroPad, splitSignature } from '@ethersproject/bytes';\nimport { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { Signer, TypedDataSigner } from '@ethersproject/abstract-signer';\n\nexport type Account = string | Signer | Contract;\n\nexport async function accountToAddress(account: Account): Promise {\n if (typeof account == 'string') return account;\n if (Signer.isSigner(account)) return account.getAddress();\n if (account.address) return account.address;\n throw new Error('Could not read account address');\n}\n\nexport enum RelayerAction {\n JoinPool = 'JoinPool',\n ExitPool = 'ExitPool',\n Swap = 'Swap',\n BatchSwap = 'BatchSwap',\n SetRelayerApproval = 'SetRelayerApproval',\n}\n\nexport class RelayerAuthorization {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n static encodeCalldataAuthorization = (\n calldata: string,\n deadline: BigNumberish,\n signature: string\n ): string => {\n const encodedDeadline = hexZeroPad(hexValue(deadline), 32).slice(2);\n const { v, r, s } = splitSignature(signature);\n const encodedV = hexZeroPad(hexValue(v), 32).slice(2);\n const encodedR = r.slice(2);\n const encodedS = s.slice(2);\n return `${calldata}${encodedDeadline}${encodedV}${encodedR}${encodedS}`;\n };\n\n static signJoinAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.JoinPool,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signExitAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.ExitPool,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signSwapAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.Swap,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signBatchSwapAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.BatchSwap,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signSetRelayerApprovalAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.SetRelayerApproval,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signAuthorizationFor = async (\n type: RelayerAction,\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline: BigNumberish = MAX_DEADLINE,\n nonce?: BigNumberish\n ): Promise => {\n const { chainId } = await validator.provider.getNetwork();\n if (!nonce) {\n const userAddress = await user.getAddress();\n nonce = (await validator.getNextNonce(userAddress)) as BigNumberish;\n }\n\n const domain = {\n name: 'Balancer V2 Vault',\n version: '1',\n chainId,\n verifyingContract: validator.address,\n };\n\n const types = {\n [type]: [\n { name: 'calldata', type: 'bytes' },\n { name: 'sender', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n };\n\n const value = {\n calldata: allowedCalldata,\n sender: await accountToAddress(allowedSender),\n nonce: nonce.toString(),\n deadline: deadline.toString(),\n };\n\n return user._signTypedData(domain, types, value);\n };\n}\n\nexport class BalancerMinterAuthorization {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n static signSetMinterApproval = async (\n minterContract: Contract,\n minter: Account,\n approval: boolean,\n user: Signer & TypedDataSigner,\n deadline: BigNumberish = MAX_DEADLINE,\n nonce?: BigNumberish\n ): Promise<{ v: number; r: string; s: string; deadline: BigNumber }> => {\n const { chainId } = await minterContract.provider.getNetwork();\n if (!nonce) {\n const userAddress = await user.getAddress();\n nonce = (await minterContract.getNextNonce(userAddress)) as BigNumberish;\n }\n\n const domain = {\n name: 'Balancer Minter',\n version: '1',\n chainId,\n verifyingContract: minterContract.address,\n };\n\n const types = {\n SetMinterApproval: [\n { name: 'minter', type: 'address' },\n { name: 'approval', type: 'bool' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n };\n\n const value = {\n minter: await accountToAddress(minter),\n approval,\n nonce: nonce.toString(),\n deadline: deadline.toString(),\n };\n\n const signature = await user._signTypedData(domain, types, value);\n\n return {\n ...splitSignature(signature),\n deadline: BigNumber.from(deadline),\n };\n };\n}\n","import { Signer, TypedDataSigner } from '@ethersproject/abstract-signer';\nimport { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { splitSignature } from '@ethersproject/bytes';\nimport { MaxUint256 as MAX_DEADLINE } from '@ethersproject/constants';\nimport { Contract } from '@ethersproject/contracts';\nimport { Account, accountToAddress } from './signatures';\n\nexport const signPermit = async (\n token: Contract,\n owner: Signer & TypedDataSigner,\n spender: Account,\n amount: BigNumberish,\n deadline: BigNumberish = MAX_DEADLINE,\n nonce?: BigNumberish\n): Promise<{\n v: number;\n r: string;\n s: string;\n deadline: BigNumber;\n nonce: BigNumber;\n}> => {\n const { chainId } = await token.provider.getNetwork();\n const ownerAddress = await owner.getAddress();\n\n if (!nonce) nonce = (await token.nonces(ownerAddress)) as BigNumberish;\n\n const domain = {\n name: await token.name(),\n version: '1',\n chainId,\n verifyingContract: token.address,\n };\n\n const types = {\n Permit: [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n };\n\n const value = {\n owner: ownerAddress,\n spender: await accountToAddress(spender),\n value: amount,\n nonce,\n deadline,\n };\n\n const signature = await owner._signTypedData(domain, types, value);\n return {\n ...splitSignature(signature),\n deadline: BigNumber.from(deadline),\n nonce: BigNumber.from(nonce),\n };\n};\n","export const BZERO = BigInt(0);\nexport const BONE = BigInt(1);\nexport const ONE = BigInt('1000000000000000000'); // 18 decimal places\n\nconst _require = (b: boolean, message: string) => {\n if (!b) throw new Error(message);\n};\n\n/**\n * @dev Returns a scaling factor that, when multiplied to a token amount for `token`, normalizes its balance as if\n * it had 18 decimals.\n */\nexport function _computeScalingFactor(tokenDecimals: bigint): bigint {\n // Tokens with more than 18 decimals are not supported.\n const decimalsDifference = BigInt(18) - tokenDecimals;\n return ONE * BigInt(10) ** decimalsDifference;\n}\n\n/**\n * @dev Applies `scalingFactor` to `amount`, resulting in a larger or equal value depending on whether it needed\n * scaling or not.\n */\nexport function _upscale(amount: bigint, scalingFactor: bigint): bigint {\n // Upscale rounding wouldn't necessarily always go in the same direction: in a swap for example the balance of\n // token in should be rounded up, and that of token out rounded down. This is the only place where we round in\n // the same direction for all amounts, as the impact of this rounding is expected to be minimal (and there's no\n // rounding error unless `_scalingFactor()` is overriden).\n return SolidityMaths.mulDownFixed(amount, scalingFactor);\n}\n\n/**\n * @dev Same as `_upscale`, but for an entire array. This function does not return anything, but instead *mutates*\n * the `amounts` array.\n */\nexport function _upscaleArray(\n amounts: bigint[],\n scalingFactors: bigint[]\n): bigint[] {\n const upscaledAmounts = new Array(amounts.length);\n for (let i = 0; i < amounts.length; ++i) {\n upscaledAmounts[i] = SolidityMaths.mulDownFixed(\n amounts[i],\n scalingFactors[i]\n );\n }\n return upscaledAmounts;\n}\n\n/**\n * @dev Reverses the `scalingFactor` applied to `amount`, resulting in a smaller or equal value depending on\n * whether it needed scaling or not. The result is rounded down.\n */\nexport function _downscaleDown(amount: bigint, scalingFactor: bigint): bigint {\n return SolidityMaths.divDownFixed(amount, scalingFactor);\n}\n\n/**\n * @dev Same as `_downscaleDown`, but for an entire array. This function does not return anything, but instead\n * *mutates* the `amounts` array.\n */\nexport function _downscaleDownArray(\n amounts: bigint[],\n scalingFactors: bigint[]\n): bigint[] {\n const downscaledAmounts = new Array(amounts.length);\n for (let i = 0; i < amounts.length; ++i) {\n downscaledAmounts[i] = SolidityMaths.divDownFixed(\n amounts[i],\n scalingFactors[i]\n );\n }\n return downscaledAmounts;\n}\n\n/**\n * @dev Reverses the `scalingFactor` applied to `amount`, resulting in a smaller or equal value depending on\n * whether it needed scaling or not. The result is rounded up.\n */\nexport function _downscaleUp(amount: bigint, scalingFactor: bigint): bigint {\n return SolidityMaths.divUpFixed(amount, scalingFactor);\n}\n\nexport class SolidityMaths {\n /**\n * @dev Returns the addition of two unsigned integers of 256 bits, reverting on overflow.\n */\n // add(a: bigint, b: bigint): bigint {\n // const c = a + b;\n // // _require(c >= a, Errors.ADD_OVERFLOW);\n // return c;\n // }\n\n /**\n * @dev Returns the addition of two signed integers, reverting on overflow.\n */\n static add(a: bigint, b: bigint): bigint {\n const c = a + b;\n _require((b >= 0 && c >= a) || (b < 0 && c < a), 'Errors.ADD_OVERFLOW');\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers of 256 bits, reverting on overflow.\n */\n static sub(a: bigint, b: bigint): bigint {\n _require(b <= a, 'Errors.SUB_OVERFLOW');\n const c = a - b;\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two signed integers, reverting on overflow.\n */\n // sub(int256 a, int256 b) internal pure returns (int256) {\n // int256 c = a - b;\n // // _require((b >= 0 && c <= a) || (b < 0 && c > a), Errors.SUB_OVERFLOW);\n // return c;\n // }\n\n /**\n * @dev Returns the largest bigint in the array.\n */\n static max(args: bigint[]): bigint {\n if (args.length === 0) throw new Error('Errors.EMPTY_ARRAY');\n if (args.length === 1) return args[0];\n return args.reduce((previous, current) =>\n current > previous ? current : previous\n );\n }\n\n /**\n * @dev Returns the smallest of two numbers of 256 bits.\n */\n static min(a: bigint, b: bigint): bigint {\n return a < b ? a : b;\n }\n\n static mul(a: bigint, b: bigint): bigint {\n const c = a * b;\n _require(a == BZERO || c / a == b, 'Errors.MUL_OVERFLOW');\n return c;\n }\n\n static div(a: bigint, b: bigint, roundUp: boolean): bigint {\n return roundUp ? this.divUp(a, b) : this.divDown(a, b);\n }\n\n static divDown(a: bigint, b: bigint): bigint {\n _require(b != BZERO, 'Errors.ZERO_DIVISION');\n return a / b;\n }\n\n static divUp(a: bigint, b: bigint): bigint {\n _require(b != BZERO, 'Errors.ZERO_DIVISION');\n\n if (a == BZERO) {\n return BZERO;\n } else {\n return BONE + (a - BONE) / b;\n }\n }\n\n // Modification: Taken from the fixed point class\n static MAX_POW_RELATIVE_ERROR = BigInt(10000);\n\n static mulUpFixed(a: bigint, b: bigint): bigint {\n const product = a * b;\n _require(a == BZERO || product / a == b, 'Errors.MUL_OVERFLOW');\n\n if (product == BZERO) {\n return BZERO;\n } else {\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, which we already tested for.\n\n return (product - BONE) / ONE + BONE;\n }\n }\n\n // Modification: Taken from the fixed point class\n static divDownFixed(a: bigint, b: bigint): bigint {\n _require(b != BZERO, 'Errors.ZERO_DIVISION');\n if (a == BZERO) {\n return BZERO;\n } else {\n const aInflated = a * ONE;\n // _require(aInflated / a == ONE, Errors.DIV_INTERNAL); // mul overflow\n\n return aInflated / b;\n }\n }\n\n // Modification: Taken from the fixed point class\n static divUpFixed(a: bigint, b: bigint): bigint {\n _require(b != BZERO, 'Errors.ZERO_DIVISION');\n\n if (a == BZERO) {\n return BZERO;\n } else {\n const aInflated = a * ONE;\n _require(aInflated / a == ONE, 'Errors.DIV_INTERNAL'); // mul overflow\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, which we already tested for.\n\n return (aInflated - BONE) / b + BONE;\n }\n }\n\n // Modification: Taken from the fixed point class\n static powUpFixed(x: bigint, y: bigint): bigint {\n const raw = LogExpMath.pow(x, y);\n const maxError = this.add(\n this.mulUpFixed(raw, this.MAX_POW_RELATIVE_ERROR),\n BONE\n );\n\n return this.add(raw, maxError);\n }\n\n // Modification: Taken from the fixed point class\n static complementFixed(x: bigint): bigint {\n return x < ONE ? ONE - x : BZERO;\n }\n\n static mulDownFixed(a: bigint, b: bigint): bigint {\n const product = a * b;\n _require(a == BZERO || product / a == b, 'Errors.MUL_OVERFLOW');\n\n return product / ONE;\n }\n}\n\nclass LogExpMath {\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n static ONE_18 = BigInt('1000000000000000000');\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n static ONE_20 = BigInt('100000000000000000000');\n static ONE_36 = BigInt('1000000000000000000000000000000000000');\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n static MAX_NATURAL_EXPONENT = BigInt('130000000000000000000');\n static MIN_NATURAL_EXPONENT = BigInt('-41000000000000000000');\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n static LN_36_LOWER_BOUND: bigint =\n BigInt(LogExpMath.ONE_18) - BigInt('100000000000000000');\n static LN_36_UPPER_BOUND: bigint =\n BigInt(LogExpMath.ONE_18) + BigInt('100000000000000000');\n\n static MILD_EXPONENT_BOUND: bigint =\n BigInt(2) ** BigInt(254) / LogExpMath.ONE_20;\n\n // 18 decimal constants\n static x0 = BigInt('128000000000000000000'); // 2ˆ7\n static a0 = BigInt(\n '38877084059945950922200000000000000000000000000000000000'\n ); // eˆ(x0) (no decimals)\n static x1 = BigInt('64000000000000000000'); // 2ˆ6\n static a1 = BigInt('6235149080811616882910000000'); // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n static x2 = BigInt('3200000000000000000000'); // 2ˆ5\n static a2 = BigInt('7896296018268069516100000000000000'); // eˆ(x2)\n static x3 = BigInt('1600000000000000000000'); // 2ˆ4\n static a3 = BigInt('888611052050787263676000000'); // eˆ(x3)\n static x4 = BigInt('800000000000000000000'); // 2ˆ3\n static a4 = BigInt('298095798704172827474000'); // eˆ(x4)\n static x5 = BigInt('400000000000000000000'); // 2ˆ2\n static a5 = BigInt('5459815003314423907810'); // eˆ(x5)\n static x6 = BigInt('200000000000000000000'); // 2ˆ1\n static a6 = BigInt('738905609893065022723'); // eˆ(x6)\n static x7 = BigInt('100000000000000000000'); // 2ˆ0\n static a7 = BigInt('271828182845904523536'); // eˆ(x7)\n static x8 = BigInt('50000000000000000000'); // 2ˆ-1\n static a8 = BigInt('164872127070012814685'); // eˆ(x8)\n static x9 = BigInt('25000000000000000000'); // 2ˆ-2\n static a9 = BigInt('128402541668774148407'); // eˆ(x9)\n static x10 = BigInt('12500000000000000000'); // 2ˆ-3\n static a10 = BigInt('113314845306682631683'); // eˆ(x10)\n static x11 = BigInt('6250000000000000000'); // 2ˆ-4\n static a11 = BigInt('106449445891785942956'); // eˆ(x11)\n\n // All arguments and return values are 18 decimal fixed point numbers.\n static pow(x: bigint, y: bigint): bigint {\n if (y === BZERO) {\n // We solve the 0^0 indetermination by making it equal one.\n return this.ONE_18;\n }\n\n if (x == BZERO) {\n return BZERO;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n _require(\n x <\n BigInt(\n '57896044618658097711785492504343953926634992332820282019728792003956564819968'\n ),\n 'Errors.X_OUT_OF_BOUNDS'\n );\n const x_int256 = x;\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n _require(y < this.MILD_EXPONENT_BOUND, 'Errors.Y_OUT_OF_BOUNDS');\n const y_int256 = y;\n\n let logx_times_y;\n if (\n this.LN_36_LOWER_BOUND < x_int256 &&\n x_int256 < this.LN_36_UPPER_BOUND\n ) {\n const ln_36_x = this._ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y =\n (ln_36_x / this.ONE_18) * y_int256 +\n ((ln_36_x % this.ONE_18) * y_int256) / this.ONE_18;\n } else {\n logx_times_y = this._ln(x_int256) * y_int256;\n }\n logx_times_y /= this.ONE_18;\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n _require(\n this.MIN_NATURAL_EXPONENT <= logx_times_y &&\n logx_times_y <= this.MAX_NATURAL_EXPONENT,\n 'Errors.PRODUCT_OUT_OF_BOUNDS'\n );\n\n // return uint256(exp(logx_times_y));\n return this.exp(logx_times_y);\n }\n\n static exp(x: bigint): bigint {\n _require(\n x >= this.MIN_NATURAL_EXPONENT && x <= this.MAX_NATURAL_EXPONENT,\n 'Errors.INVALID_EXPONENT'\n );\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT).\n // Fixed point division requires multiplying by ONE_18.\n return (this.ONE_18 * this.ONE_18) / this.exp(BigInt(-1) * x);\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n let firstAN;\n if (x >= this.x0) {\n x -= this.x0;\n firstAN = this.a0;\n } else if (x >= this.x1) {\n x -= this.x1;\n firstAN = this.a1;\n } else {\n firstAN = BigInt(1); // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= BigInt(100);\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n let product = this.ONE_20;\n\n if (x >= this.x2) {\n x -= this.x2;\n product = (product * this.a2) / this.ONE_20;\n }\n if (x >= this.x3) {\n x -= this.x3;\n product = (product * this.a3) / this.ONE_20;\n }\n if (x >= this.x4) {\n x -= this.x4;\n product = (product * this.a4) / this.ONE_20;\n }\n if (x >= this.x5) {\n x -= this.x5;\n product = (product * this.a5) / this.ONE_20;\n }\n if (x >= this.x6) {\n x -= this.x6;\n product = (product * this.a6) / this.ONE_20;\n }\n if (x >= this.x7) {\n x -= this.x7;\n product = (product * this.a7) / this.ONE_20;\n }\n if (x >= this.x8) {\n x -= this.x8;\n product = (product * this.a8) / this.ONE_20;\n }\n if (x >= this.x9) {\n x -= this.x9;\n product = (product * this.a9) / this.ONE_20;\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n let seriesSum = this.ONE_20; // The initial one in the sum, with 20 decimal places.\n let term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by this.ONE_20, but dividing by the non-fixed point n values does not.\n\n term = (term * x) / this.ONE_20 / BigInt(2);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(3);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(4);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(5);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(6);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(7);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(8);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(9);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(10);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(11);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(12);\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by this.ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n return (((product * seriesSum) / this.ONE_20) * firstAN) / BigInt(100);\n }\n\n static _ln_36(x: bigint): bigint {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n x *= this.ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n const z = ((x - this.ONE_36) * this.ONE_36) / (x + this.ONE_36);\n const z_squared = (z * z) / this.ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n let num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n let seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(3);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(5);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(7);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(9);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(11);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(13);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(15);\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * BigInt(2);\n }\n\n /**\n * @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n */\n static _ln(a: bigint): bigint {\n if (a < this.ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, and this if statement will not be entered in the recursive call.\n // Fixed point division requires multiplying by this.ONE_18.\n return BigInt(-1) * this._ln((this.ONE_18 * this.ONE_18) / a);\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // this.ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n let sum = BZERO;\n if (a >= this.a0 * this.ONE_18) {\n a /= this.a0; // Integer, not fixed point division\n sum += this.x0;\n }\n\n if (a >= this.a1 * this.ONE_18) {\n a /= this.a1; // Integer, not fixed point division\n sum += this.x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= BigInt(100);\n a *= BigInt(100);\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= this.a2) {\n a = (a * this.ONE_20) / this.a2;\n sum += this.x2;\n }\n\n if (a >= this.a3) {\n a = (a * this.ONE_20) / this.a3;\n sum += this.x3;\n }\n\n if (a >= this.a4) {\n a = (a * this.ONE_20) / this.a4;\n sum += this.x4;\n }\n\n if (a >= this.a5) {\n a = (a * this.ONE_20) / this.a5;\n sum += this.x5;\n }\n\n if (a >= this.a6) {\n a = (a * this.ONE_20) / this.a6;\n sum += this.x6;\n }\n\n if (a >= this.a7) {\n a = (a * this.ONE_20) / this.a7;\n sum += this.x7;\n }\n\n if (a >= this.a8) {\n a = (a * this.ONE_20) / this.a8;\n sum += this.x8;\n }\n\n if (a >= this.a9) {\n a = (a * this.ONE_20) / this.a9;\n sum += this.x9;\n }\n\n if (a >= this.a10) {\n a = (a * this.ONE_20) / this.a10;\n sum += this.x10;\n }\n\n if (a >= this.a11) {\n a = (a * this.ONE_20) / this.a11;\n sum += this.x11;\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n const z = ((a - this.ONE_20) * this.ONE_20) / (a + this.ONE_20);\n const z_squared = (z * z) / this.ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n let num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n let seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(3);\n\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(5);\n\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(7);\n\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(9);\n\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(11);\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= BigInt(2);\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n return (sum + seriesSum) / BigInt(100);\n }\n}\n","import { parseFixed } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport { Pool } from '../../types';\nimport {\n SolidityMaths,\n _computeScalingFactor,\n _upscaleArray,\n} from '@/lib/utils/solidityMaths';\nimport { AssetHelpers } from '@/lib/utils/assetHelpers';\n\nexport const AMP_PRECISION = 3; // number of decimals -> precision 1000\n\ntype ParsedPoolInfo = {\n bptIndex: number;\n higherBalanceTokenIndex: number;\n ampWithPrecision: bigint;\n balancesEvm: bigint[];\n balancesEvmWithoutBpt: bigint[];\n priceRates: bigint[];\n priceRatesWithoutBpt: bigint[];\n swapFeeEvm: bigint;\n poolTokens: string[];\n poolTokensWithoutBpt: string[];\n weights: bigint[];\n scalingFactors: bigint[];\n scalingFactorsWithoutBpt: bigint[];\n scalingFactorsRaw: bigint[];\n scalingFactorsRawWithoutBpt: bigint[];\n upScaledBalances: bigint[];\n upScaledBalancesWithoutBpt: bigint[];\n totalSharesEvm: bigint;\n};\n\n/**\n * Parse pool info into EVM amounts. Sorts by token order if wrappedNativeAsset param passed.\n * @param pool Pool object to be parsed\n * @param wrappedNativeAsset e.g. wETH address\n * @param unwrapNativeAsset if true, changes wETH address to ETH address\n * @returns parsed pool info\n */\nexport const parsePoolInfo = (\n pool: Pool,\n wrappedNativeAsset?: string,\n unwrapNativeAsset?: boolean\n): ParsedPoolInfo => {\n let poolTokens = unwrapNativeAsset\n ? pool.tokens.map((token) =>\n token.address === wrappedNativeAsset ? AddressZero : token.address\n )\n : pool.tokens.map((token) => token.address);\n let decimals = pool.tokens.map((token) => {\n return token.decimals ?? 18;\n });\n let balancesEvm = pool.tokens.map((token) =>\n parseFixed(token.balance, token.decimals).toBigInt()\n );\n let weights = pool.tokens.map((token) => {\n return parseFixed(token.weight ?? '1', 18).toBigInt();\n });\n let priceRates = pool.tokens.map((token) => {\n return parseFixed(token.priceRate ?? '1', 18).toBigInt();\n });\n\n let scalingFactorsRaw = decimals.map((d) => _computeScalingFactor(BigInt(d)));\n let scalingFactors = scalingFactorsRaw.map((sf, i) =>\n SolidityMaths.mulDownFixed(sf, priceRates[i])\n );\n // This assumes token.balance is in human scale (e.g. from SG)\n let upScaledBalances = _upscaleArray(balancesEvm, scalingFactors);\n if (wrappedNativeAsset) {\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n [\n poolTokens,\n decimals,\n scalingFactors,\n scalingFactorsRaw,\n balancesEvm,\n upScaledBalances,\n weights,\n priceRates,\n ] = assetHelpers.sortTokens(\n poolTokens,\n decimals,\n scalingFactors,\n scalingFactorsRaw,\n balancesEvm,\n upScaledBalances,\n weights,\n priceRates\n ) as [\n string[],\n number[],\n bigint[],\n bigint[],\n bigint[],\n bigint[],\n bigint[],\n bigint[]\n ];\n }\n\n // Solidity maths uses precison method for amp that must be replicated\n const ampWithPrecision = parseFixed(\n pool.amp ?? '1',\n AMP_PRECISION\n ).toBigInt();\n\n const higherBalanceTokenIndex = upScaledBalances.indexOf(\n SolidityMaths.max(upScaledBalances)\n );\n\n const scalingFactorsWithoutBpt = [...scalingFactors];\n const scalingFactorsRawWithoutBpt = [...scalingFactorsRaw];\n const poolTokensWithoutBpt = [...poolTokens];\n const balancesEvmWithoutBpt = [...balancesEvm];\n const priceRatesWithoutBpt = [...priceRates];\n const upScaledBalancesWithoutBpt = [...upScaledBalances];\n\n const bptIndex = poolTokens.indexOf(pool.address);\n if (bptIndex !== -1) {\n scalingFactorsWithoutBpt.splice(bptIndex, 1);\n scalingFactorsRawWithoutBpt.splice(bptIndex, 1);\n poolTokensWithoutBpt.splice(bptIndex, 1);\n balancesEvmWithoutBpt.splice(bptIndex, 1);\n priceRatesWithoutBpt.splice(bptIndex, 1);\n upScaledBalancesWithoutBpt.splice(bptIndex, 1);\n }\n\n return {\n bptIndex,\n higherBalanceTokenIndex,\n ampWithPrecision,\n balancesEvm,\n balancesEvmWithoutBpt,\n priceRates,\n priceRatesWithoutBpt,\n swapFeeEvm: parseFixed(pool.swapFee, 18).toBigInt(),\n poolTokens,\n poolTokensWithoutBpt,\n weights,\n scalingFactors,\n scalingFactorsWithoutBpt,\n scalingFactorsRaw,\n scalingFactorsRawWithoutBpt,\n upScaledBalances,\n upScaledBalancesWithoutBpt,\n totalSharesEvm: parseFixed(pool.totalShares || '0', 18).toBigInt(),\n };\n};\n","import { Network } from '@/lib/constants/network';\n\n/**\n * TYPES\n */\ntype CommonTokens = {\n nativeAsset: string;\n wNativeAsset: string;\n WETH: string;\n BAL: string;\n bbaUSD?: string;\n bbaUSDv2?: string;\n};\n\ntype TokenConstants = {\n Popular: {\n Symbols: string[];\n };\n Addresses: CommonTokens;\n PriceChainMap?: Record;\n};\n\n/**\n * CONSTANTS\n */\nexport const DEFAULT_TOKEN_DECIMALS = 18;\n\nexport const TOKENS_MAINNET: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'AAVE', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n WETH: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n BAL: '0xba100000625a3754423978a60c9317c58a424e3d',\n bbaUSD: '0x7B50775383d3D6f0215A8F290f2C9e2eEBBEceb2',\n bbaUSDv2: '0xA13a9247ea42D743238089903570127DdA72fE44',\n },\n};\n\nexport const TOKENS_POLYGON: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'AAVE', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270',\n WETH: '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619',\n BAL: '0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3',\n },\n};\n\nexport const TOKENS_ARBITRUM: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'AAVE', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n WETH: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n BAL: '0x040d1EdC9569d4Bab2D15287Dc5A4F10F56a56B8',\n },\n};\n\nexport const TOKENS_GNOSIS: TokenConstants = {\n Popular: {\n Symbols: ['xDAI', 'WXDAI', 'WETH', 'BAL'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0xe91d153e0b41518a2ce8dd3d7944fa863463a97d',\n WETH: '0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1',\n BAL: '0x7eF541E2a22058048904fE5744f9c7E4C57AF717',\n },\n};\nexport const TOKENS_GOERLI: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'USDT', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1',\n WETH: '0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1',\n BAL: '0xfA8449189744799aD2AcE7e0EBAC8BB7575eff47',\n bbaUSD: '0x13ACD41C585d7EbB4a9460f7C8f50BE60DC080Cd',\n },\n PriceChainMap: {\n /**\n * Addresses must be lower case and map from goerli to mainnet, e.g\n * [goerli address]: mainnet address\n */\n '0xdfcea9088c8a88a76ff74892c1457c17dfeef9c1':\n '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n '0x37f03a12241e9fd3658ad6777d289c3fb8512bc9':\n '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599',\n '0xfa8449189744799ad2ace7e0ebac8bb7575eff47':\n '0xba100000625a3754423978a60c9317c58a424e3d',\n '0xe0c9275e44ea80ef17579d33c55136b7da269aeb':\n '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n '0x8c9e6c40d3402480ace624730524facc5482798c':\n '0x6b175474e89094c44da98b954eedeac495271d0f',\n '0x1f1f156e0317167c11aa412e3d1435ea29dc3cce':\n '0xdac17f958d2ee523a2206206994597c13d831ec7',\n '0x4cb1892fddf14f772b2e39e299f44b2e5da90d04':\n '0x3ed3b47dd13ec9a98b44e6204a523e766b225811',\n '0x811151066392fd641fe74a9b55a712670572d161':\n '0xbcca60bb61934080951369a648fb03df4f96263c',\n '0x89534a24450081aa267c79b07411e9617d984052':\n '0x028171bca77440897b824ca71d1c56cac55b68a3',\n '0x829f35cebbcd47d3c120793c12f7a232c903138b':\n '0x956f47f50a910163d8bf957cf5846d573e7f87ca',\n '0xff386a3d08f80ac38c77930d173fa56c6286dc8b':\n '0x6810e776880c02933d47db1b9fc05908e5386b96',\n },\n};\n\nexport const TOKENS_GENERIC: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'AAVE', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n WETH: '0x0000000000000000000000000000000000000000',\n BAL: '0x0000000000000000000000000000000000000000',\n },\n};\n\nexport const TOKENS_MAP = {\n [Network.GOERLI]: TOKENS_GOERLI,\n [Network.MAINNET]: TOKENS_MAINNET,\n [Network.POLYGON]: TOKENS_POLYGON,\n [Network.ARBITRUM]: TOKENS_ARBITRUM,\n [Network.GNOSIS]: TOKENS_GNOSIS,\n};\n\nexport function TOKENS(networkId: Network): TokenConstants {\n const id = networkId as keyof typeof TOKENS_MAP;\n return TOKENS_MAP[id] ? TOKENS_MAP[id] : TOKENS_GENERIC;\n}\n","\"use strict\";\nlet _permanentCensorErrors = false;\nlet _censorErrors = false;\nconst LogLevels = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nlet _logLevel = LogLevels[\"default\"];\nimport { version } from \"./_version\";\nlet _globalLogger = null;\nfunction _checkNormalize() {\n try {\n const missing = [];\n // Make sure all forms of normalization are supported\n [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].forEach((form) => {\n try {\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad normalize\");\n }\n ;\n }\n catch (error) {\n missing.push(form);\n }\n });\n if (missing.length) {\n throw new Error(\"missing \" + missing.join(\", \"));\n }\n if (String.fromCharCode(0xe9).normalize(\"NFD\") !== String.fromCharCode(0x65, 0x0301)) {\n throw new Error(\"broken implementation\");\n }\n }\n catch (error) {\n return error.message;\n }\n return null;\n}\nconst _normalizeError = _checkNormalize();\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[\"DEBUG\"] = \"DEBUG\";\n LogLevel[\"INFO\"] = \"INFO\";\n LogLevel[\"WARNING\"] = \"WARNING\";\n LogLevel[\"ERROR\"] = \"ERROR\";\n LogLevel[\"OFF\"] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\nexport var ErrorCode;\n(function (ErrorCode) {\n ///////////////////\n // Generic Errors\n // Unknown Error\n ErrorCode[\"UNKNOWN_ERROR\"] = \"UNKNOWN_ERROR\";\n // Not Implemented\n ErrorCode[\"NOT_IMPLEMENTED\"] = \"NOT_IMPLEMENTED\";\n // Unsupported Operation\n // - operation\n ErrorCode[\"UNSUPPORTED_OPERATION\"] = \"UNSUPPORTED_OPERATION\";\n // Network Error (i.e. Ethereum Network, such as an invalid chain ID)\n // - event (\"noNetwork\" is not re-thrown in provider.ready; otherwise thrown)\n ErrorCode[\"NETWORK_ERROR\"] = \"NETWORK_ERROR\";\n // Some sort of bad response from the server\n ErrorCode[\"SERVER_ERROR\"] = \"SERVER_ERROR\";\n // Timeout\n ErrorCode[\"TIMEOUT\"] = \"TIMEOUT\";\n ///////////////////\n // Operational Errors\n // Buffer Overrun\n ErrorCode[\"BUFFER_OVERRUN\"] = \"BUFFER_OVERRUN\";\n // Numeric Fault\n // - operation: the operation being executed\n // - fault: the reason this faulted\n ErrorCode[\"NUMERIC_FAULT\"] = \"NUMERIC_FAULT\";\n ///////////////////\n // Argument Errors\n // Missing new operator to an object\n // - name: The name of the class\n ErrorCode[\"MISSING_NEW\"] = \"MISSING_NEW\";\n // Invalid argument (e.g. value is incompatible with type) to a function:\n // - argument: The argument name that was invalid\n // - value: The value of the argument\n ErrorCode[\"INVALID_ARGUMENT\"] = \"INVALID_ARGUMENT\";\n // Missing argument to a function:\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n ErrorCode[\"MISSING_ARGUMENT\"] = \"MISSING_ARGUMENT\";\n // Too many arguments\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n ErrorCode[\"UNEXPECTED_ARGUMENT\"] = \"UNEXPECTED_ARGUMENT\";\n ///////////////////\n // Blockchain Errors\n // Call exception\n // - transaction: the transaction\n // - address?: the contract address\n // - args?: The arguments passed into the function\n // - method?: The Solidity method signature\n // - errorSignature?: The EIP848 error signature\n // - errorArgs?: The EIP848 error parameters\n // - reason: The reason (only for EIP848 \"Error(string)\")\n ErrorCode[\"CALL_EXCEPTION\"] = \"CALL_EXCEPTION\";\n // Insufficient funds (< value + gasLimit * gasPrice)\n // - transaction: the transaction attempted\n ErrorCode[\"INSUFFICIENT_FUNDS\"] = \"INSUFFICIENT_FUNDS\";\n // Nonce has already been used\n // - transaction: the transaction attempted\n ErrorCode[\"NONCE_EXPIRED\"] = \"NONCE_EXPIRED\";\n // The replacement fee for the transaction is too low\n // - transaction: the transaction attempted\n ErrorCode[\"REPLACEMENT_UNDERPRICED\"] = \"REPLACEMENT_UNDERPRICED\";\n // The gas limit could not be estimated\n // - transaction: the transaction passed to estimateGas\n ErrorCode[\"UNPREDICTABLE_GAS_LIMIT\"] = \"UNPREDICTABLE_GAS_LIMIT\";\n // The transaction was replaced by one with a higher gas price\n // - reason: \"cancelled\", \"replaced\" or \"repriced\"\n // - cancelled: true if reason == \"cancelled\" or reason == \"replaced\")\n // - hash: original transaction hash\n // - replacement: the full TransactionsResponse for the replacement\n // - receipt: the receipt of the replacement\n ErrorCode[\"TRANSACTION_REPLACED\"] = \"TRANSACTION_REPLACED\";\n ///////////////////\n // Interaction Errors\n // The user rejected the action, such as signing a message or sending\n // a transaction\n ErrorCode[\"ACTION_REJECTED\"] = \"ACTION_REJECTED\";\n})(ErrorCode || (ErrorCode = {}));\n;\nconst HEX = \"0123456789abcdef\";\nexport class Logger {\n constructor(version) {\n Object.defineProperty(this, \"version\", {\n enumerable: true,\n value: version,\n writable: false\n });\n }\n _log(logLevel, args) {\n const level = logLevel.toLowerCase();\n if (LogLevels[level] == null) {\n this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n }\n if (_logLevel > LogLevels[level]) {\n return;\n }\n console.log.apply(console, args);\n }\n debug(...args) {\n this._log(Logger.levels.DEBUG, args);\n }\n info(...args) {\n this._log(Logger.levels.INFO, args);\n }\n warn(...args) {\n this._log(Logger.levels.WARNING, args);\n }\n makeError(message, code, params) {\n // Errors are being censored\n if (_censorErrors) {\n return this.makeError(\"censored error\", code, {});\n }\n if (!code) {\n code = Logger.errors.UNKNOWN_ERROR;\n }\n if (!params) {\n params = {};\n }\n const messageDetails = [];\n Object.keys(params).forEach((key) => {\n const value = params[key];\n try {\n if (value instanceof Uint8Array) {\n let hex = \"\";\n for (let i = 0; i < value.length; i++) {\n hex += HEX[value[i] >> 4];\n hex += HEX[value[i] & 0x0f];\n }\n messageDetails.push(key + \"=Uint8Array(0x\" + hex + \")\");\n }\n else {\n messageDetails.push(key + \"=\" + JSON.stringify(value));\n }\n }\n catch (error) {\n messageDetails.push(key + \"=\" + JSON.stringify(params[key].toString()));\n }\n });\n messageDetails.push(`code=${code}`);\n messageDetails.push(`version=${this.version}`);\n const reason = message;\n let url = \"\";\n switch (code) {\n case ErrorCode.NUMERIC_FAULT: {\n url = \"NUMERIC_FAULT\";\n const fault = message;\n switch (fault) {\n case \"overflow\":\n case \"underflow\":\n case \"division-by-zero\":\n url += \"-\" + fault;\n break;\n case \"negative-power\":\n case \"negative-width\":\n url += \"-unsupported\";\n break;\n case \"unbound-bitwise-result\":\n url += \"-unbound-result\";\n break;\n }\n break;\n }\n case ErrorCode.CALL_EXCEPTION:\n case ErrorCode.INSUFFICIENT_FUNDS:\n case ErrorCode.MISSING_NEW:\n case ErrorCode.NONCE_EXPIRED:\n case ErrorCode.REPLACEMENT_UNDERPRICED:\n case ErrorCode.TRANSACTION_REPLACED:\n case ErrorCode.UNPREDICTABLE_GAS_LIMIT:\n url = code;\n break;\n }\n if (url) {\n message += \" [ See: https:/\\/links.ethers.org/v5-errors-\" + url + \" ]\";\n }\n if (messageDetails.length) {\n message += \" (\" + messageDetails.join(\", \") + \")\";\n }\n // @TODO: Any??\n const error = new Error(message);\n error.reason = reason;\n error.code = code;\n Object.keys(params).forEach(function (key) {\n error[key] = params[key];\n });\n return error;\n }\n throwError(message, code, params) {\n throw this.makeError(message, code, params);\n }\n throwArgumentError(message, name, value) {\n return this.throwError(message, Logger.errors.INVALID_ARGUMENT, {\n argument: name,\n value: value\n });\n }\n assert(condition, message, code, params) {\n if (!!condition) {\n return;\n }\n this.throwError(message, code, params);\n }\n assertArgument(condition, message, name, value) {\n if (!!condition) {\n return;\n }\n this.throwArgumentError(message, name, value);\n }\n checkNormalize(message) {\n if (message == null) {\n message = \"platform missing String.prototype.normalize\";\n }\n if (_normalizeError) {\n this.throwError(\"platform missing String.prototype.normalize\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"String.prototype.normalize\", form: _normalizeError\n });\n }\n }\n checkSafeUint53(value, message) {\n if (typeof (value) !== \"number\") {\n return;\n }\n if (message == null) {\n message = \"value not safe\";\n }\n if (value < 0 || value >= 0x1fffffffffffff) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"out-of-safe-range\",\n value: value\n });\n }\n if (value % 1) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"non-integer\",\n value: value\n });\n }\n }\n checkArgumentCount(count, expectedCount, message) {\n if (message) {\n message = \": \" + message;\n }\n else {\n message = \"\";\n }\n if (count < expectedCount) {\n this.throwError(\"missing argument\" + message, Logger.errors.MISSING_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n if (count > expectedCount) {\n this.throwError(\"too many arguments\" + message, Logger.errors.UNEXPECTED_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n }\n checkNew(target, kind) {\n if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n checkAbstract(target, kind) {\n if (target === kind) {\n this.throwError(\"cannot instantiate abstract class \" + JSON.stringify(kind.name) + \" directly; use a sub-class\", Logger.errors.UNSUPPORTED_OPERATION, { name: target.name, operation: \"new\" });\n }\n else if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n static globalLogger() {\n if (!_globalLogger) {\n _globalLogger = new Logger(version);\n }\n return _globalLogger;\n }\n static setCensorship(censorship, permanent) {\n if (!censorship && permanent) {\n this.globalLogger().throwError(\"cannot permanently disable censorship\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n if (_permanentCensorErrors) {\n if (!censorship) {\n return;\n }\n this.globalLogger().throwError(\"error censorship permanent\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n _censorErrors = !!censorship;\n _permanentCensorErrors = !!permanent;\n }\n static setLogLevel(logLevel) {\n const level = LogLevels[logLevel.toLowerCase()];\n if (level == null) {\n Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n return;\n }\n _logLevel = level;\n }\n static from(version) {\n return new Logger(version);\n }\n}\nLogger.errors = ErrorCode;\nLogger.levels = LogLevel;\n//# sourceMappingURL=index.js.map","export const version = \"logger/5.7.0\";\n//# sourceMappingURL=_version.js.map","export const version = \"units/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { formatFixed, parseFixed } from \"@ethersproject/bignumber\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nconst names = [\n \"wei\",\n \"kwei\",\n \"mwei\",\n \"gwei\",\n \"szabo\",\n \"finney\",\n \"ether\",\n];\n// Some environments have issues with RegEx that contain back-tracking, so we cannot\n// use them.\nexport function commify(value) {\n const comps = String(value).split(\".\");\n if (comps.length > 2 || !comps[0].match(/^-?[0-9]*$/) || (comps[1] && !comps[1].match(/^[0-9]*$/)) || value === \".\" || value === \"-.\") {\n logger.throwArgumentError(\"invalid value\", \"value\", value);\n }\n // Make sure we have at least one whole digit (0 if none)\n let whole = comps[0];\n let negative = \"\";\n if (whole.substring(0, 1) === \"-\") {\n negative = \"-\";\n whole = whole.substring(1);\n }\n // Make sure we have at least 1 whole digit with no leading zeros\n while (whole.substring(0, 1) === \"0\") {\n whole = whole.substring(1);\n }\n if (whole === \"\") {\n whole = \"0\";\n }\n let suffix = \"\";\n if (comps.length === 2) {\n suffix = \".\" + (comps[1] || \"0\");\n }\n while (suffix.length > 2 && suffix[suffix.length - 1] === \"0\") {\n suffix = suffix.substring(0, suffix.length - 1);\n }\n const formatted = [];\n while (whole.length) {\n if (whole.length <= 3) {\n formatted.unshift(whole);\n break;\n }\n else {\n const index = whole.length - 3;\n formatted.unshift(whole.substring(index));\n whole = whole.substring(0, index);\n }\n }\n return negative + formatted.join(\",\") + suffix;\n}\nexport function formatUnits(value, unitName) {\n if (typeof (unitName) === \"string\") {\n const index = names.indexOf(unitName);\n if (index !== -1) {\n unitName = 3 * index;\n }\n }\n return formatFixed(value, (unitName != null) ? unitName : 18);\n}\nexport function parseUnits(value, unitName) {\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(\"value must be a string\", \"value\", value);\n }\n if (typeof (unitName) === \"string\") {\n const index = names.indexOf(unitName);\n if (index !== -1) {\n unitName = 3 * index;\n }\n }\n return parseFixed(value, (unitName != null) ? unitName : 18);\n}\nexport function formatEther(wei) {\n return formatUnits(wei, 18);\n}\nexport function parseEther(ether) {\n return parseUnits(ether, 18);\n}\n//# sourceMappingURL=index.js.map","import { Interface } from '@ethersproject/abi';\nimport { formatUnits } from '@ethersproject/units';\nimport { Multicall } from '@/contracts';\nimport { Network } from '@/types';\n\nexport const yieldTokens = {\n [Network.MAINNET]: {\n waUSDT: '0xf8fd466f12e236f4c96f7cce6c79eadb819abf58',\n waUSDC: '0xd093fa4fb80d09bb30817fdcd442d4d02ed3e5de',\n waDAI: '0x02d60b84491589974263d922d9cc7a3152618ef6',\n },\n [Network.POLYGON]: {\n wamDAI: '0xee029120c72b0607344f35b17cdd90025e647b00',\n wamUSDC: '0x221836a597948dce8f3568e044ff123108acc42a',\n wamUSDT: '0x19c60a251e525fa88cd6f3768416a8024e98fc19',\n },\n};\n\nexport const wrappedTokensMap = {\n [Network.MAINNET]: {\n // USDT\n [yieldTokens[Network.MAINNET].waUSDT]: {\n aToken: '0x3ed3b47dd13ec9a98b44e6204a523e766b225811',\n underlying: '0xdac17f958d2ee523a2206206994597c13d831ec7',\n },\n // USDC\n [yieldTokens[Network.MAINNET].waUSDC]: {\n aToken: '0xbcca60bb61934080951369a648fb03df4f96263c',\n underlying: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n },\n // DAI\n [yieldTokens[Network.MAINNET].waDAI]: {\n aToken: '0x028171bca77440897b824ca71d1c56cac55b68a3',\n underlying: '0x6b175474e89094c44da98b954eedeac495271d0f',\n },\n },\n [Network.POLYGON]: {\n // USDT\n [yieldTokens[Network.POLYGON].wamUSDT]: {\n aToken: '0x60d55f02a771d515e077c9c2403a1ef324885cec',\n underlying: '0xc2132d05d31c914a87c6611c10748aeb04b58e8f',\n },\n // USDC\n [yieldTokens[Network.POLYGON].wamUSDC]: {\n aToken: '0x1a13f4ca1d028320a707d99520abfefca3998b7f',\n underlying: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174',\n },\n // DAI\n [yieldTokens[Network.POLYGON].wamDAI]: {\n aToken: '0x27f8d03b3a2196956ed754badc28d73be8830a6e',\n underlying: '0x8f3cf7ad23cd3cadbd9735aff958023239c6a063',\n },\n },\n};\n\nconst wrappedATokenInterface = new Interface([\n 'function rate() view returns (uint256)',\n]);\n\nexport interface IAaveRates {\n getRate: (address: string) => Promise;\n}\n\nexport class AaveRates implements IAaveRates {\n rates?: Promise<{ [wrappedATokenAddress: string]: number }>;\n\n constructor(private multicall: Multicall, private network: Network) {}\n\n private async fetch(\n network: Network.MAINNET | Network.POLYGON\n ): Promise<{ [wrappedATokenAddress: string]: number }> {\n console.time('Fetching aave rates');\n const addresses = Object.values(yieldTokens[network]);\n const payload = addresses.map((wrappedATokenAddress) => ({\n target: wrappedATokenAddress,\n callData: wrappedATokenInterface.encodeFunctionData('rate', []),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const rates = addresses.reduce((p: { [key: string]: number }, a, i) => {\n p[a] ||= res[i] == '0x' ? 0 : parseFloat(formatUnits(res[i], 27));\n return p;\n }, {});\n console.timeEnd('Fetching aave rates');\n\n return rates;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async getRate(wrappedAToken: string): Promise {\n //To prevent bricked linear pools from effecting this call\n /*if (this.network != Network.MAINNET && this.network != Network.POLYGON) {\n return 1;\n }\n if (!Object.values(yieldTokens[this.network]).includes(wrappedAToken)) {\n return 1;\n }\n if (!this.rates) {\n this.rates = this.fetch(this.network);\n }\n\n return (await this.rates)[wrappedAToken];*/\n\n return 1;\n }\n}\n","import { Token, TokenPrices, Network } from '@/types';\nimport { TOKENS } from '@/lib/constants/tokens';\nimport { wrappedTokensMap as aaveWrappedMap } from '@/modules/data/token-prices/aave-rates';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\n\nexport function tokensToTokenPrices(tokens: Token[]): TokenPrices {\n const tokenPrices: TokenPrices = {};\n tokens.forEach((token) => {\n if (token.price) {\n tokenPrices[token.address] = token.price;\n }\n });\n\n return tokenPrices;\n}\n\nexport function tokenAddressForPricing(\n address: string,\n chainId: Network\n): string {\n let a = address.toLowerCase();\n a = addressMapIn(a, chainId);\n a = unwrapToken(a, chainId);\n\n return a;\n}\n\n/**\n * Maps testnet tokens, eg: on Göreli to a mainnet one.\n * Used to get the pricing information on networks not supported by a price feed.\n *\n * @param address Address on a testnet network\n */\nexport const addressMapIn = (address: string, chainId: Network): string => {\n const addressMap = TOKENS(chainId).PriceChainMap;\n return (addressMap && addressMap[address.toLowerCase()]) || address;\n};\n\n/**\n * Finds an underlying token address for a wrapped one\n *\n * @param wrappedAddress\n * @param chainId\n * @returns underlying token address\n */\nexport const unwrapToken = (\n wrappedAddress: string,\n chainId: Network\n): string => {\n const lowercase = wrappedAddress.toLocaleLowerCase();\n\n const aaveChain = chainId as keyof typeof aaveWrappedMap;\n if (\n aaveWrappedMap[aaveChain] != undefined &&\n aaveWrappedMap[aaveChain] != null\n ) {\n // Double if to avoid skipping just to at after compile: Object.keys()?.includes\n if (Object.keys(aaveWrappedMap[aaveChain]).includes(lowercase)) {\n return aaveWrappedMap[aaveChain][\n lowercase as keyof (typeof aaveWrappedMap)[typeof aaveChain]\n ].aToken;\n } else {\n return lowercase;\n }\n } else {\n return lowercase;\n }\n};\n\n// filter native asset (e.g. ETH) amounts\nexport const getEthValue = (tokens: string[], amounts: string[]): BigNumber => {\n const values = amounts.filter((amount, i) => tokens[i] === AddressZero);\n return values[0] ? BigNumber.from(values[0]) : BigNumber.from(0);\n};\n","/* eslint-disable @typescript-eslint/no-empty-function */\n\n/**\n * Debouncer for different attributes requested over time, which need to be aggregated into a single resolving call\n *\n * Choosing deferred promise since we have setTimeout that returns a promise\n * Some reference for history buffs: https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns\n */\n\ninterface Promised {\n promise: Promise;\n resolve: (value: T) => void;\n reject: (reason: unknown) => void;\n}\n\nconst makePromise = (): Promised => {\n let resolve: (value: T) => void = () => {};\n let reject: (reason: unknown) => void = () => {};\n const promise = new Promise((res, rej) => {\n [resolve, reject] = [res, rej];\n });\n return { promise, reject, resolve };\n};\n\n/**\n * Aggregates attributes and exectutes a debounced call\n *\n * @param fn Function to debounce\n * @param wait Debouncing waiting time [ms]\n * @param limit Maximum number of attributes to execute in one promise\n * @returns Debouncer instance\n */\nexport class Debouncer {\n requestSets = []>[]; // new Set(); // collection of requested attributes\n promisedCalls: Promised[] = []; // When requesting a price we return a deferred promise\n promisedCount = 0; // New request coming when setTimeout is executing will make a new promise\n timeout?: ReturnType;\n debounceCancel = (): void => {}; // Allow to cancel mid-flight requests\n\n constructor(\n private fn: (attrs: A[]) => Promise,\n private wait = 200,\n private limit = 100\n ) {}\n\n fetch(attr?: A): Promise {\n this.requestSets[this.promisedCount] ||= new Set();\n\n // Accumulate attributes for debounced execution\n if (attr) {\n this.requestSets[this.promisedCount].add(attr);\n }\n\n // Execute immediately when limit is reached\n if (this.requestSets[this.promisedCount].size >= this.limit) {\n return this.execute(0);\n }\n\n // Return a running promise\n if (this.promisedCalls[this.promisedCount]) {\n return this.promisedCalls[this.promisedCount].promise;\n }\n\n // If no promise is running, start a new one\n return this.execute(this.wait);\n }\n\n execute(timeout = 0): Promise {\n // if no promise is running, start a new one\n if (!this.promisedCalls[this.promisedCount]) {\n this.promisedCalls[this.promisedCount] = makePromise();\n }\n\n const { promise, resolve, reject } = this.promisedCalls[this.promisedCount];\n\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n\n const call = () => {\n const requestAttrs = [...this.requestSets[this.promisedCount]];\n this.promisedCount++;\n this.fn(requestAttrs)\n .then((results) => {\n resolve(results);\n this.debounceCancel = () => {};\n })\n .catch((reason) => {\n if (\n reason.response &&\n reason.response.data &&\n reason.response.data.error\n ) {\n reason = reason.response.data.error;\n }\n reject(reason);\n });\n };\n\n if (timeout > 0) {\n this.timeout = setTimeout(call.bind(this), timeout);\n } else {\n call();\n }\n\n this.debounceCancel = () => {\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n reject('Cancelled');\n delete this.promisedCalls[this.promisedCount];\n };\n\n return promise;\n }\n}\n","import {\n BigNumber,\n BigNumberish,\n parseFixed as _parseFixed,\n formatFixed as _formatFixed,\n} from '@ethersproject/bignumber';\n\n/**\n * Scales a number up by 10 ^ decimals. Also ensures the returned value is an\n * integer, any additional decimals post scaling are removed.\n * @param value The value to be scaled up\n * @param decimals The total decimal places / order of magnitude to scale by\n * @returns The scaled value\n */\nexport function parseFixed(value: string, decimals?: BigNumberish): BigNumber {\n const valueWithTrimmedDecimals = new RegExp(`[0-9]+\\\\.?[0-9]{0,${decimals}}`);\n const result = value.match(valueWithTrimmedDecimals);\n let parsedValue = value;\n if (result) {\n parsedValue = result[0];\n }\n\n return _parseFixed(parsedValue, decimals);\n}\n\n/**\n * Scales a number down by 10 ^ decimals. Also ensures the returned value doesn't\n * have a .0 at the end, so integers are returned as integers.\n * @param value The value to be scaled down\n * @param decimals The total decimal places / order of magnitude to scale down by\n * @returns The scaled value\n */\nexport function formatFixed(\n value: BigNumberish,\n decimals: BigNumberish\n): string {\n const ethersFormat = _formatFixed(value, decimals);\n return ethersFormat.replace(/(.0$)/, '');\n}\n\nexport function parseToBigInt18(value: string): bigint {\n return parseFixed(value, 18).toBigInt();\n}\n\nexport function formatFromBigInt18(value: bigint): string {\n return _formatFixed(BigNumber.from(value), 18);\n}\n\n/**\n * Like parseEther but for numbers. Converts floating point to BigNumber using 18 decimals\n */\nexport const bn = (value: number): BigNumber => _parseFixed(`${value}`, 18);\n","import { BigNumber } from '@ethersproject/bignumber';\n\nconst bpsPerOne = BigNumber.from('10000'); // number of basis points in 100%\n\n/**\n * Multiplies input by slippage amount\n *\n * @param amount Input amount (not parsed)\n * @param slippage Slippage value in bps - i.e. 50 = 0.5%\n * @returns Result delta from multiplying amount and slippage\n */\nexport const mulSlippage = (\n amount: BigNumber,\n slippage: BigNumber\n): BigNumber => {\n const delta = amount.mul(slippage).div(bpsPerOne);\n return delta;\n};\n\n/**\n * Reduce input amount by slippage factor\n *\n * @param amount Input in EVM amounts\n * @param slippage Slippage value in bps - i.e. 50 = 0.5%\n * @returns Result amount subtracting slippage\n */\nexport const subSlippage = (\n amount: BigNumber,\n slippage: BigNumber\n): BigNumber => {\n const delta = mulSlippage(amount, slippage);\n return amount.sub(delta);\n};\n\n/**\n * Increase input amount by slippage factor\n *\n * @param amount Input in EVM amounts\n * @param slippage Slippage value in bps - i.e. 50 = 0.5%\n * @returns Result amount adding slippage\n */\nexport const addSlippage = (\n amount: BigNumber,\n slippage: BigNumber\n): BigNumber => {\n const delta = mulSlippage(amount, slippage);\n return amount.add(delta);\n};\n","import { Address, PoolType } from '@/types';\nimport { getAddress } from '@ethersproject/address';\nimport { Log, TransactionReceipt } from '@ethersproject/providers';\nimport { Interface, LogDescription } from '@ethersproject/abi';\nimport { Logger } from '@/lib/utils/logger';\n\nexport * from './assetHelpers';\nexport * from './errors';\nexport * from './permit';\nexport * from './poolHelper';\nexport * from './signatures';\nexport * from './tokens';\nexport * from './debouncer';\nexport * from './math';\nexport * from './slippageHelper';\n\nexport const isSameAddress = (address1: string, address2: string): boolean =>\n getAddress(address1) === getAddress(address2);\n\nexport function insert(arr: T[], index: number, newItem: T): T[] {\n if (index < 0 || index > arr.length) {\n return arr;\n }\n return [\n // part of the array before the specified index\n ...arr.slice(0, index),\n // inserted item\n newItem,\n // part of the array after the specified index\n ...arr.slice(index),\n ];\n}\n\n/**\n * Returns a new array with item on the specified index replaced by newItem\n * @param arr\n * @param index\n * @param newItem\n */\nexport function replace(arr: T[], index: number, newItem: T): T[] {\n if (index < 0 || index >= arr.length) {\n return arr;\n }\n return [\n // part of the array before the specified index\n ...arr.slice(0, index),\n // inserted item\n newItem,\n // part of the array after the specified index\n ...arr.slice(index + 1),\n ];\n}\n\n/**\n * Removes item from array at specified index and returns new array. (Does not mutate original)\n * @param arr Original array\n * @param index Index of item to be removed\n * @returns New array with item at index removed\n */\nexport function removeItem(arr: T[], index: number): T[] {\n const newArray = [...arr];\n if (index < 0 || index >= arr.length) {\n return newArray;\n }\n newArray.splice(index, 1);\n return newArray;\n}\n\n/**\n * REORDER ARRAYS USING A REFERENCE AND ORIGINAL ARRAY,\n * Example:\n * Input -> reference: [c,b,a], original: [a,b,c], others: [[1,2,3], [4,5,6]]\n * Sorts like -> [[c,b,a],[3,2,1],[6,5,4]]\n * Returns -> [6,5,4]\n * @param reference\n * @param original\n * @param others\n * @returns Sorted others\n */\nexport function reorderArrays(\n reference: T[],\n original: T[],\n ...others: unknown[][]\n): unknown[][] {\n if (\n reference.length !== original.length ||\n others.some((arr) => arr.length !== original.length)\n ) {\n throw new Error('Array length mismatch');\n }\n const indexesOfOriginal = reference.map((value) => original.indexOf(value));\n if (indexesOfOriginal.indexOf(-1) >= 0) {\n throw new Error('Invalid reference or original array');\n }\n const othersResorted: unknown[][] = [];\n indexesOfOriginal.forEach((indexOfOriginal, i) => {\n others.forEach((arr, arrIndex) => {\n if (!othersResorted[arrIndex]) {\n othersResorted[arrIndex] = [];\n }\n othersResorted[arrIndex][i] = arr[indexOfOriginal];\n });\n });\n return othersResorted;\n}\n\nexport function isLinearish(poolType: string): boolean {\n const supportedPoolTypes: string[] = Object.values(PoolType);\n if (poolType.includes('Linear') && supportedPoolTypes.includes(poolType))\n return true;\n else return false;\n}\n\nexport function truncateAddresses(addresses: string[]): string[] {\n return addresses.map((t) => `${t.slice(0, 6)}...${t.slice(38, 42)}`);\n}\n\nexport const findEventInReceiptLogs = ({\n receipt,\n to,\n contractInterface,\n logName,\n}: {\n receipt: TransactionReceipt;\n to: Address;\n contractInterface: Interface;\n logName: string;\n}): LogDescription => {\n const event = receipt.logs\n .filter((log: Log) => {\n return isSameAddress(log.address, to);\n })\n .map((log) => {\n try {\n return contractInterface.parseLog(log);\n } catch (error) {\n const logger = Logger.getInstance();\n logger.warn(error as string);\n return null;\n }\n })\n .find((parsedLog) => parsedLog?.name === logName);\n if (!event) {\n throw new Error('Event not found in logs');\n }\n return event;\n};\n\nexport const getRandomBytes32 = (): string => {\n const getRandomBytes8 = () => Math.random().toString(16).slice(2, 10);\n const randomBytes32 = Array(8).fill(null).map(getRandomBytes8).join('');\n return `0x${randomBytes32}`;\n};\n","import { GraphQLArgs, GraphQLArgsFormatter } from '../types';\n\nexport class BalancerAPIArgsFormatter implements GraphQLArgsFormatter {\n format(args: GraphQLArgs): GraphQLArgs {\n return args;\n }\n}\n","import { GraphQLArgs, GraphQLArgsFormatter, GraphQLFilter } from '../types';\n\nexport class SubgraphArgsFormatter implements GraphQLArgsFormatter {\n operatorMap: Record;\n\n constructor() {\n this.operatorMap = {\n gt: '_gt',\n lt: '_lt',\n eq: '',\n in: '_in',\n not_in: '_not_in',\n contains: '_contains',\n };\n }\n\n format(args: GraphQLArgs): GraphQLArgs {\n const whereQuery: Record = {};\n if (args.where) {\n Object.entries(args.where).forEach(([name, filter]) => {\n Object.entries(filter).forEach(([operator, value]) => {\n whereQuery[`${name}${this.operatorMap[operator]}`] = value;\n });\n });\n }\n\n return {\n ...args,\n ...{ where: whereQuery },\n };\n }\n}\n","import { mergeWith } from 'lodash';\nimport { GraphQLArgs, GraphQLArgsFormatter } from './types';\n\nexport * from './formatters';\n\nexport class GraphQLArgsBuilder {\n constructor(readonly args: GraphQLArgs) {}\n\n merge(other: GraphQLArgsBuilder): GraphQLArgsBuilder {\n const mergedArgs = mergeWith(\n this.args,\n other.args,\n (objValue: unknown, srcValue: unknown) => {\n if (Array.isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n );\n\n return new GraphQLArgsBuilder(mergedArgs);\n }\n\n format(formatter: GraphQLArgsFormatter): unknown {\n return formatter.format(this.args);\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n AaveLinearPool,\n AaveLinearPoolInterface,\n} from \"../AaveLinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct AaveLinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class AaveLinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): AaveLinearPoolInterface {\n return new utils.Interface(_abi) as AaveLinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): AaveLinearPool {\n return new Contract(address, _abi, signerOrProvider) as AaveLinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n AaveLinearPoolFactory,\n AaveLinearPoolFactoryInterface,\n} from \"../AaveLinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"AaveLinearPoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract AaveLinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class AaveLinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): AaveLinearPoolFactoryInterface {\n return new utils.Interface(_abi) as AaveLinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): AaveLinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as AaveLinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { AaveWrapping, AaveWrappingInterface } from \"../AaveWrapping\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approveVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStaticATokenLM\",\n name: \"staticToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"toUnderlying\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapAaveStaticToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStaticATokenLM\",\n name: \"staticToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"fromUnderlying\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapAaveDynamicToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n] as const;\n\nexport class AaveWrapping__factory {\n static readonly abi = _abi;\n static createInterface(): AaveWrappingInterface {\n return new utils.Interface(_abi) as AaveWrappingInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): AaveWrapping {\n return new Contract(address, _abi, signerOrProvider) as AaveWrapping;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { Authoriser, AuthoriserInterface } from \"../Authoriser\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"admin\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"previousAdminRole\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"newAdminRole\",\n type: \"bytes32\",\n },\n ],\n name: \"RoleAdminChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"RoleGranted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"RoleRevoked\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DEFAULT_ADMIN_ROLE\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"actionId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"canPerform\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n ],\n name: \"getRoleAdmin\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n ],\n name: \"getRoleMember\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n ],\n name: \"getRoleMemberCount\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"grantRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"roles\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"grantRoles\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"roles\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"address[]\",\n name: \"accounts\",\n type: \"address[]\",\n },\n ],\n name: \"grantRolesToMany\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"hasRole\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"renounceRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"revokeRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"roles\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"revokeRoles\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"roles\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"address[]\",\n name: \"accounts\",\n type: \"address[]\",\n },\n ],\n name: \"revokeRolesFromMany\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class Authoriser__factory {\n static readonly abi = _abi;\n static createInterface(): AuthoriserInterface {\n return new utils.Interface(_abi) as AuthoriserInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): Authoriser {\n return new Contract(address, _abi, signerOrProvider) as Authoriser;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BalancerHelpers,\n BalancerHelpersInterface,\n} from \"../BalancerHelpers\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"_vault\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"minAmountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.ExitPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"maxAmountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.JoinPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"vault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class BalancerHelpers__factory {\n static readonly abi = _abi;\n static createInterface(): BalancerHelpersInterface {\n return new utils.Interface(_abi) as BalancerHelpersInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BalancerHelpers {\n return new Contract(address, _abi, signerOrProvider) as BalancerHelpers;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BalancerMinter,\n BalancerMinterInterface,\n} from \"../BalancerMinter\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IBalancerTokenAdmin\",\n name: \"tokenAdmin\",\n type: \"address\",\n },\n {\n internalType: \"contract IGaugeController\",\n name: \"gaugeController\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minted\",\n type: \"uint256\",\n },\n ],\n name: \"Minted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approval\",\n type: \"bool\",\n },\n ],\n name: \"MinterApprovalSet\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"allowed_to_mint_for\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBalancerToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBalancerTokenAdmin\",\n outputs: [\n {\n internalType: \"contract IBalancerTokenAdmin\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getGaugeController\",\n outputs: [\n {\n internalType: \"contract IGaugeController\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"getMinterApproval\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n ],\n name: \"mint\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"mintFor\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n ],\n name: \"mintMany\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"mintManyFor\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"mint_for\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[8]\",\n name: \"gauges\",\n type: \"address[8]\",\n },\n ],\n name: \"mint_many\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n ],\n name: \"minted\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approval\",\n type: \"bool\",\n },\n ],\n name: \"setMinterApproval\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approval\",\n type: \"bool\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"setMinterApprovalWithSignature\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n ],\n name: \"toggle_approve_mint\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class BalancerMinter__factory {\n static readonly abi = _abi;\n static createInterface(): BalancerMinterInterface {\n return new utils.Interface(_abi) as BalancerMinterInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BalancerMinter {\n return new Contract(address, _abi, signerOrProvider) as BalancerMinter;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BalancerPoolDataQueries,\n BalancerPoolDataQueriesInterface,\n} from \"../BalancerPoolDataQueries\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"_vault\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getAmpForPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getInRecoveryModeForPools\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"\",\n type: \"bool[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getIsPausedForPools\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"\",\n type: \"bool[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getLinearTargetsForPools\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"\",\n type: \"uint256[][]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getNormalizedWeightsForPools\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"\",\n type: \"uint256[][]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"poolIds\",\n type: \"bytes32[]\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"loadTokenBalanceUpdatesAfterBlock\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadTotalSupply\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadSwapFees\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadLinearWrappedTokenRates\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadLinearTargets\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadNormalizedWeights\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadScalingFactors\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadAmps\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadRates\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"enum TotalSupplyType[]\",\n name: \"totalSupplyTypes\",\n type: \"uint8[]\",\n },\n {\n internalType: \"enum SwapFeeType[]\",\n name: \"swapFeeTypes\",\n type: \"uint8[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"linearPoolIdxs\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"weightedPoolIdxs\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"scalingFactorPoolIdxs\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ampPoolIdxs\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ratePoolIdxs\",\n type: \"uint256[]\",\n },\n ],\n internalType: \"struct PoolDataQueryConfig\",\n name: \"config\",\n type: \"tuple\",\n },\n ],\n name: \"getPoolData\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"balances\",\n type: \"uint256[][]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"totalSupplies\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"swapFees\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"linearWrappedTokenRates\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[][]\",\n name: \"linearTargets\",\n type: \"uint256[][]\",\n },\n {\n internalType: \"uint256[][]\",\n name: \"weights\",\n type: \"uint256[][]\",\n },\n {\n internalType: \"uint256[][]\",\n name: \"scalingFactors\",\n type: \"uint256[][]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amps\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"rates\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ignoreIdxs\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"poolIds\",\n type: \"bytes32[]\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"loadInRecoveryMode\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadIsPaused\",\n type: \"bool\",\n },\n ],\n internalType: \"struct PoolStatusQueryConfig\",\n name: \"config\",\n type: \"tuple\",\n },\n ],\n name: \"getPoolStatus\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"isPaused\",\n type: \"bool[]\",\n },\n {\n internalType: \"bool[]\",\n name: \"inRecoveryMode\",\n type: \"bool[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"poolIds\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n ],\n name: \"getPoolTokenBalancesWithUpdatesAfterBlock\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"\",\n type: \"uint256[][]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getRateForPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getScalingFactorsForPools\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"\",\n type: \"uint256[][]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n {\n internalType: \"enum SwapFeeType[]\",\n name: \"swapFeeTypes\",\n type: \"uint8[]\",\n },\n ],\n name: \"getSwapFeePercentageForPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n {\n internalType: \"enum TotalSupplyType[]\",\n name: \"totalSupplyTypes\",\n type: \"uint8[]\",\n },\n ],\n name: \"getTotalSupplyForPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getWrappedTokenRateForLinearPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"vault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class BalancerPoolDataQueries__factory {\n static readonly abi = _abi;\n static createInterface(): BalancerPoolDataQueriesInterface {\n return new utils.Interface(_abi) as BalancerPoolDataQueriesInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BalancerPoolDataQueries {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as BalancerPoolDataQueries;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BalancerRelayer,\n BalancerRelayerInterface,\n} from \"../BalancerRelayer\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"libraryAddress\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [],\n name: \"getLibrary\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n ],\n name: \"multicall\",\n outputs: [\n {\n internalType: \"bytes[]\",\n name: \"results\",\n type: \"bytes[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n] as const;\n\nexport class BalancerRelayer__factory {\n static readonly abi = _abi;\n static createInterface(): BalancerRelayerInterface {\n return new utils.Interface(_abi) as BalancerRelayerInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BalancerRelayer {\n return new Contract(address, _abi, signerOrProvider) as BalancerRelayer;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BatchRelayerLibrary,\n BatchRelayerLibraryInterface,\n} from \"../BatchRelayerLibrary\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wstETH\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerMinter\",\n name: \"minter\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approveVault\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"assetInIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"assetOutIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.BatchSwapStep[]\",\n name: \"swaps\",\n type: \"tuple[]\",\n },\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"int256[]\",\n name: \"limits\",\n type: \"int256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"key\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct VaultActions.OutputReference[]\",\n name: \"outputReferences\",\n type: \"tuple[]\",\n },\n ],\n name: \"batchSwap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum VaultActions.PoolKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"minAmountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.ExitPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"key\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct VaultActions.OutputReference[]\",\n name: \"outputReferences\",\n type: \"tuple[]\",\n },\n ],\n name: \"exitPool\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStakingLiquidityGauge[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n ],\n name: \"gaugeClaimRewards\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStakingLiquidityGauge\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"gaugeDeposit\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"gaugeMint\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"approval\",\n type: \"bool\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"gaugeSetMinterApproval\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStakingLiquidityGauge\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"gaugeWithdraw\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getEntrypoint\",\n outputs: [\n {\n internalType: \"contract IBalancerRelayer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum VaultActions.PoolKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"maxAmountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.JoinPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"joinPool\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.UserBalanceOpKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"asset\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct IVault.UserBalanceOp[]\",\n name: \"ops\",\n type: \"tuple[]\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"manageUserBalance\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"ref\",\n type: \"uint256\",\n },\n ],\n name: \"peekChainedReferenceValue\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"relayer\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"authorisation\",\n type: \"bytes\",\n },\n ],\n name: \"setRelayerApproval\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"stakeETH\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"stakeETHAndWrap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.SingleSwap\",\n name: \"singleSwap\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"limit\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"swap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStaticATokenLM\",\n name: \"staticToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"toUnderlying\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapAaveStaticToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract ICToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapCompoundV2\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC4626\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapERC4626\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IEulerToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapEuler\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IGearboxDieselToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"dieselAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapGearbox\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IReaperTokenVault\",\n name: \"vaultToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapReaperVaultToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IShareToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapShareToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract ITetuSmartVault\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapTetu\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IUnbuttonToken\",\n name: \"wrapperToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapUnbuttonToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapWstETH\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IYearnTokenVault\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapYearn\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20Permit\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"vaultPermit\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20PermitDAI\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"holder\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"expiry\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"allowed\",\n type: \"bool\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"vaultPermitDAI\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStaticATokenLM\",\n name: \"staticToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"fromUnderlying\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapAaveDynamicToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract ICToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapCompoundV2\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC4626\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapERC4626\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IEulerToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"eulerProtocol\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapEuler\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IGearboxDieselToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"mainAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapGearbox\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IReaperTokenVault\",\n name: \"vaultToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapReaperVaultToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IShareToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapShareToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapStETH\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract ITetuSmartVault\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapTetu\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IUnbuttonToken\",\n name: \"wrapperToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"uAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapUnbuttonToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IYearnTokenVault\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapYearn\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n] as const;\n\nexport class BatchRelayerLibrary__factory {\n static readonly abi = _abi;\n static createInterface(): BatchRelayerLibraryInterface {\n return new utils.Interface(_abi) as BatchRelayerLibraryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BatchRelayerLibrary {\n return new Contract(address, _abi, signerOrProvider) as BatchRelayerLibrary;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ComposableStablePool,\n ComposableStablePoolInterface,\n} from \"../ComposableStablePool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"contract IRateProvider[]\",\n name: \"rateProviders\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"tokenRateCacheDurations\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bool[]\",\n name: \"exemptFromYieldProtocolFeeFlags\",\n type: \"bool[]\",\n },\n {\n internalType: \"uint256\",\n name: \"amplificationParameter\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n internalType: \"struct ComposableStablePool.NewPoolParams\",\n name: \"params\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"startValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"endValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n ],\n name: \"AmpUpdateStarted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"currentValue\",\n type: \"uint256\",\n },\n ],\n name: \"AmpUpdateStopped\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"feeType\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"protocolFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"ProtocolFeePercentageCacheUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenIndex\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"rate\",\n type: \"uint256\",\n },\n ],\n name: \"TokenRateCacheUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenIndex\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"contract IRateProvider\",\n name: \"provider\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"cacheDuration\",\n type: \"uint256\",\n },\n ],\n name: \"TokenRateProviderSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getActualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAmplificationParameter\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"isUpdating\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"precision\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastJoinExitData\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lastJoinExitAmplification\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"lastPostJoinExitInvariant\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMinimumBpt\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"feeType\",\n type: \"uint256\",\n },\n ],\n name: \"getProtocolFeePercentageCache\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolSwapFeeDelegation\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRateProviders\",\n outputs: [\n {\n internalType: \"contract IRateProvider[]\",\n name: \"\",\n type: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"getTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"getTokenRateCache\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"rate\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"oldRate\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"isTokenExemptFromYieldProtocolFee\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"swapRequest\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"poolConfig\",\n type: \"bytes\",\n },\n ],\n name: \"setAssetManagerPoolConfig\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"setTokenRateCacheDuration\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"rawEndValue\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n ],\n name: \"startAmplificationParameterUpdate\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"stopAmplificationParameterUpdate\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"updateProtocolFeePercentageCache\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"updateTokenRateCache\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class ComposableStablePool__factory {\n static readonly abi = _abi;\n static createInterface(): ComposableStablePoolInterface {\n return new utils.Interface(_abi) as ComposableStablePoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ComposableStablePool {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as ComposableStablePool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ComposableStablePoolFactory,\n ComposableStablePoolFactoryInterface,\n} from \"../ComposableStablePoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"amplificationParameter\",\n type: \"uint256\",\n },\n {\n internalType: \"contract IRateProvider[]\",\n name: \"rateProviders\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"tokenRateCacheDurations\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bool[]\",\n name: \"exemptFromYieldProtocolFeeFlags\",\n type: \"bool[]\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract ComposableStablePool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class ComposableStablePoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): ComposableStablePoolFactoryInterface {\n return new utils.Interface(_abi) as ComposableStablePoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ComposableStablePoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as ComposableStablePoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ConvergentCurvePool,\n ConvergentCurvePoolInterface,\n} from \"../ConvergentCurvePool\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"_underlying\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"_bond\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_expiration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_unitSeconds\",\n type: \"uint256\",\n },\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_percentFee\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_percentFeeGov\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"_governance\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"collectedBase\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"collectedBond\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"remainingBase\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"remainingBond\",\n type: \"uint256\",\n },\n ],\n name: \"FeeCollection\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"FEE_BOUND\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"bond\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"bondDecimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseApproval\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"expiration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"feesBond\",\n outputs: [\n {\n internalType: \"uint128\",\n name: \"\",\n type: \"uint128\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"feesUnderlying\",\n outputs: [\n {\n internalType: \"uint128\",\n name: \"\",\n type: \"uint128\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"governance\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"increaseApproval\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"currentBalances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFee\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"currentBalances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFee\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"swapRequest\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"currentBalanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"currentBalanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"percentFee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"percentFeeGov\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"amountX\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"reserveX\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"reserveY\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"out\",\n type: \"bool\",\n },\n ],\n name: \"solveTradeInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"underlying\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"underlyingDecimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unitSeconds\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class ConvergentCurvePool__factory {\n static readonly abi = _abi;\n static createInterface(): ConvergentCurvePoolInterface {\n return new utils.Interface(_abi) as ConvergentCurvePoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ConvergentCurvePool {\n return new Contract(address, _abi, signerOrProvider) as ConvergentCurvePool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { ERC20, ERC20Interface } from \"../ERC20\";\n\nconst _abi = [\n {\n constant: true,\n inputs: [],\n name: \"name\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n },\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n name: \"\",\n type: \"uint8\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n name: \"balance\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n {\n name: \"_spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n payable: true,\n stateMutability: \"payable\",\n type: \"fallback\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n] as const;\n\nexport class ERC20__factory {\n static readonly abi = _abi;\n static createInterface(): ERC20Interface {\n return new utils.Interface(_abi) as ERC20Interface;\n }\n static connect(address: string, signerOrProvider: Signer | Provider): ERC20 {\n return new Contract(address, _abi, signerOrProvider) as ERC20;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ERC4626LinearPool,\n ERC4626LinearPoolInterface,\n} from \"../ERC4626LinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct ERC4626LinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class ERC4626LinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): ERC4626LinearPoolInterface {\n return new utils.Interface(_abi) as ERC4626LinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ERC4626LinearPool {\n return new Contract(address, _abi, signerOrProvider) as ERC4626LinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ERC4626LinearPoolFactory,\n ERC4626LinearPoolFactoryInterface,\n} from \"../ERC4626LinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"Erc4626LinearPoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract LinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class ERC4626LinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): ERC4626LinearPoolFactoryInterface {\n return new utils.Interface(_abi) as ERC4626LinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ERC4626LinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as ERC4626LinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n EulerLinearPool,\n EulerLinearPoolInterface,\n} from \"../EulerLinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct EulerLinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class EulerLinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): EulerLinearPoolInterface {\n return new utils.Interface(_abi) as EulerLinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): EulerLinearPool {\n return new Contract(address, _abi, signerOrProvider) as EulerLinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n EulerLinearPoolFactory,\n EulerLinearPoolFactoryInterface,\n} from \"../EulerLinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"_eulerProtocol\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"EulerLinearPoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract LinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"eulerProtocol\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class EulerLinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): EulerLinearPoolFactoryInterface {\n return new utils.Interface(_abi) as EulerLinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): EulerLinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as EulerLinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { FXPool, FXPoolInterface } from \"../FXPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"_assetsToRegister\",\n type: \"address[]\",\n },\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_protocolPercentFee\",\n type: \"uint256\",\n },\n {\n internalType: \"string\",\n name: \"_name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"_symbol\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"numeraire\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"reserve\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"weight\",\n type: \"uint256\",\n },\n ],\n name: \"AssetIncluded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"derivative\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"numeraire\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"reserve\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"assimilator\",\n type: \"address\",\n },\n ],\n name: \"AssimilatorIncluded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newCollector\",\n type: \"address\",\n },\n ],\n name: \"ChangeCollectorAddress\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"isEmergency\",\n type: \"bool\",\n },\n ],\n name: \"EmergencyAlarm\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lptAmountBurned\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"amountsWithdrawn\",\n type: \"uint256[]\",\n },\n ],\n name: \"EmergencyWithdraw\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"feesCollected\",\n type: \"uint256\",\n },\n ],\n name: \"FeesAccrued\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"feesCollected\",\n type: \"uint256\",\n },\n ],\n name: \"FeesCollected\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lptAmountBurned\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"amountsWithdrawn\",\n type: \"uint256[]\",\n },\n ],\n name: \"OnExitPool\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lptAmountMinted\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"amountsDeposited\",\n type: \"uint256[]\",\n },\n ],\n name: \"OnJoinPool\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"alpha\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"beta\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"delta\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"epsilon\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lambda\",\n type: \"uint256\",\n },\n ],\n name: \"ParametersSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Paused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"updater\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newProtocolPercentage\",\n type: \"uint256\",\n },\n ],\n name: \"ProtocolFeeShareUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"trader\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"origin\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"originAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"targetAmount\",\n type: \"uint256\",\n },\n ],\n name: \"Trade\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Unpaused\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_derivative\",\n type: \"address\",\n },\n ],\n name: \"assimilator\",\n outputs: [\n {\n internalType: \"address\",\n name: \"assimilator_\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"collectorAddress\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"curve\",\n outputs: [\n {\n internalType: \"int128\",\n name: \"alpha\",\n type: \"int128\",\n },\n {\n internalType: \"int128\",\n name: \"beta\",\n type: \"int128\",\n },\n {\n internalType: \"int128\",\n name: \"delta\",\n type: \"int128\",\n },\n {\n internalType: \"int128\",\n name: \"epsilon\",\n type: \"int128\",\n },\n {\n internalType: \"int128\",\n name: \"lambda\",\n type: \"int128\",\n },\n {\n internalType: \"uint256\",\n name: \"cap\",\n type: \"uint256\",\n },\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"fxPoolAddress\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"derivatives\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"emergency\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"_assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"_assetWeights\",\n type: \"uint256[]\",\n },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"liquidity\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"total_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"individual_\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"numeraires\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"swapRequest\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paused\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"protocolPercentFee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"reserves\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_cap\",\n type: \"uint256\",\n },\n ],\n name: \"setCap\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_collectorAddress\",\n type: \"address\",\n },\n ],\n name: \"setCollectorAddress\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"_emergency\",\n type: \"bool\",\n },\n ],\n name: \"setEmergency\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_alpha\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_beta\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_feeAtHalt\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_epsilon\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_lambda\",\n type: \"uint256\",\n },\n ],\n name: \"setParams\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_protocolPercentFee\",\n type: \"uint256\",\n },\n ],\n name: \"setProtocolPercentFee\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalUnclaimedFeesInNumeraire\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"totalDepositNumeraire\",\n type: \"uint256\",\n },\n ],\n name: \"viewDeposit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"viewParameters\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"alpha_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"beta_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"delta_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"epsilon_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"lambda_\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_curvesToBurn\",\n type: \"uint256\",\n },\n ],\n name: \"viewWithdraw\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class FXPool__factory {\n static readonly abi = _abi;\n static createInterface(): FXPoolInterface {\n return new utils.Interface(_abi) as FXPoolInterface;\n }\n static connect(address: string, signerOrProvider: Signer | Provider): FXPool {\n return new Contract(address, _abi, signerOrProvider) as FXPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n GaugeClaimHelper,\n GaugeClaimHelperInterface,\n} from \"../GaugeClaimHelper\";\n\nconst _abi = [\n {\n inputs: [],\n name: \"CLAIM_FREQUENCY\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IRewardsOnlyGauge\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"claimRewardsFromGauge\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IRewardsOnlyGauge[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"claimRewardsFromGauges\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IRewardsOnlyGauge\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"getPendingRewards\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class GaugeClaimHelper__factory {\n static readonly abi = _abi;\n static createInterface(): GaugeClaimHelperInterface {\n return new utils.Interface(_abi) as GaugeClaimHelperInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GaugeClaimHelper {\n return new Contract(address, _abi, signerOrProvider) as GaugeClaimHelper;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n GearboxLinearPool,\n GearboxLinearPoolInterface,\n} from \"../GearboxLinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct GearboxLinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class GearboxLinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): GearboxLinearPoolInterface {\n return new utils.Interface(_abi) as GearboxLinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GearboxLinearPool {\n return new Contract(address, _abi, signerOrProvider) as GearboxLinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n GearboxLinearPoolFactory,\n GearboxLinearPoolFactoryInterface,\n} from \"../GearboxLinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"GearboxLinearPoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract GearboxLinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class GearboxLinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): GearboxLinearPoolFactoryInterface {\n return new utils.Interface(_abi) as GearboxLinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GearboxLinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as GearboxLinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { GyroConfig, GyroConfigInterface } from \"../GyroConfig\";\n\nconst _abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"previousValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newValue\",\n type: \"uint256\",\n },\n ],\n name: \"ConfigChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"ConfigFrozen\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"ConfigUnset\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newGovernor\",\n type: \"address\",\n },\n ],\n name: \"GovernorChangeRequested\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"oldGovernor\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"newGovernor\",\n type: \"address\",\n },\n ],\n name: \"GovernorChanged\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"acceptGovernance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newGovernor\",\n type: \"address\",\n },\n ],\n name: \"changeGovernor\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"freeze\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"defaultValue\",\n type: \"address\",\n },\n ],\n name: \"getAddress\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"getAddress\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"getConfigMeta\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"getUint\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"governor\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"hasKey\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_governor\",\n type: \"address\",\n },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"listKeys\",\n outputs: [\n {\n internalType: \"bytes32[]\",\n name: \"\",\n type: \"bytes32[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pendingGovernor\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"newValue\",\n type: \"address\",\n },\n ],\n name: \"setAddress\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"newValue\",\n type: \"uint256\",\n },\n ],\n name: \"setUint\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"unset\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class GyroConfig__factory {\n static readonly abi = _abi;\n static createInterface(): GyroConfigInterface {\n return new utils.Interface(_abi) as GyroConfigInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GyroConfig {\n return new Contract(address, _abi, signerOrProvider) as GyroConfig;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { LidoRelayer, LidoRelayerInterface } from \"../LidoRelayer\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IwstETH\",\n name: \"wstETH\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"assetInIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"assetOutIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.BatchSwapStep[]\",\n name: \"swaps\",\n type: \"tuple[]\",\n },\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"int256[]\",\n name: \"limits\",\n type: \"int256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n ],\n name: \"batchSwap\",\n outputs: [\n {\n internalType: \"int256[]\",\n name: \"swapAmounts\",\n type: \"int256[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"minAmountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.ExitPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"exitPool\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getStETH\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWstETH\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"maxAmountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.JoinPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"joinPool\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.SingleSwap\",\n name: \"singleSwap\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"limit\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n ],\n name: \"swap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"swapAmount\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n] as const;\n\nexport class LidoRelayer__factory {\n static readonly abi = _abi;\n static createInterface(): LidoRelayerInterface {\n return new utils.Interface(_abi) as LidoRelayerInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): LidoRelayer {\n return new Contract(address, _abi, signerOrProvider) as LidoRelayer;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { LinearPool, LinearPoolInterface } from \"../LinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"poolConfig\",\n type: \"bytes\",\n },\n ],\n name: \"setAssetManagerPoolConfig\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class LinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): LinearPoolInterface {\n return new utils.Interface(_abi) as LinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): LinearPool {\n return new Contract(address, _abi, signerOrProvider) as LinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n LiquidityGaugeV5,\n LiquidityGaugeV5Interface,\n} from \"../LiquidityGaugeV5\";\n\nconst _abi = [\n {\n name: \"Deposit\",\n inputs: [\n {\n name: \"provider\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Withdraw\",\n inputs: [\n {\n name: \"provider\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"UpdateLiquidityLimit\",\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"original_balance\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"original_supply\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"working_balance\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"working_supply\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Transfer\",\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"_to\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"_value\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Approval\",\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"_spender\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"_value\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n inputs: [\n {\n name: \"minter\",\n type: \"address\",\n },\n {\n name: \"veBoostProxy\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_addr\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_claim_rewards\",\n type: \"bool\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"withdraw\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"withdraw\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_claim_rewards\",\n type: \"bool\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"claim_rewards\",\n inputs: [],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"claim_rewards\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"claim_rewards\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_receiver\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"transferFrom\",\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n },\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"transfer\",\n inputs: [\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"approve\",\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"permit\",\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_deadline\",\n type: \"uint256\",\n },\n {\n name: \"_v\",\n type: \"uint8\",\n },\n {\n name: \"_r\",\n type: \"bytes32\",\n },\n {\n name: \"_s\",\n type: \"bytes32\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"increaseAllowance\",\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_added_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"decreaseAllowance\",\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_subtracted_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"user_checkpoint\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"set_rewards_receiver\",\n inputs: [\n {\n name: \"_receiver\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"kick\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit_reward_token\",\n inputs: [\n {\n name: \"_reward_token\",\n type: \"address\",\n },\n {\n name: \"_amount\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"add_reward\",\n inputs: [\n {\n name: \"_reward_token\",\n type: \"address\",\n },\n {\n name: \"_distributor\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"set_reward_distributor\",\n inputs: [\n {\n name: \"_reward_token\",\n type: \"address\",\n },\n {\n name: \"_distributor\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"set_killed\",\n inputs: [\n {\n name: \"_is_killed\",\n type: \"bool\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"claimed_reward\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_token\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"claimable_reward\",\n inputs: [\n {\n name: \"_user\",\n type: \"address\",\n },\n {\n name: \"_reward_token\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"claimable_reward_write\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_token\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"claimable_tokens\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_checkpoint\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"future_epoch_time\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"inflation_rate\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"decimals\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"version\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"allowance\",\n inputs: [\n {\n name: \"owner\",\n type: \"address\",\n },\n {\n name: \"spender\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"initialize\",\n inputs: [\n {\n name: \"_lp_token\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"balanceOf\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"totalSupply\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"name\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"symbol\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"DOMAIN_SEPARATOR\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"bytes32\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"nonces\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"factory\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"lp_token\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"is_killed\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"reward_count\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"reward_data\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n {\n name: \"token\",\n type: \"address\",\n },\n {\n name: \"distributor\",\n type: \"address\",\n },\n {\n name: \"period_finish\",\n type: \"uint256\",\n },\n {\n name: \"rate\",\n type: \"uint256\",\n },\n {\n name: \"last_update\",\n type: \"uint256\",\n },\n {\n name: \"integral\",\n type: \"uint256\",\n },\n ],\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"rewards_receiver\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"reward_integral_for\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n {\n name: \"arg1\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"working_balances\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"working_supply\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_inv_supply_of\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_checkpoint_of\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_fraction\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"period\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"int128\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"reward_tokens\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"period_timestamp\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_inv_supply\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n] as const;\n\nexport class LiquidityGaugeV5__factory {\n static readonly abi = _abi;\n static createInterface(): LiquidityGaugeV5Interface {\n return new utils.Interface(_abi) as LiquidityGaugeV5Interface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): LiquidityGaugeV5 {\n return new Contract(address, _abi, signerOrProvider) as LiquidityGaugeV5;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { Multicall, MulticallInterface } from \"../Multicall\";\n\nconst _abi = [\n {\n constant: false,\n inputs: [\n {\n components: [\n {\n name: \"target\",\n type: \"address\",\n },\n {\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate\",\n outputs: [\n {\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n name: \"returnData\",\n type: \"bytes[]\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class Multicall__factory {\n static readonly abi = _abi;\n static createInterface(): MulticallInterface {\n return new utils.Interface(_abi) as MulticallInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): Multicall {\n return new Contract(address, _abi, signerOrProvider) as Multicall;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { Multicall3, Multicall3Interface } from \"../Multicall3\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes[]\",\n name: \"returnData\",\n type: \"bytes[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"allowFailure\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call3[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate3\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"allowFailure\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call3Value[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate3Value\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"blockAndAggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBasefee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"basefee\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n ],\n name: \"getBlockHash\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBlockNumber\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getChainId\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"chainid\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockCoinbase\",\n outputs: [\n {\n internalType: \"address\",\n name: \"coinbase\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockDifficulty\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"difficulty\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockGasLimit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"gaslimit\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockTimestamp\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"timestamp\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"addr\",\n type: \"address\",\n },\n ],\n name: \"getEthBalance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"balance\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastBlockHash\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"requireSuccess\",\n type: \"bool\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"tryAggregate\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"requireSuccess\",\n type: \"bool\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"tryBlockAndAggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n] as const;\n\nexport class Multicall3__factory {\n static readonly abi = _abi;\n static createInterface(): Multicall3Interface {\n return new utils.Interface(_abi) as Multicall3Interface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): Multicall3 {\n return new Contract(address, _abi, signerOrProvider) as Multicall3;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { StablePool, StablePoolInterface } from \"../StablePool\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"amplificationParameter\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"startValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"endValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n ],\n name: \"AmpUpdateStarted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"currentValue\",\n type: \"uint256\",\n },\n ],\n name: \"AmpUpdateStopped\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAmplificationParameter\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"isUpdating\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"precision\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"swapRequest\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"poolConfig\",\n type: \"bytes\",\n },\n ],\n name: \"setAssetManagerPoolConfig\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"rawEndValue\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n ],\n name: \"startAmplificationParameterUpdate\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"stopAmplificationParameterUpdate\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class StablePool__factory {\n static readonly abi = _abi;\n static createInterface(): StablePoolInterface {\n return new utils.Interface(_abi) as StablePoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): StablePool {\n return new Contract(address, _abi, signerOrProvider) as StablePool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n StaticATokenRateProvider,\n StaticATokenRateProviderInterface,\n} from \"../StaticATokenRateProvider\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IStaticAToken\",\n name: \"_waToken\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"waToken\",\n outputs: [\n {\n internalType: \"contract IStaticAToken\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class StaticATokenRateProvider__factory {\n static readonly abi = _abi;\n static createInterface(): StaticATokenRateProviderInterface {\n return new utils.Interface(_abi) as StaticATokenRateProviderInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): StaticATokenRateProvider {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as StaticATokenRateProvider;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { Vault, VaultInterface } from \"../Vault\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"authorizer\",\n type: \"address\",\n },\n {\n internalType: \"contract IWETH\",\n name: \"weth\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IAuthorizer\",\n name: \"newAuthorizer\",\n type: \"address\",\n },\n ],\n name: \"AuthorizerChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"ExternalBalanceTransfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IFlashLoanRecipient\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"feeAmount\",\n type: \"uint256\",\n },\n ],\n name: \"FlashLoan\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"int256\",\n name: \"delta\",\n type: \"int256\",\n },\n ],\n name: \"InternalBalanceChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"liquidityProvider\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n indexed: false,\n internalType: \"int256[]\",\n name: \"deltas\",\n type: \"int256[]\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"protocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n name: \"PoolBalanceChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"int256\",\n name: \"cashDelta\",\n type: \"int256\",\n },\n {\n indexed: false,\n internalType: \"int256\",\n name: \"managedDelta\",\n type: \"int256\",\n },\n ],\n name: \"PoolBalanceManaged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"poolAddress\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"enum IVault.PoolSpecialization\",\n name: \"specialization\",\n type: \"uint8\",\n },\n ],\n name: \"PoolRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"relayer\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"RelayerApprovalChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amountIn\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amountOut\",\n type: \"uint256\",\n },\n ],\n name: \"Swap\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n ],\n name: \"TokensDeregistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n indexed: false,\n internalType: \"address[]\",\n name: \"assetManagers\",\n type: \"address[]\",\n },\n ],\n name: \"TokensRegistered\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"WETH\",\n outputs: [\n {\n internalType: \"contract IWETH\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"assetInIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"assetOutIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.BatchSwapStep[]\",\n name: \"swaps\",\n type: \"tuple[]\",\n },\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"int256[]\",\n name: \"limits\",\n type: \"int256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n ],\n name: \"batchSwap\",\n outputs: [\n {\n internalType: \"int256[]\",\n name: \"assetDeltas\",\n type: \"int256[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n ],\n name: \"deregisterTokens\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"minAmountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.ExitPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"exitPool\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IFlashLoanRecipient\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amounts\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"flashLoan\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n ],\n name: \"getInternalBalance\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n ],\n name: \"getPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"enum IVault.PoolSpecialization\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"getPoolTokenInfo\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"cash\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"managed\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n ],\n name: \"getPoolTokens\",\n outputs: [\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract ProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"relayer\",\n type: \"address\",\n },\n ],\n name: \"hasApprovedRelayer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"maxAmountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.JoinPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"joinPool\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.PoolBalanceOpKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IVault.PoolBalanceOp[]\",\n name: \"ops\",\n type: \"tuple[]\",\n },\n ],\n name: \"managePoolBalance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.UserBalanceOpKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"asset\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct IVault.UserBalanceOp[]\",\n name: \"ops\",\n type: \"tuple[]\",\n },\n ],\n name: \"manageUserBalance\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"assetInIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"assetOutIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.BatchSwapStep[]\",\n name: \"swaps\",\n type: \"tuple[]\",\n },\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n ],\n name: \"queryBatchSwap\",\n outputs: [\n {\n internalType: \"int256[]\",\n name: \"\",\n type: \"int256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.PoolSpecialization\",\n name: \"specialization\",\n type: \"uint8\",\n },\n ],\n name: \"registerPool\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"address[]\",\n name: \"assetManagers\",\n type: \"address[]\",\n },\n ],\n name: \"registerTokens\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"newAuthorizer\",\n type: \"address\",\n },\n ],\n name: \"setAuthorizer\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"relayer\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"setRelayerApproval\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.SingleSwap\",\n name: \"singleSwap\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"limit\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n ],\n name: \"swap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"amountCalculated\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n] as const;\n\nexport class Vault__factory {\n static readonly abi = _abi;\n static createInterface(): VaultInterface {\n return new utils.Interface(_abi) as VaultInterface;\n }\n static connect(address: string, signerOrProvider: Signer | Provider): Vault {\n return new Contract(address, _abi, signerOrProvider) as Vault;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { WeightedPool, WeightedPoolInterface } from \"../WeightedPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"normalizedWeights\",\n type: \"uint256[]\",\n },\n {\n internalType: \"contract IRateProvider[]\",\n name: \"rateProviders\",\n type: \"address[]\",\n },\n {\n internalType: \"address[]\",\n name: \"assetManagers\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct WeightedPool.NewPoolParams\",\n name: \"params\",\n type: \"tuple\",\n },\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"feeType\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"protocolFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"ProtocolFeePercentageCacheUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getATHRateProduct\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getActualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastPostJoinExitInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getNormalizedWeights\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"feeType\",\n type: \"uint256\",\n },\n ],\n name: \"getProtocolFeePercentageCache\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolSwapFeeDelegation\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRateProviders\",\n outputs: [\n {\n internalType: \"contract IRateProvider[]\",\n name: \"\",\n type: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"poolConfig\",\n type: \"bytes\",\n },\n ],\n name: \"setAssetManagerPoolConfig\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"updateProtocolFeePercentageCache\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class WeightedPool__factory {\n static readonly abi = _abi;\n static createInterface(): WeightedPoolInterface {\n return new utils.Interface(_abi) as WeightedPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): WeightedPool {\n return new Contract(address, _abi, signerOrProvider) as WeightedPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n WeightedPoolFactory,\n WeightedPoolFactoryInterface,\n} from \"../WeightedPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"normalizedWeights\",\n type: \"uint256[]\",\n },\n {\n internalType: \"contract IRateProvider[]\",\n name: \"rateProviders\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class WeightedPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): WeightedPoolFactoryInterface {\n return new utils.Interface(_abi) as WeightedPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): WeightedPoolFactory {\n return new Contract(address, _abi, signerOrProvider) as WeightedPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n YearnLinearPool,\n YearnLinearPoolInterface,\n} from \"../YearnLinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct YearnLinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class YearnLinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): YearnLinearPoolInterface {\n return new utils.Interface(_abi) as YearnLinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): YearnLinearPool {\n return new Contract(address, _abi, signerOrProvider) as YearnLinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n YearnLinearPoolFactory,\n YearnLinearPoolFactoryInterface,\n} from \"../YearnLinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"YearnLinearPoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract LinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class YearnLinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): YearnLinearPoolFactoryInterface {\n return new utils.Interface(_abi) as YearnLinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): YearnLinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as YearnLinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { GyroEV2, GyroEV2Interface, GyroECLPPool } from \"../GyroEV2\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"token0\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"token1\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"oracleEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n internalType: \"struct ExtensibleWeightedPool2Tokens.NewPoolParams\",\n name: \"baseParams\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"int256\",\n name: \"alpha\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"beta\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"c\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"s\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"lambda\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Params\",\n name: \"eclpParams\",\n type: \"tuple\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"tauAlpha\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"tauBeta\",\n type: \"tuple\",\n },\n {\n internalType: \"int256\",\n name: \"u\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"v\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"w\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"z\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"dSq\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.DerivedParams\",\n name: \"derivedEclpParams\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"rateProvider0\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"rateProvider1\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"capManager\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"capEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint120\",\n name: \"perAddressCap\",\n type: \"uint120\",\n },\n {\n internalType: \"uint128\",\n name: \"globalCap\",\n type: \"uint128\",\n },\n ],\n internalType: \"struct ICappedLiquidity.CapParams\",\n name: \"capParams\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"pauseManager\",\n type: \"address\",\n },\n ],\n internalType: \"struct GyroECLPPool.GyroParams\",\n name: \"params\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"configAddress\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"capManager\",\n type: \"address\",\n },\n ],\n name: \"CapManagerUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"capEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint120\",\n name: \"perAddressCap\",\n type: \"uint120\",\n },\n {\n internalType: \"uint128\",\n name: \"globalCap\",\n type: \"uint128\",\n },\n ],\n indexed: false,\n internalType: \"struct ICappedLiquidity.CapParams\",\n name: \"params\",\n type: \"tuple\",\n },\n ],\n name: \"CapParamsUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"derivedParamsValidated\",\n type: \"bool\",\n },\n ],\n name: \"ECLPDerivedParamsValidated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paramsValidated\",\n type: \"bool\",\n },\n ],\n name: \"ECLPParamsValidated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"invariantAfterJoin\",\n type: \"uint256\",\n },\n ],\n name: \"InvariantAterInitializeJoin\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"oldInvariant\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newInvariant\",\n type: \"uint256\",\n },\n ],\n name: \"InvariantOldAndNew\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"OracleEnabledChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"oracleUpdatedIndex\",\n type: \"uint256\",\n },\n ],\n name: \"OracleIndexUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"oldPauseManager\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"newPauseManager\",\n type: \"address\",\n },\n ],\n name: \"PauseManagerChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"PausedLocally\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n indexed: false,\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"invariant\",\n type: \"tuple\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"SwapParams\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"UnpausedLocally\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_dSq\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsAlpha\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsBeta\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsC\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsLambda\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsS\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_tauAlphaX\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_tauAlphaY\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_tauBetaX\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_tauBetaY\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_u\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_v\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_w\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_z\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"capManager\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"capParams\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"capEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint120\",\n name: \"perAddressCap\",\n type: \"uint120\",\n },\n {\n internalType: \"uint128\",\n name: \"globalCap\",\n type: \"uint128\",\n },\n ],\n internalType: \"struct ICappedLiquidity.CapParams\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_pauseManager\",\n type: \"address\",\n },\n ],\n name: \"changePauseManager\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"startIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endIndex\",\n type: \"uint256\",\n },\n ],\n name: \"dirtyUninitializedOracleSamples\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableOracle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getECLPParams\",\n outputs: [\n {\n components: [\n {\n internalType: \"int256\",\n name: \"alpha\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"beta\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"c\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"s\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"lambda\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Params\",\n name: \"params\",\n type: \"tuple\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"tauAlpha\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"tauBeta\",\n type: \"tuple\",\n },\n {\n internalType: \"int256\",\n name: \"u\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"v\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"w\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"z\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"dSq\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.DerivedParams\",\n name: \"d\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLargestSafeQueryWindow\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IPriceOracle.Variable\",\n name: \"variable\",\n type: \"uint8\",\n },\n ],\n name: \"getLatest\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMiscData\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"logInvariant\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"logTotalSupply\",\n type: \"int256\",\n },\n {\n internalType: \"uint256\",\n name: \"oracleSampleCreationTimestamp\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"oracleIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"oracleEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getNormalizedWeights\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IPriceOracle.Variable\",\n name: \"variable\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"ago\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IPriceOracle.OracleAccumulatorQuery[]\",\n name: \"queries\",\n type: \"tuple[]\",\n },\n ],\n name: \"getPastAccumulators\",\n outputs: [\n {\n internalType: \"int256[]\",\n name: \"results\",\n type: \"int256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPrice\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"spotPrice\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n ],\n name: \"getSample\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"logPairPrice\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"accLogPairPrice\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"logBptPrice\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"accLogBptPrice\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"logInvariant\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"accLogInvariant\",\n type: \"int256\",\n },\n {\n internalType: \"uint256\",\n name: \"timestamp\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IPriceOracle.Variable\",\n name: \"variable\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"secs\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"ago\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IPriceOracle.OracleAverageQuery[]\",\n name: \"queries\",\n type: \"tuple[]\",\n },\n ],\n name: \"getTimeWeightedAverage\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"results\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTokenRates\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"rate0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"rate1\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTotalSamples\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"gyroConfig\",\n outputs: [\n {\n internalType: \"contract IGyroConfig\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pauseManager\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rateProvider0\",\n outputs: [\n {\n internalType: \"contract IRateProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rateProvider1\",\n outputs: [\n {\n internalType: \"contract IRateProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_capManager\",\n type: \"address\",\n },\n ],\n name: \"setCapManager\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"capEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint120\",\n name: \"perAddressCap\",\n type: \"uint120\",\n },\n {\n internalType: \"uint128\",\n name: \"globalCap\",\n type: \"uint128\",\n },\n ],\n internalType: \"struct ICappedLiquidity.CapParams\",\n name: \"params\",\n type: \"tuple\",\n },\n ],\n name: \"setCapParams\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class GyroEV2__factory {\n static readonly abi = _abi;\n static createInterface(): GyroEV2Interface {\n return new utils.Interface(_abi) as GyroEV2Interface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GyroEV2 {\n return new Contract(address, _abi, signerOrProvider) as GyroEV2;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { VeBal, VeBalInterface } from \"../VeBal\";\n\nconst _abi = [\n {\n name: \"Deposit\",\n inputs: [\n {\n name: \"provider\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"locktime\",\n type: \"uint256\",\n indexed: true,\n },\n {\n name: \"type\",\n type: \"int128\",\n indexed: false,\n },\n {\n name: \"ts\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Withdraw\",\n inputs: [\n {\n name: \"provider\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"ts\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Supply\",\n inputs: [\n {\n name: \"prevSupply\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"supply\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n inputs: [\n {\n name: \"token_addr\",\n type: \"address\",\n },\n {\n name: \"_name\",\n type: \"string\",\n },\n {\n name: \"_symbol\",\n type: \"string\",\n },\n {\n name: \"_authorizer_adaptor\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"token\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"name\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"symbol\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"decimals\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"admin\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"commit_smart_wallet_checker\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"apply_smart_wallet_checker\",\n inputs: [],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"get_last_user_slope\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"int128\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"user_point_history__ts\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_idx\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"locked__end\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"checkpoint\",\n inputs: [],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit_for\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"create_lock\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_unlock_time\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"increase_amount\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"increase_unlock_time\",\n inputs: [\n {\n name: \"_unlock_time\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"withdraw\",\n inputs: [],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"balanceOf\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"balanceOf\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n {\n name: \"_t\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"balanceOfAt\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n {\n name: \"_block\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"totalSupply\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"totalSupply\",\n inputs: [\n {\n name: \"t\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"totalSupplyAt\",\n inputs: [\n {\n name: \"_block\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"supply\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"locked\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n {\n name: \"amount\",\n type: \"int128\",\n },\n {\n name: \"end\",\n type: \"uint256\",\n },\n ],\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"epoch\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"point_history\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n {\n name: \"bias\",\n type: \"int128\",\n },\n {\n name: \"slope\",\n type: \"int128\",\n },\n {\n name: \"ts\",\n type: \"uint256\",\n },\n {\n name: \"blk\",\n type: \"uint256\",\n },\n ],\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"user_point_history\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n {\n name: \"arg1\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n {\n name: \"bias\",\n type: \"int128\",\n },\n {\n name: \"slope\",\n type: \"int128\",\n },\n {\n name: \"ts\",\n type: \"uint256\",\n },\n {\n name: \"blk\",\n type: \"uint256\",\n },\n ],\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"user_point_epoch\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"slope_changes\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"int128\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"future_smart_wallet_checker\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"smart_wallet_checker\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n] as const;\n\nexport class VeBal__factory {\n static readonly abi = _abi;\n static createInterface(): VeBalInterface {\n return new utils.Interface(_abi) as VeBalInterface;\n }\n static connect(address: string, signerOrProvider: Signer | Provider): VeBal {\n return new Contract(address, _abi, signerOrProvider) as VeBal;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n VeDelegationProxy,\n VeDelegationProxyInterface,\n} from \"../VeDelegationProxy\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"votingEscrow\",\n type: \"address\",\n },\n {\n internalType: \"contract IVeDelegation\",\n name: \"delegation\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"newImplementation\",\n type: \"address\",\n },\n ],\n name: \"DelegationImplementationUpdated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"adjustedBalanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"adjusted_balance_of\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDelegationImplementation\",\n outputs: [\n {\n internalType: \"contract IVeDelegation\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVotingEscrow\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"killDelegation\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IVeDelegation\",\n name: \"delegation\",\n type: \"address\",\n },\n ],\n name: \"setDelegation\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class VeDelegationProxy__factory {\n static readonly abi = _abi;\n static createInterface(): VeDelegationProxyInterface {\n return new utils.Interface(_abi) as VeDelegationProxyInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): VeDelegationProxy {\n return new Contract(address, _abi, signerOrProvider) as VeDelegationProxy;\n }\n}\n","import { SwapInfo } from '@balancer-labs/sor';\nimport { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { Vault } from '@/contracts/Vault';\n\nexport interface TokenAmounts {\n [token: string]: string;\n}\n\nexport interface SwapsOptions {\n maxPools?: number;\n gasPrice?: string;\n deadline?: string;\n maxSlippage?: number;\n}\n\nexport enum SwapType {\n SwapExactIn,\n SwapExactOut,\n}\n\nexport type FundManagement = {\n sender: string;\n recipient: string;\n fromInternalBalance: boolean;\n toInternalBalance: boolean;\n};\n\nexport type SingleSwap = {\n poolId: string;\n kind: SwapType;\n assetIn: string;\n assetOut: string;\n amount: BigNumberish;\n userData: string;\n};\n\nexport type Swap = {\n request: SingleSwap;\n funds: FundManagement;\n limit: BigNumberish;\n deadline: BigNumberish;\n value?: BigNumberish;\n outputReference?: BigNumberish;\n};\n\nexport type BatchSwapStep = {\n poolId: string;\n assetInIndex: number;\n assetOutIndex: number;\n amount: string;\n userData: string;\n};\n\nexport type BatchSwap = {\n kind: SwapType;\n swaps: BatchSwapStep[];\n assets: string[];\n funds: FundManagement;\n limits: BigNumberish[];\n deadline: BigNumberish;\n value?: BigNumberish;\n outputReferences?: { index: BigNumberish; key: BigNumberish }[];\n};\n\nexport interface SwapInput {\n tokenIn: string;\n tokenOut: string;\n swapType: SwapType;\n amount: string;\n}\n\nexport interface QuerySimpleFlashSwapParameters {\n poolIds: string[];\n assets: BatchSwap['assets'];\n flashLoanAmount: string;\n vaultContract: Vault;\n}\n\nexport interface SimpleFlashSwapParameters {\n poolIds: string[];\n assets: BatchSwap['assets'];\n flashLoanAmount: string;\n walletAddress: string;\n}\n\nexport interface QuerySimpleFlashSwapResponse {\n profits: Record;\n isProfitable: boolean;\n}\n\nexport interface FindRouteParameters {\n tokenIn: string;\n tokenOut: string;\n amount: BigNumber;\n gasPrice: BigNumber;\n maxPools?: number;\n}\n\nexport interface BuildTransactionParameters {\n userAddress: string;\n recipient?: string;\n swapInfo: SwapInfo;\n kind: SwapType;\n deadline: string;\n maxSlippage: number;\n}\n\nexport interface SwapTransactionRequest {\n to: string;\n data: string;\n value?: BigNumber;\n}\n\nexport interface SwapAttributes {\n to: string;\n functionName: string;\n attributes: Swap | BatchSwap;\n data: string;\n value?: BigNumber;\n}\n","import { BigNumberish, BigNumber } from '@ethersproject/bignumber';\nimport { Zero, WeiPerEther } from '@ethersproject/constants';\n\nimport { SwapType } from './types';\nimport { isSameAddress } from '@/lib/utils';\n\n/**\n * Helper to create limits using a defined slippage amount.\n * @param tokensIn - Array of token in addresses.\n * @param tokensOut - Array of token out addresses.\n * @param swapType - Type of swap - SwapExactIn or SwapExactOut\n * @param deltas - An array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at the same index in the `assets` array.\n * @param assets - array contains the addresses of all assets involved in the swaps.\n * @param slippage - Slippage to be applied. i.e. 5%=50000000000000000.\n * @returns Returns an array (same length as assets) with limits applied for each asset.\n */\nexport function getLimitsForSlippage(\n tokensIn: string[],\n tokensOut: string[],\n swapType: SwapType,\n deltas: BigNumberish[],\n assets: string[],\n slippage: BigNumberish\n): BigNumberish[] {\n // Limits:\n // +ve means max to send\n // -ve mean min to receive\n // For a multihop the intermediate tokens should be 0\n const limits: BigNumber[] = new Array(assets.length).fill(Zero);\n\n assets.forEach((token, i) => {\n if (tokensIn.some((tokenIn) => isSameAddress(token, tokenIn))) {\n // For SwapExactOut slippage is on tokenIn, i.e. amtIn + slippage\n const slippageAmount = BigNumber.from(slippage).add(WeiPerEther);\n limits[i] =\n swapType === SwapType.SwapExactOut\n ? limits[i].add(\n BigNumber.from(deltas[i]).mul(slippageAmount).div(WeiPerEther)\n )\n : limits[i].add(deltas[i]);\n }\n\n if (tokensOut.some((tokenOut) => isSameAddress(token, tokenOut))) {\n // For SwapExactIn slippage is on tokenOut, i.e. amtOut - slippage\n const slippageAmount = WeiPerEther.sub(BigNumber.from(slippage));\n limits[i] =\n swapType === SwapType.SwapExactIn\n ? limits[i].add(\n BigNumber.from(deltas[i]).mul(slippageAmount).div(WeiPerEther)\n )\n : limits[i].add(deltas[i]);\n }\n });\n\n return limits;\n}\n","import { Network } from './network';\nimport { BalancerNetworkConfig } from '@/types';\nimport addressesByNetwork from './addresses.json';\n\nexport const balancerVault = '0xBA12222222228d8Ba445958a75a0704d566BF2C8';\n\n// Info fetched using npm package slot20\nexport const BPT_SLOT = 0;\nexport const BPT_DECIMALS = 18;\n\nexport const BALANCER_NETWORK_CONFIG: Record = {\n [Network.MAINNET]: {\n chainId: Network.MAINNET, //1\n addresses: {\n //Mainnet deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/mainnet.html\n contracts: {\n multicall: '0xeefba1e63905ef1d7acba5a8513c70307c1ce441',\n poolDataQueries: '0xf5CDdF6feD9C589f1Be04899F48f9738531daD59',\n lidoRelayer: '0xdcdbf71A870cc60C6F9B621E28a7D3Ffd6Dd4965',\n veBal: '0xC128a9954e6c874eA3d62ce62B468bA073093F25',\n gaugeControllerCheckpointer:\n '0x8e5698dc4897dc12243c8642e77b4f21349db97c',\n veBalProxy: '0x6f5a2eE11E7a772AeB5114A20d0D7c0ff61EB8A0',\n gyroConfigProxy: '0xac89cc9d78bbad7eb3a02601b4d65daa1f908aa6',\n ...addressesByNetwork[Network.MAINNET].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.MAINNET].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.MAINNET].contracts.weth,\n bbaUsd: addressesByNetwork[Network.MAINNET].tokens.bb_a_usd,\n lbpRaisingTokens: [\n '0x6b175474e89094c44da98b954eedeac495271d0f', // DAI\n '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC\n '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', // WETH\n ],\n stETH: '0xae7ab96520de3a18e5e111b5eaab095312d7fe84',\n wstETH: '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',\n veBal: '0xC128a9954e6c874eA3d62ce62B468bA073093F25',\n ...addressesByNetwork[Network.MAINNET].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/blocklytics/ethereum-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'ethereum',\n },\n },\n pools: {\n wETHwstETH: {\n id: '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080',\n address: '0x32296969ef14eb0c6d29669c550d4a0449130230',\n },\n },\n poolsToIgnore: [\n '0xbd482ffb3e6e50dc1c437557c3bea2b68f3683ee0000000000000000000003c6', // a pool made by an external dev who was playing with a novel rate provider mechanism in production.\n '0x0afbd58beca09545e4fb67772faf3858e610bcd00000000000000000000004b9',\n '0xf22ff21e17157340575158ad7394e068048dd98b0000000000000000000004b8',\n '0xf71d0774b214c4cf51e33eb3d30ef98132e4dbaa00000000000000000000046e',\n ],\n sorConnectingTokens: [\n {\n symbol: 'wEth',\n address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n },\n {\n symbol: 'wstEth',\n address: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',\n },\n {\n symbol: 'DOLA',\n address: '0x865377367054516e17014CcdED1e7d814EDC9ce4',\n },\n {\n symbol: 'rEth',\n address: '0xae78736cd615f374d3085123a210448e74fc6393',\n },\n {\n symbol: 'ETHx',\n address: '0xa35b1b31ce002fbf2058d22f30f95d405200a15b',\n },\n ],\n sorTriPathMidPoolIds: [\n '0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112', // rETH/WETH\n ],\n },\n [Network.POLYGON]: {\n chainId: Network.POLYGON, //137\n addresses: {\n //Polygon deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/polygon.html\n contracts: {\n multicall: '0xa1B2b503959aedD81512C37e9dce48164ec6a94d',\n poolDataQueries: '0x84813aA3e079A665C0B80F944427eE83cBA63617',\n gaugeClaimHelper: '0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33',\n gyroConfigProxy: '0xfdc2e9e03f515804744a40d0f8d25c16e93fbe67',\n ...addressesByNetwork[Network.POLYGON].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.POLYGON].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.POLYGON].contracts.weth,\n lbpRaisingTokens: [\n '0x8f3cf7ad23cd3cadbd9735aff958023239c6a063', // DAI\n '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // USDC\n '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', // WMATIC\n ],\n ...addressesByNetwork[Network.POLYGON].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-polygon-prune-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-polygon',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/ianlapham/polygon-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: '',\n platformId: 'polygon-pos',\n },\n },\n pools: {},\n poolsToIgnore: [\n '0x600bd01b6526611079e12e1ff93aba7a3e34226f0000000000000000000009e4', // This pool has rateProviders with incorrect scaling\n '0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455', // Stable pool with Convergence issues\n ],\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270',\n },\n {\n symbol: 'bbrz2',\n address: '0xe22483774bd8611be2ad2f4194078dac9159f4ba',\n }, // Joins Stables<>BRZ via https://app.balancer.fi/#/polygon/pool/0x4a0b73f0d13ff6d43e304a174697e3d5cfd310a400020000000000000000091c\n ],\n },\n [Network.ARBITRUM]: {\n chainId: Network.ARBITRUM, //42161\n //Arbitrum deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/arbitrum.html\n addresses: {\n contracts: {\n multicall: '0x269ff446d9892c9e19082564df3f5e8741e190a1',\n poolDataQueries: '0x7Ba29fE8E83dd6097A7298075C4AFfdBda3121cC',\n gaugeClaimHelper: '0xa0dabebaad1b243bbb243f933013d560819eb66f',\n gyroConfigProxy: '0x9b683ca24b0e013512e2566b68704dbe9677413c',\n ...addressesByNetwork[Network.ARBITRUM].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.ARBITRUM].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.ARBITRUM].contracts.weth,\n lbpRaisingTokens: [\n '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', // DAI\n '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', // USDC\n '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', // WETH\n ],\n ...addressesByNetwork[Network.ARBITRUM].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-arbitrum-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-arbitrum',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-one-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'arbitrum-one',\n },\n },\n pools: {},\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n },\n ],\n sorTriPathMidPoolIds: [\n '0x178e029173417b1f9c8bc16dcec6f697bc323746000200000000000000000158', // wstEth/USDC.e to open up auraBAL/USDC\n '0x0052688295413b32626d226a205b95cdb337de860002000000000000000003d1', // arb/USDC.e to open up aura/USDC\n '0xa1a8bf131571a2139feb79401aa4a2e9482df6270002000000000000000004b4', // wstEth/Stable4Pool\n ],\n },\n [Network.GOERLI]: {\n chainId: Network.GOERLI, //5\n //Goerli deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/goerli.html\n addresses: {\n contracts: {\n multicall: '0x77dCa2C955b15e9dE4dbBCf1246B4B85b651e50e',\n poolDataQueries: '0x6d3197d069F8F9f1Fe7e23665Bc64CB77ED8b089',\n veBal: '0x33A99Dcc4C85C014cf12626959111D5898bbCAbF',\n veBalProxy: '0xA1F107D1cD709514AE8A914eCB757E95f9cedB31',\n erc4626LinearPoolFactory: '0xba240c856498e2d7a70af4911aafae0d6b565a5b',\n aaveLinearPoolFactory: '0x76578ecf9a141296ec657847fb45b0585bcda3a6',\n ...addressesByNetwork[Network.GOERLI].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.GOERLI].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.GOERLI].contracts.weth,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-goerli-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-goerli',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/blocklytics/goerli-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'ethereum',\n },\n },\n pools: {},\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1',\n },\n ],\n },\n [Network.OPTIMISM]: {\n chainId: Network.OPTIMISM, //10\n // Optimism deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/optimism.html\n addresses: {\n contracts: {\n multicall: '0x2dc0e2aa608532da689e89e237df582b783e552c',\n poolDataQueries: '0x6B5dA774890Db7B7b96C6f44e6a4b0F657399E2e',\n gyroConfigProxy: '0x32acb44fc929339b9f16f0449525cc590d2a23f3',\n ...addressesByNetwork[Network.OPTIMISM].contracts,\n },\n tokens: {\n bal: '0xfe8b128ba8c78aabc59d4c64cee7ff28e9379921',\n wrappedNativeAsset: addressesByNetwork[Network.OPTIMISM].contracts.weth,\n lbpRaisingTokens: [\n '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', // DAI\n '0x7f5c764cbc14f9669b88837ca1490cca17c31607', // USDC\n '0x4200000000000000000000000000000000000006', // WETH\n ],\n ...addressesByNetwork[Network.OPTIMISM].tokens,\n },\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'optimistic-ethereum',\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-optimism',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-optimism',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/lyra-finance/optimism-mainnet-blocks',\n },\n pools: {},\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x4200000000000000000000000000000000000006',\n },\n ],\n },\n [Network.GNOSIS]: {\n chainId: Network.GNOSIS, //100\n // Gnosis deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/gnosis.html\n addresses: {\n contracts: {\n multicall: '0xbb6fab6b627947dae0a75808250d8b2652952cb5',\n poolDataQueries: '0x3f170631ed9821Ca51A59D996aB095162438DC10',\n ...addressesByNetwork[Network.GNOSIS].contracts,\n },\n tokens: {\n wrappedNativeAsset: addressesByNetwork[Network.GNOSIS].contracts.weth,\n bal: addressesByNetwork[Network.GNOSIS].contracts.bal,\n ...addressesByNetwork[Network.GNOSIS].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gnosis-chain-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-gnosis-chain',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'xdai',\n platformId: 'xdai',\n },\n },\n averageBlockTime: 5,\n pools: {},\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d',\n },\n {\n symbol: 'wsEth',\n address: '0x6C76971f98945AE98dD7d4DFcA8711ebea946eA6',\n },\n ],\n sorTriPathMidPoolIds: [\n '0xeb30c85cc528537f5350cf5684ce6a4538e13394000200000000000000000059', // 3POOL_BPT/wstETH\n '0x7644fa5d0ea14fcf3e813fdf93ca9544f8567655000000000000000000000066', // sBAL3\n ],\n },\n [Network.FANTOM]: {\n chainId: Network.FANTOM, //250\n //Fantom deployment addresses: https://docs.beets.fi/technicals/deployments\n addresses: {\n contracts: {\n vault: '0x20dd72Ed959b6147912C2e529F0a0C651c33c9ce',\n multicall: '0x66335d7ad8011f6aa3f48aadcb523b62b38ed961',\n poolDataQueries: '0xb132F1E145DcC085980C531e2dA81f2b84efc14F',\n gaugeClaimHelper: '0x0000000000000000000000000000000000000000', // no guages on fantom\n balancerRelayer: '0x419f7925b8c9e409b6ee8792242556fa210a7a09',\n balancerHelpers: '0xfE18C7C70b0a2c6541bEde0367124278BC345Dc8',\n weightedPoolFactory: '0x60467cb225092cE0c989361934311175f437Cf53',\n composableStablePoolFactory:\n '0x44814E3A603bb7F1198617995c5696C232F6e8Ed',\n yearnLinearPoolFactory: '0x1f73ae6ed391a2b1e84ff988a1bb5394b78a4a71',\n },\n tokens: {\n bal: '0xF24Bcf4d1e507740041C9cFd2DddB29585aDCe1e', //beets\n wrappedNativeAsset: '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83',\n lbpRaisingTokens: [\n '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83', // WFTM\n '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75', // USDC\n '0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E', // DAI\n ],\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-v2-fantom',\n gaugesSubgraph: '', // no guages on fantom\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/beethovenxfi/fantom-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'ftm',\n platformId: 'fantom',\n },\n },\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [\n {\n symbol: 'wftm',\n address: '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83',\n },\n ],\n },\n [Network.SEPOLIA]: {\n chainId: Network.SEPOLIA, //11155111\n addresses: {\n contracts: {\n multicall: '0xcA11bde05977b3631167028862bE2a173976CA11',\n poolDataQueries: '0x9805dcfD25e6De36bad8fe9D3Fe2c9b44B764102',\n ...addressesByNetwork[Network.SEPOLIA].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.SEPOLIA].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.SEPOLIA].contracts.weth,\n ...addressesByNetwork[Network.SEPOLIA].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-sepolia-v2/version/latest',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'ethereum',\n },\n },\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [],\n },\n [Network.ZKEVM]: {\n chainId: Network.ZKEVM, //1101\n addresses: {\n contracts: {\n balancerMinter: '0x475D18169BE8a89357A9ee3Ab00ca386d20fA229',\n multicall: '0xcA11bde05977b3631167028862bE2a173976CA11',\n poolDataQueries: '0xF24917fB88261a37Cc57F686eBC831a5c0B9fD39',\n ...addressesByNetwork[Network.ZKEVM].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.ZKEVM].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.ZKEVM].contracts.weth,\n ...addressesByNetwork[Network.ZKEVM].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-polygon-zk-v2/version/latest',\n gaugesSubgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-gauges-polygon-zk/version/latest',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'polygon-zkevm',\n },\n },\n averageBlockTime: 4,\n multicallBatchSize: 128,\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9',\n },\n {\n symbol: 'wsEth',\n address: '0x5D8cfF95D7A57c0BF50B30b43c7CC0D52825D4a9',\n },\n ],\n },\n [Network.AVALANCHE]: {\n chainId: Network.AVALANCHE, //43114\n addresses: {\n contracts: {\n balancerMinter: '0xEa924b45a3fcDAAdf4E5cFB1665823B8F8F2039B',\n multicall: '0xcA11bde05977b3631167028862bE2a173976CA11',\n poolDataQueries: '0x67af5D428d38C5176a286a2371Df691cDD914Fb8',\n ...addressesByNetwork[Network.AVALANCHE].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.AVALANCHE].contracts.bal,\n wrappedNativeAsset:\n addressesByNetwork[Network.AVALANCHE].contracts.weth,\n ...addressesByNetwork[Network.AVALANCHE].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-avalanche-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-avalanche',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/iliaazhel/avalanche-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'avalanche-2',\n platformId: 'avalanche',\n },\n },\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [\n {\n symbol: 'WAVAX',\n address: '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7',\n },\n {\n symbol: 'sAVAX',\n address: '0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be',\n },\n ],\n },\n [Network.BASE]: {\n chainId: Network.BASE, //8453\n addresses: {\n contracts: {\n balancerMinter: '0xc7E5ED1054A24Ef31D827E6F86caA58B3Bc168d7',\n multicall: '0xcA11bde05977b3631167028862bE2a173976CA11',\n poolDataQueries: '',\n ...addressesByNetwork[Network.BASE].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.BASE].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.BASE].contracts.weth,\n ...addressesByNetwork[Network.BASE].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest',\n gaugesSubgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-gauges-base/version/latest',\n blockNumberSubgraph:\n 'https://api.studio.thegraph.com/query/48427/bleu-base-blocks/version/latest',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'base',\n },\n },\n averageBlockTime: 2,\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x4200000000000000000000000000000000000006',\n },\n ],\n sorTriPathMidPoolIds: [\n '0x2db50a0e0310723ef0c2a165cb9a9f80d772ba2f00020000000000000000000d', // weth/staBal\n ],\n },\n};\n\nexport const networkAddresses = (\n chainId: number\n): BalancerNetworkConfig['addresses'] =>\n BALANCER_NETWORK_CONFIG[chainId as Network].addresses;\n","export enum BalancerErrorCode {\n ABOVE_MAX_TOKENS = 'ABOVE_MAX_TOKENS',\n BELOW_MIN_TOKENS = 'BELOW_MIN_TOKENS',\n EXIT_DELTA_AMOUNTS = 'EXIT_DELTA_AMOUNTS',\n FEE_PROVIDER_NOT_PROVIDED = 'FEE_PROVIDER_NOT_PROVIDED',\n GAUGES_HELPER_ADDRESS_NOT_PROVIDED = 'GAUGES_HELPER_ADDRESS_NOT_PROVIDED',\n GAUGES_NOT_FOUND = 'GAUGES_NOT_FOUND',\n GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED = 'GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED',\n GAUGES_REWARD_TOKEN_EMPTY = 'GAUGES_REWARD_TOKEN_EMPTY',\n ILLEGAL_PARAMETER = 'ILLEGAL_PARAMETER',\n INTERNAL_ERROR_INVALID_ABI = 'INTERNAL_ERROR_INVALID_ABI',\n INPUT_LENGTH_MISMATCH = 'INPUT_LENGTH_MISMATCH',\n INPUT_OUT_OF_BOUNDS = 'INPUT_OUT_OF_BOUNDS',\n INPUT_TOKEN_INVALID = 'INPUT_TOKEN_INVALID',\n INVALID_PROTOCOL_ID = 'INVALID_PROTOCOL_ID',\n INVALID_SWAP_FEE_PERCENTAGE = 'INVALID_SWAP_FEE_PERCENTAGE',\n INVALID_WEIGHTS = 'INVALID_WEIGHTS',\n JOIN_DELTA_AMOUNTS = 'JOIN_DELTA_AMOUNTS',\n JOIN_WITH_ZERO_AMOUNT = 'JOIN_WITH_ZERO_AMOUNT',\n MISSING_AMP = 'MISSING_AMP',\n MISSING_DECIMALS = 'MISSING_DECIMALS',\n MISSING_PRICE_RATE = 'MISSING_PRICE_RATE',\n MISSING_TOKENS = 'MISSING_TOKENS',\n MISSING_WEIGHT = 'MISSING_WEIGHT',\n NO_POOL_DATA = 'NO_POOL_DATA',\n NO_VALUE_PARAMETER = 'NO_VALUE_PARAMETER',\n POOL_DOESNT_EXIST = 'POOL_DOESNT_EXIST',\n QUERY_BATCH_SWAP = 'QUERY_BATCH_SWAP',\n RELAY_SWAP_AMOUNTS = 'RELAY_SWAP_AMOUNTS',\n REWARD_TOKEN_ZERO = 'REWARD_TOKEN_ZERO',\n TIMESTAMP_IN_THE_FUTURE = 'TIMESTAMP_IN_THE_FUTURE',\n TOKEN_MISMATCH = 'TOKEN_MISMATCH',\n UNSUPPORTED_PAIR = 'UNSUPPORTED_PAIR',\n UNSUPPORTED_POOL_TYPE = 'UNSUPPORTED_POOL_TYPE',\n UNSUPPORTED_POOL_TYPE_VERSION = 'UNSUPPORTED_POOL_TYPE_VERSION',\n}\n\nexport class BalancerError extends Error {\n constructor(public code: BalancerErrorCode) {\n super(BalancerError.getMessage(code));\n this.name = 'BalancerError';\n }\n\n static getMessage(code: BalancerErrorCode): string {\n switch (code) {\n case BalancerErrorCode.ABOVE_MAX_TOKENS:\n return 'the array contains more tokens than the maximum allowed';\n case BalancerErrorCode.BELOW_MIN_TOKENS:\n return 'the array does not contain the minimum quantity of tokens';\n case BalancerErrorCode.EXIT_DELTA_AMOUNTS:\n return 'Error when checking exit call deltas';\n case BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED:\n return 'Fee Provider Repository has not been provided';\n case BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED:\n return 'Liquidity Gauges Helper Contract address has not been provided';\n case BalancerErrorCode.GAUGES_NOT_FOUND:\n return 'Liquidity Gauges not found with given addresses';\n case BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED:\n return 'Liquidity Gauges Reward Minter Contract address has not been provided';\n case BalancerErrorCode.GAUGES_REWARD_TOKEN_EMPTY:\n return 'No Reward Tokens for Liquidity Gauges provided';\n case BalancerErrorCode.INPUT_LENGTH_MISMATCH:\n return 'input length mismatch';\n case BalancerErrorCode.INPUT_OUT_OF_BOUNDS:\n return 'input out of bounds';\n case BalancerErrorCode.INPUT_TOKEN_INVALID:\n return 'input token invalid';\n case BalancerErrorCode.INVALID_PROTOCOL_ID:\n return 'The provided protocol id does not correspond to a protocol';\n case BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE:\n return 'The swap fee needs to be greater than zero and less than 1e17(10%)';\n case BalancerErrorCode.INVALID_WEIGHTS:\n return 'The sum of the weights needs to be equal to 1e18(100%)';\n case BalancerErrorCode.JOIN_DELTA_AMOUNTS:\n return 'Error when checking join call deltas';\n case BalancerErrorCode.JOIN_WITH_ZERO_AMOUNT:\n return 'Cant join pool with 0 amount of token in';\n case BalancerErrorCode.MISSING_AMP:\n return 'missing amp';\n case BalancerErrorCode.MISSING_DECIMALS:\n return 'missing decimals';\n case BalancerErrorCode.MISSING_PRICE_RATE:\n return 'missing price rate';\n case BalancerErrorCode.MISSING_TOKENS:\n return 'missing tokens';\n case BalancerErrorCode.MISSING_WEIGHT:\n return 'missing weight';\n case BalancerErrorCode.NO_POOL_DATA:\n return 'no pool data';\n case BalancerErrorCode.NO_VALUE_PARAMETER:\n return 'Illegal value passed as parameter';\n case BalancerErrorCode.POOL_DOESNT_EXIST:\n return 'balancer pool does not exist';\n case BalancerErrorCode.RELAY_SWAP_AMOUNTS:\n return 'Error when checking swap amounts';\n case BalancerErrorCode.REWARD_TOKEN_ZERO:\n return 'All Zero Values for Reward Tokens';\n case BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE:\n return 'Timestamp cannot be in the future';\n case BalancerErrorCode.TOKEN_MISMATCH:\n return 'token mismatch';\n case BalancerErrorCode.UNSUPPORTED_PAIR:\n return 'unsupported token pair';\n case BalancerErrorCode.UNSUPPORTED_POOL_TYPE:\n return 'unsupported pool type';\n default:\n return 'Unknown error';\n }\n }\n}\n","import { ONE, SolidityMaths } from '@/lib/utils/solidityMaths';\n\nexport function calcPriceImpact(\n bptAmount: bigint,\n bptZeroPriceImpact: bigint,\n isJoin: boolean\n): bigint {\n if (isJoin) return calcPriceImpactJoin(bptAmount, bptZeroPriceImpact);\n else return calcPriceImpactExit(bptAmount, bptZeroPriceImpact);\n}\n\nfunction calcPriceImpactJoin(\n bptAmount: bigint,\n bptZeroPriceImpact: bigint\n): bigint {\n // 1 - (bptAmount/bptZeroPI)\n const pi = ONE - SolidityMaths.divDownFixed(bptAmount, bptZeroPriceImpact);\n return pi < 0 ? BigInt(0) : pi;\n}\nfunction calcPriceImpactExit(\n bptAmount: bigint,\n bptZeroPriceImpact: bigint\n): bigint {\n // (bptAmount/bptZeroPI) - 1\n const pi = SolidityMaths.divDownFixed(bptAmount, bptZeroPriceImpact) - ONE;\n return pi < 0 ? BigInt(0) : pi;\n}\n","import { BZERO, SolidityMaths } from './solidityMaths';\n\nconst AMP_PRECISION = BigInt(1e3);\n\nexport function bptSpotPrice(\n amp: bigint,\n balances: bigint[],\n bptSupply: bigint,\n tokenIndexIn: number\n): bigint {\n const totalCoins = balances.length;\n const D = _calculateInvariant(amp, balances, true);\n let S = BZERO;\n let D_P = D / BigInt(totalCoins);\n for (let i = 0; i < totalCoins; i++) {\n if (i != tokenIndexIn) {\n S = S + balances[i];\n D_P = (D_P * D) / (BigInt(totalCoins) * balances[i]);\n }\n }\n const x = balances[tokenIndexIn];\n const alpha = amp * BigInt(totalCoins);\n const beta = alpha * S; // units: 10 ** 21\n const gamma = BigInt(AMP_PRECISION) - alpha;\n const partial_x = BigInt(2) * alpha * x + beta + gamma * D;\n const minus_partial_D =\n D_P * BigInt(totalCoins + 1) * AMP_PRECISION - gamma * x;\n const ans = SolidityMaths.divUpFixed(\n (partial_x * bptSupply) / minus_partial_D,\n D\n );\n return ans;\n}\n\nfunction _calculateInvariant(\n amp: bigint,\n balances: bigint[],\n roundUp: boolean\n): bigint {\n /**********************************************************************************************\n // invariant //\n // D = invariant D^(n+1) //\n // A = amplification coefficient A n^n S + D = A D n^n + ----------- //\n // S = sum of balances n^n P //\n // P = product of balances //\n // n = number of tokens //\n *********x************************************************************************************/\n\n // We support rounding up or down.\n\n let sum = BZERO;\n const numTokens = balances.length;\n for (let i = 0; i < numTokens; i++) {\n sum = sum + balances[i];\n }\n if (sum == BZERO) {\n return BZERO;\n }\n\n let prevInvariant = BZERO;\n let invariant = sum;\n const ampTimesTotal = amp * BigInt(numTokens);\n\n for (let i = 0; i < 255; i++) {\n let P_D = balances[0] * BigInt(numTokens);\n for (let j = 1; j < numTokens; j++) {\n P_D = SolidityMaths.div(\n SolidityMaths.mul(\n SolidityMaths.mul(P_D, balances[j]),\n BigInt(numTokens)\n ),\n invariant,\n roundUp\n );\n }\n prevInvariant = invariant;\n invariant = SolidityMaths.div(\n SolidityMaths.mul(\n SolidityMaths.mul(BigInt(numTokens), invariant),\n invariant\n ) +\n SolidityMaths.div(\n SolidityMaths.mul(SolidityMaths.mul(ampTimesTotal, sum), P_D),\n AMP_PRECISION,\n roundUp\n ),\n SolidityMaths.mul(BigInt(numTokens + 1), invariant) +\n // No need to use checked arithmetic for the amp precision, the amp is guaranteed to be at least 1\n SolidityMaths.div(\n SolidityMaths.mul(ampTimesTotal - AMP_PRECISION, P_D),\n AMP_PRECISION,\n !roundUp\n ),\n roundUp\n );\n\n if (invariant > prevInvariant) {\n if (invariant - prevInvariant <= 1) {\n return invariant;\n }\n } else if (prevInvariant - invariant <= 1) {\n return invariant;\n }\n }\n\n throw new Error('Errors.STABLE_INVARIANT_DIDNT_CONVERGE');\n}\n","import { PriceImpactConcern } from '@/modules/pools/pool-types/concerns/types';\nimport { ONE, BZERO, _upscale } from '@/lib/utils/solidityMaths';\nimport { calcPriceImpact } from '@/modules/pricing/priceImpact';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Pool } from '@/types';\nimport { bptSpotPrice } from '@/lib/utils/stableMathHelpers';\nimport { parsePoolInfo } from '@/lib/utils';\n\n// Note: this concern is used by Stable, MetaStable and StablePhantom pools\nexport class StablePoolPriceImpact implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n // upscales amp, swapfee, totalshares\n const {\n ampWithPrecision,\n scalingFactorsWithoutBpt,\n totalSharesEvm,\n upScaledBalancesWithoutBpt,\n } = parsePoolInfo(pool);\n\n // Check against array without BPT because concern is being reused by stablePhantom pools\n // Stable and MetaStable pools don't have BPT in the token list, so array without BPT is the same as the original array\n if (tokenAmounts.length !== upScaledBalancesWithoutBpt.length)\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n\n let bptZeroPriceImpact = BZERO;\n for (let i = 0; i < upScaledBalancesWithoutBpt.length; i++) {\n const price = bptSpotPrice(\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n totalSharesEvm,\n i\n );\n const amountUpscaled = _upscale(\n tokenAmounts[i],\n scalingFactorsWithoutBpt[i]\n );\n const newTerm = (price * amountUpscaled) / ONE;\n bptZeroPriceImpact += newTerm;\n }\n return bptZeroPriceImpact;\n }\n\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n const bptZeroPriceImpact = this.bptZeroPriceImpact(pool, tokenAmounts);\n return calcPriceImpact(bptAmount, bptZeroPriceImpact, isJoin).toString();\n }\n}\n","import { BigNumber, parseFixed } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport * as SOR from '@balancer-labs/sor';\nimport {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n ExitExactBPTInParameters,\n ExitExactTokensOutParameters,\n ExitPool,\n ExitPoolAttributes,\n} from '../types';\nimport { AssetHelpers, isSameAddress, parsePoolInfo } from '@/lib/utils';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { addSlippage, subSlippage } from '@/lib/utils/slippageHelper';\nimport { balancerVault } from '@/lib/constants/config';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport {\n _downscaleDown,\n _downscaleDownArray,\n _upscaleArray,\n} from '@/lib/utils/solidityMaths';\nimport { Pool } from '@/types';\nimport { BasePoolEncoder } from '@/pool-base';\nimport { StablePoolPriceImpact } from '../stable/priceImpact.concern';\n\ninterface SortedValues {\n poolTokens: string[];\n ampWithPrecision: bigint;\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n}\n\ntype ExactBPTInSortedValues = SortedValues & {\n scalingFactors: bigint[];\n singleTokenOutIndex: number;\n};\n\ntype ExactTokensOutSortedValues = SortedValues & {\n upScaledAmountsOut: bigint[];\n downScaledAmountsOut: string[];\n};\ntype CalcBptInGivenExactTokensOutParams = ExactTokensOutSortedValues &\n Pick;\n\ntype SortValuesParams = {\n pool: Pool;\n wrappedNativeAsset: string;\n shouldUnwrapNativeAsset?: boolean;\n};\n\ntype SortValuesExactBptInParams = SortValuesParams & {\n singleTokenOut?: string;\n};\n\ntype SortValuesExactTokensOutParams = SortValuesParams & {\n amountsOut: string[];\n tokensOut: string[];\n};\n\ntype EncodeExitParams = Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'toInternalBalance'\n> & {\n poolTokens: string[];\n poolId: string;\n userData: string;\n minAmountsOut: string[];\n};\n\nexport class StablePoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n });\n const sortedValues = this.sortValuesExitExactBptIn({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n });\n const { minAmountsOut, expectedAmountsOut } =\n sortedValues.singleTokenOutIndex >= 0\n ? this.calcTokenOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n })\n : this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData =\n sortedValues.singleTokenOutIndex >= 0\n ? StablePoolEncoder.exitExactBPTInForOneTokenOut(\n bptIn,\n sortedValues.singleTokenOutIndex\n )\n : StablePoolEncoder.exitExactBPTInForTokensOut(bptIn);\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n this.checkInputsExactTokensOut(amountsOut, tokensOut, pool);\n\n const sortedValues = this.sortValuesExitExactTokensOut({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n });\n const { expectedBPTIn, maxBPTIn } = this.calcBptInGivenExactTokensOut({\n ...sortedValues,\n slippage,\n });\n\n const { downScaledAmountsOut, poolTokens } = sortedValues;\n const userData = StablePoolEncoder.exitBPTInForExactTokensOut(\n downScaledAmountsOut,\n maxBPTIn\n );\n const encodedData = this.encodeExitPool({\n poolId: pool.id,\n userData,\n poolTokens,\n minAmountsOut: downScaledAmountsOut,\n exiter,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n downScaledAmountsOut.map(BigInt),\n BigInt(expectedBPTIn),\n false\n );\n\n return {\n ...encodedData,\n expectedBPTIn,\n maxBPTIn,\n priceImpact,\n };\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut: undefined,\n pool,\n shouldUnwrapNativeAsset: false,\n });\n const sortedValues = parsePoolInfo(pool);\n const { minAmountsOut, expectedAmountsOut } =\n this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n singleTokenOutIndex: -1,\n bptIn,\n slippage,\n });\n\n const userData = BasePoolEncoder.recoveryModeExit(bptIn);\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt inserted in the transaction\n * @param singleTokenOut (optional) the address of the single token that will be withdrawn, if null|undefined, all tokens will be withdrawn proportionally.\n * @param pool the pool that is being exited\n * @param shouldUnwrapNativeAsset Set true if the weth should be unwrapped to Eth\n */\n checkInputsExactBPTIn = ({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n }: Pick<\n ExitExactBPTInParameters,\n 'bptIn' | 'singleTokenOut' | 'pool' | 'shouldUnwrapNativeAsset'\n >): void => {\n if (!bptIn.length || parseFixed(bptIn, 18).isNegative()) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n if (\n singleTokenOut &&\n singleTokenOut !== AddressZero &&\n !pool.tokens\n .map((t) => t.address)\n .some((a) => isSameAddress(a, singleTokenOut))\n ) {\n throw new BalancerError(BalancerErrorCode.TOKEN_MISMATCH);\n }\n\n if (!shouldUnwrapNativeAsset && singleTokenOut === AddressZero)\n throw new Error(\n 'shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values'\n );\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n /**\n * Checks if the input of buildExitExactTokensOut is valid\n * @param amountsOut Must have an amount for each token, if the user will not withdraw any amount for a token, the value shall be '0'\n * @param tokensOut Must contain all the tokens of the pool\n * @param pool The pool that is being exited\n */\n checkInputsExactTokensOut = (\n amountsOut: string[],\n tokensOut: string[],\n pool: Pool\n ): void => {\n if (\n tokensOut.length != amountsOut.length ||\n tokensOut.length != pool.tokensList.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n sortValuesExitExactBptIn = ({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n }: SortValuesExactBptInParams): ExactBPTInSortedValues => {\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n // Parse pool info into EVM amounts in order to match amountsIn scalling\n const { poolTokens } = parsedPoolInfo;\n let singleTokenOutIndex = -1;\n if (singleTokenOut) {\n singleTokenOutIndex = poolTokens.indexOf(singleTokenOut);\n }\n return {\n ...parsedPoolInfo,\n singleTokenOutIndex,\n };\n };\n sortValuesExitExactTokensOut = ({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n }: SortValuesExactTokensOutParams): ExactTokensOutSortedValues => {\n const shouldUnwrapNativeAsset = tokensOut.some((a) => a === AddressZero);\n // Parse pool info into EVM amounts in order to match amountsOut scaling\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n const { scalingFactors } = parsedPoolInfo;\n\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts in into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, downScaledAmountsOut] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n // Maths should use upscaled amounts, e.g. 1USDC => 1e18 not 1e6\n const upScaledAmountsOut = _upscaleArray(\n downScaledAmountsOut.map((a) => BigInt(a)),\n scalingFactors.map((a) => BigInt(a))\n );\n\n return {\n ...parsedPoolInfo,\n upScaledAmountsOut,\n downScaledAmountsOut,\n };\n };\n calcTokenOutGivenExactBptIn = ({\n poolTokens,\n ampWithPrecision,\n upScaledBalances,\n totalSharesEvm,\n swapFeeEvm,\n singleTokenOutIndex,\n bptIn,\n slippage,\n scalingFactors,\n }: Pick<\n ExactBPTInSortedValues,\n | 'poolTokens'\n | 'ampWithPrecision'\n | 'upScaledBalances'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n | 'singleTokenOutIndex'\n | 'scalingFactors'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n // Calculate amount out given BPT in\n const amountOut = SOR.StableMathBigInt._calcTokenOutGivenExactBptIn(\n ampWithPrecision,\n upScaledBalances,\n singleTokenOutIndex,\n BigInt(bptIn),\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n const downscaledAmountOut = _downscaleDown(\n BigInt(amountOut) - BigInt(1), // The -1 is to solve rounding errors, sometimes the amount comes 1 point lower than expected\n scalingFactors[singleTokenOutIndex]\n ).toString();\n\n const expectedAmountsOut = Array(poolTokens.length).fill('0');\n const minAmountsOut = Array(poolTokens.length).fill('0');\n\n expectedAmountsOut[singleTokenOutIndex] = downscaledAmountOut;\n // Apply slippage tolerance\n minAmountsOut[singleTokenOutIndex] = subSlippage(\n BigNumber.from(downscaledAmountOut),\n BigNumber.from(slippage)\n ).toString();\n\n return { minAmountsOut, expectedAmountsOut };\n };\n\n calcTokensOutGivenExactBptIn = ({\n upScaledBalances,\n totalSharesEvm,\n scalingFactors,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n | 'upScaledBalances'\n | 'totalSharesEvm'\n | 'scalingFactors'\n | 'singleTokenOutIndex'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n const amountsOut = SOR.StableMathBigInt._calcTokensOutGivenExactBptIn(\n upScaledBalances,\n BigInt(bptIn),\n totalSharesEvm\n );\n // Maths return numbers scaled to 18 decimals. Must scale down to token decimals.\n const amountsOutScaledDown = _downscaleDownArray(\n amountsOut,\n scalingFactors\n );\n\n const expectedAmountsOut = amountsOutScaledDown.map((amount) =>\n amount.toString()\n );\n // Apply slippage tolerance\n const minAmountsOut = amountsOutScaledDown.map((amount) => {\n const minAmount = subSlippage(\n BigNumber.from(amount),\n BigNumber.from(slippage)\n );\n return minAmount.toString();\n });\n return { minAmountsOut, expectedAmountsOut };\n };\n calcBptInGivenExactTokensOut = ({\n ampWithPrecision,\n upScaledBalances,\n upScaledAmountsOut,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: CalcBptInGivenExactTokensOutParams): {\n maxBPTIn: string;\n expectedBPTIn: string;\n } => {\n // Calculate expected BPT in given tokens out\n const bptIn = SOR.StableMathBigInt._calcBptInGivenExactTokensOut(\n ampWithPrecision,\n upScaledBalances,\n upScaledAmountsOut,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n // Apply slippage tolerance\n const maxBPTIn = addSlippage(\n BigNumber.from(bptIn),\n BigNumber.from(slippage)\n ).toString();\n return { maxBPTIn, expectedBPTIn: bptIn };\n };\n\n encodeExitPool = ({\n poolId,\n exiter,\n poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n }: EncodeExitParams): ExitPoolAttributes => {\n const to = balancerVault;\n const functionName = 'exitPool';\n const attributes: ExitPool = {\n poolId,\n sender: exiter,\n recipient: exiter,\n exitPoolRequest: {\n assets: poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n },\n };\n // Encode transaction data into an ABI byte string which can be sent to the network to be executed\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.exitPoolRequest,\n ]);\n return { data, to, functionName, attributes };\n };\n}\n","import * as SOR from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { balancerVault } from '@/lib/constants/config';\nimport { AssetHelpers, getEthValue, parsePoolInfo } from '@/lib/utils';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { _upscaleArray } from '@/lib/utils/solidityMaths';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport { Pool } from '@/types';\n\nimport { StablePoolPriceImpact } from '../stable/priceImpact.concern';\nimport {\n JoinConcern,\n JoinPool,\n JoinPoolAttributes,\n JoinPoolParameters,\n} from '../types';\nimport { AddressZero } from '@ethersproject/constants';\n\ntype SortedValues = {\n poolTokens: string[];\n ampWithPrecision: bigint;\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n upScaledAmountsIn: bigint[];\n sortedAmountsIn: string[];\n};\n\ntype EncodeJoinPoolParams = {\n joiner: string;\n poolId: string;\n minBPTOut: string;\n} & Pick &\n Pick;\n\nexport class StablePoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n this.checkInputs(tokensIn, amountsIn, pool);\n const sortedValues = this.sortValues({\n pool,\n wrappedNativeAsset,\n tokensIn,\n amountsIn,\n });\n\n const { expectedBPTOut, minBPTOut } = this.calcBptOutGivenExactTokensIn({\n ...sortedValues,\n slippage,\n });\n\n const encodedData = this.encodeJoinPool({\n joiner,\n amountsIn,\n tokensIn,\n poolId: pool.id,\n minBPTOut,\n ...sortedValues,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n sortedValues.sortedAmountsIn.map(BigInt),\n BigInt(expectedBPTOut),\n true\n );\n\n return {\n ...encodedData,\n minBPTOut,\n expectedBPTOut,\n priceImpact,\n };\n };\n\n /**\n * Check if the input parameters of the buildJoin function are right\n * @param amountsIn Must have an amount for each token, if the user will not deposit any amount for a token, the value shall be '0'\n * @param tokensIn Must contain all the tokens of the pool\n * @param pool The pool that is being joined\n */\n checkInputs = (amountsIn: string[], tokensIn: string[], pool: Pool): void => {\n if (\n tokensIn.length != amountsIn.length ||\n tokensIn.length != pool.tokensList.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n\n sortValues = ({\n pool,\n wrappedNativeAsset,\n amountsIn,\n tokensIn,\n }: Pick<\n JoinPoolParameters,\n 'pool' | 'wrappedNativeAsset' | 'amountsIn' | 'tokensIn'\n >): SortedValues => {\n // Parse pool info into EVM amounts in order to match amountsIn scalling\n const {\n poolTokens,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n scalingFactors,\n upScaledBalances,\n } = parsePoolInfo(pool, wrappedNativeAsset, tokensIn.includes(AddressZero));\n\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts in into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, sortedAmountsIn] = assetHelpers.sortTokens(\n tokensIn,\n amountsIn\n ) as [string[], string[]];\n\n // Maths should use upscaled amounts, e.g. 1USDC => 1e18 not 1e6\n const upScaledAmountsIn = _upscaleArray(\n sortedAmountsIn.map((a) => BigInt(a)),\n scalingFactors.map((a) => BigInt(a))\n );\n return {\n poolTokens,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n upScaledBalances,\n upScaledAmountsIn,\n sortedAmountsIn,\n };\n };\n\n calcBptOutGivenExactTokensIn = ({\n ampWithPrecision,\n upScaledBalances,\n upScaledAmountsIn,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: Pick &\n Pick<\n SortedValues,\n | 'ampWithPrecision'\n | 'upScaledBalances'\n | 'upScaledAmountsIn'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n >): { expectedBPTOut: string; minBPTOut: string } => {\n const expectedBPTOut = SOR.StableMathBigInt._calcBptOutGivenExactTokensIn(\n ampWithPrecision,\n upScaledBalances,\n upScaledAmountsIn,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n const minBPTOut = subSlippage(\n BigNumber.from(expectedBPTOut),\n BigNumber.from(slippage)\n ).toString();\n\n return {\n expectedBPTOut,\n minBPTOut,\n };\n };\n\n encodeJoinPool = ({\n poolId,\n joiner,\n poolTokens,\n sortedAmountsIn,\n amountsIn,\n tokensIn,\n minBPTOut,\n }: EncodeJoinPoolParams): Pick<\n JoinPoolAttributes,\n 'value' | 'data' | 'to' | 'functionName' | 'attributes'\n > => {\n const userData = StablePoolEncoder.joinExactTokensInForBPTOut(\n sortedAmountsIn,\n minBPTOut\n );\n\n const to = balancerVault;\n const functionName = 'joinPool';\n const attributes: JoinPool = {\n poolId,\n sender: joiner,\n recipient: joiner,\n joinPoolRequest: {\n assets: poolTokens,\n maxAmountsIn: sortedAmountsIn,\n userData,\n fromInternalBalance: false,\n },\n };\n const vaultInterface = Vault__factory.createInterface();\n // encode transaction data into an ABI byte string which can be sent to the network to be executed\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ]);\n\n // If joining with a native asset value must be set in call\n const value = getEthValue(tokensIn, amountsIn);\n\n return {\n attributes,\n data,\n functionName,\n to,\n value,\n };\n };\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { parseFixed } from '@/lib/utils/math';\n\nconst SCALING_FACTOR = 18;\n\nexport class StablePoolLiquidity implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = BigNumber.from(0);\n let sumValue = BigNumber.from(0);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(token.price.usd.toString(), SCALING_FACTOR);\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n\n const value = balance.mul(price);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance.gt(0)) {\n const avgPrice = sumValue.div(sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n\n const value = balance.mul(avgPrice);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n }\n\n return formatFixed(sumValue, SCALING_FACTOR * 2).toString();\n }\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, StablePool, ZERO } from '@balancer-labs/sor';\nimport { Pool } from '@/types';\n\nexport class StablePoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const stablePool = StablePool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = stablePool.parsePoolPairData(tokenIn, tokenOut);\n return stablePool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n }\n}\n","import { StablePoolExit } from './concerns/stable/exit.concern';\nimport { StablePoolJoin } from './concerns/stable/join.concern';\nimport { StablePoolLiquidity } from './concerns/stable/liquidity.concern';\nimport { StablePoolSpotPrice } from './concerns/stable/spotPrice.concern';\nimport { StablePoolPriceImpact } from './concerns/stable/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class Stable implements PoolType {\n constructor(\n public exit: ExitConcern = new StablePoolExit(),\n public join: JoinConcern = new StablePoolJoin(),\n public liquidity: LiquidityConcern = new StablePoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new StablePoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new StablePoolPriceImpact()\n ) {}\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, PhantomStablePool, ZERO } from '@balancer-labs/sor';\nimport { Pool } from '@/types';\n\nexport class PhantomStablePoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const metaStablePool = PhantomStablePool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = metaStablePool.parsePoolPairData(tokenIn, tokenOut);\n return metaStablePool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n }\n}\n","import { StableMathBigInt } from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { balancerVault } from '@/lib/constants/config';\nimport {\n AssetHelpers,\n parsePoolInfo,\n insert,\n reorderArrays,\n getEthValue,\n} from '@/lib/utils';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { _upscaleArray } from '@/lib/utils/solidityMaths';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { Pool } from '@/types';\n\nimport { StablePoolPriceImpact } from '../stable/priceImpact.concern';\nimport {\n JoinPoolParameters,\n JoinConcern,\n JoinPoolAttributes,\n JoinPool,\n} from '../types';\nimport { AddressZero } from '@ethersproject/constants';\n\ninterface SortedValues {\n sortedAmountsIn: string[];\n scalingFactorsWithoutBpt: bigint[];\n upScaledBalancesWithoutBpt: bigint[];\n ampWithPrecision: bigint;\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n bptIndex: number;\n poolTokens: string[];\n}\n\ntype SortedInputs = SortedValues &\n Pick & {\n poolId: string;\n };\n\nexport class ComposableStablePoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n this.checkInputs(tokensIn, amountsIn, pool.tokensList);\n\n const sortedValues = this.sortValuesBasedOnPoolVersion({\n pool,\n wrappedNativeAsset,\n amountsIn,\n tokensIn,\n });\n\n const encodedData = this.buildExactTokensInForBPTOut({\n ...sortedValues,\n slippage,\n joiner,\n poolId: pool.id,\n });\n\n // If joining with a native asset value must be set in call\n const value = getEthValue(tokensIn, amountsIn);\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n sortedValues.sortedAmountsIn.map(BigInt),\n BigInt(encodedData.expectedBPTOut),\n true\n );\n\n return {\n ...encodedData,\n to: balancerVault,\n value,\n priceImpact,\n };\n };\n\n /**\n * Sorts inputs and pool value to be correct order and scale for maths and Vault interaction.\n * @param pool Pool data\n * @param wrappedNativeAsset (Used for sorting)\n * @param amountsIn Downscaled amounts in\n * @param tokensIn Addresses of token in\n * @returns Sorted values\n */\n sortValuesBasedOnPoolVersion({\n pool,\n wrappedNativeAsset,\n amountsIn,\n tokensIn,\n }: Pick<\n JoinPoolParameters,\n 'pool' | 'wrappedNativeAsset' | 'amountsIn' | 'tokensIn'\n >): SortedValues {\n /**\n * V1: Does not have proportional exits.\n * V2: Reintroduced proportional exits. Has vulnerability.\n * V3: Fixed vulnerability. Functionally the same as V2.\n * V4: Update to use new create method with new salt parameter\n * V5: Fixed vulnerability. Functionally the same as V4.\n */\n return this.sortV1(wrappedNativeAsset, tokensIn, amountsIn, pool);\n // Not release yet and needs tests to confirm\n // else if (values.pool.poolTypeVersion === 5)\n // sortedValues = this.sortV4(\n // values.tokensIn,\n // values.amountsIn,\n // values.pool\n // );\n }\n\n /**\n * Ensure tokensIn and amountsIn match pool tokens length\n * @param tokensIn\n * @param amountsIn\n * @param poolTokens\n */\n checkInputs(\n tokensIn: string[],\n amountsIn: string[],\n poolTokens: string[]\n ): void {\n if (\n tokensIn.length != amountsIn.length ||\n tokensIn.length != poolTokens.length - 1\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n }\n\n /**\n * Encodes user data with slippage applied to expected BPT out.\n * @param expectedBPTOut\n * @param slippage\n * @param amountsIn\n * @returns\n */\n encodeUserDataExactTokensInForBPTOut(\n expectedBPTOut: bigint,\n slippage: string,\n amountsIn: string[]\n ): { userData: string; minBPTOut: string } {\n const minBPTOut = subSlippage(\n BigNumber.from(expectedBPTOut),\n BigNumber.from(slippage)\n ).toString();\n\n //NEEDS TO ENCODE USER DATA WITHOUT BPT AMOUNT\n return {\n userData: ComposableStablePoolEncoder.joinExactTokensInForBPTOut(\n amountsIn, // No BPT amount\n minBPTOut\n ),\n minBPTOut,\n };\n }\n\n /**\n * Encode transaction data into an ABI byte string which can be sent to the network to be executed\n * @param poolId\n * @param sender\n * @param recipient\n * @param assetsWithBpt\n * @param encodedUserData\n * @param maxAmountsInWithBpt\n * @returns\n */\n encodeJoinPool(\n poolId: string,\n sender: string,\n recipient: string,\n assetsWithBpt: string[],\n encodedUserData: string,\n maxAmountsInWithBpt: string[]\n ): Pick {\n const functionName = 'joinPool';\n //assets AND maxAmountsIn NEEDS THE BPT VALUE IN THE ARRAY\n const attributes: JoinPool = {\n poolId,\n sender,\n recipient,\n joinPoolRequest: {\n assets: assetsWithBpt,\n maxAmountsIn: maxAmountsInWithBpt,\n userData: encodedUserData,\n fromInternalBalance: false,\n },\n };\n\n const vaultInterface = Vault__factory.createInterface();\n\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ]);\n\n return {\n functionName,\n attributes,\n data,\n };\n }\n\n /**\n * Sorts and scales values correctly for V1-V3 ComposableStable pool.\n * @param wrappedNativeAsset (Used for sorting)\n * @param tokensIn Addresses of token in\n * @param amountsIn Downscaled amounts in\n * @param pool Pool data\n * @returns Sorted values\n */\n sortV1(\n wrappedNativeAsset: string,\n tokensIn: string[],\n amountsIn: string[],\n pool: Pool\n ): SortedValues {\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts in into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, sortedAmountsIn] = assetHelpers.sortTokens(\n tokensIn,\n amountsIn\n ) as [string[], string[]];\n\n const {\n poolTokens,\n ampWithPrecision,\n swapFeeEvm,\n totalSharesEvm,\n bptIndex,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n } = parsePoolInfo(pool, wrappedNativeAsset, tokensIn.includes(AddressZero));\n return {\n sortedAmountsIn,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n bptIndex,\n poolTokens,\n };\n }\n\n buildExactTokensInForBPTOut(\n sortedValues: SortedInputs\n ): Pick<\n JoinPoolAttributes,\n 'minBPTOut' | 'functionName' | 'attributes' | 'data' | 'expectedBPTOut'\n > {\n const {\n sortedAmountsIn,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n bptIndex,\n poolTokens,\n slippage,\n poolId,\n joiner,\n } = sortedValues;\n // BPT out will be in correct scale and price rate is always 1e18 do doesn't need to be considered\n // Maths needs to have BPT values removed\n const expectedBPTOut = this.calcBptOutGivenExactTokensIn(\n sortedAmountsIn,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm\n );\n\n const userData = this.encodeUserDataExactTokensInForBPTOut(\n expectedBPTOut,\n slippage,\n sortedAmountsIn\n );\n\n const { functionName, data, attributes } = this.encodeJoinPool(\n poolId,\n joiner,\n joiner,\n poolTokens,\n userData.userData,\n insert(sortedAmountsIn, bptIndex, '0') // Adds value for BPT\n );\n\n return {\n functionName,\n data,\n attributes,\n minBPTOut: userData.minBPTOut,\n expectedBPTOut: expectedBPTOut.toString(),\n };\n }\n\n calcBptOutGivenExactTokensIn(\n amountsIn: string[],\n scalingFactorsWithoutBpt: bigint[],\n upScaledBalancesWithoutBpt: bigint[],\n ampWithPrecision: bigint,\n totalSharesEvm: bigint,\n swapFeeEvm: bigint\n ): bigint {\n /*\n Maths should use: \n - upscaled amounts, e.g. 1USDC = 1e18\n - rates (scaling factors should include these)\n */\n const upScaledAmountsIn = _upscaleArray(\n amountsIn.map(BigInt),\n scalingFactorsWithoutBpt.map(BigInt)\n );\n const expectedBPTOut = StableMathBigInt._calcBptOutGivenExactTokensIn(\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n upScaledAmountsIn, // Should not have BPT\n totalSharesEvm,\n swapFeeEvm\n );\n // BPT out will be in correct scale and price rate is always 1e18 do doesn't need to be considered\n return expectedBPTOut;\n }\n\n // This uses sorting where BPT is always at index 0.\n // Not currently released but keep for when it is.\n sortV4(tokensIn: string[], amountsIn: string[], pool: Pool): SortedValues {\n // This will keep ordering as read from Pool\n const {\n poolTokens,\n poolTokensWithoutBpt,\n ampWithPrecision,\n swapFeeEvm,\n totalSharesEvm,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n } = parsePoolInfo(pool);\n\n // Reorder amountsIn to match pool token order TODO - May have issues when adding native tokens to this mix.\n const [sortedAmountsIn] = reorderArrays(\n poolTokensWithoutBpt,\n tokensIn,\n amountsIn\n ) as [string[]];\n return {\n sortedAmountsIn,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n bptIndex: 0,\n poolTokens,\n };\n }\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\n\nimport * as SOR from '@balancer-labs/sor';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport {\n AssetHelpers,\n insert,\n isSameAddress,\n parsePoolInfo,\n} from '@/lib/utils';\nimport { addSlippage, subSlippage } from '@/lib/utils/slippageHelper';\nimport {\n _downscaleDown,\n _downscaleDownArray,\n _upscaleArray,\n} from '@/lib/utils/solidityMaths';\nimport { balancerVault } from '@/lib/constants/config';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { Pool } from '@/types';\nimport {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactBPTInParameters,\n ExitExactTokensOutAttributes,\n ExitExactTokensOutParameters,\n ExitPool,\n ExitPoolAttributes,\n} from '../types';\nimport { BasePoolEncoder } from '@/pool-base';\nimport { StablePoolPriceImpact } from '../stable/priceImpact.concern';\n\ninterface SortedValues {\n poolTokens: string[];\n ampWithPrecision: bigint;\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n bptIndex: number;\n upScaledBalancesWithoutBpt: bigint[];\n scalingFactors: bigint[];\n scalingFactorsWithoutBpt: bigint[];\n}\n\ntype ExactBPTInSortedValues = SortedValues & {\n singleTokenOutIndexWithoutBpt: number;\n};\ntype ExactTokensOutSortedValues = SortedValues & {\n upScaledAmountsOutWithoutBpt: bigint[];\n downscaledAmountsOutWithoutBpt: string[];\n downscaledAmountsOutWithBpt: string[];\n};\n\ntype CalcBptInGivenExactTokensOutParams = ExactTokensOutSortedValues &\n Pick;\n\ntype SortValuesParams = {\n pool: Pool;\n wrappedNativeAsset: string;\n shouldUnwrapNativeAsset?: boolean;\n};\n\ntype SortValuesExactBptInParams = SortValuesParams & {\n singleTokenOut?: string;\n};\n\ntype SortValuesExactTokensOutParams = SortValuesParams & {\n amountsOut: string[];\n tokensOut: string[];\n};\n\ntype EncodeExitParams = Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'toInternalBalance'\n> & {\n poolTokens: string[];\n poolId: string;\n userData: string;\n minAmountsOut: string[];\n};\n\nexport class ComposableStablePoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n });\n\n const sortedValues = this.sortValuesExitExactBptIn({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n });\n\n const { minAmountsOut, expectedAmountsOut } =\n sortedValues.singleTokenOutIndexWithoutBpt >= 0\n ? this.calcTokenOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n })\n : this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData =\n sortedValues.singleTokenOutIndexWithoutBpt >= 0\n ? ComposableStablePoolEncoder.exitExactBPTInForOneTokenOut(\n bptIn,\n sortedValues.singleTokenOutIndexWithoutBpt\n )\n : ComposableStablePoolEncoder.exitExactBPTInForAllTokensOut(bptIn);\n\n // MinAmounts needs a value for BPT for encoding\n const minAmountsOutWithBpt = insert(\n minAmountsOut,\n sortedValues.bptIndex,\n '0'\n );\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n userData,\n minAmountsOut: minAmountsOutWithBpt,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n this.checkInputsExactTokensOut(tokensOut, amountsOut, pool);\n const sortedValues = this.sortValuesExitExactTokensOut({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n });\n\n const { bptIn, maxBPTIn } = this.calcBptInGivenExactTokensOut({\n ...sortedValues,\n slippage,\n });\n\n // Have to make sure amountsOut does not have value for BPT index\n const userData = ComposableStablePoolEncoder.exitBPTInForExactTokensOut(\n sortedValues.downscaledAmountsOutWithoutBpt,\n maxBPTIn\n );\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n minAmountsOut: sortedValues.downscaledAmountsOutWithBpt,\n userData,\n exiter,\n poolId: pool.id,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n sortedValues.downscaledAmountsOutWithoutBpt.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n maxBPTIn,\n expectedBPTIn: bptIn,\n priceImpact,\n };\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n this.checkInputsRecoveryExit({\n bptIn,\n pool,\n });\n // Recovery exits don't use rates. We use them as part of scalingFactor so default to 1 incase of issues\n pool.tokens.forEach((t) => (t.priceRate = '1'));\n\n const sortedValues = parsePoolInfo(pool);\n\n const { minAmountsOut, expectedAmountsOut } =\n this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData = BasePoolEncoder.recoveryModeExit(bptIn);\n\n // MinAmounts needs a value for BPT for encoding\n const minAmountsOutWithBpt = insert(\n minAmountsOut,\n sortedValues.bptIndex,\n '0'\n );\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n userData,\n minAmountsOut: minAmountsOutWithBpt,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt amoun in EVM scale\n * @param singleTokenOut (optional) the address of the single token that will be withdrawn, if null|undefined, all tokens will be withdrawn proportionally.\n * @param pool the pool that is being exited\n * @param shouldUnwrapNativeAsset Set true if the weth should be unwrapped to Eth\n */\n checkInputsExactBPTIn = ({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n }: Pick<\n ExitExactBPTInParameters,\n 'bptIn' | 'singleTokenOut' | 'pool' | 'shouldUnwrapNativeAsset'\n >): void => {\n if (BigNumber.from(bptIn).lte(0)) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n if (!singleTokenOut && pool.poolTypeVersion < 2) {\n throw new Error('Unsupported Exit Type For Pool');\n }\n if (\n singleTokenOut &&\n singleTokenOut !== AddressZero &&\n !pool.tokens\n .map((t) => t.address)\n .some((a) => isSameAddress(a, singleTokenOut))\n ) {\n throw new BalancerError(BalancerErrorCode.TOKEN_MISMATCH);\n }\n\n if (!shouldUnwrapNativeAsset && singleTokenOut === AddressZero)\n throw new Error(\n 'shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values'\n );\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n\n /**\n * Checks if the input of buildExitExactTokensOut is valid\n */\n checkInputsExactTokensOut = (\n tokensOut: string[],\n amountsOut: string[],\n pool: Pool\n ): void => {\n // Should have a token for input for each non-BPT pool token\n // Should be an amount out for each token out\n if (\n tokensOut.length != amountsOut.length ||\n tokensOut.length != pool.tokensList.length - 1\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt amount in EVM scale\n * @param pool the pool that is being exited\n */\n checkInputsRecoveryExit = ({\n bptIn,\n pool,\n }: Pick): void => {\n if (BigNumber.from(bptIn).lte(0)) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n if (!pool.isInRecoveryMode) {\n throw new Error(\n 'Exit type not supported because pool is not in Recovery Mode'\n );\n }\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n\n /**\n * Sorts and returns the values of amounts, tokens, balances, indexes, that are necessary to do the maths and build the exit transactions\n * @param pool\n * @param singleTokenOut\n * @param wrappedNativeAsset\n * @param shouldUnwrapNativeAsset\n * @param amountsOut\n * @param tokensOut\n */\n sortValuesExitExactBptIn = ({\n pool,\n singleTokenOut,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n }: SortValuesExactBptInParams): ExactBPTInSortedValues => {\n const parsedValues = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n let singleTokenOutIndexWithoutBpt = -1;\n if (singleTokenOut) {\n singleTokenOutIndexWithoutBpt =\n parsedValues.poolTokensWithoutBpt.indexOf(singleTokenOut);\n }\n return {\n ...parsedValues,\n singleTokenOutIndexWithoutBpt,\n };\n };\n /**\n * Sorts and returns the values of amounts, tokens, balances, indexes, that are necessary to do the maths and build the exit transactions\n * @param pool\n * @param singleTokenOut\n * @param wrappedNativeAsset\n * @param amountsOut\n * @param tokensOut\n */\n sortValuesExitExactTokensOut = ({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n }: SortValuesExactTokensOutParams): ExactTokensOutSortedValues => {\n const shouldUnwrapNativeAsset = tokensOut.some((a) => a === AddressZero);\n const parsedValues = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts out into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, downscaledAmountsOutWithoutBpt] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n const downscaledAmountsOutWithBpt = insert(\n downscaledAmountsOutWithoutBpt,\n parsedValues.bptIndex,\n '0'\n );\n\n // This should not be required but there is currently a rounding issue with maths and this will ensure tx\n const downscaledAmountsOutWithBptWithRounding =\n downscaledAmountsOutWithBpt.map((a) => {\n const value = BigNumber.from(a);\n return value.isZero() ? a : value.sub(1).toString();\n });\n\n // Maths should use upscaled amounts with rates, e.g. 1USDC => 1e18 not 1e6\n const upScaledAmountsOutWithoutBpt = _upscaleArray(\n downscaledAmountsOutWithoutBpt.map((a) => BigInt(a)),\n parsedValues.scalingFactorsWithoutBpt\n );\n\n return {\n ...parsedValues,\n upScaledAmountsOutWithoutBpt,\n downscaledAmountsOutWithBpt: downscaledAmountsOutWithBptWithRounding,\n downscaledAmountsOutWithoutBpt,\n };\n };\n /**\n * Calculate the minimum and expect amountOut of the exit with exact bpt in transaction, and passes it to minAmountsOut and expectedAmountsOut arrays passed as parameters;\n * @param sortedValues\n * @param expectedAmountsOut\n * @param minAmountsOut\n * @param bptIn\n * @param slippage\n */\n calcTokenOutGivenExactBptIn = ({\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n singleTokenOutIndexWithoutBpt,\n scalingFactorsWithoutBpt,\n totalSharesEvm,\n swapFeeEvm,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n | 'ampWithPrecision'\n | 'upScaledBalancesWithoutBpt'\n | 'singleTokenOutIndexWithoutBpt'\n | 'scalingFactorsWithoutBpt'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n // Calculate amount out given BPT in\n const amountOut = SOR.StableMathBigInt._calcTokenOutGivenExactBptIn(\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n singleTokenOutIndexWithoutBpt,\n BigInt(bptIn),\n totalSharesEvm,\n swapFeeEvm\n );\n const expectedAmountsOut = Array(upScaledBalancesWithoutBpt.length).fill(\n '0'\n );\n const minAmountsOut = Array(upScaledBalancesWithoutBpt.length).fill('0');\n // Downscales to token decimals and removes priceRate\n const downscaledAmountOut = _downscaleDown(\n amountOut,\n scalingFactorsWithoutBpt[singleTokenOutIndexWithoutBpt]\n );\n\n expectedAmountsOut[singleTokenOutIndexWithoutBpt] =\n downscaledAmountOut.toString();\n // Apply slippage tolerance\n minAmountsOut[singleTokenOutIndexWithoutBpt] = subSlippage(\n BigNumber.from(downscaledAmountOut),\n BigNumber.from(slippage)\n ).toString();\n\n return { minAmountsOut, expectedAmountsOut };\n };\n\n calcTokensOutGivenExactBptIn = ({\n upScaledBalancesWithoutBpt,\n totalSharesEvm,\n scalingFactorsWithoutBpt,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n 'upScaledBalancesWithoutBpt' | 'totalSharesEvm' | 'scalingFactorsWithoutBpt'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n const amountsOut = SOR.StableMathBigInt._calcTokensOutGivenExactBptIn(\n upScaledBalancesWithoutBpt,\n BigInt(bptIn),\n totalSharesEvm\n );\n // Maths return numbers scaled to 18 decimals. Must scale down to token decimals.\n const amountsOutScaledDown = _downscaleDownArray(\n amountsOut,\n scalingFactorsWithoutBpt\n );\n\n const expectedAmountsOut = amountsOutScaledDown.map((amount) =>\n amount.toString()\n );\n // Apply slippage tolerance\n const minAmountsOut = amountsOutScaledDown.map((amount) => {\n const minAmount = subSlippage(\n BigNumber.from(amount),\n BigNumber.from(slippage)\n );\n return minAmount.toString();\n });\n return { minAmountsOut, expectedAmountsOut };\n };\n\n /**\n * Calculate the bptIn and maxBPTIn of the exit with exact tokens out transaction and returns them;\n * @param ampWithPrecision\n * @param upScaledBalancesWithoutBpt\n * @param upScaledAmountsOut\n * @param totalSharesEvm\n * @param swapFeeEvm\n * @param slippage\n */\n calcBptInGivenExactTokensOut = ({\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n upScaledAmountsOutWithoutBpt,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: CalcBptInGivenExactTokensOutParams): {\n bptIn: string;\n maxBPTIn: string;\n } => {\n const bptIn = SOR.StableMathBigInt._calcBptInGivenExactTokensOut(\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n upScaledAmountsOutWithoutBpt,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n // Apply slippage tolerance\n const maxBPTIn = addSlippage(\n BigNumber.from(bptIn),\n BigNumber.from(slippage)\n ).toString();\n\n return { bptIn, maxBPTIn };\n };\n\n /**\n * Encodes the function data and does the final building of the exit(with exact tokens out) transaction\n * @param params\n */\n encodeExitPool = (params: EncodeExitParams): ExitPoolAttributes => {\n const {\n exiter,\n poolId,\n minAmountsOut,\n userData,\n poolTokens,\n toInternalBalance,\n } = params;\n\n const to = balancerVault;\n const functionName = 'exitPool';\n const attributes: ExitPool = {\n poolId: poolId,\n sender: exiter,\n recipient: exiter,\n exitPoolRequest: {\n assets: poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n },\n };\n\n // encode transaction data into an ABI byte string which can be sent to the network to be executed\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.exitPoolRequest,\n ]);\n\n return {\n to,\n functionName,\n attributes,\n data,\n };\n };\n}\n","import { StablePoolLiquidity } from './concerns/stable/liquidity.concern';\nimport { PhantomStablePoolSpotPrice } from './concerns/stablePhantom/spotPrice.concern';\nimport { StablePoolPriceImpact } from './concerns/stable/priceImpact.concern';\nimport { ComposableStablePoolJoin } from './concerns/composableStable/join.concern';\nimport { ComposableStablePoolExit } from './concerns/composableStable/exit.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class ComposableStable implements PoolType {\n constructor(\n public exit: ExitConcern = new ComposableStablePoolExit(),\n public liquidity: LiquidityConcern = new StablePoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new PhantomStablePoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new StablePoolPriceImpact(),\n public join: JoinConcern = new ComposableStablePoolJoin()\n ) {}\n}\n","import { PriceImpactConcern } from '@/modules/pools/pool-types/concerns/types';\nimport { calcPriceImpact } from '@/modules/pricing/priceImpact';\nimport { ONE, BZERO, _upscale } from '@/lib/utils/solidityMaths';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Pool } from '@/types';\nimport { parsePoolInfo } from '@/lib/utils';\n\nexport class WeightedPoolPriceImpact implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n if (tokenAmounts.length !== pool.tokensList.length)\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n\n // totalShares, balances and weights all scaled up to 18 decimals\n const { scalingFactorsRaw, totalSharesEvm, upScaledBalances, weights } =\n parsePoolInfo(pool);\n\n let bptZeroPriceImpact = BZERO;\n for (let i = 0; i < tokenAmounts.length; i++) {\n const price = (weights[i] * totalSharesEvm) / upScaledBalances[i];\n const amountUpscaled = _upscale(tokenAmounts[i], scalingFactorsRaw[i]);\n const newTerm = (price * amountUpscaled) / ONE;\n bptZeroPriceImpact += newTerm;\n }\n return bptZeroPriceImpact;\n }\n\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n const bptZeroPriceImpact = this.bptZeroPriceImpact(pool, tokenAmounts);\n return calcPriceImpact(bptAmount, bptZeroPriceImpact, isJoin).toString();\n }\n}\n","import { BigNumber, parseFixed } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport * as SOR from '@balancer-labs/sor';\nimport {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n ExitExactBPTInParameters,\n ExitExactTokensOutParameters,\n ExitPool,\n ExitPoolAttributes,\n} from '../types';\nimport { AssetHelpers, isSameAddress, parsePoolInfo } from '@/lib/utils';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { addSlippage, subSlippage } from '@/lib/utils/slippageHelper';\nimport { balancerVault } from '@/lib/constants/config';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport {\n _downscaleDown,\n _downscaleDownArray,\n _upscaleArray,\n} from '@/lib/utils/solidityMaths';\nimport { Pool } from '@/types';\nimport { BasePoolEncoder } from '@/pool-base';\nimport { WeightedPoolPriceImpact } from '../weighted/priceImpact.concern';\n\ninterface SortedValues {\n poolTokens: string[];\n weights: bigint[];\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n}\n\ntype ExactBPTInSortedValues = SortedValues & {\n scalingFactors: bigint[];\n singleTokenOutIndex: number;\n};\n\ntype ExactTokensOutSortedValues = SortedValues & {\n upScaledAmountsOut: bigint[];\n downScaledAmountsOut: string[];\n};\ntype CalcBptInGivenExactTokensOutParams = ExactTokensOutSortedValues &\n Pick;\n\ntype SortValuesParams = {\n pool: Pool;\n wrappedNativeAsset: string;\n shouldUnwrapNativeAsset?: boolean;\n};\n\ntype SortValuesExactBptInParams = SortValuesParams & {\n singleTokenOut?: string;\n};\n\ntype SortValuesExactTokensOutParams = SortValuesParams & {\n amountsOut: string[];\n tokensOut: string[];\n};\n\ntype EncodeExitParams = Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'toInternalBalance'\n> & {\n poolTokens: string[];\n poolId: string;\n userData: string;\n minAmountsOut: string[];\n};\n\nexport class WeightedPoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n });\n const sortedValues = this.sortValuesExitExactBptIn({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n });\n const { minAmountsOut, expectedAmountsOut } =\n sortedValues.singleTokenOutIndex >= 0\n ? this.calcTokenOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n })\n : this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData =\n sortedValues.singleTokenOutIndex >= 0\n ? WeightedPoolEncoder.exitExactBPTInForOneTokenOut(\n bptIn,\n sortedValues.singleTokenOutIndex\n )\n : WeightedPoolEncoder.exitExactBPTInForTokensOut(bptIn);\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new WeightedPoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n this.checkInputsExactTokensOut(amountsOut, tokensOut, pool);\n\n const sortedValues = this.sortValuesExitExactTokensOut({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n });\n const { expectedBPTIn, maxBPTIn } = this.calcBptInGivenExactTokensOut({\n ...sortedValues,\n slippage,\n });\n\n const { downScaledAmountsOut, poolTokens } = sortedValues;\n const userData = WeightedPoolEncoder.exitBPTInForExactTokensOut(\n downScaledAmountsOut,\n maxBPTIn\n );\n const encodedData = this.encodeExitPool({\n poolId: pool.id,\n userData,\n poolTokens,\n minAmountsOut: downScaledAmountsOut,\n exiter,\n toInternalBalance,\n });\n\n const priceImpactConcern = new WeightedPoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n downScaledAmountsOut.map(BigInt),\n BigInt(expectedBPTIn),\n false\n );\n\n return {\n ...encodedData,\n expectedBPTIn,\n maxBPTIn,\n priceImpact,\n };\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut: undefined,\n pool,\n shouldUnwrapNativeAsset: false,\n });\n // Recovery exits don't use rates. We use them as part of scalingFactor so default to 1 incase of issues\n pool.tokens.forEach((t) => (t.priceRate = '1'));\n const sortedValues = parsePoolInfo(pool);\n const { minAmountsOut, expectedAmountsOut } =\n this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n singleTokenOutIndex: -1,\n });\n\n const userData = BasePoolEncoder.recoveryModeExit(bptIn);\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new WeightedPoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt inserted in the transaction\n * @param singleTokenOut (optional) the address of the single token that will be withdrawn, if null|undefined, all tokens will be withdrawn proportionally.\n * @param pool the pool that is being exited\n * @param shouldUnwrapNativeAsset Set true if the weth should be unwrapped to Eth\n */\n checkInputsExactBPTIn = ({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n }: Pick<\n ExitExactBPTInParameters,\n 'bptIn' | 'singleTokenOut' | 'pool' | 'shouldUnwrapNativeAsset'\n >): void => {\n if (!bptIn.length || parseFixed(bptIn, 18).isNegative()) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n if (\n singleTokenOut &&\n singleTokenOut !== AddressZero &&\n !pool.tokens\n .map((t) => t.address)\n .some((a) => isSameAddress(a, singleTokenOut))\n ) {\n throw new BalancerError(BalancerErrorCode.TOKEN_MISMATCH);\n }\n\n if (!shouldUnwrapNativeAsset && singleTokenOut === AddressZero)\n throw new Error(\n 'shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values'\n );\n\n // Check if there's any relevant weighted pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n };\n /**\n * Checks if the input of buildExitExactTokensOut is valid\n * @param amountsOut Must have an amount for each token, if the user will not withdraw any amount for a token, the value shall be '0'\n * @param tokensOut Must contain all the tokens of the pool\n * @param pool The pool that is being exited\n */\n checkInputsExactTokensOut = (\n amountsOut: string[],\n tokensOut: string[],\n pool: Pool\n ): void => {\n if (\n tokensOut.length != amountsOut.length ||\n tokensOut.length != pool.tokensList.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n // Check if there's any important weighted pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n };\n sortValuesExitExactBptIn = ({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n }: SortValuesExactBptInParams): ExactBPTInSortedValues => {\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n // Parse pool info into EVM amounts in order to match amountsIn scalling\n const { poolTokens } = parsedPoolInfo;\n let singleTokenOutIndex = -1;\n if (singleTokenOut) {\n singleTokenOutIndex = poolTokens.indexOf(singleTokenOut.toLowerCase());\n }\n return {\n ...parsedPoolInfo,\n singleTokenOutIndex,\n };\n };\n sortValuesExitExactTokensOut = ({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n }: SortValuesExactTokensOutParams): ExactTokensOutSortedValues => {\n const shouldUnwrapNativeAsset = tokensOut.some((a) => a === AddressZero);\n // Parse pool info into EVM amounts in order to match amountsOut scaling\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n const { scalingFactors } = parsedPoolInfo;\n\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts in into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, downScaledAmountsOut] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n // Maths should use upscaled amounts, e.g. 1USDC => 1e18 not 1e6\n const upScaledAmountsOut = _upscaleArray(\n downScaledAmountsOut.map((a) => BigInt(a)),\n scalingFactors.map((a) => BigInt(a))\n );\n\n return {\n ...parsedPoolInfo,\n upScaledAmountsOut,\n downScaledAmountsOut,\n };\n };\n calcTokenOutGivenExactBptIn = ({\n poolTokens,\n weights,\n upScaledBalances,\n totalSharesEvm,\n swapFeeEvm,\n singleTokenOutIndex,\n bptIn,\n slippage,\n scalingFactors,\n }: Pick<\n ExactBPTInSortedValues,\n | 'poolTokens'\n | 'weights'\n | 'upScaledBalances'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n | 'singleTokenOutIndex'\n | 'scalingFactors'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n // Calculate amount out given BPT in\n const amountOut = SOR.WeightedMaths._calcTokenOutGivenExactBptIn(\n upScaledBalances[singleTokenOutIndex],\n weights[singleTokenOutIndex],\n BigInt(bptIn),\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n const downscaledAmountOut = _downscaleDown(\n BigInt(amountOut) - BigInt(1), // The -1 is to solve rounding errors, sometimes the amount comes 1 point lower than expected\n scalingFactors[singleTokenOutIndex]\n ).toString();\n\n const expectedAmountsOut = Array(poolTokens.length).fill('0');\n const minAmountsOut = Array(poolTokens.length).fill('0');\n\n expectedAmountsOut[singleTokenOutIndex] = downscaledAmountOut;\n // Apply slippage tolerance\n minAmountsOut[singleTokenOutIndex] = subSlippage(\n BigNumber.from(downscaledAmountOut),\n BigNumber.from(slippage)\n ).toString();\n\n return { minAmountsOut, expectedAmountsOut };\n };\n\n calcTokensOutGivenExactBptIn = ({\n upScaledBalances,\n totalSharesEvm,\n scalingFactors,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n | 'upScaledBalances'\n | 'totalSharesEvm'\n | 'scalingFactors'\n | 'singleTokenOutIndex'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n // Calculate amounts out given BPT in\n const amountsOut = SOR.WeightedMaths._calcTokensOutGivenExactBptIn(\n upScaledBalances,\n BigInt(bptIn),\n totalSharesEvm\n ).map((amount) => amount.toString());\n // Maths return numbers scaled to 18 decimals. Must scale down to token decimals.\n const amountsOutScaledDown = _downscaleDownArray(\n amountsOut.map((a) => BigInt(a)),\n scalingFactors\n );\n\n const expectedAmountsOut = amountsOutScaledDown.map((amount) =>\n amount.toString()\n );\n // Apply slippage tolerance\n const minAmountsOut = amountsOutScaledDown.map((amount) => {\n const minAmount = subSlippage(\n BigNumber.from(amount),\n BigNumber.from(slippage)\n );\n return minAmount.toString();\n });\n return { minAmountsOut, expectedAmountsOut };\n };\n calcBptInGivenExactTokensOut = ({\n weights,\n upScaledBalances,\n upScaledAmountsOut,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: CalcBptInGivenExactTokensOutParams): {\n maxBPTIn: string;\n expectedBPTIn: string;\n } => {\n // Calculate expected BPT in given tokens out\n const bptIn = SOR.WeightedMaths._calcBptInGivenExactTokensOut(\n upScaledBalances,\n weights,\n upScaledAmountsOut,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n // Apply slippage tolerance\n const maxBPTIn = addSlippage(\n BigNumber.from(bptIn),\n BigNumber.from(slippage)\n ).toString();\n return { maxBPTIn, expectedBPTIn: bptIn };\n };\n\n encodeExitPool = ({\n poolId,\n exiter,\n poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n }: EncodeExitParams): ExitPoolAttributes => {\n const to = balancerVault;\n const functionName = 'exitPool';\n const attributes: ExitPool = {\n poolId,\n sender: exiter,\n recipient: exiter,\n exitPoolRequest: {\n assets: poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n },\n };\n // Encode transaction data into an ABI byte string which can be sent to the network to be executed\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.exitPoolRequest,\n ]);\n return { data, to, functionName, attributes };\n };\n}\n","import { WeightedMaths } from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { balancerVault } from '@/lib/constants/config';\nimport { AssetHelpers, getEthValue, parsePoolInfo } from '@/lib/utils';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { _upscaleArray } from '@/lib/utils/solidityMaths';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { Address, Pool } from '@/types';\nimport {\n JoinConcern,\n JoinPool,\n JoinPoolAttributes,\n JoinPoolParameters,\n} from '../types';\nimport { WeightedPoolPriceImpact } from '../weighted/priceImpact.concern';\n\ntype SortedValues = {\n poolTokens: string[];\n weights: bigint[];\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n upScaledAmountsIn: bigint[];\n sortedAmountsIn: string[];\n};\n\nexport class WeightedPoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n this.checkInputs(amountsIn, tokensIn, pool);\n\n const sortedValues = this.sortValues({\n pool,\n wrappedNativeAsset,\n tokensIn,\n amountsIn,\n });\n\n const { expectedBPTOut, minBPTOut } = this.calcBptOutGivenExactTokensIn({\n ...sortedValues,\n slippage,\n });\n\n const encodedFunctionData = this.encodeJoinPool({\n ...sortedValues,\n poolId: pool.id,\n joiner,\n minBPTOut,\n tokensIn,\n amountsIn,\n });\n\n const priceImpactConcern = new WeightedPoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n sortedValues.sortedAmountsIn.map(BigInt),\n BigInt(expectedBPTOut),\n true\n );\n\n return {\n ...encodedFunctionData,\n minBPTOut,\n expectedBPTOut,\n priceImpact,\n };\n };\n\n /**\n * Check if the input parameters of the buildJoin function are right\n * @param amountsIn Must have an amount for each token, if the user will not deposit any amount for a token, the value shall be '0'\n * @param tokensIn Must contain all the tokens of the pool\n * @param pool The pool that is being joined\n */\n checkInputs = (tokensIn: string[], amountsIn: string[], pool: Pool): void => {\n if (\n tokensIn.length != amountsIn.length ||\n tokensIn.length != pool.tokensList.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n\n // Check if there's any relevant weighted pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (pool.tokens.some((token) => !token.weight))\n throw new BalancerError(BalancerErrorCode.MISSING_WEIGHT);\n };\n\n sortValues = ({\n pool,\n tokensIn,\n amountsIn,\n wrappedNativeAsset,\n }: Pick<\n JoinPoolParameters,\n 'pool' | 'wrappedNativeAsset' | 'amountsIn' | 'tokensIn'\n >): SortedValues => {\n const shouldUnwrapNativeAsset = tokensIn.some((a) => a === AddressZero);\n // Parse pool info into EVM amounts in order to match amountsIn scalling\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // sort inputs\n const [, sortedAmountsIn] = assetHelpers.sortTokens(\n tokensIn,\n amountsIn\n ) as [string[], string[]];\n const upScaledAmountsIn = _upscaleArray(\n sortedAmountsIn.map(BigInt),\n parsedPoolInfo.scalingFactors\n );\n // sort pool info\n return {\n ...parsedPoolInfo,\n sortedAmountsIn,\n upScaledAmountsIn,\n };\n };\n\n calcBptOutGivenExactTokensIn = ({\n upScaledBalances,\n weights,\n upScaledAmountsIn,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: Pick &\n Pick<\n SortedValues,\n | 'upScaledBalances'\n | 'weights'\n | 'upScaledAmountsIn'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n >): { expectedBPTOut: string; minBPTOut: string } => {\n const expectedBPTOut = WeightedMaths._calcBptOutGivenExactTokensIn(\n upScaledBalances,\n weights,\n upScaledAmountsIn,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n const minBPTOut = subSlippage(\n BigNumber.from(expectedBPTOut),\n BigNumber.from(slippage)\n ).toString();\n\n return {\n expectedBPTOut,\n minBPTOut,\n };\n };\n encodeJoinPool = ({\n sortedAmountsIn,\n poolTokens,\n poolId,\n joiner,\n minBPTOut,\n amountsIn,\n tokensIn,\n }: Pick &\n Pick & {\n joiner: Address;\n poolId: string;\n minBPTOut: string;\n }): Pick<\n JoinPoolAttributes,\n 'value' | 'data' | 'to' | 'functionName' | 'attributes'\n > => {\n const userData = WeightedPoolEncoder.joinExactTokensInForBPTOut(\n sortedAmountsIn,\n minBPTOut\n );\n const to = balancerVault;\n const functionName = 'joinPool';\n const attributes: JoinPool = {\n poolId,\n sender: joiner,\n recipient: joiner,\n joinPoolRequest: {\n assets: poolTokens,\n maxAmountsIn: sortedAmountsIn,\n userData,\n fromInternalBalance: false,\n },\n };\n const vaultInterface = Vault__factory.createInterface();\n // encode transaction data into an ABI byte string which can be sent to the network to be executed\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ]);\n\n const value = getEthValue(tokensIn, amountsIn);\n\n return {\n to,\n functionName,\n data,\n attributes,\n value,\n };\n };\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { parseFixed, formatFixed } from '@/lib/utils/math';\n\nconst SCALING_FACTOR = 18;\n\nexport class WeightedPoolLiquidity implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumWeight = BigNumber.from(0);\n let sumValue = BigNumber.from(0);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (!token.price?.usd) {\n continue;\n }\n\n let price: BigNumber;\n if (parseFloat(token.price.usd) < 1) {\n price = parseFixed(parseFloat(token.price.usd).toFixed(10), 10).mul(\n 1e8\n );\n } else {\n price = parseFixed(token.price.usd, SCALING_FACTOR);\n }\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n const weight = parseFixed(token.weight || '0', SCALING_FACTOR);\n\n const value = balance.mul(price);\n sumValue = sumValue.add(value);\n sumWeight = sumWeight.add(weight);\n }\n\n // Scale the known prices of x% of the pool to get value of 100% of the pool.\n const totalWeight = tokens.reduce(\n (total: BigNumber, token) =>\n total.add(parseFixed(token.weight || '0', SCALING_FACTOR)),\n BigNumber.from(0)\n );\n if (sumWeight.gt(0)) {\n const liquidity = sumValue.mul(totalWeight).div(sumWeight);\n return formatFixed(liquidity, SCALING_FACTOR * 2);\n }\n\n return '0';\n }\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, WeightedPool, ZERO } from '@balancer-labs/sor';\nimport { Pool, PoolToken } from '@/types';\n\nexport class WeightedPoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const isBPTAsToken = tokenIn === pool.address || tokenOut === pool.address;\n if (isBPTAsToken) {\n const bptAsToken: PoolToken = {\n address: pool.address,\n balance: pool.totalShares,\n decimals: 18,\n priceRate: '1',\n weight: '0',\n };\n pool.tokens.push(bptAsToken);\n pool.tokensList.push(pool.address);\n }\n const weightedPool = WeightedPool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = weightedPool.parsePoolPairData(tokenIn, tokenOut);\n const spotPrice = weightedPool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n if (isBPTAsToken) {\n pool.tokens.pop();\n pool.tokensList.pop();\n }\n return spotPrice;\n }\n}\n","import { WeightedPoolExit } from './concerns/weighted/exit.concern';\nimport { WeightedPoolJoin } from './concerns/weighted/join.concern';\nimport { WeightedPoolLiquidity } from './concerns/weighted/liquidity.concern';\nimport { WeightedPoolSpotPrice } from './concerns/weighted/spotPrice.concern';\nimport { WeightedPoolPriceImpact } from './concerns/weighted/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class Weighted implements PoolType {\n constructor(\n public exit: ExitConcern = new WeightedPoolExit(),\n public join: JoinConcern = new WeightedPoolJoin(),\n public liquidity: LiquidityConcern = new WeightedPoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new WeightedPoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new WeightedPoolPriceImpact()\n ) {}\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { formatFixed } from '@ethersproject/bignumber';\nimport { parseFixed } from '@/lib/utils/math';\nimport { Zero } from '@ethersproject/constants';\n\nconst SCALING_FACTOR = 18;\n\nexport class MetaStablePoolLiquidity implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = Zero;\n let sumValue = Zero;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(token.price.usd.toString(), SCALING_FACTOR);\n\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n\n const value = balance.mul(price);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance.gt(0)) {\n const avgPrice = sumValue.div(sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n\n const value = balance.mul(avgPrice);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n }\n\n return formatFixed(sumValue, SCALING_FACTOR * 2).toString();\n }\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, MetaStablePool, ZERO } from '@balancer-labs/sor';\nimport { Pool } from '@/types';\n\nexport class MetaStablePoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const metaStablePool = MetaStablePool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = metaStablePool.parsePoolPairData(tokenIn, tokenOut);\n return metaStablePool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n }\n}\n","import { MetaStablePoolLiquidity } from './concerns/metaStable/liquidity.concern';\nimport { MetaStablePoolSpotPrice } from './concerns/metaStable/spotPrice.concern';\nimport { StablePoolPriceImpact } from './concerns/stable/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n SpotPriceConcern,\n PriceImpactConcern,\n} from './concerns/types';\nimport { StablePoolExit } from '@/modules/pools/pool-types/concerns/stable/exit.concern';\nimport { StablePoolJoin } from '@/modules/pools/pool-types/concerns/stable/join.concern';\n\nexport class MetaStable implements PoolType {\n constructor(\n public exit: ExitConcern = new StablePoolExit(),\n public join: JoinConcern = new StablePoolJoin(),\n public liquidity: LiquidityConcern = new MetaStablePoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new MetaStablePoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new StablePoolPriceImpact()\n ) {}\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {\n ExitConcern,\n ExitExactBPTInParameters,\n ExitExactTokensOutParameters,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n} from '../types';\n\nexport class StablePhantomPoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n /**\n * Exit type only supported when pool is in paused state and pause window\n * has expired, so this type of exit will not be supported.\n */\n throw new Error('Exit type not supported');\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n throw new Error('Exit type not supported');\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n throw new Error('Exit type not supported');\n };\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { JoinPoolParameters, JoinConcern, JoinPoolAttributes } from '../types';\n\nexport class StablePhantomPoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n throw new Error('Join type not supported');\n };\n}\n","import { StablePhantomPoolExit } from './concerns/stablePhantom/exit.concern';\nimport { StablePhantomPoolJoin } from './concerns/stablePhantom/join.concern';\nimport { StablePoolLiquidity } from './concerns/stable/liquidity.concern';\nimport { PhantomStablePoolSpotPrice } from './concerns/stablePhantom/spotPrice.concern';\nimport { StablePoolPriceImpact } from './concerns/stable/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n PriceImpactConcern,\n LiquidityConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class StablePhantom implements PoolType {\n constructor(\n public exit: ExitConcern = new StablePhantomPoolExit(),\n public join: JoinConcern = new StablePhantomPoolJoin(),\n public liquidity: LiquidityConcern = new StablePoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new PhantomStablePoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new StablePoolPriceImpact()\n ) {}\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { PriceImpactConcern } from '../types';\nimport { Pool } from '@/types';\n\nexport class LinearPriceImpact implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n throw new Error('Linear Pool bptZeroPriceImpact Not Implented');\n }\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n // Linear pools don't have price impact\n return '0';\n }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport * as SOR from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts';\nimport { balancerVault } from '@/lib/constants/config';\nimport { insert, parsePoolInfo, removeItem } from '@/lib/utils';\nimport { _downscaleDownArray } from '@/lib/utils/solidityMaths';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { BasePoolEncoder } from '@/pool-base';\n\nimport {\n ExitConcern,\n ExitExactBPTInParameters,\n ExitExactTokensOutParameters,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n ExitPoolAttributes,\n ExitPool,\n} from '../types';\nimport { LinearPriceImpact } from '../linear/priceImpact.concern';\n\ninterface SortedValues {\n bptIndex: number;\n poolTokens: string[];\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n}\n\ntype ExactBPTInSortedValues = SortedValues & {\n scalingFactors: bigint[];\n};\n\ntype EncodeExitParams = Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'toInternalBalance'\n> & {\n poolTokens: string[];\n poolId: string;\n userData: string;\n minAmountsOut: string[];\n};\n\nexport class LinearPoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n throw new Error('Exit type not supported');\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n throw new Error('Exit type not supported');\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut: undefined,\n pool,\n shouldUnwrapNativeAsset: false,\n });\n // Recovery exits don't use rates. We use them as part of scalingFactor so default to 1 incase of issues\n pool.tokens.forEach((t) => (t.priceRate = '1'));\n const sortedValues = parsePoolInfo(pool);\n const { minAmountsOut, expectedAmountsOut } =\n this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData = BasePoolEncoder.recoveryModeExit(bptIn);\n\n // MinAmounts needs a value for BPT for encoding\n const minAmountsOutWithBpt = insert(\n minAmountsOut,\n sortedValues.bptIndex,\n '0'\n );\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut: minAmountsOutWithBpt,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new LinearPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt amount in EVM scale\n * @param pool the pool that is being exited\n */\n checkInputsExactBPTIn = ({\n bptIn,\n pool,\n }: Pick<\n ExitExactBPTInParameters,\n 'bptIn' | 'singleTokenOut' | 'pool' | 'shouldUnwrapNativeAsset'\n >): void => {\n if (BigNumber.from(bptIn).lte(0)) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n };\n\n calcTokensOutGivenExactBptIn = ({\n bptIndex,\n upScaledBalances,\n totalSharesEvm,\n scalingFactors,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n 'bptIndex' | 'upScaledBalances' | 'totalSharesEvm' | 'scalingFactors'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n const amountsOut = SOR.LinearMaths._calcTokensOutGivenExactBptIn(\n upScaledBalances,\n BigInt(bptIn),\n totalSharesEvm,\n bptIndex\n );\n // Maths return numbers scaled to 18 decimals. Must scale down to token decimals.\n const amountsOutScaledDown = _downscaleDownArray(\n amountsOut,\n scalingFactors\n );\n\n const expectedAmountsOut = removeItem(amountsOutScaledDown, bptIndex).map(\n (amount) => amount.toString()\n );\n // Apply slippage tolerance\n const minAmountsOut = expectedAmountsOut.map((amount) => {\n const minAmount = subSlippage(\n BigNumber.from(amount),\n BigNumber.from(slippage)\n );\n return minAmount.toString();\n });\n return { minAmountsOut, expectedAmountsOut };\n };\n\n /**\n * Encodes the function data and does the final building of the exit(with exact tokens out) transaction\n * @param params\n */\n encodeExitPool = (params: EncodeExitParams): ExitPoolAttributes => {\n const {\n exiter,\n poolId,\n minAmountsOut,\n userData,\n poolTokens,\n toInternalBalance,\n } = params;\n\n const to = balancerVault;\n const functionName = 'exitPool';\n const attributes: ExitPool = {\n poolId: poolId,\n sender: exiter,\n recipient: exiter,\n exitPoolRequest: {\n assets: poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n },\n };\n\n // encode transaction data into an ABI byte string which can be sent to the network to be executed\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.exitPoolRequest,\n ]);\n\n return {\n to,\n functionName,\n attributes,\n data,\n };\n };\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { JoinPoolParameters, JoinConcern, JoinPoolAttributes } from '../types';\n\nexport class LinearPoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n throw new Error('Join type not supported');\n };\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { parseFixed, formatFixed } from '@/lib/utils/math';\nimport { Zero } from '@ethersproject/constants';\n\nconst SCALING_FACTOR = 18;\nconst ONE = parseFixed('1', SCALING_FACTOR);\n\nexport class LinearPoolLiquidity implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = Zero;\n let sumValue = Zero;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(token.price.usd.toString(), SCALING_FACTOR);\n\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n const value = balance.mul(price);\n\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance.gt(0)) {\n const avgPrice = sumValue.div(sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const priceRate = parseFixed(token.priceRate || '1', SCALING_FACTOR);\n\n // Apply priceRate to scale the balance correctly\n const balance = parseFixed(token.balance, SCALING_FACTOR)\n .mul(priceRate)\n .div(ONE);\n\n const value = balance.mul(avgPrice);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n }\n\n return formatFixed(sumValue, SCALING_FACTOR * 2);\n }\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, LinearPool, ZERO } from '@balancer-labs/sor';\nimport { Pool } from '@/types';\n\nexport class LinearPoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const linearPool = LinearPool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = linearPool.parsePoolPairData(tokenIn, tokenOut);\n return linearPool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n }\n}\n","import { LinearPoolExit } from './concerns/linear/exit.concern';\nimport { LinearPoolJoin } from './concerns/linear/join.concern';\nimport { LinearPoolLiquidity } from './concerns/linear/liquidity.concern';\nimport { LinearPoolSpotPrice } from './concerns/linear/spotPrice.concern';\nimport { LinearPriceImpact } from './concerns/linear/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class Linear implements PoolType {\n constructor(\n public exit: ExitConcern = new LinearPoolExit(),\n public join: JoinConcern = new LinearPoolJoin(),\n public liquidity: LiquidityConcern = new LinearPoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new LinearPoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new LinearPriceImpact()\n ) {}\n}\n","import {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n} from '@/modules/pools/pool-types/concerns/types';\n\nexport class FXExitConcern implements ExitConcern {\n buildExitExactTokensOut(): ExitExactTokensOutAttributes {\n throw new Error('FXExitConcern Not implemented');\n }\n\n buildRecoveryExit(): ExitExactBPTInAttributes {\n throw new Error('FXExitConcern Not implemented');\n }\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { formatFixed } from '@ethersproject/bignumber';\nimport { parseFixed } from '@/lib/utils/math';\nimport { SolidityMaths } from '@/lib/utils/solidityMaths';\n\nconst SCALING_FACTOR = 18;\n\nexport class FXLiquidityConcern implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = BigInt(0);\n let sumValue = BigInt(0);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(\n token.price.usd.toString(),\n SCALING_FACTOR\n ).toBigInt();\n const balance = parseFixed(token.balance, SCALING_FACTOR).toBigInt();\n\n const value = SolidityMaths.mulDownFixed(balance, price);\n sumValue = SolidityMaths.add(sumValue, value);\n sumBalance = SolidityMaths.add(sumBalance, balance);\n }\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance > BigInt(0)) {\n const avgPrice = SolidityMaths.divDownFixed(sumValue, sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const balance = parseFixed(token.balance, SCALING_FACTOR).toBigInt();\n\n const value = SolidityMaths.mulDownFixed(balance, avgPrice);\n sumValue = SolidityMaths.add(sumValue, value);\n sumBalance = SolidityMaths.add(sumBalance, balance);\n }\n }\n return formatFixed(sumValue.toString(), SCALING_FACTOR).toString();\n }\n}\n","import { SpotPriceConcern } from '@/modules/pools/pool-types/concerns/types';\n\nexport class FXSpotPriceConcern implements SpotPriceConcern {\n calcPoolSpotPrice(): string {\n throw new Error('FXSpotPriceConcern Not implemented');\n }\n}\n","import { PriceImpactConcern } from '@/modules/pools/pool-types/concerns/types';\nimport { Pool } from '@/types';\n\nexport class FXPriceImpactConcern implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n console.log(pool, tokenAmounts);\n throw new Error('Not implemented');\n }\n\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n console.log(pool, tokenAmounts, bptAmount, isJoin);\n throw new Error('Not implemented');\n }\n}\n","import {\n JoinConcern,\n JoinPoolAttributes,\n} from '@/modules/pools/pool-types/concerns/types';\n\nexport class FXJoinConcern implements JoinConcern {\n buildJoin(): JoinPoolAttributes {\n throw new Error('FXJoinConcern Not implemented');\n }\n}\n","import { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from '@/modules/pools/pool-types/concerns/types';\nimport { FXExitConcern } from '@/modules/pools/pool-types/concerns/fx/exit.concern';\nimport { FXLiquidityConcern } from '@/modules/pools/pool-types/concerns/fx/liquidity.concern';\nimport { FXSpotPriceConcern } from '@/modules/pools/pool-types/concerns/fx/spotPrice.concern';\nimport { FXPriceImpactConcern } from '@/modules/pools/pool-types/concerns/fx/priceImpact.concern';\nimport { FXJoinConcern } from '@/modules/pools/pool-types/concerns/fx/join.concern';\n\nexport class FX implements PoolType {\n constructor(\n public exit: ExitConcern = new FXExitConcern(),\n public liquidity: LiquidityConcern = new FXLiquidityConcern(),\n public spotPriceCalculator: SpotPriceConcern = new FXSpotPriceConcern(),\n public priceImpactCalculator: PriceImpactConcern = new FXPriceImpactConcern(),\n public join: JoinConcern = new FXJoinConcern()\n ) {}\n}\n","import {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactBPTInParameters,\n ExitExactTokensOutAttributes,\n ExitExactTokensOutParameters,\n} from '@/modules/pools/pool-types/concerns/types';\n\nexport class GyroExitConcern implements ExitConcern {\n buildExitExactTokensOut({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes {\n console.log(\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset\n );\n throw new Error('Not implemented');\n }\n\n buildRecoveryExit({\n exiter,\n pool,\n bptIn,\n slippage,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage'\n >): ExitExactBPTInAttributes {\n console.log(exiter, pool, bptIn, slippage);\n throw new Error('Not implemented');\n }\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { formatFixed } from '@ethersproject/bignumber';\nimport { parseFixed } from '@/lib/utils/math';\nimport { SolidityMaths } from '@/lib/utils/solidityMaths';\n\nconst SCALING_FACTOR = 18;\n\nexport class GyroLiquidityConcern implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = BigInt(0);\n let sumValue = BigInt(0);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(\n token.price.usd.toString(),\n SCALING_FACTOR\n ).toBigInt();\n const balance = parseFixed(token.balance, SCALING_FACTOR).toBigInt();\n\n const value = SolidityMaths.mulDownFixed(balance, price);\n sumValue = SolidityMaths.add(sumValue, value);\n sumBalance = SolidityMaths.add(sumBalance, balance);\n }\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance > BigInt(0)) {\n const avgPrice = SolidityMaths.divDownFixed(sumValue, sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const balance = parseFixed(token.balance, SCALING_FACTOR).toBigInt();\n\n const value = SolidityMaths.mulDownFixed(balance, avgPrice);\n sumValue = SolidityMaths.add(sumValue, value);\n sumBalance = SolidityMaths.add(sumBalance, balance);\n }\n }\n return formatFixed(sumValue.toString(), SCALING_FACTOR).toString();\n }\n}\n","import { SpotPriceConcern } from '@/modules/pools/pool-types/concerns/types';\n\nexport class GyroSpotPriceConcern implements SpotPriceConcern {\n calcPoolSpotPrice(): string {\n throw new Error('GyroSpotPriceConcern Not implemented');\n }\n}\n","import { PriceImpactConcern } from '@/modules/pools/pool-types/concerns/types';\nimport { Pool } from '@/types';\n\nexport class GyroPriceImpactConcern implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n console.log(pool, tokenAmounts);\n throw new Error('Not implemented');\n }\n\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n console.log(pool, tokenAmounts, bptAmount, isJoin);\n throw new Error('Not implemented');\n }\n}\n","import {\n JoinConcern,\n JoinPoolAttributes,\n} from '@/modules/pools/pool-types/concerns/types';\n\nexport class GyroJoinConcern implements JoinConcern {\n buildJoin(): JoinPoolAttributes {\n throw new Error('GyroJoinConcern Not implemented');\n }\n}\n","import { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from '@/modules/pools/pool-types/concerns/types';\nimport { GyroExitConcern } from '@/modules/pools/pool-types/concerns/gyro/exit.concern';\nimport { GyroLiquidityConcern } from '@/modules/pools/pool-types/concerns/gyro/liquidity.concern';\nimport { GyroSpotPriceConcern } from '@/modules/pools/pool-types/concerns/gyro/spotPrice.concern';\nimport { GyroPriceImpactConcern } from '@/modules/pools/pool-types/concerns/gyro/priceImpact.concern';\nimport { GyroJoinConcern } from '@/modules/pools/pool-types/concerns/gyro/join.concern';\n\nexport class Gyro implements PoolType {\n constructor(\n public exit: ExitConcern = new GyroExitConcern(),\n public liquidity: LiquidityConcern = new GyroLiquidityConcern(),\n public spotPriceCalculator: SpotPriceConcern = new GyroSpotPriceConcern(),\n public priceImpactCalculator: PriceImpactConcern = new GyroPriceImpactConcern(),\n public join: JoinConcern = new GyroJoinConcern()\n ) {}\n}\n","import { BalancerSdkConfig, PoolType } from '@/types';\nimport { Stable } from './pool-types/stable.module';\nimport { ComposableStable } from './pool-types/composableStable.module';\nimport { Weighted } from './pool-types/weighted.module';\nimport { MetaStable } from './pool-types/metaStable.module';\nimport { StablePhantom } from './pool-types/stablePhantom.module';\nimport { Linear } from './pool-types/linear.module';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { isLinearish } from '@/lib/utils';\nimport { FX } from '@/modules/pools/pool-types/fx.module';\nimport { Gyro } from '@/modules/pools/pool-types/gyro.module';\n\n/**\n * Wrapper around pool type specific methods.\n *\n * Returns a class instance of a type specific method handlers.\n */\nexport class PoolTypeConcerns {\n constructor(\n config: BalancerSdkConfig,\n public weighted = new Weighted(),\n public stable = new Stable(),\n public composableStable = new ComposableStable(),\n public metaStable = new MetaStable(),\n public stablePhantom = new StablePhantom(),\n public linear = new Linear()\n ) {}\n\n static from(\n poolType: PoolType\n ):\n | Weighted\n | Stable\n | ComposableStable\n | MetaStable\n | StablePhantom\n | Linear {\n // Calculate spot price using pool type\n switch (poolType) {\n case 'ComposableStable': {\n return new ComposableStable();\n }\n case 'FX': {\n return new FX();\n }\n case 'GyroE':\n case 'Gyro2':\n case 'Gyro3': {\n return new Gyro();\n }\n case 'MetaStable': {\n return new MetaStable();\n }\n case 'Stable': {\n return new Stable();\n }\n case 'StablePhantom': {\n return new StablePhantom();\n }\n case 'Investment':\n case 'LiquidityBootstrapping':\n case 'Weighted': {\n return new Weighted();\n }\n default: {\n // Handles all Linear pool types\n if (isLinearish(poolType)) return new Linear();\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n }\n }\n}\n","import { Findable, Pool, PoolToken, Price } from '@/types';\nimport { PoolAttribute } from '../data';\nimport { PoolTypeConcerns } from '../pools/pool-type-concerns';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { formatFixed, parseFixed } from '@/lib/utils/math';\n\nconst SCALE = 18;\n\nexport interface PoolBPTValue {\n address: string;\n liquidity: string;\n}\n\nexport class Liquidity {\n constructor(\n private pools: Findable,\n private tokenPrices: Findable\n ) {}\n\n async getLiquidity(pool: Pool): Promise {\n // Remove any tokens with same address as pool as they are pre-printed BPT\n const parsedTokens = pool.tokens.filter((token) => {\n return token.address !== pool.address;\n });\n\n // For all tokens that are pools (BPT), recurse into them and fetch their liquidity\n const subPoolLiquidity = await Promise.all(\n parsedTokens.map(async (token) => {\n const pool = await this.pools.findBy('address', token.address);\n if (!pool) return;\n\n const liquidity = parseFixed(await this.getLiquidity(pool), SCALE);\n const totalBPT = parseFixed(pool.totalShares, SCALE);\n const bptInParentPool = parseFixed(token.balance, SCALE);\n const liquidityInParentPool = totalBPT.eq(0)\n ? 0\n : liquidity.mul(bptInParentPool).div(totalBPT);\n\n return {\n address: pool.address,\n liquidity: liquidityInParentPool.toString(),\n };\n })\n );\n\n const totalSubPoolLiquidity = subPoolLiquidity.reduce(\n (totalLiquidity, subPool) => {\n return totalLiquidity.add(\n subPool ? subPool.liquidity : BigNumber.from(0)\n );\n },\n BigNumber.from(0)\n );\n\n // Filter tokens within pool that are not BPT themselves\n const nonPoolTokens = parsedTokens.filter((token) => {\n return !subPoolLiquidity.find((pool) => pool?.address === token.address);\n });\n\n // Update price using tokenPrices repository\n const nonPoolTokensWithUpdatedPrice: PoolToken[] = await Promise.all(\n nonPoolTokens.map(async (token) => {\n const tokenPrice = await this.tokenPrices.find(token.address);\n const poolToken: PoolToken = {\n address: token.address,\n decimals: token.decimals,\n priceRate: token.priceRate,\n price: (tokenPrice?.usd && tokenPrice) || {\n usd: token.token?.latestUSDPrice,\n },\n balance: token.balance,\n weight: token.weight,\n };\n return poolToken;\n })\n );\n\n // TODO: Just in case we need it soon. Otherwise remove without mercy.\n // Any of the tokens is missing the price, use subgraph totalLiquidity\n // if(nonPoolTokensWithUpdatedPrice.map((t) => t.price?.usd).indexOf(undefined) > -1) {\n // return pool.totalLiquidity\n // }\n\n const tokenLiquidity = PoolTypeConcerns.from(\n pool.poolType\n ).liquidity.calcTotal(nonPoolTokensWithUpdatedPrice);\n\n const parsedTokenLiquidity = parseFixed(tokenLiquidity, SCALE);\n\n const totalLiquidity = totalSubPoolLiquidity.add(parsedTokenLiquidity);\n\n return formatFixed(totalLiquidity, SCALE);\n }\n\n async getBptPrice(pool: Pool): Promise {\n const liquidity = await this.getLiquidity(pool);\n return (parseFloat(liquidity) / parseFloat(pool.totalShares)).toString();\n }\n}\n","import { LiquidityGauge } from '@/modules/data';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nexport interface Tokens {\n [tokenAddress: string]: BigNumber;\n}\n\nexport interface GaugeTokens {\n [gaugeAddress: string]: Tokens;\n}\n\nexport interface ReduceGaugeTokens {\n (p: GaugeTokens, address: string, index: number): GaugeTokens;\n}\n\nexport interface ReduceGaugeRewards {\n (\n rewards: GaugeTokens,\n path: { gauge: string; token: string },\n index: number\n ): GaugeTokens;\n}\n\nexport const ZERO = BigNumber.from('0');\n\nexport const filterTokens = (tokens: Tokens): Tokens => {\n if (!tokens) return {};\n return Object.keys(tokens)\n .filter((token) => tokens[token].gt(ZERO))\n .reduce((obj: Tokens, token) => {\n obj[token] = tokens[token];\n return obj;\n }, {});\n};\n\nexport const populateGauge = (\n gauge: LiquidityGauge,\n rewards: GaugeTokens,\n tokens: GaugeTokens\n): LiquidityGauge => {\n if (!rewards[gauge.address] && !tokens[gauge.address]) return gauge;\n const claimableRewards = filterTokens(rewards[gauge.address]);\n const claimableTokens = filterTokens(tokens[gauge.address]);\n gauge.claimableTokens ||= {\n ...claimableRewards,\n ...claimableTokens,\n };\n return gauge;\n};\n\nexport const populateGauges = (\n gauges: LiquidityGauge[],\n claimableRewards: GaugeTokens,\n claimableTokens: GaugeTokens\n): LiquidityGauge[] => {\n return gauges\n .map((gauge) => populateGauge(gauge, claimableRewards, claimableTokens))\n .filter(\n (it) => it.claimableTokens && Object.keys(it.claimableTokens).length\n );\n};\n\nexport const reduceClaimableRewards = (res0x: string[]): ReduceGaugeRewards => {\n return (\n rewards: GaugeTokens,\n path: { gauge: string; token: string },\n index: number\n ): GaugeTokens => {\n const value = BigNumber.from(`${res0x[index]}`);\n if (value.gt(ZERO)) {\n rewards[path.gauge] ||= {};\n rewards[path.gauge][path.token] = value;\n }\n return rewards;\n };\n};\n\nexport const reduceClaimableTokens = (\n res0x: string[],\n balAddress: string\n): ReduceGaugeTokens => {\n return (p: GaugeTokens, address: string, index: number): GaugeTokens => {\n const value = BigNumber.from(`${res0x[index]}`);\n if (value.gt(ZERO)) {\n p[address] ||= {};\n p[address][balAddress] = value;\n }\n return p;\n };\n};\n\nexport const reduceRewardTokens = (\n result: { [gaugeAddress: string]: string[] },\n gauge: LiquidityGauge\n): { [gaugeAddress: string]: string[] } => {\n if (gauge.rewardTokens) {\n for (const key of Object.keys(gauge.rewardTokens)) {\n result[gauge.id] ||= [];\n result[gauge.id].push(key);\n }\n }\n return result;\n};\n","import { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Network } from '@/lib/constants';\nimport { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { Multicall } from '@/contracts';\nimport {\n FeeDistributorRepository,\n LiquidityGauge,\n LiquidityGaugeSubgraphRPCProvider,\n} from '@/modules/data';\nimport { Interface } from '@ethersproject/abi';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport {\n GaugeTokens,\n populateGauges,\n reduceClaimableRewards,\n reduceClaimableTokens,\n reduceRewardTokens,\n ZERO,\n} from './helper';\n\nconst liquidityGaugeV5Interface = new Interface([\n 'function claim_rewards(address sender, address receiver) returns (uint256)',\n 'function claimable_tokens(address addr) view returns (uint256)',\n 'function claimable_reward(address addr, address token) view returns (uint256)',\n]);\n\nconst balancerMinterInterface = new Interface([\n 'function mintMany(address[] gauges) returns (uint256)',\n]);\n\nconst gaugeClaimHelperInterface = new Interface([\n 'function getPendingRewards(address gauge, address user, address token) view returns (uint256)',\n 'function claimRewardsFromGauges(address[] gauges, address user)',\n]);\n\nexport interface TransactionData {\n to: string;\n from: string;\n callData: string;\n tokensOut: string[];\n expectedTokensValue: BigNumber[];\n functionName: string;\n}\n\nexport interface TokenBalance {\n [token: string]: BigNumber;\n}\n\nexport interface IClaimService {\n getClaimableRewardTokens(userAddress: string): Promise;\n buildClaimRewardTokensRequest(\n gaugeAddresses: string[],\n userAddress: string\n ): Promise;\n getClaimableVeBalTokens(\n userAddress: string,\n claimableTokens: string[]\n ): Promise;\n buildClaimVeBalTokensRequest(\n userAddress: string,\n claimableTokens: string[]\n ): Promise;\n}\n\nexport class ClaimService implements IClaimService {\n private readonly liquidityGauges: LiquidityGaugeSubgraphRPCProvider;\n private readonly gaugeClaimHelperAddress?: string;\n private readonly balancerMinterAddress?: string;\n private readonly chainId: Network;\n private readonly feeDistributor: FeeDistributorRepository | undefined;\n\n constructor(\n liquidityGauges: LiquidityGaugeSubgraphRPCProvider,\n feeDistributor: FeeDistributorRepository | undefined,\n chainId: Network,\n private multicall: Multicall,\n gaugeClaimHelperAddress?: string,\n balancerMinterAddress?: string\n ) {\n this.liquidityGauges = liquidityGauges;\n this.feeDistributor = feeDistributor;\n this.chainId = chainId;\n this.gaugeClaimHelperAddress = gaugeClaimHelperAddress;\n this.balancerMinterAddress = balancerMinterAddress;\n }\n\n /**\n * Get a list of liquidity gauges populated with the claimable tokens for the user.\n *\n * @param userAddress the user's account address\n */\n async getClaimableRewardTokens(\n userAddress: string\n ): Promise {\n const gauges = await this.getGauges();\n if (!gauges.length)\n throw new BalancerError(BalancerErrorCode.GAUGES_NOT_FOUND);\n\n const gaugeAddresses = gauges.map((it) => it.address);\n const rewardTokens = this.getRewardTokens(gauges);\n\n const claimableTokens = await this.retrieveClaimableTokens(\n gaugeAddresses,\n userAddress\n );\n const claimableRewards = await this.retrieveClaimableRewards(\n rewardTokens,\n userAddress\n );\n return populateGauges(gauges, claimableRewards, claimableTokens);\n }\n\n /**\n * Returns the data to be signed to claim the tokens on a list of liquidity gauges.\n * Only the tokens with balance will be claimed.\n *\n * @param gaugeAddresses the liquidity gauges' addresses\n * @param userAddress the user's account address\n * @throws error if no claimable token is found\n */\n async buildClaimRewardTokensRequest(\n gaugeAddresses: string[],\n userAddress: string\n ): Promise {\n if (this.chainId === 1 || this.chainId === 5) {\n if (!this.balancerMinterAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED\n );\n } else {\n if (!this.gaugeClaimHelperAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED\n );\n }\n const allGauges = await this.getClaimableRewardTokens(userAddress);\n const gauges = allGauges\n .filter((it) =>\n gaugeAddresses\n .map((it) => it.toLowerCase())\n .includes(it.address.toLowerCase())\n )\n .filter(\n (it) => it.claimableTokens && Object.keys(it.claimableTokens).length\n );\n const claimableTokens = Array.from(\n new Set(\n gauges\n .map((gauge) => gauge.claimableTokens)\n .map((tokens) => Object.keys(tokens || {}))\n .flatMap((it) => it)\n )\n );\n if (!claimableTokens.length)\n throw new BalancerError(BalancerErrorCode.GAUGES_REWARD_TOKEN_EMPTY);\n const expectedValues = claimableTokens.map((tokenAddress) => {\n return gauges.reduce((value: BigNumber, gauge) => {\n if (\n gauge.claimableTokens &&\n gauge.claimableTokens[tokenAddress] &&\n gauge.claimableTokens[tokenAddress] !== ZERO\n )\n value = gauge.claimableTokens[tokenAddress].add(value);\n return value;\n }, BigNumber.from(0));\n });\n if (!expectedValues.length || expectedValues.every((it) => it.eq(ZERO)))\n throw new BalancerError(BalancerErrorCode.REWARD_TOKEN_ZERO);\n if (this.chainId === 1 || this.chainId === 5) {\n if (!this.balancerMinterAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED\n );\n const callData = balancerMinterInterface.encodeFunctionData('mintMany', [\n gaugeAddresses,\n ]);\n return {\n to: this.balancerMinterAddress,\n from: userAddress,\n callData: callData,\n tokensOut: claimableTokens,\n expectedTokensValue: expectedValues,\n functionName: 'mintMany',\n };\n } else {\n if (!this.gaugeClaimHelperAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED\n );\n const callData = gaugeClaimHelperInterface.encodeFunctionData(\n 'claimRewardsFromGauges',\n [gaugeAddresses, userAddress]\n );\n return {\n to: this.gaugeClaimHelperAddress,\n from: userAddress,\n callData: callData,\n tokensOut: claimableTokens,\n expectedTokensValue: expectedValues,\n functionName: 'claimRewardsFromGauges',\n };\n }\n }\n\n /**\n * returns all the tokens' balance for protocol revenue and veBal incentives.\n *\n * @param userAddress the user's account address\n * @param claimableTokens the list of tokens for which the balance is desired\n */\n async getClaimableVeBalTokens(\n userAddress: string,\n claimableTokens: string[]\n ): Promise {\n if (!this.feeDistributor)\n throw new BalancerError(BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED);\n return this.feeDistributor?.getClaimableBalances(\n userAddress,\n claimableTokens\n );\n }\n\n /**\n * Returns the data to be signed to claim the tokens for protocol revenue and veBal incentives.\n *\n * @param userAddress the user's account address\n * @param claimableTokens the list of tokens to be claimed\n * @throws error if no claimable token is found\n */\n async buildClaimVeBalTokensRequest(\n userAddress: string,\n claimableTokens: string[]\n ): Promise {\n if (!this.feeDistributor)\n throw new BalancerError(BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED);\n const tokenBalance = await this.feeDistributor.getClaimableBalances(\n userAddress,\n claimableTokens\n );\n const expectedTokensValue = claimableTokens.map(\n (it) => tokenBalance[it] ?? ZERO\n );\n if (expectedTokensValue.every((it) => it.eq(ZERO)))\n throw new BalancerError(BalancerErrorCode.REWARD_TOKEN_ZERO);\n const callData = this.feeDistributor.claimBalances(\n userAddress,\n claimableTokens\n );\n return {\n to: this.feeDistributor.feeDistributor.address,\n from: userAddress,\n callData: callData,\n tokensOut: claimableTokens,\n expectedTokensValue: expectedTokensValue,\n functionName: 'claimTokens',\n };\n }\n\n // Private Functions\n\n private async getGauges(): Promise {\n return await this.liquidityGauges.fetch();\n }\n\n private getRewardTokens(gauges: LiquidityGauge[]): {\n [gaugeAddress: string]: string[];\n } {\n return gauges.reduce(reduceRewardTokens, {});\n }\n\n private async retrieveClaimableRewards(\n rewardTokens: { [address: string]: string[] },\n userAddress: string\n ): Promise {\n const gaugeAddresses = Object.keys(rewardTokens);\n const { payload, paths } = this.getPayload(\n gaugeAddresses,\n rewardTokens,\n userAddress\n );\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n return paths.reduce(reduceClaimableRewards(res0x), {});\n }\n\n private getPayload(\n gaugeAddresses: string[],\n rewardTokens: { [address: string]: string[] },\n userAddress: string\n ): {\n payload: { target: string; callData: string }[];\n paths: { gauge: string; token: string }[];\n } {\n const payload = [];\n const paths: { gauge: string; token: string }[] = [];\n for (const gaugeAddress of gaugeAddresses) {\n for (const tokenAddress of rewardTokens[gaugeAddress]) {\n paths.push({ gauge: gaugeAddress, token: tokenAddress });\n payload.push(\n this.getArguments(userAddress, gaugeAddress, tokenAddress)\n );\n }\n }\n return { payload, paths };\n }\n\n private getArguments(\n userAddress: string,\n gaugeAddress: string,\n tokenAddress: string\n ): { target: string; callData: string } {\n if (this.chainId === 1 || this.chainId === 5) {\n return {\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'claimable_reward',\n [userAddress, tokenAddress]\n ),\n };\n }\n if (!this.gaugeClaimHelperAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED\n );\n return {\n target: this.gaugeClaimHelperAddress,\n callData: gaugeClaimHelperInterface.encodeFunctionData(\n 'getPendingRewards',\n [gaugeAddress, userAddress, tokenAddress]\n ),\n };\n }\n\n private async retrieveClaimableTokens(\n gaugeAddresses: string[],\n userAddress: string\n ): Promise {\n if (this.chainId === Network.MAINNET || this.chainId === Network.GOERLI) {\n const balAddress = BALANCER_NETWORK_CONFIG[this.chainId].addresses.tokens\n .bal as string;\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'claimable_tokens',\n [userAddress]\n ),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n return gaugeAddresses.reduce(\n reduceClaimableTokens(res0x, balAddress),\n {}\n );\n }\n return {};\n }\n}\n","import { BigNumberish } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport { SOR, SwapTypes, SwapInfo } from '@balancer-labs/sor';\nimport { SwapType, BatchSwapStep, FundManagement } from './types';\nimport { Vault } from '@/contracts/Vault';\n\n/*\n * queryBatchSwap simulates a call to `batchSwap`, returning an array of Vault asset deltas. Calls to `swap` cannot be\n * simulated directly, but an equivalent `batchSwap` call can and will yield the exact same result.\n *\n * Each element in the array corresponds to the asset at the same index, and indicates the number of tokens (or ETH)\n * the Vault would take from the sender (if positive) or send to the recipient (if negative). The arguments it\n * receives are the same that an equivalent `batchSwap` call would receive.\n */\nexport async function queryBatchSwap(\n vaultContract: Vault,\n swapType: SwapType,\n swaps: BatchSwapStep[],\n assets: string[]\n): Promise {\n const funds: FundManagement = {\n sender: AddressZero,\n recipient: AddressZero,\n fromInternalBalance: false,\n toInternalBalance: false,\n };\n\n try {\n const deltas = await vaultContract.callStatic.queryBatchSwap(\n swapType,\n swaps,\n assets,\n funds\n );\n return deltas.map((d: BigNumberish) => d.toString());\n } catch (err) {\n throw `queryBatchSwap call error: ${err}`;\n }\n}\n\n/*\nUse SOR to get swapInfo for tokenIn>tokenOut.\nSwapInfos.swaps has path information.\n*/\nexport async function getSorSwapInfo(\n tokenIn: string,\n tokenOut: string,\n swapType: SwapType,\n amount: string,\n sor: SOR\n): Promise {\n const swapTypeSOR: SwapTypes =\n swapType === SwapType.SwapExactIn\n ? SwapTypes.SwapExactIn\n : SwapTypes.SwapExactOut;\n const swapInfo = await sor.getSwaps(\n tokenIn.toLowerCase(),\n tokenOut.toLowerCase(),\n swapTypeSOR,\n amount\n );\n return swapInfo;\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { __assign } from \"tslib\";\nimport { parse } from 'graphql';\nvar docCache = new Map();\nvar fragmentSourceMap = new Map();\nvar printFragmentWarnings = true;\nvar experimentalFragmentVariables = false;\nfunction normalize(string) {\n return string.replace(/[\\s,]+/g, ' ').trim();\n}\nfunction cacheKeyFromLoc(loc) {\n return normalize(loc.source.body.substring(loc.start, loc.end));\n}\nfunction processFragments(ast) {\n var seenKeys = new Set();\n var definitions = [];\n ast.definitions.forEach(function (fragmentDefinition) {\n if (fragmentDefinition.kind === 'FragmentDefinition') {\n var fragmentName = fragmentDefinition.name.value;\n var sourceKey = cacheKeyFromLoc(fragmentDefinition.loc);\n var sourceKeySet = fragmentSourceMap.get(fragmentName);\n if (sourceKeySet && !sourceKeySet.has(sourceKey)) {\n if (printFragmentWarnings) {\n console.warn(\"Warning: fragment with name \" + fragmentName + \" already exists.\\n\"\n + \"graphql-tag enforces all fragment names across your application to be unique; read more about\\n\"\n + \"this in the docs: http://dev.apollodata.com/core/fragments.html#unique-names\");\n }\n }\n else if (!sourceKeySet) {\n fragmentSourceMap.set(fragmentName, sourceKeySet = new Set);\n }\n sourceKeySet.add(sourceKey);\n if (!seenKeys.has(sourceKey)) {\n seenKeys.add(sourceKey);\n definitions.push(fragmentDefinition);\n }\n }\n else {\n definitions.push(fragmentDefinition);\n }\n });\n return __assign(__assign({}, ast), { definitions: definitions });\n}\nfunction stripLoc(doc) {\n var workSet = new Set(doc.definitions);\n workSet.forEach(function (node) {\n if (node.loc)\n delete node.loc;\n Object.keys(node).forEach(function (key) {\n var value = node[key];\n if (value && typeof value === 'object') {\n workSet.add(value);\n }\n });\n });\n var loc = doc.loc;\n if (loc) {\n delete loc.startToken;\n delete loc.endToken;\n }\n return doc;\n}\nfunction parseDocument(source) {\n var cacheKey = normalize(source);\n if (!docCache.has(cacheKey)) {\n var parsed = parse(source, {\n experimentalFragmentVariables: experimentalFragmentVariables,\n allowLegacyFragmentVariables: experimentalFragmentVariables\n });\n if (!parsed || parsed.kind !== 'Document') {\n throw new Error('Not a valid GraphQL document.');\n }\n docCache.set(cacheKey, stripLoc(processFragments(parsed)));\n }\n return docCache.get(cacheKey);\n}\nexport function gql(literals) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (typeof literals === 'string') {\n literals = [literals];\n }\n var result = literals[0];\n args.forEach(function (arg, i) {\n if (arg && arg.kind === 'Document') {\n result += arg.loc.source.body;\n }\n else {\n result += arg;\n }\n result += literals[i + 1];\n });\n return parseDocument(result);\n}\nexport function resetCaches() {\n docCache.clear();\n fragmentSourceMap.clear();\n}\nexport function disableFragmentWarnings() {\n printFragmentWarnings = false;\n}\nexport function enableExperimentalFragmentVariables() {\n experimentalFragmentVariables = true;\n}\nexport function disableExperimentalFragmentVariables() {\n experimentalFragmentVariables = false;\n}\nvar extras = {\n gql: gql,\n resetCaches: resetCaches,\n disableFragmentWarnings: disableFragmentWarnings,\n enableExperimentalFragmentVariables: enableExperimentalFragmentVariables,\n disableExperimentalFragmentVariables: disableExperimentalFragmentVariables\n};\n(function (gql_1) {\n gql_1.gql = extras.gql, gql_1.resetCaches = extras.resetCaches, gql_1.disableFragmentWarnings = extras.disableFragmentWarnings, gql_1.enableExperimentalFragmentVariables = extras.enableExperimentalFragmentVariables, gql_1.disableExperimentalFragmentVariables = extras.disableExperimentalFragmentVariables;\n})(gql || (gql = {}));\ngql[\"default\"] = gql;\nexport default gql;\n//# sourceMappingURL=index.js.map","import { GraphQLClient } from 'graphql-request';\nimport * as Dom from 'graphql-request/dist/types.dom';\nimport gql from 'graphql-tag';\nexport type Maybe = T | null;\nexport type InputMaybe = Maybe;\nexport type Exact = { [K in keyof T]: T[K] };\nexport type MakeOptional = Omit & { [SubKey in K]?: Maybe };\nexport type MakeMaybe = Omit & { [SubKey in K]: Maybe };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n BigDecimal: string;\n BigInt: string;\n Bytes: string;\n Int8: any;\n};\n\nexport type AmpUpdate = {\n __typename?: 'AmpUpdate';\n endAmp: Scalars['BigInt'];\n endTimestamp: Scalars['BigInt'];\n id: Scalars['ID'];\n poolId: Pool;\n scheduledTimestamp: Scalars['Int'];\n startAmp: Scalars['BigInt'];\n startTimestamp: Scalars['BigInt'];\n};\n\nexport type AmpUpdate_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n endAmp?: InputMaybe;\n endAmp_gt?: InputMaybe;\n endAmp_gte?: InputMaybe;\n endAmp_in?: InputMaybe>;\n endAmp_lt?: InputMaybe;\n endAmp_lte?: InputMaybe;\n endAmp_not?: InputMaybe;\n endAmp_not_in?: InputMaybe>;\n endTimestamp?: InputMaybe;\n endTimestamp_gt?: InputMaybe;\n endTimestamp_gte?: InputMaybe;\n endTimestamp_in?: InputMaybe>;\n endTimestamp_lt?: InputMaybe;\n endTimestamp_lte?: InputMaybe;\n endTimestamp_not?: InputMaybe;\n endTimestamp_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n scheduledTimestamp?: InputMaybe;\n scheduledTimestamp_gt?: InputMaybe;\n scheduledTimestamp_gte?: InputMaybe;\n scheduledTimestamp_in?: InputMaybe>;\n scheduledTimestamp_lt?: InputMaybe;\n scheduledTimestamp_lte?: InputMaybe;\n scheduledTimestamp_not?: InputMaybe;\n scheduledTimestamp_not_in?: InputMaybe>;\n startAmp?: InputMaybe;\n startAmp_gt?: InputMaybe;\n startAmp_gte?: InputMaybe;\n startAmp_in?: InputMaybe>;\n startAmp_lt?: InputMaybe;\n startAmp_lte?: InputMaybe;\n startAmp_not?: InputMaybe;\n startAmp_not_in?: InputMaybe>;\n startTimestamp?: InputMaybe;\n startTimestamp_gt?: InputMaybe;\n startTimestamp_gte?: InputMaybe;\n startTimestamp_in?: InputMaybe>;\n startTimestamp_lt?: InputMaybe;\n startTimestamp_lte?: InputMaybe;\n startTimestamp_not?: InputMaybe;\n startTimestamp_not_in?: InputMaybe>;\n};\n\nexport enum AmpUpdate_OrderBy {\n EndAmp = 'endAmp',\n EndTimestamp = 'endTimestamp',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n ScheduledTimestamp = 'scheduledTimestamp',\n StartAmp = 'startAmp',\n StartTimestamp = 'startTimestamp'\n}\n\nexport type Balancer = {\n __typename?: 'Balancer';\n id: Scalars['ID'];\n poolCount: Scalars['Int'];\n pools?: Maybe>;\n protocolFeesCollector?: Maybe;\n totalLiquidity: Scalars['BigDecimal'];\n totalProtocolFee?: Maybe;\n totalSwapCount: Scalars['BigInt'];\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n};\n\n\nexport type BalancerPoolsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type BalancerSnapshot = {\n __typename?: 'BalancerSnapshot';\n id: Scalars['ID'];\n poolCount: Scalars['Int'];\n timestamp: Scalars['Int'];\n totalLiquidity: Scalars['BigDecimal'];\n totalProtocolFee?: Maybe;\n totalSwapCount: Scalars['BigInt'];\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n vault: Balancer;\n};\n\nexport type BalancerSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolCount?: InputMaybe;\n poolCount_gt?: InputMaybe;\n poolCount_gte?: InputMaybe;\n poolCount_in?: InputMaybe>;\n poolCount_lt?: InputMaybe;\n poolCount_lte?: InputMaybe;\n poolCount_not?: InputMaybe;\n poolCount_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n totalLiquidity?: InputMaybe;\n totalLiquidity_gt?: InputMaybe;\n totalLiquidity_gte?: InputMaybe;\n totalLiquidity_in?: InputMaybe>;\n totalLiquidity_lt?: InputMaybe;\n totalLiquidity_lte?: InputMaybe;\n totalLiquidity_not?: InputMaybe;\n totalLiquidity_not_in?: InputMaybe>;\n totalProtocolFee?: InputMaybe;\n totalProtocolFee_gt?: InputMaybe;\n totalProtocolFee_gte?: InputMaybe;\n totalProtocolFee_in?: InputMaybe>;\n totalProtocolFee_lt?: InputMaybe;\n totalProtocolFee_lte?: InputMaybe;\n totalProtocolFee_not?: InputMaybe;\n totalProtocolFee_not_in?: InputMaybe>;\n totalSwapCount?: InputMaybe;\n totalSwapCount_gt?: InputMaybe;\n totalSwapCount_gte?: InputMaybe;\n totalSwapCount_in?: InputMaybe>;\n totalSwapCount_lt?: InputMaybe;\n totalSwapCount_lte?: InputMaybe;\n totalSwapCount_not?: InputMaybe;\n totalSwapCount_not_in?: InputMaybe>;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n vault?: InputMaybe;\n vault_?: InputMaybe;\n vault_contains?: InputMaybe;\n vault_contains_nocase?: InputMaybe;\n vault_ends_with?: InputMaybe;\n vault_ends_with_nocase?: InputMaybe;\n vault_gt?: InputMaybe;\n vault_gte?: InputMaybe;\n vault_in?: InputMaybe>;\n vault_lt?: InputMaybe;\n vault_lte?: InputMaybe;\n vault_not?: InputMaybe;\n vault_not_contains?: InputMaybe;\n vault_not_contains_nocase?: InputMaybe;\n vault_not_ends_with?: InputMaybe;\n vault_not_ends_with_nocase?: InputMaybe;\n vault_not_in?: InputMaybe>;\n vault_not_starts_with?: InputMaybe;\n vault_not_starts_with_nocase?: InputMaybe;\n vault_starts_with?: InputMaybe;\n vault_starts_with_nocase?: InputMaybe;\n};\n\nexport enum BalancerSnapshot_OrderBy {\n Id = 'id',\n PoolCount = 'poolCount',\n Timestamp = 'timestamp',\n TotalLiquidity = 'totalLiquidity',\n TotalProtocolFee = 'totalProtocolFee',\n TotalSwapCount = 'totalSwapCount',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume',\n Vault = 'vault',\n VaultId = 'vault__id',\n VaultPoolCount = 'vault__poolCount',\n VaultProtocolFeesCollector = 'vault__protocolFeesCollector',\n VaultTotalLiquidity = 'vault__totalLiquidity',\n VaultTotalProtocolFee = 'vault__totalProtocolFee',\n VaultTotalSwapCount = 'vault__totalSwapCount',\n VaultTotalSwapFee = 'vault__totalSwapFee',\n VaultTotalSwapVolume = 'vault__totalSwapVolume'\n}\n\nexport type Balancer_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolCount?: InputMaybe;\n poolCount_gt?: InputMaybe;\n poolCount_gte?: InputMaybe;\n poolCount_in?: InputMaybe>;\n poolCount_lt?: InputMaybe;\n poolCount_lte?: InputMaybe;\n poolCount_not?: InputMaybe;\n poolCount_not_in?: InputMaybe>;\n pools_?: InputMaybe;\n protocolFeesCollector?: InputMaybe;\n protocolFeesCollector_contains?: InputMaybe;\n protocolFeesCollector_gt?: InputMaybe;\n protocolFeesCollector_gte?: InputMaybe;\n protocolFeesCollector_in?: InputMaybe>;\n protocolFeesCollector_lt?: InputMaybe;\n protocolFeesCollector_lte?: InputMaybe;\n protocolFeesCollector_not?: InputMaybe;\n protocolFeesCollector_not_contains?: InputMaybe;\n protocolFeesCollector_not_in?: InputMaybe>;\n totalLiquidity?: InputMaybe;\n totalLiquidity_gt?: InputMaybe;\n totalLiquidity_gte?: InputMaybe;\n totalLiquidity_in?: InputMaybe>;\n totalLiquidity_lt?: InputMaybe;\n totalLiquidity_lte?: InputMaybe;\n totalLiquidity_not?: InputMaybe;\n totalLiquidity_not_in?: InputMaybe>;\n totalProtocolFee?: InputMaybe;\n totalProtocolFee_gt?: InputMaybe;\n totalProtocolFee_gte?: InputMaybe;\n totalProtocolFee_in?: InputMaybe>;\n totalProtocolFee_lt?: InputMaybe;\n totalProtocolFee_lte?: InputMaybe;\n totalProtocolFee_not?: InputMaybe;\n totalProtocolFee_not_in?: InputMaybe>;\n totalSwapCount?: InputMaybe;\n totalSwapCount_gt?: InputMaybe;\n totalSwapCount_gte?: InputMaybe;\n totalSwapCount_in?: InputMaybe>;\n totalSwapCount_lt?: InputMaybe;\n totalSwapCount_lte?: InputMaybe;\n totalSwapCount_not?: InputMaybe;\n totalSwapCount_not_in?: InputMaybe>;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n};\n\nexport enum Balancer_OrderBy {\n Id = 'id',\n PoolCount = 'poolCount',\n Pools = 'pools',\n ProtocolFeesCollector = 'protocolFeesCollector',\n TotalLiquidity = 'totalLiquidity',\n TotalProtocolFee = 'totalProtocolFee',\n TotalSwapCount = 'totalSwapCount',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume'\n}\n\nexport type BlockChangedFilter = {\n number_gte: Scalars['Int'];\n};\n\nexport type Block_Height = {\n hash?: InputMaybe;\n number?: InputMaybe;\n number_gte?: InputMaybe;\n};\n\nexport type CircuitBreaker = {\n __typename?: 'CircuitBreaker';\n bptPrice: Scalars['BigDecimal'];\n id: Scalars['ID'];\n lowerBoundPercentage: Scalars['BigDecimal'];\n pool: Pool;\n token: PoolToken;\n upperBoundPercentage: Scalars['BigDecimal'];\n};\n\nexport type CircuitBreaker_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n bptPrice?: InputMaybe;\n bptPrice_gt?: InputMaybe;\n bptPrice_gte?: InputMaybe;\n bptPrice_in?: InputMaybe>;\n bptPrice_lt?: InputMaybe;\n bptPrice_lte?: InputMaybe;\n bptPrice_not?: InputMaybe;\n bptPrice_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n lowerBoundPercentage?: InputMaybe;\n lowerBoundPercentage_gt?: InputMaybe;\n lowerBoundPercentage_gte?: InputMaybe;\n lowerBoundPercentage_in?: InputMaybe>;\n lowerBoundPercentage_lt?: InputMaybe;\n lowerBoundPercentage_lte?: InputMaybe;\n lowerBoundPercentage_not?: InputMaybe;\n lowerBoundPercentage_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n token?: InputMaybe;\n token_?: InputMaybe;\n token_contains?: InputMaybe;\n token_contains_nocase?: InputMaybe;\n token_ends_with?: InputMaybe;\n token_ends_with_nocase?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_contains_nocase?: InputMaybe;\n token_not_ends_with?: InputMaybe;\n token_not_ends_with_nocase?: InputMaybe;\n token_not_in?: InputMaybe>;\n token_not_starts_with?: InputMaybe;\n token_not_starts_with_nocase?: InputMaybe;\n token_starts_with?: InputMaybe;\n token_starts_with_nocase?: InputMaybe;\n upperBoundPercentage?: InputMaybe;\n upperBoundPercentage_gt?: InputMaybe;\n upperBoundPercentage_gte?: InputMaybe;\n upperBoundPercentage_in?: InputMaybe>;\n upperBoundPercentage_lt?: InputMaybe;\n upperBoundPercentage_lte?: InputMaybe;\n upperBoundPercentage_not?: InputMaybe;\n upperBoundPercentage_not_in?: InputMaybe>;\n};\n\nexport enum CircuitBreaker_OrderBy {\n BptPrice = 'bptPrice',\n Id = 'id',\n LowerBoundPercentage = 'lowerBoundPercentage',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n Token = 'token',\n TokenAddress = 'token__address',\n TokenAssetManager = 'token__assetManager',\n TokenBalance = 'token__balance',\n TokenCashBalance = 'token__cashBalance',\n TokenDecimals = 'token__decimals',\n TokenId = 'token__id',\n TokenIndex = 'token__index',\n TokenIsExemptFromYieldProtocolFee = 'token__isExemptFromYieldProtocolFee',\n TokenManagedBalance = 'token__managedBalance',\n TokenName = 'token__name',\n TokenOldPriceRate = 'token__oldPriceRate',\n TokenPaidProtocolFees = 'token__paidProtocolFees',\n TokenPriceRate = 'token__priceRate',\n TokenSymbol = 'token__symbol',\n TokenWeight = 'token__weight',\n UpperBoundPercentage = 'upperBoundPercentage'\n}\n\nexport type GradualWeightUpdate = {\n __typename?: 'GradualWeightUpdate';\n endTimestamp: Scalars['BigInt'];\n endWeights: Array;\n id: Scalars['ID'];\n poolId: Pool;\n scheduledTimestamp: Scalars['Int'];\n startTimestamp: Scalars['BigInt'];\n startWeights: Array;\n};\n\nexport type GradualWeightUpdate_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n endTimestamp?: InputMaybe;\n endTimestamp_gt?: InputMaybe;\n endTimestamp_gte?: InputMaybe;\n endTimestamp_in?: InputMaybe>;\n endTimestamp_lt?: InputMaybe;\n endTimestamp_lte?: InputMaybe;\n endTimestamp_not?: InputMaybe;\n endTimestamp_not_in?: InputMaybe>;\n endWeights?: InputMaybe>;\n endWeights_contains?: InputMaybe>;\n endWeights_contains_nocase?: InputMaybe>;\n endWeights_not?: InputMaybe>;\n endWeights_not_contains?: InputMaybe>;\n endWeights_not_contains_nocase?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n scheduledTimestamp?: InputMaybe;\n scheduledTimestamp_gt?: InputMaybe;\n scheduledTimestamp_gte?: InputMaybe;\n scheduledTimestamp_in?: InputMaybe>;\n scheduledTimestamp_lt?: InputMaybe;\n scheduledTimestamp_lte?: InputMaybe;\n scheduledTimestamp_not?: InputMaybe;\n scheduledTimestamp_not_in?: InputMaybe>;\n startTimestamp?: InputMaybe;\n startTimestamp_gt?: InputMaybe;\n startTimestamp_gte?: InputMaybe;\n startTimestamp_in?: InputMaybe>;\n startTimestamp_lt?: InputMaybe;\n startTimestamp_lte?: InputMaybe;\n startTimestamp_not?: InputMaybe;\n startTimestamp_not_in?: InputMaybe>;\n startWeights?: InputMaybe>;\n startWeights_contains?: InputMaybe>;\n startWeights_contains_nocase?: InputMaybe>;\n startWeights_not?: InputMaybe>;\n startWeights_not_contains?: InputMaybe>;\n startWeights_not_contains_nocase?: InputMaybe>;\n};\n\nexport enum GradualWeightUpdate_OrderBy {\n EndTimestamp = 'endTimestamp',\n EndWeights = 'endWeights',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n ScheduledTimestamp = 'scheduledTimestamp',\n StartTimestamp = 'startTimestamp',\n StartWeights = 'startWeights'\n}\n\nexport enum InvestType {\n Exit = 'Exit',\n Join = 'Join'\n}\n\nexport type JoinExit = {\n __typename?: 'JoinExit';\n amounts: Array;\n id: Scalars['ID'];\n pool: Pool;\n sender: Scalars['Bytes'];\n timestamp: Scalars['Int'];\n tx: Scalars['Bytes'];\n type: InvestType;\n user: User;\n valueUSD?: Maybe;\n};\n\nexport type JoinExit_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n amounts?: InputMaybe>;\n amounts_contains?: InputMaybe>;\n amounts_contains_nocase?: InputMaybe>;\n amounts_not?: InputMaybe>;\n amounts_not_contains?: InputMaybe>;\n amounts_not_contains_nocase?: InputMaybe>;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n sender?: InputMaybe;\n sender_contains?: InputMaybe;\n sender_gt?: InputMaybe;\n sender_gte?: InputMaybe;\n sender_in?: InputMaybe>;\n sender_lt?: InputMaybe;\n sender_lte?: InputMaybe;\n sender_not?: InputMaybe;\n sender_not_contains?: InputMaybe;\n sender_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n tx?: InputMaybe;\n tx_contains?: InputMaybe;\n tx_gt?: InputMaybe;\n tx_gte?: InputMaybe;\n tx_in?: InputMaybe>;\n tx_lt?: InputMaybe;\n tx_lte?: InputMaybe;\n tx_not?: InputMaybe;\n tx_not_contains?: InputMaybe;\n tx_not_in?: InputMaybe>;\n type?: InputMaybe;\n type_in?: InputMaybe>;\n type_not?: InputMaybe;\n type_not_in?: InputMaybe>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n valueUSD?: InputMaybe;\n valueUSD_gt?: InputMaybe;\n valueUSD_gte?: InputMaybe;\n valueUSD_in?: InputMaybe>;\n valueUSD_lt?: InputMaybe;\n valueUSD_lte?: InputMaybe;\n valueUSD_not?: InputMaybe;\n valueUSD_not_in?: InputMaybe>;\n};\n\nexport enum JoinExit_OrderBy {\n Amounts = 'amounts',\n Id = 'id',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n Sender = 'sender',\n Timestamp = 'timestamp',\n Tx = 'tx',\n Type = 'type',\n User = 'user',\n UserId = 'user__id',\n ValueUsd = 'valueUSD'\n}\n\nexport type LatestPrice = {\n __typename?: 'LatestPrice';\n asset: Scalars['Bytes'];\n block: Scalars['BigInt'];\n id: Scalars['ID'];\n poolId: Pool;\n price: Scalars['BigDecimal'];\n pricingAsset: Scalars['Bytes'];\n};\n\nexport type LatestPrice_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n asset?: InputMaybe;\n asset_contains?: InputMaybe;\n asset_gt?: InputMaybe;\n asset_gte?: InputMaybe;\n asset_in?: InputMaybe>;\n asset_lt?: InputMaybe;\n asset_lte?: InputMaybe;\n asset_not?: InputMaybe;\n asset_not_contains?: InputMaybe;\n asset_not_in?: InputMaybe>;\n block?: InputMaybe;\n block_gt?: InputMaybe;\n block_gte?: InputMaybe;\n block_in?: InputMaybe>;\n block_lt?: InputMaybe;\n block_lte?: InputMaybe;\n block_not?: InputMaybe;\n block_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n price?: InputMaybe;\n price_gt?: InputMaybe;\n price_gte?: InputMaybe;\n price_in?: InputMaybe>;\n price_lt?: InputMaybe;\n price_lte?: InputMaybe;\n price_not?: InputMaybe;\n price_not_in?: InputMaybe>;\n pricingAsset?: InputMaybe;\n pricingAsset_contains?: InputMaybe;\n pricingAsset_gt?: InputMaybe;\n pricingAsset_gte?: InputMaybe;\n pricingAsset_in?: InputMaybe>;\n pricingAsset_lt?: InputMaybe;\n pricingAsset_lte?: InputMaybe;\n pricingAsset_not?: InputMaybe;\n pricingAsset_not_contains?: InputMaybe;\n pricingAsset_not_in?: InputMaybe>;\n};\n\nexport enum LatestPrice_OrderBy {\n Asset = 'asset',\n Block = 'block',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n Price = 'price',\n PricingAsset = 'pricingAsset'\n}\n\nexport type ManagementOperation = {\n __typename?: 'ManagementOperation';\n cashDelta: Scalars['BigDecimal'];\n id: Scalars['ID'];\n managedDelta: Scalars['BigDecimal'];\n poolTokenId: PoolToken;\n timestamp: Scalars['Int'];\n type: OperationType;\n};\n\nexport type ManagementOperation_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n cashDelta?: InputMaybe;\n cashDelta_gt?: InputMaybe;\n cashDelta_gte?: InputMaybe;\n cashDelta_in?: InputMaybe>;\n cashDelta_lt?: InputMaybe;\n cashDelta_lte?: InputMaybe;\n cashDelta_not?: InputMaybe;\n cashDelta_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n managedDelta?: InputMaybe;\n managedDelta_gt?: InputMaybe;\n managedDelta_gte?: InputMaybe;\n managedDelta_in?: InputMaybe>;\n managedDelta_lt?: InputMaybe;\n managedDelta_lte?: InputMaybe;\n managedDelta_not?: InputMaybe;\n managedDelta_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolTokenId?: InputMaybe;\n poolTokenId_?: InputMaybe;\n poolTokenId_contains?: InputMaybe;\n poolTokenId_contains_nocase?: InputMaybe;\n poolTokenId_ends_with?: InputMaybe;\n poolTokenId_ends_with_nocase?: InputMaybe;\n poolTokenId_gt?: InputMaybe;\n poolTokenId_gte?: InputMaybe;\n poolTokenId_in?: InputMaybe>;\n poolTokenId_lt?: InputMaybe;\n poolTokenId_lte?: InputMaybe;\n poolTokenId_not?: InputMaybe;\n poolTokenId_not_contains?: InputMaybe;\n poolTokenId_not_contains_nocase?: InputMaybe;\n poolTokenId_not_ends_with?: InputMaybe;\n poolTokenId_not_ends_with_nocase?: InputMaybe;\n poolTokenId_not_in?: InputMaybe>;\n poolTokenId_not_starts_with?: InputMaybe;\n poolTokenId_not_starts_with_nocase?: InputMaybe;\n poolTokenId_starts_with?: InputMaybe;\n poolTokenId_starts_with_nocase?: InputMaybe;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n type?: InputMaybe;\n type_in?: InputMaybe>;\n type_not?: InputMaybe;\n type_not_in?: InputMaybe>;\n};\n\nexport enum ManagementOperation_OrderBy {\n CashDelta = 'cashDelta',\n Id = 'id',\n ManagedDelta = 'managedDelta',\n PoolTokenId = 'poolTokenId',\n PoolTokenIdAddress = 'poolTokenId__address',\n PoolTokenIdAssetManager = 'poolTokenId__assetManager',\n PoolTokenIdBalance = 'poolTokenId__balance',\n PoolTokenIdCashBalance = 'poolTokenId__cashBalance',\n PoolTokenIdDecimals = 'poolTokenId__decimals',\n PoolTokenIdId = 'poolTokenId__id',\n PoolTokenIdIndex = 'poolTokenId__index',\n PoolTokenIdIsExemptFromYieldProtocolFee = 'poolTokenId__isExemptFromYieldProtocolFee',\n PoolTokenIdManagedBalance = 'poolTokenId__managedBalance',\n PoolTokenIdName = 'poolTokenId__name',\n PoolTokenIdOldPriceRate = 'poolTokenId__oldPriceRate',\n PoolTokenIdPaidProtocolFees = 'poolTokenId__paidProtocolFees',\n PoolTokenIdPriceRate = 'poolTokenId__priceRate',\n PoolTokenIdSymbol = 'poolTokenId__symbol',\n PoolTokenIdWeight = 'poolTokenId__weight',\n Timestamp = 'timestamp',\n Type = 'type'\n}\n\nexport enum OperationType {\n Deposit = 'Deposit',\n Update = 'Update',\n Withdraw = 'Withdraw'\n}\n\n/** Defines the order direction, either ascending or descending */\nexport enum OrderDirection {\n Asc = 'asc',\n Desc = 'desc'\n}\n\nexport type Pool = {\n __typename?: 'Pool';\n address: Scalars['Bytes'];\n alpha?: Maybe;\n amp?: Maybe;\n ampUpdates?: Maybe>;\n baseToken?: Maybe;\n beta?: Maybe;\n c?: Maybe;\n circuitBreakers?: Maybe>;\n createTime: Scalars['Int'];\n dSq?: Maybe;\n delta?: Maybe;\n epsilon?: Maybe;\n expiryTime?: Maybe;\n factory?: Maybe;\n historicalValues?: Maybe>;\n holdersCount: Scalars['BigInt'];\n id: Scalars['ID'];\n isInRecoveryMode?: Maybe;\n isPaused?: Maybe;\n joinExitEnabled?: Maybe;\n lambda?: Maybe;\n lastJoinExitAmp?: Maybe;\n lastPostJoinExitInvariant?: Maybe;\n latestAmpUpdate?: Maybe;\n lowerTarget?: Maybe;\n mainIndex?: Maybe;\n managementAumFee?: Maybe;\n managementFee?: Maybe;\n mustAllowlistLPs?: Maybe;\n name?: Maybe;\n oracleEnabled: Scalars['Boolean'];\n owner?: Maybe;\n poolType?: Maybe;\n poolTypeVersion?: Maybe;\n priceRateProviders?: Maybe>;\n principalToken?: Maybe;\n protocolAumFeeCache?: Maybe;\n protocolId?: Maybe;\n protocolIdData?: Maybe;\n protocolSwapFeeCache?: Maybe;\n protocolYieldFeeCache?: Maybe;\n root3Alpha?: Maybe;\n s?: Maybe;\n shares?: Maybe>;\n snapshots?: Maybe>;\n sqrtAlpha?: Maybe;\n sqrtBeta?: Maybe;\n strategyType: Scalars['Int'];\n /** Indicates if a pool can be swapped against. Combines multiple sources, including offchain curation */\n swapEnabled: Scalars['Boolean'];\n /** External indication from an offchain permissioned actor */\n swapEnabledCurationSignal?: Maybe;\n /** The native swapEnabled boolean. internal to the pool. Only applies to Gyro, LBPs and InvestmentPools */\n swapEnabledInternal?: Maybe;\n swapFee: Scalars['BigDecimal'];\n swaps?: Maybe>;\n swapsCount: Scalars['BigInt'];\n symbol?: Maybe;\n tauAlphaX?: Maybe;\n tauAlphaY?: Maybe;\n tauBetaX?: Maybe;\n tauBetaY?: Maybe;\n tokens?: Maybe>;\n tokensList: Array;\n totalAumFeeCollectedInBPT?: Maybe;\n totalLiquidity: Scalars['BigDecimal'];\n totalLiquiditySansBPT?: Maybe;\n totalProtocolFee?: Maybe;\n totalProtocolFeePaidInBPT?: Maybe;\n totalShares: Scalars['BigDecimal'];\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n totalWeight?: Maybe;\n tx?: Maybe;\n u?: Maybe;\n unitSeconds?: Maybe;\n upperTarget?: Maybe;\n v?: Maybe;\n vaultID: Balancer;\n w?: Maybe;\n weightUpdates?: Maybe>;\n wrappedIndex?: Maybe;\n z?: Maybe;\n};\n\n\nexport type PoolAmpUpdatesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolCircuitBreakersArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolHistoricalValuesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolPriceRateProvidersArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolSharesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolSnapshotsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolSwapsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolTokensArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolWeightUpdatesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type PoolContract = {\n __typename?: 'PoolContract';\n id: Scalars['ID'];\n pool: Pool;\n};\n\nexport type PoolContract_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n};\n\nexport enum PoolContract_OrderBy {\n Id = 'id',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z'\n}\n\nexport type PoolHistoricalLiquidity = {\n __typename?: 'PoolHistoricalLiquidity';\n block: Scalars['BigInt'];\n id: Scalars['ID'];\n poolId: Pool;\n poolLiquidity: Scalars['BigDecimal'];\n poolShareValue: Scalars['BigDecimal'];\n poolTotalShares: Scalars['BigDecimal'];\n pricingAsset: Scalars['Bytes'];\n};\n\nexport type PoolHistoricalLiquidity_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n block?: InputMaybe;\n block_gt?: InputMaybe;\n block_gte?: InputMaybe;\n block_in?: InputMaybe>;\n block_lt?: InputMaybe;\n block_lte?: InputMaybe;\n block_not?: InputMaybe;\n block_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n poolLiquidity?: InputMaybe;\n poolLiquidity_gt?: InputMaybe;\n poolLiquidity_gte?: InputMaybe;\n poolLiquidity_in?: InputMaybe>;\n poolLiquidity_lt?: InputMaybe;\n poolLiquidity_lte?: InputMaybe;\n poolLiquidity_not?: InputMaybe;\n poolLiquidity_not_in?: InputMaybe>;\n poolShareValue?: InputMaybe;\n poolShareValue_gt?: InputMaybe;\n poolShareValue_gte?: InputMaybe;\n poolShareValue_in?: InputMaybe>;\n poolShareValue_lt?: InputMaybe;\n poolShareValue_lte?: InputMaybe;\n poolShareValue_not?: InputMaybe;\n poolShareValue_not_in?: InputMaybe>;\n poolTotalShares?: InputMaybe;\n poolTotalShares_gt?: InputMaybe;\n poolTotalShares_gte?: InputMaybe;\n poolTotalShares_in?: InputMaybe>;\n poolTotalShares_lt?: InputMaybe;\n poolTotalShares_lte?: InputMaybe;\n poolTotalShares_not?: InputMaybe;\n poolTotalShares_not_in?: InputMaybe>;\n pricingAsset?: InputMaybe;\n pricingAsset_contains?: InputMaybe;\n pricingAsset_gt?: InputMaybe;\n pricingAsset_gte?: InputMaybe;\n pricingAsset_in?: InputMaybe>;\n pricingAsset_lt?: InputMaybe;\n pricingAsset_lte?: InputMaybe;\n pricingAsset_not?: InputMaybe;\n pricingAsset_not_contains?: InputMaybe;\n pricingAsset_not_in?: InputMaybe>;\n};\n\nexport enum PoolHistoricalLiquidity_OrderBy {\n Block = 'block',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n PoolLiquidity = 'poolLiquidity',\n PoolShareValue = 'poolShareValue',\n PoolTotalShares = 'poolTotalShares',\n PricingAsset = 'pricingAsset'\n}\n\nexport type PoolShare = {\n __typename?: 'PoolShare';\n balance: Scalars['BigDecimal'];\n id: Scalars['ID'];\n poolId: Pool;\n userAddress: User;\n};\n\nexport type PoolShare_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n balance?: InputMaybe;\n balance_gt?: InputMaybe;\n balance_gte?: InputMaybe;\n balance_in?: InputMaybe>;\n balance_lt?: InputMaybe;\n balance_lte?: InputMaybe;\n balance_not?: InputMaybe;\n balance_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n userAddress?: InputMaybe;\n userAddress_?: InputMaybe;\n userAddress_contains?: InputMaybe;\n userAddress_contains_nocase?: InputMaybe;\n userAddress_ends_with?: InputMaybe;\n userAddress_ends_with_nocase?: InputMaybe;\n userAddress_gt?: InputMaybe;\n userAddress_gte?: InputMaybe;\n userAddress_in?: InputMaybe>;\n userAddress_lt?: InputMaybe;\n userAddress_lte?: InputMaybe;\n userAddress_not?: InputMaybe;\n userAddress_not_contains?: InputMaybe;\n userAddress_not_contains_nocase?: InputMaybe;\n userAddress_not_ends_with?: InputMaybe;\n userAddress_not_ends_with_nocase?: InputMaybe;\n userAddress_not_in?: InputMaybe>;\n userAddress_not_starts_with?: InputMaybe;\n userAddress_not_starts_with_nocase?: InputMaybe;\n userAddress_starts_with?: InputMaybe;\n userAddress_starts_with_nocase?: InputMaybe;\n};\n\nexport enum PoolShare_OrderBy {\n Balance = 'balance',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n UserAddress = 'userAddress',\n UserAddressId = 'userAddress__id'\n}\n\nexport type PoolSnapshot = {\n __typename?: 'PoolSnapshot';\n amounts: Array;\n holdersCount: Scalars['BigInt'];\n id: Scalars['ID'];\n liquidity: Scalars['BigDecimal'];\n pool: Pool;\n protocolFee?: Maybe;\n swapFees: Scalars['BigDecimal'];\n swapVolume: Scalars['BigDecimal'];\n swapsCount: Scalars['BigInt'];\n timestamp: Scalars['Int'];\n totalShares: Scalars['BigDecimal'];\n};\n\nexport type PoolSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n amounts?: InputMaybe>;\n amounts_contains?: InputMaybe>;\n amounts_contains_nocase?: InputMaybe>;\n amounts_not?: InputMaybe>;\n amounts_not_contains?: InputMaybe>;\n amounts_not_contains_nocase?: InputMaybe>;\n and?: InputMaybe>>;\n holdersCount?: InputMaybe;\n holdersCount_gt?: InputMaybe;\n holdersCount_gte?: InputMaybe;\n holdersCount_in?: InputMaybe>;\n holdersCount_lt?: InputMaybe;\n holdersCount_lte?: InputMaybe;\n holdersCount_not?: InputMaybe;\n holdersCount_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n liquidity?: InputMaybe;\n liquidity_gt?: InputMaybe;\n liquidity_gte?: InputMaybe;\n liquidity_in?: InputMaybe>;\n liquidity_lt?: InputMaybe;\n liquidity_lte?: InputMaybe;\n liquidity_not?: InputMaybe;\n liquidity_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n protocolFee?: InputMaybe;\n protocolFee_gt?: InputMaybe;\n protocolFee_gte?: InputMaybe;\n protocolFee_in?: InputMaybe>;\n protocolFee_lt?: InputMaybe;\n protocolFee_lte?: InputMaybe;\n protocolFee_not?: InputMaybe;\n protocolFee_not_in?: InputMaybe>;\n swapFees?: InputMaybe;\n swapFees_gt?: InputMaybe;\n swapFees_gte?: InputMaybe;\n swapFees_in?: InputMaybe>;\n swapFees_lt?: InputMaybe;\n swapFees_lte?: InputMaybe;\n swapFees_not?: InputMaybe;\n swapFees_not_in?: InputMaybe>;\n swapVolume?: InputMaybe;\n swapVolume_gt?: InputMaybe;\n swapVolume_gte?: InputMaybe;\n swapVolume_in?: InputMaybe>;\n swapVolume_lt?: InputMaybe;\n swapVolume_lte?: InputMaybe;\n swapVolume_not?: InputMaybe;\n swapVolume_not_in?: InputMaybe>;\n swapsCount?: InputMaybe;\n swapsCount_gt?: InputMaybe;\n swapsCount_gte?: InputMaybe;\n swapsCount_in?: InputMaybe>;\n swapsCount_lt?: InputMaybe;\n swapsCount_lte?: InputMaybe;\n swapsCount_not?: InputMaybe;\n swapsCount_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n totalShares?: InputMaybe;\n totalShares_gt?: InputMaybe;\n totalShares_gte?: InputMaybe;\n totalShares_in?: InputMaybe>;\n totalShares_lt?: InputMaybe;\n totalShares_lte?: InputMaybe;\n totalShares_not?: InputMaybe;\n totalShares_not_in?: InputMaybe>;\n};\n\nexport enum PoolSnapshot_OrderBy {\n Amounts = 'amounts',\n HoldersCount = 'holdersCount',\n Id = 'id',\n Liquidity = 'liquidity',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n ProtocolFee = 'protocolFee',\n SwapFees = 'swapFees',\n SwapVolume = 'swapVolume',\n SwapsCount = 'swapsCount',\n Timestamp = 'timestamp',\n TotalShares = 'totalShares'\n}\n\nexport type PoolToken = {\n __typename?: 'PoolToken';\n address: Scalars['String'];\n assetManager: Scalars['Bytes'];\n balance: Scalars['BigDecimal'];\n cashBalance: Scalars['BigDecimal'];\n circuitBreaker?: Maybe;\n decimals: Scalars['Int'];\n id: Scalars['ID'];\n index?: Maybe;\n isExemptFromYieldProtocolFee?: Maybe;\n managedBalance: Scalars['BigDecimal'];\n managements?: Maybe>;\n name: Scalars['String'];\n oldPriceRate?: Maybe;\n paidProtocolFees?: Maybe;\n poolId?: Maybe;\n priceRate: Scalars['BigDecimal'];\n symbol: Scalars['String'];\n token: Token;\n weight?: Maybe;\n};\n\n\nexport type PoolTokenManagementsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type PoolToken_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_contains_nocase?: InputMaybe;\n address_ends_with?: InputMaybe;\n address_ends_with_nocase?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_contains_nocase?: InputMaybe;\n address_not_ends_with?: InputMaybe;\n address_not_ends_with_nocase?: InputMaybe;\n address_not_in?: InputMaybe>;\n address_not_starts_with?: InputMaybe;\n address_not_starts_with_nocase?: InputMaybe;\n address_starts_with?: InputMaybe;\n address_starts_with_nocase?: InputMaybe;\n and?: InputMaybe>>;\n assetManager?: InputMaybe;\n assetManager_contains?: InputMaybe;\n assetManager_gt?: InputMaybe;\n assetManager_gte?: InputMaybe;\n assetManager_in?: InputMaybe>;\n assetManager_lt?: InputMaybe;\n assetManager_lte?: InputMaybe;\n assetManager_not?: InputMaybe;\n assetManager_not_contains?: InputMaybe;\n assetManager_not_in?: InputMaybe>;\n balance?: InputMaybe;\n balance_gt?: InputMaybe;\n balance_gte?: InputMaybe;\n balance_in?: InputMaybe>;\n balance_lt?: InputMaybe;\n balance_lte?: InputMaybe;\n balance_not?: InputMaybe;\n balance_not_in?: InputMaybe>;\n cashBalance?: InputMaybe;\n cashBalance_gt?: InputMaybe;\n cashBalance_gte?: InputMaybe;\n cashBalance_in?: InputMaybe>;\n cashBalance_lt?: InputMaybe;\n cashBalance_lte?: InputMaybe;\n cashBalance_not?: InputMaybe;\n cashBalance_not_in?: InputMaybe>;\n circuitBreaker?: InputMaybe;\n circuitBreaker_?: InputMaybe;\n circuitBreaker_contains?: InputMaybe;\n circuitBreaker_contains_nocase?: InputMaybe;\n circuitBreaker_ends_with?: InputMaybe;\n circuitBreaker_ends_with_nocase?: InputMaybe;\n circuitBreaker_gt?: InputMaybe;\n circuitBreaker_gte?: InputMaybe;\n circuitBreaker_in?: InputMaybe>;\n circuitBreaker_lt?: InputMaybe;\n circuitBreaker_lte?: InputMaybe;\n circuitBreaker_not?: InputMaybe;\n circuitBreaker_not_contains?: InputMaybe;\n circuitBreaker_not_contains_nocase?: InputMaybe;\n circuitBreaker_not_ends_with?: InputMaybe;\n circuitBreaker_not_ends_with_nocase?: InputMaybe;\n circuitBreaker_not_in?: InputMaybe>;\n circuitBreaker_not_starts_with?: InputMaybe;\n circuitBreaker_not_starts_with_nocase?: InputMaybe;\n circuitBreaker_starts_with?: InputMaybe;\n circuitBreaker_starts_with_nocase?: InputMaybe;\n decimals?: InputMaybe;\n decimals_gt?: InputMaybe;\n decimals_gte?: InputMaybe;\n decimals_in?: InputMaybe>;\n decimals_lt?: InputMaybe;\n decimals_lte?: InputMaybe;\n decimals_not?: InputMaybe;\n decimals_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n index?: InputMaybe;\n index_gt?: InputMaybe;\n index_gte?: InputMaybe;\n index_in?: InputMaybe>;\n index_lt?: InputMaybe;\n index_lte?: InputMaybe;\n index_not?: InputMaybe;\n index_not_in?: InputMaybe>;\n isExemptFromYieldProtocolFee?: InputMaybe;\n isExemptFromYieldProtocolFee_in?: InputMaybe>;\n isExemptFromYieldProtocolFee_not?: InputMaybe;\n isExemptFromYieldProtocolFee_not_in?: InputMaybe>;\n managedBalance?: InputMaybe;\n managedBalance_gt?: InputMaybe;\n managedBalance_gte?: InputMaybe;\n managedBalance_in?: InputMaybe>;\n managedBalance_lt?: InputMaybe;\n managedBalance_lte?: InputMaybe;\n managedBalance_not?: InputMaybe;\n managedBalance_not_in?: InputMaybe>;\n managements_?: InputMaybe;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n oldPriceRate?: InputMaybe;\n oldPriceRate_gt?: InputMaybe;\n oldPriceRate_gte?: InputMaybe;\n oldPriceRate_in?: InputMaybe>;\n oldPriceRate_lt?: InputMaybe;\n oldPriceRate_lte?: InputMaybe;\n oldPriceRate_not?: InputMaybe;\n oldPriceRate_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n paidProtocolFees?: InputMaybe;\n paidProtocolFees_gt?: InputMaybe;\n paidProtocolFees_gte?: InputMaybe;\n paidProtocolFees_in?: InputMaybe>;\n paidProtocolFees_lt?: InputMaybe;\n paidProtocolFees_lte?: InputMaybe;\n paidProtocolFees_not?: InputMaybe;\n paidProtocolFees_not_in?: InputMaybe>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n priceRate?: InputMaybe;\n priceRate_gt?: InputMaybe;\n priceRate_gte?: InputMaybe;\n priceRate_in?: InputMaybe>;\n priceRate_lt?: InputMaybe;\n priceRate_lte?: InputMaybe;\n priceRate_not?: InputMaybe;\n priceRate_not_in?: InputMaybe>;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n token?: InputMaybe;\n token_?: InputMaybe;\n token_contains?: InputMaybe;\n token_contains_nocase?: InputMaybe;\n token_ends_with?: InputMaybe;\n token_ends_with_nocase?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_contains_nocase?: InputMaybe;\n token_not_ends_with?: InputMaybe;\n token_not_ends_with_nocase?: InputMaybe;\n token_not_in?: InputMaybe>;\n token_not_starts_with?: InputMaybe;\n token_not_starts_with_nocase?: InputMaybe;\n token_starts_with?: InputMaybe;\n token_starts_with_nocase?: InputMaybe;\n weight?: InputMaybe;\n weight_gt?: InputMaybe;\n weight_gte?: InputMaybe;\n weight_in?: InputMaybe>;\n weight_lt?: InputMaybe;\n weight_lte?: InputMaybe;\n weight_not?: InputMaybe;\n weight_not_in?: InputMaybe>;\n};\n\nexport enum PoolToken_OrderBy {\n Address = 'address',\n AssetManager = 'assetManager',\n Balance = 'balance',\n CashBalance = 'cashBalance',\n CircuitBreaker = 'circuitBreaker',\n CircuitBreakerBptPrice = 'circuitBreaker__bptPrice',\n CircuitBreakerId = 'circuitBreaker__id',\n CircuitBreakerLowerBoundPercentage = 'circuitBreaker__lowerBoundPercentage',\n CircuitBreakerUpperBoundPercentage = 'circuitBreaker__upperBoundPercentage',\n Decimals = 'decimals',\n Id = 'id',\n Index = 'index',\n IsExemptFromYieldProtocolFee = 'isExemptFromYieldProtocolFee',\n ManagedBalance = 'managedBalance',\n Managements = 'managements',\n Name = 'name',\n OldPriceRate = 'oldPriceRate',\n PaidProtocolFees = 'paidProtocolFees',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n PriceRate = 'priceRate',\n Symbol = 'symbol',\n Token = 'token',\n TokenAddress = 'token__address',\n TokenDecimals = 'token__decimals',\n TokenFxOracleDecimals = 'token__fxOracleDecimals',\n TokenId = 'token__id',\n TokenLatestFxPrice = 'token__latestFXPrice',\n TokenLatestUsdPrice = 'token__latestUSDPrice',\n TokenLatestUsdPriceTimestamp = 'token__latestUSDPriceTimestamp',\n TokenName = 'token__name',\n TokenSymbol = 'token__symbol',\n TokenTotalBalanceNotional = 'token__totalBalanceNotional',\n TokenTotalBalanceUsd = 'token__totalBalanceUSD',\n TokenTotalSwapCount = 'token__totalSwapCount',\n TokenTotalVolumeNotional = 'token__totalVolumeNotional',\n TokenTotalVolumeUsd = 'token__totalVolumeUSD',\n Weight = 'weight'\n}\n\nexport type Pool_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_in?: InputMaybe>;\n alpha?: InputMaybe;\n alpha_gt?: InputMaybe;\n alpha_gte?: InputMaybe;\n alpha_in?: InputMaybe>;\n alpha_lt?: InputMaybe;\n alpha_lte?: InputMaybe;\n alpha_not?: InputMaybe;\n alpha_not_in?: InputMaybe>;\n amp?: InputMaybe;\n ampUpdates_?: InputMaybe;\n amp_gt?: InputMaybe;\n amp_gte?: InputMaybe;\n amp_in?: InputMaybe>;\n amp_lt?: InputMaybe;\n amp_lte?: InputMaybe;\n amp_not?: InputMaybe;\n amp_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n baseToken?: InputMaybe;\n baseToken_contains?: InputMaybe;\n baseToken_gt?: InputMaybe;\n baseToken_gte?: InputMaybe;\n baseToken_in?: InputMaybe>;\n baseToken_lt?: InputMaybe;\n baseToken_lte?: InputMaybe;\n baseToken_not?: InputMaybe;\n baseToken_not_contains?: InputMaybe;\n baseToken_not_in?: InputMaybe>;\n beta?: InputMaybe;\n beta_gt?: InputMaybe;\n beta_gte?: InputMaybe;\n beta_in?: InputMaybe>;\n beta_lt?: InputMaybe;\n beta_lte?: InputMaybe;\n beta_not?: InputMaybe;\n beta_not_in?: InputMaybe>;\n c?: InputMaybe;\n c_gt?: InputMaybe;\n c_gte?: InputMaybe;\n c_in?: InputMaybe>;\n c_lt?: InputMaybe;\n c_lte?: InputMaybe;\n c_not?: InputMaybe;\n c_not_in?: InputMaybe>;\n circuitBreakers_?: InputMaybe;\n createTime?: InputMaybe;\n createTime_gt?: InputMaybe;\n createTime_gte?: InputMaybe;\n createTime_in?: InputMaybe>;\n createTime_lt?: InputMaybe;\n createTime_lte?: InputMaybe;\n createTime_not?: InputMaybe;\n createTime_not_in?: InputMaybe>;\n dSq?: InputMaybe;\n dSq_gt?: InputMaybe;\n dSq_gte?: InputMaybe;\n dSq_in?: InputMaybe>;\n dSq_lt?: InputMaybe;\n dSq_lte?: InputMaybe;\n dSq_not?: InputMaybe;\n dSq_not_in?: InputMaybe>;\n delta?: InputMaybe;\n delta_gt?: InputMaybe;\n delta_gte?: InputMaybe;\n delta_in?: InputMaybe>;\n delta_lt?: InputMaybe;\n delta_lte?: InputMaybe;\n delta_not?: InputMaybe;\n delta_not_in?: InputMaybe>;\n epsilon?: InputMaybe;\n epsilon_gt?: InputMaybe;\n epsilon_gte?: InputMaybe;\n epsilon_in?: InputMaybe>;\n epsilon_lt?: InputMaybe;\n epsilon_lte?: InputMaybe;\n epsilon_not?: InputMaybe;\n epsilon_not_in?: InputMaybe>;\n expiryTime?: InputMaybe;\n expiryTime_gt?: InputMaybe;\n expiryTime_gte?: InputMaybe;\n expiryTime_in?: InputMaybe>;\n expiryTime_lt?: InputMaybe;\n expiryTime_lte?: InputMaybe;\n expiryTime_not?: InputMaybe;\n expiryTime_not_in?: InputMaybe>;\n factory?: InputMaybe;\n factory_contains?: InputMaybe;\n factory_gt?: InputMaybe;\n factory_gte?: InputMaybe;\n factory_in?: InputMaybe>;\n factory_lt?: InputMaybe;\n factory_lte?: InputMaybe;\n factory_not?: InputMaybe;\n factory_not_contains?: InputMaybe;\n factory_not_in?: InputMaybe>;\n historicalValues_?: InputMaybe;\n holdersCount?: InputMaybe;\n holdersCount_gt?: InputMaybe;\n holdersCount_gte?: InputMaybe;\n holdersCount_in?: InputMaybe>;\n holdersCount_lt?: InputMaybe;\n holdersCount_lte?: InputMaybe;\n holdersCount_not?: InputMaybe;\n holdersCount_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n isInRecoveryMode?: InputMaybe;\n isInRecoveryMode_in?: InputMaybe>;\n isInRecoveryMode_not?: InputMaybe;\n isInRecoveryMode_not_in?: InputMaybe>;\n isPaused?: InputMaybe;\n isPaused_in?: InputMaybe>;\n isPaused_not?: InputMaybe;\n isPaused_not_in?: InputMaybe>;\n joinExitEnabled?: InputMaybe;\n joinExitEnabled_in?: InputMaybe>;\n joinExitEnabled_not?: InputMaybe;\n joinExitEnabled_not_in?: InputMaybe>;\n lambda?: InputMaybe;\n lambda_gt?: InputMaybe;\n lambda_gte?: InputMaybe;\n lambda_in?: InputMaybe>;\n lambda_lt?: InputMaybe;\n lambda_lte?: InputMaybe;\n lambda_not?: InputMaybe;\n lambda_not_in?: InputMaybe>;\n lastJoinExitAmp?: InputMaybe;\n lastJoinExitAmp_gt?: InputMaybe;\n lastJoinExitAmp_gte?: InputMaybe;\n lastJoinExitAmp_in?: InputMaybe>;\n lastJoinExitAmp_lt?: InputMaybe;\n lastJoinExitAmp_lte?: InputMaybe;\n lastJoinExitAmp_not?: InputMaybe;\n lastJoinExitAmp_not_in?: InputMaybe>;\n lastPostJoinExitInvariant?: InputMaybe;\n lastPostJoinExitInvariant_gt?: InputMaybe;\n lastPostJoinExitInvariant_gte?: InputMaybe;\n lastPostJoinExitInvariant_in?: InputMaybe>;\n lastPostJoinExitInvariant_lt?: InputMaybe;\n lastPostJoinExitInvariant_lte?: InputMaybe;\n lastPostJoinExitInvariant_not?: InputMaybe;\n lastPostJoinExitInvariant_not_in?: InputMaybe>;\n latestAmpUpdate?: InputMaybe;\n latestAmpUpdate_?: InputMaybe;\n latestAmpUpdate_contains?: InputMaybe;\n latestAmpUpdate_contains_nocase?: InputMaybe;\n latestAmpUpdate_ends_with?: InputMaybe;\n latestAmpUpdate_ends_with_nocase?: InputMaybe;\n latestAmpUpdate_gt?: InputMaybe;\n latestAmpUpdate_gte?: InputMaybe;\n latestAmpUpdate_in?: InputMaybe>;\n latestAmpUpdate_lt?: InputMaybe;\n latestAmpUpdate_lte?: InputMaybe;\n latestAmpUpdate_not?: InputMaybe;\n latestAmpUpdate_not_contains?: InputMaybe;\n latestAmpUpdate_not_contains_nocase?: InputMaybe;\n latestAmpUpdate_not_ends_with?: InputMaybe;\n latestAmpUpdate_not_ends_with_nocase?: InputMaybe;\n latestAmpUpdate_not_in?: InputMaybe>;\n latestAmpUpdate_not_starts_with?: InputMaybe;\n latestAmpUpdate_not_starts_with_nocase?: InputMaybe;\n latestAmpUpdate_starts_with?: InputMaybe;\n latestAmpUpdate_starts_with_nocase?: InputMaybe;\n lowerTarget?: InputMaybe;\n lowerTarget_gt?: InputMaybe;\n lowerTarget_gte?: InputMaybe;\n lowerTarget_in?: InputMaybe>;\n lowerTarget_lt?: InputMaybe;\n lowerTarget_lte?: InputMaybe;\n lowerTarget_not?: InputMaybe;\n lowerTarget_not_in?: InputMaybe>;\n mainIndex?: InputMaybe;\n mainIndex_gt?: InputMaybe;\n mainIndex_gte?: InputMaybe;\n mainIndex_in?: InputMaybe>;\n mainIndex_lt?: InputMaybe;\n mainIndex_lte?: InputMaybe;\n mainIndex_not?: InputMaybe;\n mainIndex_not_in?: InputMaybe>;\n managementAumFee?: InputMaybe;\n managementAumFee_gt?: InputMaybe;\n managementAumFee_gte?: InputMaybe;\n managementAumFee_in?: InputMaybe>;\n managementAumFee_lt?: InputMaybe;\n managementAumFee_lte?: InputMaybe;\n managementAumFee_not?: InputMaybe;\n managementAumFee_not_in?: InputMaybe>;\n managementFee?: InputMaybe;\n managementFee_gt?: InputMaybe;\n managementFee_gte?: InputMaybe;\n managementFee_in?: InputMaybe>;\n managementFee_lt?: InputMaybe;\n managementFee_lte?: InputMaybe;\n managementFee_not?: InputMaybe;\n managementFee_not_in?: InputMaybe>;\n mustAllowlistLPs?: InputMaybe;\n mustAllowlistLPs_in?: InputMaybe>;\n mustAllowlistLPs_not?: InputMaybe;\n mustAllowlistLPs_not_in?: InputMaybe>;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n oracleEnabled?: InputMaybe;\n oracleEnabled_in?: InputMaybe>;\n oracleEnabled_not?: InputMaybe;\n oracleEnabled_not_in?: InputMaybe>;\n owner?: InputMaybe;\n owner_contains?: InputMaybe;\n owner_gt?: InputMaybe;\n owner_gte?: InputMaybe;\n owner_in?: InputMaybe>;\n owner_lt?: InputMaybe;\n owner_lte?: InputMaybe;\n owner_not?: InputMaybe;\n owner_not_contains?: InputMaybe;\n owner_not_in?: InputMaybe>;\n poolType?: InputMaybe;\n poolTypeVersion?: InputMaybe;\n poolTypeVersion_gt?: InputMaybe;\n poolTypeVersion_gte?: InputMaybe;\n poolTypeVersion_in?: InputMaybe>;\n poolTypeVersion_lt?: InputMaybe;\n poolTypeVersion_lte?: InputMaybe;\n poolTypeVersion_not?: InputMaybe;\n poolTypeVersion_not_in?: InputMaybe>;\n poolType_contains?: InputMaybe;\n poolType_contains_nocase?: InputMaybe;\n poolType_ends_with?: InputMaybe;\n poolType_ends_with_nocase?: InputMaybe;\n poolType_gt?: InputMaybe;\n poolType_gte?: InputMaybe;\n poolType_in?: InputMaybe>;\n poolType_lt?: InputMaybe;\n poolType_lte?: InputMaybe;\n poolType_not?: InputMaybe;\n poolType_not_contains?: InputMaybe;\n poolType_not_contains_nocase?: InputMaybe;\n poolType_not_ends_with?: InputMaybe;\n poolType_not_ends_with_nocase?: InputMaybe;\n poolType_not_in?: InputMaybe>;\n poolType_not_starts_with?: InputMaybe;\n poolType_not_starts_with_nocase?: InputMaybe;\n poolType_starts_with?: InputMaybe;\n poolType_starts_with_nocase?: InputMaybe;\n priceRateProviders_?: InputMaybe;\n principalToken?: InputMaybe;\n principalToken_contains?: InputMaybe;\n principalToken_gt?: InputMaybe;\n principalToken_gte?: InputMaybe;\n principalToken_in?: InputMaybe>;\n principalToken_lt?: InputMaybe;\n principalToken_lte?: InputMaybe;\n principalToken_not?: InputMaybe;\n principalToken_not_contains?: InputMaybe;\n principalToken_not_in?: InputMaybe>;\n protocolAumFeeCache?: InputMaybe;\n protocolAumFeeCache_gt?: InputMaybe;\n protocolAumFeeCache_gte?: InputMaybe;\n protocolAumFeeCache_in?: InputMaybe>;\n protocolAumFeeCache_lt?: InputMaybe;\n protocolAumFeeCache_lte?: InputMaybe;\n protocolAumFeeCache_not?: InputMaybe;\n protocolAumFeeCache_not_in?: InputMaybe>;\n protocolId?: InputMaybe;\n protocolIdData?: InputMaybe;\n protocolIdData_?: InputMaybe;\n protocolIdData_contains?: InputMaybe;\n protocolIdData_contains_nocase?: InputMaybe;\n protocolIdData_ends_with?: InputMaybe;\n protocolIdData_ends_with_nocase?: InputMaybe;\n protocolIdData_gt?: InputMaybe;\n protocolIdData_gte?: InputMaybe;\n protocolIdData_in?: InputMaybe>;\n protocolIdData_lt?: InputMaybe;\n protocolIdData_lte?: InputMaybe;\n protocolIdData_not?: InputMaybe;\n protocolIdData_not_contains?: InputMaybe;\n protocolIdData_not_contains_nocase?: InputMaybe;\n protocolIdData_not_ends_with?: InputMaybe;\n protocolIdData_not_ends_with_nocase?: InputMaybe;\n protocolIdData_not_in?: InputMaybe>;\n protocolIdData_not_starts_with?: InputMaybe;\n protocolIdData_not_starts_with_nocase?: InputMaybe;\n protocolIdData_starts_with?: InputMaybe;\n protocolIdData_starts_with_nocase?: InputMaybe;\n protocolId_gt?: InputMaybe;\n protocolId_gte?: InputMaybe;\n protocolId_in?: InputMaybe>;\n protocolId_lt?: InputMaybe;\n protocolId_lte?: InputMaybe;\n protocolId_not?: InputMaybe;\n protocolId_not_in?: InputMaybe>;\n protocolSwapFeeCache?: InputMaybe;\n protocolSwapFeeCache_gt?: InputMaybe;\n protocolSwapFeeCache_gte?: InputMaybe;\n protocolSwapFeeCache_in?: InputMaybe>;\n protocolSwapFeeCache_lt?: InputMaybe;\n protocolSwapFeeCache_lte?: InputMaybe;\n protocolSwapFeeCache_not?: InputMaybe;\n protocolSwapFeeCache_not_in?: InputMaybe>;\n protocolYieldFeeCache?: InputMaybe;\n protocolYieldFeeCache_gt?: InputMaybe;\n protocolYieldFeeCache_gte?: InputMaybe;\n protocolYieldFeeCache_in?: InputMaybe>;\n protocolYieldFeeCache_lt?: InputMaybe;\n protocolYieldFeeCache_lte?: InputMaybe;\n protocolYieldFeeCache_not?: InputMaybe;\n protocolYieldFeeCache_not_in?: InputMaybe>;\n root3Alpha?: InputMaybe;\n root3Alpha_gt?: InputMaybe;\n root3Alpha_gte?: InputMaybe;\n root3Alpha_in?: InputMaybe>;\n root3Alpha_lt?: InputMaybe;\n root3Alpha_lte?: InputMaybe;\n root3Alpha_not?: InputMaybe;\n root3Alpha_not_in?: InputMaybe>;\n s?: InputMaybe;\n s_gt?: InputMaybe;\n s_gte?: InputMaybe;\n s_in?: InputMaybe>;\n s_lt?: InputMaybe;\n s_lte?: InputMaybe;\n s_not?: InputMaybe;\n s_not_in?: InputMaybe>;\n shares_?: InputMaybe;\n snapshots_?: InputMaybe;\n sqrtAlpha?: InputMaybe;\n sqrtAlpha_gt?: InputMaybe;\n sqrtAlpha_gte?: InputMaybe;\n sqrtAlpha_in?: InputMaybe>;\n sqrtAlpha_lt?: InputMaybe;\n sqrtAlpha_lte?: InputMaybe;\n sqrtAlpha_not?: InputMaybe;\n sqrtAlpha_not_in?: InputMaybe>;\n sqrtBeta?: InputMaybe;\n sqrtBeta_gt?: InputMaybe;\n sqrtBeta_gte?: InputMaybe;\n sqrtBeta_in?: InputMaybe>;\n sqrtBeta_lt?: InputMaybe;\n sqrtBeta_lte?: InputMaybe;\n sqrtBeta_not?: InputMaybe;\n sqrtBeta_not_in?: InputMaybe>;\n strategyType?: InputMaybe;\n strategyType_gt?: InputMaybe;\n strategyType_gte?: InputMaybe;\n strategyType_in?: InputMaybe>;\n strategyType_lt?: InputMaybe;\n strategyType_lte?: InputMaybe;\n strategyType_not?: InputMaybe;\n strategyType_not_in?: InputMaybe>;\n swapEnabled?: InputMaybe;\n swapEnabledCurationSignal?: InputMaybe;\n swapEnabledCurationSignal_in?: InputMaybe>;\n swapEnabledCurationSignal_not?: InputMaybe;\n swapEnabledCurationSignal_not_in?: InputMaybe>;\n swapEnabledInternal?: InputMaybe;\n swapEnabledInternal_in?: InputMaybe>;\n swapEnabledInternal_not?: InputMaybe;\n swapEnabledInternal_not_in?: InputMaybe>;\n swapEnabled_in?: InputMaybe>;\n swapEnabled_not?: InputMaybe;\n swapEnabled_not_in?: InputMaybe>;\n swapFee?: InputMaybe;\n swapFee_gt?: InputMaybe;\n swapFee_gte?: InputMaybe;\n swapFee_in?: InputMaybe>;\n swapFee_lt?: InputMaybe;\n swapFee_lte?: InputMaybe;\n swapFee_not?: InputMaybe;\n swapFee_not_in?: InputMaybe>;\n swapsCount?: InputMaybe;\n swapsCount_gt?: InputMaybe;\n swapsCount_gte?: InputMaybe;\n swapsCount_in?: InputMaybe>;\n swapsCount_lt?: InputMaybe;\n swapsCount_lte?: InputMaybe;\n swapsCount_not?: InputMaybe;\n swapsCount_not_in?: InputMaybe>;\n swaps_?: InputMaybe;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n tauAlphaX?: InputMaybe;\n tauAlphaX_gt?: InputMaybe;\n tauAlphaX_gte?: InputMaybe;\n tauAlphaX_in?: InputMaybe>;\n tauAlphaX_lt?: InputMaybe;\n tauAlphaX_lte?: InputMaybe;\n tauAlphaX_not?: InputMaybe;\n tauAlphaX_not_in?: InputMaybe>;\n tauAlphaY?: InputMaybe;\n tauAlphaY_gt?: InputMaybe;\n tauAlphaY_gte?: InputMaybe;\n tauAlphaY_in?: InputMaybe>;\n tauAlphaY_lt?: InputMaybe;\n tauAlphaY_lte?: InputMaybe;\n tauAlphaY_not?: InputMaybe;\n tauAlphaY_not_in?: InputMaybe>;\n tauBetaX?: InputMaybe;\n tauBetaX_gt?: InputMaybe;\n tauBetaX_gte?: InputMaybe;\n tauBetaX_in?: InputMaybe>;\n tauBetaX_lt?: InputMaybe;\n tauBetaX_lte?: InputMaybe;\n tauBetaX_not?: InputMaybe;\n tauBetaX_not_in?: InputMaybe>;\n tauBetaY?: InputMaybe;\n tauBetaY_gt?: InputMaybe;\n tauBetaY_gte?: InputMaybe;\n tauBetaY_in?: InputMaybe>;\n tauBetaY_lt?: InputMaybe;\n tauBetaY_lte?: InputMaybe;\n tauBetaY_not?: InputMaybe;\n tauBetaY_not_in?: InputMaybe>;\n tokensList?: InputMaybe>;\n tokensList_contains?: InputMaybe>;\n tokensList_contains_nocase?: InputMaybe>;\n tokensList_not?: InputMaybe>;\n tokensList_not_contains?: InputMaybe>;\n tokensList_not_contains_nocase?: InputMaybe>;\n tokens_?: InputMaybe;\n totalAumFeeCollectedInBPT?: InputMaybe;\n totalAumFeeCollectedInBPT_gt?: InputMaybe;\n totalAumFeeCollectedInBPT_gte?: InputMaybe;\n totalAumFeeCollectedInBPT_in?: InputMaybe>;\n totalAumFeeCollectedInBPT_lt?: InputMaybe;\n totalAumFeeCollectedInBPT_lte?: InputMaybe;\n totalAumFeeCollectedInBPT_not?: InputMaybe;\n totalAumFeeCollectedInBPT_not_in?: InputMaybe>;\n totalLiquidity?: InputMaybe;\n totalLiquiditySansBPT?: InputMaybe;\n totalLiquiditySansBPT_gt?: InputMaybe;\n totalLiquiditySansBPT_gte?: InputMaybe;\n totalLiquiditySansBPT_in?: InputMaybe>;\n totalLiquiditySansBPT_lt?: InputMaybe;\n totalLiquiditySansBPT_lte?: InputMaybe;\n totalLiquiditySansBPT_not?: InputMaybe;\n totalLiquiditySansBPT_not_in?: InputMaybe>;\n totalLiquidity_gt?: InputMaybe;\n totalLiquidity_gte?: InputMaybe;\n totalLiquidity_in?: InputMaybe>;\n totalLiquidity_lt?: InputMaybe;\n totalLiquidity_lte?: InputMaybe;\n totalLiquidity_not?: InputMaybe;\n totalLiquidity_not_in?: InputMaybe>;\n totalProtocolFee?: InputMaybe;\n totalProtocolFeePaidInBPT?: InputMaybe;\n totalProtocolFeePaidInBPT_gt?: InputMaybe;\n totalProtocolFeePaidInBPT_gte?: InputMaybe;\n totalProtocolFeePaidInBPT_in?: InputMaybe>;\n totalProtocolFeePaidInBPT_lt?: InputMaybe;\n totalProtocolFeePaidInBPT_lte?: InputMaybe;\n totalProtocolFeePaidInBPT_not?: InputMaybe;\n totalProtocolFeePaidInBPT_not_in?: InputMaybe>;\n totalProtocolFee_gt?: InputMaybe;\n totalProtocolFee_gte?: InputMaybe;\n totalProtocolFee_in?: InputMaybe>;\n totalProtocolFee_lt?: InputMaybe;\n totalProtocolFee_lte?: InputMaybe;\n totalProtocolFee_not?: InputMaybe;\n totalProtocolFee_not_in?: InputMaybe>;\n totalShares?: InputMaybe;\n totalShares_gt?: InputMaybe;\n totalShares_gte?: InputMaybe;\n totalShares_in?: InputMaybe>;\n totalShares_lt?: InputMaybe;\n totalShares_lte?: InputMaybe;\n totalShares_not?: InputMaybe;\n totalShares_not_in?: InputMaybe>;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n totalWeight?: InputMaybe;\n totalWeight_gt?: InputMaybe;\n totalWeight_gte?: InputMaybe;\n totalWeight_in?: InputMaybe>;\n totalWeight_lt?: InputMaybe;\n totalWeight_lte?: InputMaybe;\n totalWeight_not?: InputMaybe;\n totalWeight_not_in?: InputMaybe>;\n tx?: InputMaybe;\n tx_contains?: InputMaybe;\n tx_gt?: InputMaybe;\n tx_gte?: InputMaybe;\n tx_in?: InputMaybe>;\n tx_lt?: InputMaybe;\n tx_lte?: InputMaybe;\n tx_not?: InputMaybe;\n tx_not_contains?: InputMaybe;\n tx_not_in?: InputMaybe>;\n u?: InputMaybe;\n u_gt?: InputMaybe;\n u_gte?: InputMaybe;\n u_in?: InputMaybe>;\n u_lt?: InputMaybe;\n u_lte?: InputMaybe;\n u_not?: InputMaybe;\n u_not_in?: InputMaybe>;\n unitSeconds?: InputMaybe;\n unitSeconds_gt?: InputMaybe;\n unitSeconds_gte?: InputMaybe;\n unitSeconds_in?: InputMaybe>;\n unitSeconds_lt?: InputMaybe;\n unitSeconds_lte?: InputMaybe;\n unitSeconds_not?: InputMaybe;\n unitSeconds_not_in?: InputMaybe>;\n upperTarget?: InputMaybe;\n upperTarget_gt?: InputMaybe;\n upperTarget_gte?: InputMaybe;\n upperTarget_in?: InputMaybe>;\n upperTarget_lt?: InputMaybe;\n upperTarget_lte?: InputMaybe;\n upperTarget_not?: InputMaybe;\n upperTarget_not_in?: InputMaybe>;\n v?: InputMaybe;\n v_gt?: InputMaybe;\n v_gte?: InputMaybe;\n v_in?: InputMaybe>;\n v_lt?: InputMaybe;\n v_lte?: InputMaybe;\n v_not?: InputMaybe;\n v_not_in?: InputMaybe>;\n vaultID?: InputMaybe;\n vaultID_?: InputMaybe;\n vaultID_contains?: InputMaybe;\n vaultID_contains_nocase?: InputMaybe;\n vaultID_ends_with?: InputMaybe;\n vaultID_ends_with_nocase?: InputMaybe;\n vaultID_gt?: InputMaybe;\n vaultID_gte?: InputMaybe;\n vaultID_in?: InputMaybe>;\n vaultID_lt?: InputMaybe;\n vaultID_lte?: InputMaybe;\n vaultID_not?: InputMaybe;\n vaultID_not_contains?: InputMaybe;\n vaultID_not_contains_nocase?: InputMaybe;\n vaultID_not_ends_with?: InputMaybe;\n vaultID_not_ends_with_nocase?: InputMaybe;\n vaultID_not_in?: InputMaybe>;\n vaultID_not_starts_with?: InputMaybe;\n vaultID_not_starts_with_nocase?: InputMaybe;\n vaultID_starts_with?: InputMaybe;\n vaultID_starts_with_nocase?: InputMaybe;\n w?: InputMaybe;\n w_gt?: InputMaybe;\n w_gte?: InputMaybe;\n w_in?: InputMaybe>;\n w_lt?: InputMaybe;\n w_lte?: InputMaybe;\n w_not?: InputMaybe;\n w_not_in?: InputMaybe>;\n weightUpdates_?: InputMaybe;\n wrappedIndex?: InputMaybe;\n wrappedIndex_gt?: InputMaybe;\n wrappedIndex_gte?: InputMaybe;\n wrappedIndex_in?: InputMaybe>;\n wrappedIndex_lt?: InputMaybe;\n wrappedIndex_lte?: InputMaybe;\n wrappedIndex_not?: InputMaybe;\n wrappedIndex_not_in?: InputMaybe>;\n z?: InputMaybe;\n z_gt?: InputMaybe;\n z_gte?: InputMaybe;\n z_in?: InputMaybe>;\n z_lt?: InputMaybe;\n z_lte?: InputMaybe;\n z_not?: InputMaybe;\n z_not_in?: InputMaybe>;\n};\n\nexport enum Pool_OrderBy {\n Address = 'address',\n Alpha = 'alpha',\n Amp = 'amp',\n AmpUpdates = 'ampUpdates',\n BaseToken = 'baseToken',\n Beta = 'beta',\n C = 'c',\n CircuitBreakers = 'circuitBreakers',\n CreateTime = 'createTime',\n DSq = 'dSq',\n Delta = 'delta',\n Epsilon = 'epsilon',\n ExpiryTime = 'expiryTime',\n Factory = 'factory',\n HistoricalValues = 'historicalValues',\n HoldersCount = 'holdersCount',\n Id = 'id',\n IsInRecoveryMode = 'isInRecoveryMode',\n IsPaused = 'isPaused',\n JoinExitEnabled = 'joinExitEnabled',\n Lambda = 'lambda',\n LastJoinExitAmp = 'lastJoinExitAmp',\n LastPostJoinExitInvariant = 'lastPostJoinExitInvariant',\n LatestAmpUpdate = 'latestAmpUpdate',\n LatestAmpUpdateEndAmp = 'latestAmpUpdate__endAmp',\n LatestAmpUpdateEndTimestamp = 'latestAmpUpdate__endTimestamp',\n LatestAmpUpdateId = 'latestAmpUpdate__id',\n LatestAmpUpdateScheduledTimestamp = 'latestAmpUpdate__scheduledTimestamp',\n LatestAmpUpdateStartAmp = 'latestAmpUpdate__startAmp',\n LatestAmpUpdateStartTimestamp = 'latestAmpUpdate__startTimestamp',\n LowerTarget = 'lowerTarget',\n MainIndex = 'mainIndex',\n ManagementAumFee = 'managementAumFee',\n ManagementFee = 'managementFee',\n MustAllowlistLPs = 'mustAllowlistLPs',\n Name = 'name',\n OracleEnabled = 'oracleEnabled',\n Owner = 'owner',\n PoolType = 'poolType',\n PoolTypeVersion = 'poolTypeVersion',\n PriceRateProviders = 'priceRateProviders',\n PrincipalToken = 'principalToken',\n ProtocolAumFeeCache = 'protocolAumFeeCache',\n ProtocolId = 'protocolId',\n ProtocolIdData = 'protocolIdData',\n ProtocolIdDataId = 'protocolIdData__id',\n ProtocolIdDataName = 'protocolIdData__name',\n ProtocolSwapFeeCache = 'protocolSwapFeeCache',\n ProtocolYieldFeeCache = 'protocolYieldFeeCache',\n Root3Alpha = 'root3Alpha',\n S = 's',\n Shares = 'shares',\n Snapshots = 'snapshots',\n SqrtAlpha = 'sqrtAlpha',\n SqrtBeta = 'sqrtBeta',\n StrategyType = 'strategyType',\n SwapEnabled = 'swapEnabled',\n SwapEnabledCurationSignal = 'swapEnabledCurationSignal',\n SwapEnabledInternal = 'swapEnabledInternal',\n SwapFee = 'swapFee',\n Swaps = 'swaps',\n SwapsCount = 'swapsCount',\n Symbol = 'symbol',\n TauAlphaX = 'tauAlphaX',\n TauAlphaY = 'tauAlphaY',\n TauBetaX = 'tauBetaX',\n TauBetaY = 'tauBetaY',\n Tokens = 'tokens',\n TokensList = 'tokensList',\n TotalAumFeeCollectedInBpt = 'totalAumFeeCollectedInBPT',\n TotalLiquidity = 'totalLiquidity',\n TotalLiquiditySansBpt = 'totalLiquiditySansBPT',\n TotalProtocolFee = 'totalProtocolFee',\n TotalProtocolFeePaidInBpt = 'totalProtocolFeePaidInBPT',\n TotalShares = 'totalShares',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume',\n TotalWeight = 'totalWeight',\n Tx = 'tx',\n U = 'u',\n UnitSeconds = 'unitSeconds',\n UpperTarget = 'upperTarget',\n V = 'v',\n VaultId = 'vaultID',\n VaultIdId = 'vaultID__id',\n VaultIdPoolCount = 'vaultID__poolCount',\n VaultIdProtocolFeesCollector = 'vaultID__protocolFeesCollector',\n VaultIdTotalLiquidity = 'vaultID__totalLiquidity',\n VaultIdTotalProtocolFee = 'vaultID__totalProtocolFee',\n VaultIdTotalSwapCount = 'vaultID__totalSwapCount',\n VaultIdTotalSwapFee = 'vaultID__totalSwapFee',\n VaultIdTotalSwapVolume = 'vaultID__totalSwapVolume',\n W = 'w',\n WeightUpdates = 'weightUpdates',\n WrappedIndex = 'wrappedIndex',\n Z = 'z'\n}\n\nexport type PriceRateProvider = {\n __typename?: 'PriceRateProvider';\n address: Scalars['Bytes'];\n cacheDuration?: Maybe;\n cacheExpiry?: Maybe;\n id: Scalars['ID'];\n lastCached?: Maybe;\n poolId: Pool;\n rate?: Maybe;\n token: PoolToken;\n};\n\nexport type PriceRateProvider_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n cacheDuration?: InputMaybe;\n cacheDuration_gt?: InputMaybe;\n cacheDuration_gte?: InputMaybe;\n cacheDuration_in?: InputMaybe>;\n cacheDuration_lt?: InputMaybe;\n cacheDuration_lte?: InputMaybe;\n cacheDuration_not?: InputMaybe;\n cacheDuration_not_in?: InputMaybe>;\n cacheExpiry?: InputMaybe;\n cacheExpiry_gt?: InputMaybe;\n cacheExpiry_gte?: InputMaybe;\n cacheExpiry_in?: InputMaybe>;\n cacheExpiry_lt?: InputMaybe;\n cacheExpiry_lte?: InputMaybe;\n cacheExpiry_not?: InputMaybe;\n cacheExpiry_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n lastCached?: InputMaybe;\n lastCached_gt?: InputMaybe;\n lastCached_gte?: InputMaybe;\n lastCached_in?: InputMaybe>;\n lastCached_lt?: InputMaybe;\n lastCached_lte?: InputMaybe;\n lastCached_not?: InputMaybe;\n lastCached_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n rate?: InputMaybe;\n rate_gt?: InputMaybe;\n rate_gte?: InputMaybe;\n rate_in?: InputMaybe>;\n rate_lt?: InputMaybe;\n rate_lte?: InputMaybe;\n rate_not?: InputMaybe;\n rate_not_in?: InputMaybe>;\n token?: InputMaybe;\n token_?: InputMaybe;\n token_contains?: InputMaybe;\n token_contains_nocase?: InputMaybe;\n token_ends_with?: InputMaybe;\n token_ends_with_nocase?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_contains_nocase?: InputMaybe;\n token_not_ends_with?: InputMaybe;\n token_not_ends_with_nocase?: InputMaybe;\n token_not_in?: InputMaybe>;\n token_not_starts_with?: InputMaybe;\n token_not_starts_with_nocase?: InputMaybe;\n token_starts_with?: InputMaybe;\n token_starts_with_nocase?: InputMaybe;\n};\n\nexport enum PriceRateProvider_OrderBy {\n Address = 'address',\n CacheDuration = 'cacheDuration',\n CacheExpiry = 'cacheExpiry',\n Id = 'id',\n LastCached = 'lastCached',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n Rate = 'rate',\n Token = 'token',\n TokenAddress = 'token__address',\n TokenAssetManager = 'token__assetManager',\n TokenBalance = 'token__balance',\n TokenCashBalance = 'token__cashBalance',\n TokenDecimals = 'token__decimals',\n TokenId = 'token__id',\n TokenIndex = 'token__index',\n TokenIsExemptFromYieldProtocolFee = 'token__isExemptFromYieldProtocolFee',\n TokenManagedBalance = 'token__managedBalance',\n TokenName = 'token__name',\n TokenOldPriceRate = 'token__oldPriceRate',\n TokenPaidProtocolFees = 'token__paidProtocolFees',\n TokenPriceRate = 'token__priceRate',\n TokenSymbol = 'token__symbol',\n TokenWeight = 'token__weight'\n}\n\nexport type ProtocolIdData = {\n __typename?: 'ProtocolIdData';\n id: Scalars['ID'];\n name: Scalars['String'];\n};\n\nexport type ProtocolIdData_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n};\n\nexport enum ProtocolIdData_OrderBy {\n Id = 'id',\n Name = 'name'\n}\n\nexport type Query = {\n __typename?: 'Query';\n /** Access to subgraph metadata */\n _meta?: Maybe<_Meta_>;\n ampUpdate?: Maybe;\n ampUpdates: Array;\n balancer?: Maybe;\n balancerSnapshot?: Maybe;\n balancerSnapshots: Array;\n balancers: Array;\n circuitBreaker?: Maybe;\n circuitBreakers: Array;\n gradualWeightUpdate?: Maybe;\n gradualWeightUpdates: Array;\n joinExit?: Maybe;\n joinExits: Array;\n latestPrice?: Maybe;\n latestPrices: Array;\n managementOperation?: Maybe;\n managementOperations: Array;\n pool?: Maybe;\n poolContract?: Maybe;\n poolContracts: Array;\n poolHistoricalLiquidities: Array;\n poolHistoricalLiquidity?: Maybe;\n poolShare?: Maybe;\n poolShares: Array;\n poolSnapshot?: Maybe;\n poolSnapshots: Array;\n poolToken?: Maybe;\n poolTokens: Array;\n pools: Array;\n priceRateProvider?: Maybe;\n priceRateProviders: Array;\n protocolIdData?: Maybe;\n protocolIdDatas: Array;\n swap?: Maybe;\n swapFeeUpdate?: Maybe;\n swapFeeUpdates: Array;\n swaps: Array;\n token?: Maybe;\n tokenPrice?: Maybe;\n tokenPrices: Array;\n tokenSnapshot?: Maybe;\n tokenSnapshots: Array;\n tokens: Array;\n tradePair?: Maybe;\n tradePairSnapshot?: Maybe;\n tradePairSnapshots: Array;\n tradePairs: Array;\n user?: Maybe;\n userInternalBalance?: Maybe;\n userInternalBalances: Array;\n users: Array;\n};\n\n\nexport type Query_MetaArgs = {\n block?: InputMaybe;\n};\n\n\nexport type QueryAmpUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryAmpUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryBalancerArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryBalancerSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryBalancerSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryBalancersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryCircuitBreakerArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryCircuitBreakersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGradualWeightUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGradualWeightUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryJoinExitArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryJoinExitsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryLatestPriceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryLatestPricesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryManagementOperationArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryManagementOperationsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolContractArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolContractsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolHistoricalLiquiditiesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolHistoricalLiquidityArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolShareArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolSharesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPriceRateProviderArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPriceRateProvidersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryProtocolIdDataArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryProtocolIdDatasArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QuerySwapArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QuerySwapFeeUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QuerySwapFeeUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QuerySwapsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenPriceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenPricesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTokenSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTradePairArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTradePairSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTradePairSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTradePairsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryUserArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUserInternalBalanceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUserInternalBalancesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryUsersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\nexport type Subscription = {\n __typename?: 'Subscription';\n /** Access to subgraph metadata */\n _meta?: Maybe<_Meta_>;\n ampUpdate?: Maybe;\n ampUpdates: Array;\n balancer?: Maybe;\n balancerSnapshot?: Maybe;\n balancerSnapshots: Array;\n balancers: Array;\n circuitBreaker?: Maybe;\n circuitBreakers: Array;\n gradualWeightUpdate?: Maybe;\n gradualWeightUpdates: Array;\n joinExit?: Maybe;\n joinExits: Array;\n latestPrice?: Maybe;\n latestPrices: Array;\n managementOperation?: Maybe;\n managementOperations: Array;\n pool?: Maybe;\n poolContract?: Maybe;\n poolContracts: Array;\n poolHistoricalLiquidities: Array;\n poolHistoricalLiquidity?: Maybe;\n poolShare?: Maybe;\n poolShares: Array;\n poolSnapshot?: Maybe;\n poolSnapshots: Array;\n poolToken?: Maybe;\n poolTokens: Array;\n pools: Array;\n priceRateProvider?: Maybe;\n priceRateProviders: Array;\n protocolIdData?: Maybe;\n protocolIdDatas: Array;\n swap?: Maybe;\n swapFeeUpdate?: Maybe;\n swapFeeUpdates: Array;\n swaps: Array;\n token?: Maybe;\n tokenPrice?: Maybe;\n tokenPrices: Array;\n tokenSnapshot?: Maybe;\n tokenSnapshots: Array;\n tokens: Array;\n tradePair?: Maybe;\n tradePairSnapshot?: Maybe;\n tradePairSnapshots: Array;\n tradePairs: Array;\n user?: Maybe;\n userInternalBalance?: Maybe;\n userInternalBalances: Array;\n users: Array;\n};\n\n\nexport type Subscription_MetaArgs = {\n block?: InputMaybe;\n};\n\n\nexport type SubscriptionAmpUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionAmpUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionBalancerArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionBalancerSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionBalancerSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionBalancersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionCircuitBreakerArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionCircuitBreakersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGradualWeightUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGradualWeightUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionJoinExitArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionJoinExitsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionLatestPriceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionLatestPricesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionManagementOperationArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionManagementOperationsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolContractArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolContractsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolHistoricalLiquiditiesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolHistoricalLiquidityArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolShareArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolSharesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPriceRateProviderArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPriceRateProvidersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionProtocolIdDataArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionProtocolIdDatasArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionSwapArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionSwapFeeUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionSwapFeeUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionSwapsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenPriceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenPricesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTokenSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTradePairArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTradePairSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTradePairSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTradePairsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionUserArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUserInternalBalanceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUserInternalBalancesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionUsersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\nexport type Swap = {\n __typename?: 'Swap';\n caller: Scalars['Bytes'];\n id: Scalars['ID'];\n poolId: Pool;\n timestamp: Scalars['Int'];\n tokenAmountIn: Scalars['BigDecimal'];\n tokenAmountOut: Scalars['BigDecimal'];\n tokenIn: Scalars['Bytes'];\n tokenInSym: Scalars['String'];\n tokenOut: Scalars['Bytes'];\n tokenOutSym: Scalars['String'];\n tx: Scalars['Bytes'];\n userAddress: User;\n valueUSD: Scalars['BigDecimal'];\n};\n\nexport type SwapFeeUpdate = {\n __typename?: 'SwapFeeUpdate';\n endSwapFeePercentage: Scalars['BigDecimal'];\n endTimestamp: Scalars['BigInt'];\n id: Scalars['ID'];\n pool: Pool;\n scheduledTimestamp: Scalars['Int'];\n startSwapFeePercentage: Scalars['BigDecimal'];\n startTimestamp: Scalars['BigInt'];\n};\n\nexport type SwapFeeUpdate_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n endSwapFeePercentage?: InputMaybe;\n endSwapFeePercentage_gt?: InputMaybe;\n endSwapFeePercentage_gte?: InputMaybe;\n endSwapFeePercentage_in?: InputMaybe>;\n endSwapFeePercentage_lt?: InputMaybe;\n endSwapFeePercentage_lte?: InputMaybe;\n endSwapFeePercentage_not?: InputMaybe;\n endSwapFeePercentage_not_in?: InputMaybe>;\n endTimestamp?: InputMaybe;\n endTimestamp_gt?: InputMaybe;\n endTimestamp_gte?: InputMaybe;\n endTimestamp_in?: InputMaybe>;\n endTimestamp_lt?: InputMaybe;\n endTimestamp_lte?: InputMaybe;\n endTimestamp_not?: InputMaybe;\n endTimestamp_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n scheduledTimestamp?: InputMaybe;\n scheduledTimestamp_gt?: InputMaybe;\n scheduledTimestamp_gte?: InputMaybe;\n scheduledTimestamp_in?: InputMaybe>;\n scheduledTimestamp_lt?: InputMaybe;\n scheduledTimestamp_lte?: InputMaybe;\n scheduledTimestamp_not?: InputMaybe;\n scheduledTimestamp_not_in?: InputMaybe>;\n startSwapFeePercentage?: InputMaybe;\n startSwapFeePercentage_gt?: InputMaybe;\n startSwapFeePercentage_gte?: InputMaybe;\n startSwapFeePercentage_in?: InputMaybe>;\n startSwapFeePercentage_lt?: InputMaybe;\n startSwapFeePercentage_lte?: InputMaybe;\n startSwapFeePercentage_not?: InputMaybe;\n startSwapFeePercentage_not_in?: InputMaybe>;\n startTimestamp?: InputMaybe;\n startTimestamp_gt?: InputMaybe;\n startTimestamp_gte?: InputMaybe;\n startTimestamp_in?: InputMaybe>;\n startTimestamp_lt?: InputMaybe;\n startTimestamp_lte?: InputMaybe;\n startTimestamp_not?: InputMaybe;\n startTimestamp_not_in?: InputMaybe>;\n};\n\nexport enum SwapFeeUpdate_OrderBy {\n EndSwapFeePercentage = 'endSwapFeePercentage',\n EndTimestamp = 'endTimestamp',\n Id = 'id',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n ScheduledTimestamp = 'scheduledTimestamp',\n StartSwapFeePercentage = 'startSwapFeePercentage',\n StartTimestamp = 'startTimestamp'\n}\n\nexport type Swap_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n caller?: InputMaybe;\n caller_contains?: InputMaybe;\n caller_gt?: InputMaybe;\n caller_gte?: InputMaybe;\n caller_in?: InputMaybe>;\n caller_lt?: InputMaybe;\n caller_lte?: InputMaybe;\n caller_not?: InputMaybe;\n caller_not_contains?: InputMaybe;\n caller_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n tokenAmountIn?: InputMaybe;\n tokenAmountIn_gt?: InputMaybe;\n tokenAmountIn_gte?: InputMaybe;\n tokenAmountIn_in?: InputMaybe>;\n tokenAmountIn_lt?: InputMaybe;\n tokenAmountIn_lte?: InputMaybe;\n tokenAmountIn_not?: InputMaybe;\n tokenAmountIn_not_in?: InputMaybe>;\n tokenAmountOut?: InputMaybe;\n tokenAmountOut_gt?: InputMaybe;\n tokenAmountOut_gte?: InputMaybe;\n tokenAmountOut_in?: InputMaybe>;\n tokenAmountOut_lt?: InputMaybe;\n tokenAmountOut_lte?: InputMaybe;\n tokenAmountOut_not?: InputMaybe;\n tokenAmountOut_not_in?: InputMaybe>;\n tokenIn?: InputMaybe;\n tokenInSym?: InputMaybe;\n tokenInSym_contains?: InputMaybe;\n tokenInSym_contains_nocase?: InputMaybe;\n tokenInSym_ends_with?: InputMaybe;\n tokenInSym_ends_with_nocase?: InputMaybe;\n tokenInSym_gt?: InputMaybe;\n tokenInSym_gte?: InputMaybe;\n tokenInSym_in?: InputMaybe>;\n tokenInSym_lt?: InputMaybe;\n tokenInSym_lte?: InputMaybe;\n tokenInSym_not?: InputMaybe;\n tokenInSym_not_contains?: InputMaybe;\n tokenInSym_not_contains_nocase?: InputMaybe;\n tokenInSym_not_ends_with?: InputMaybe;\n tokenInSym_not_ends_with_nocase?: InputMaybe;\n tokenInSym_not_in?: InputMaybe>;\n tokenInSym_not_starts_with?: InputMaybe;\n tokenInSym_not_starts_with_nocase?: InputMaybe;\n tokenInSym_starts_with?: InputMaybe;\n tokenInSym_starts_with_nocase?: InputMaybe;\n tokenIn_contains?: InputMaybe;\n tokenIn_gt?: InputMaybe;\n tokenIn_gte?: InputMaybe;\n tokenIn_in?: InputMaybe>;\n tokenIn_lt?: InputMaybe;\n tokenIn_lte?: InputMaybe;\n tokenIn_not?: InputMaybe;\n tokenIn_not_contains?: InputMaybe;\n tokenIn_not_in?: InputMaybe>;\n tokenOut?: InputMaybe;\n tokenOutSym?: InputMaybe;\n tokenOutSym_contains?: InputMaybe;\n tokenOutSym_contains_nocase?: InputMaybe;\n tokenOutSym_ends_with?: InputMaybe;\n tokenOutSym_ends_with_nocase?: InputMaybe;\n tokenOutSym_gt?: InputMaybe;\n tokenOutSym_gte?: InputMaybe;\n tokenOutSym_in?: InputMaybe>;\n tokenOutSym_lt?: InputMaybe;\n tokenOutSym_lte?: InputMaybe;\n tokenOutSym_not?: InputMaybe;\n tokenOutSym_not_contains?: InputMaybe;\n tokenOutSym_not_contains_nocase?: InputMaybe;\n tokenOutSym_not_ends_with?: InputMaybe;\n tokenOutSym_not_ends_with_nocase?: InputMaybe;\n tokenOutSym_not_in?: InputMaybe>;\n tokenOutSym_not_starts_with?: InputMaybe;\n tokenOutSym_not_starts_with_nocase?: InputMaybe;\n tokenOutSym_starts_with?: InputMaybe;\n tokenOutSym_starts_with_nocase?: InputMaybe;\n tokenOut_contains?: InputMaybe;\n tokenOut_gt?: InputMaybe;\n tokenOut_gte?: InputMaybe;\n tokenOut_in?: InputMaybe>;\n tokenOut_lt?: InputMaybe;\n tokenOut_lte?: InputMaybe;\n tokenOut_not?: InputMaybe;\n tokenOut_not_contains?: InputMaybe;\n tokenOut_not_in?: InputMaybe>;\n tx?: InputMaybe;\n tx_contains?: InputMaybe;\n tx_gt?: InputMaybe;\n tx_gte?: InputMaybe;\n tx_in?: InputMaybe>;\n tx_lt?: InputMaybe;\n tx_lte?: InputMaybe;\n tx_not?: InputMaybe;\n tx_not_contains?: InputMaybe;\n tx_not_in?: InputMaybe>;\n userAddress?: InputMaybe;\n userAddress_?: InputMaybe;\n userAddress_contains?: InputMaybe;\n userAddress_contains_nocase?: InputMaybe;\n userAddress_ends_with?: InputMaybe;\n userAddress_ends_with_nocase?: InputMaybe;\n userAddress_gt?: InputMaybe;\n userAddress_gte?: InputMaybe;\n userAddress_in?: InputMaybe>;\n userAddress_lt?: InputMaybe;\n userAddress_lte?: InputMaybe;\n userAddress_not?: InputMaybe;\n userAddress_not_contains?: InputMaybe;\n userAddress_not_contains_nocase?: InputMaybe;\n userAddress_not_ends_with?: InputMaybe;\n userAddress_not_ends_with_nocase?: InputMaybe;\n userAddress_not_in?: InputMaybe>;\n userAddress_not_starts_with?: InputMaybe;\n userAddress_not_starts_with_nocase?: InputMaybe;\n userAddress_starts_with?: InputMaybe;\n userAddress_starts_with_nocase?: InputMaybe;\n valueUSD?: InputMaybe;\n valueUSD_gt?: InputMaybe;\n valueUSD_gte?: InputMaybe;\n valueUSD_in?: InputMaybe>;\n valueUSD_lt?: InputMaybe;\n valueUSD_lte?: InputMaybe;\n valueUSD_not?: InputMaybe;\n valueUSD_not_in?: InputMaybe>;\n};\n\nexport enum Swap_OrderBy {\n Caller = 'caller',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n Timestamp = 'timestamp',\n TokenAmountIn = 'tokenAmountIn',\n TokenAmountOut = 'tokenAmountOut',\n TokenIn = 'tokenIn',\n TokenInSym = 'tokenInSym',\n TokenOut = 'tokenOut',\n TokenOutSym = 'tokenOutSym',\n Tx = 'tx',\n UserAddress = 'userAddress',\n UserAddressId = 'userAddress__id',\n ValueUsd = 'valueUSD'\n}\n\nexport type Token = {\n __typename?: 'Token';\n address: Scalars['String'];\n decimals: Scalars['Int'];\n fxOracleDecimals?: Maybe;\n id: Scalars['ID'];\n latestFXPrice?: Maybe;\n latestPrice?: Maybe;\n latestUSDPrice?: Maybe;\n latestUSDPriceTimestamp?: Maybe;\n name?: Maybe;\n pool?: Maybe;\n symbol?: Maybe;\n totalBalanceNotional: Scalars['BigDecimal'];\n totalBalanceUSD: Scalars['BigDecimal'];\n totalSwapCount: Scalars['BigInt'];\n totalVolumeNotional: Scalars['BigDecimal'];\n totalVolumeUSD: Scalars['BigDecimal'];\n};\n\nexport type TokenPrice = {\n __typename?: 'TokenPrice';\n amount: Scalars['BigDecimal'];\n asset: Scalars['Bytes'];\n block: Scalars['BigInt'];\n id: Scalars['ID'];\n poolId: Pool;\n price: Scalars['BigDecimal'];\n pricingAsset: Scalars['Bytes'];\n timestamp: Scalars['Int'];\n};\n\nexport type TokenPrice_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n amount?: InputMaybe;\n amount_gt?: InputMaybe;\n amount_gte?: InputMaybe;\n amount_in?: InputMaybe>;\n amount_lt?: InputMaybe;\n amount_lte?: InputMaybe;\n amount_not?: InputMaybe;\n amount_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n asset?: InputMaybe;\n asset_contains?: InputMaybe;\n asset_gt?: InputMaybe;\n asset_gte?: InputMaybe;\n asset_in?: InputMaybe>;\n asset_lt?: InputMaybe;\n asset_lte?: InputMaybe;\n asset_not?: InputMaybe;\n asset_not_contains?: InputMaybe;\n asset_not_in?: InputMaybe>;\n block?: InputMaybe;\n block_gt?: InputMaybe;\n block_gte?: InputMaybe;\n block_in?: InputMaybe>;\n block_lt?: InputMaybe;\n block_lte?: InputMaybe;\n block_not?: InputMaybe;\n block_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n price?: InputMaybe;\n price_gt?: InputMaybe;\n price_gte?: InputMaybe;\n price_in?: InputMaybe>;\n price_lt?: InputMaybe;\n price_lte?: InputMaybe;\n price_not?: InputMaybe;\n price_not_in?: InputMaybe>;\n pricingAsset?: InputMaybe;\n pricingAsset_contains?: InputMaybe;\n pricingAsset_gt?: InputMaybe;\n pricingAsset_gte?: InputMaybe;\n pricingAsset_in?: InputMaybe>;\n pricingAsset_lt?: InputMaybe;\n pricingAsset_lte?: InputMaybe;\n pricingAsset_not?: InputMaybe;\n pricingAsset_not_contains?: InputMaybe;\n pricingAsset_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n};\n\nexport enum TokenPrice_OrderBy {\n Amount = 'amount',\n Asset = 'asset',\n Block = 'block',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n Price = 'price',\n PricingAsset = 'pricingAsset',\n Timestamp = 'timestamp'\n}\n\nexport type TokenSnapshot = {\n __typename?: 'TokenSnapshot';\n id: Scalars['ID'];\n timestamp: Scalars['Int'];\n token: Token;\n totalBalanceNotional: Scalars['BigDecimal'];\n totalBalanceUSD: Scalars['BigDecimal'];\n totalSwapCount: Scalars['BigInt'];\n totalVolumeNotional: Scalars['BigDecimal'];\n totalVolumeUSD: Scalars['BigDecimal'];\n};\n\nexport type TokenSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n token?: InputMaybe;\n token_?: InputMaybe;\n token_contains?: InputMaybe;\n token_contains_nocase?: InputMaybe;\n token_ends_with?: InputMaybe;\n token_ends_with_nocase?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_contains_nocase?: InputMaybe;\n token_not_ends_with?: InputMaybe;\n token_not_ends_with_nocase?: InputMaybe;\n token_not_in?: InputMaybe>;\n token_not_starts_with?: InputMaybe;\n token_not_starts_with_nocase?: InputMaybe;\n token_starts_with?: InputMaybe;\n token_starts_with_nocase?: InputMaybe;\n totalBalanceNotional?: InputMaybe;\n totalBalanceNotional_gt?: InputMaybe;\n totalBalanceNotional_gte?: InputMaybe;\n totalBalanceNotional_in?: InputMaybe>;\n totalBalanceNotional_lt?: InputMaybe;\n totalBalanceNotional_lte?: InputMaybe;\n totalBalanceNotional_not?: InputMaybe;\n totalBalanceNotional_not_in?: InputMaybe>;\n totalBalanceUSD?: InputMaybe;\n totalBalanceUSD_gt?: InputMaybe;\n totalBalanceUSD_gte?: InputMaybe;\n totalBalanceUSD_in?: InputMaybe>;\n totalBalanceUSD_lt?: InputMaybe;\n totalBalanceUSD_lte?: InputMaybe;\n totalBalanceUSD_not?: InputMaybe;\n totalBalanceUSD_not_in?: InputMaybe>;\n totalSwapCount?: InputMaybe;\n totalSwapCount_gt?: InputMaybe;\n totalSwapCount_gte?: InputMaybe;\n totalSwapCount_in?: InputMaybe>;\n totalSwapCount_lt?: InputMaybe;\n totalSwapCount_lte?: InputMaybe;\n totalSwapCount_not?: InputMaybe;\n totalSwapCount_not_in?: InputMaybe>;\n totalVolumeNotional?: InputMaybe;\n totalVolumeNotional_gt?: InputMaybe;\n totalVolumeNotional_gte?: InputMaybe;\n totalVolumeNotional_in?: InputMaybe>;\n totalVolumeNotional_lt?: InputMaybe;\n totalVolumeNotional_lte?: InputMaybe;\n totalVolumeNotional_not?: InputMaybe;\n totalVolumeNotional_not_in?: InputMaybe>;\n totalVolumeUSD?: InputMaybe;\n totalVolumeUSD_gt?: InputMaybe;\n totalVolumeUSD_gte?: InputMaybe;\n totalVolumeUSD_in?: InputMaybe>;\n totalVolumeUSD_lt?: InputMaybe;\n totalVolumeUSD_lte?: InputMaybe;\n totalVolumeUSD_not?: InputMaybe;\n totalVolumeUSD_not_in?: InputMaybe>;\n};\n\nexport enum TokenSnapshot_OrderBy {\n Id = 'id',\n Timestamp = 'timestamp',\n Token = 'token',\n TokenAddress = 'token__address',\n TokenDecimals = 'token__decimals',\n TokenFxOracleDecimals = 'token__fxOracleDecimals',\n TokenId = 'token__id',\n TokenLatestFxPrice = 'token__latestFXPrice',\n TokenLatestUsdPrice = 'token__latestUSDPrice',\n TokenLatestUsdPriceTimestamp = 'token__latestUSDPriceTimestamp',\n TokenName = 'token__name',\n TokenSymbol = 'token__symbol',\n TokenTotalBalanceNotional = 'token__totalBalanceNotional',\n TokenTotalBalanceUsd = 'token__totalBalanceUSD',\n TokenTotalSwapCount = 'token__totalSwapCount',\n TokenTotalVolumeNotional = 'token__totalVolumeNotional',\n TokenTotalVolumeUsd = 'token__totalVolumeUSD',\n TotalBalanceNotional = 'totalBalanceNotional',\n TotalBalanceUsd = 'totalBalanceUSD',\n TotalSwapCount = 'totalSwapCount',\n TotalVolumeNotional = 'totalVolumeNotional',\n TotalVolumeUsd = 'totalVolumeUSD'\n}\n\nexport type Token_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_contains_nocase?: InputMaybe;\n address_ends_with?: InputMaybe;\n address_ends_with_nocase?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_contains_nocase?: InputMaybe;\n address_not_ends_with?: InputMaybe;\n address_not_ends_with_nocase?: InputMaybe;\n address_not_in?: InputMaybe>;\n address_not_starts_with?: InputMaybe;\n address_not_starts_with_nocase?: InputMaybe;\n address_starts_with?: InputMaybe;\n address_starts_with_nocase?: InputMaybe;\n and?: InputMaybe>>;\n decimals?: InputMaybe;\n decimals_gt?: InputMaybe;\n decimals_gte?: InputMaybe;\n decimals_in?: InputMaybe>;\n decimals_lt?: InputMaybe;\n decimals_lte?: InputMaybe;\n decimals_not?: InputMaybe;\n decimals_not_in?: InputMaybe>;\n fxOracleDecimals?: InputMaybe;\n fxOracleDecimals_gt?: InputMaybe;\n fxOracleDecimals_gte?: InputMaybe;\n fxOracleDecimals_in?: InputMaybe>;\n fxOracleDecimals_lt?: InputMaybe;\n fxOracleDecimals_lte?: InputMaybe;\n fxOracleDecimals_not?: InputMaybe;\n fxOracleDecimals_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n latestFXPrice?: InputMaybe;\n latestFXPrice_gt?: InputMaybe;\n latestFXPrice_gte?: InputMaybe;\n latestFXPrice_in?: InputMaybe>;\n latestFXPrice_lt?: InputMaybe;\n latestFXPrice_lte?: InputMaybe;\n latestFXPrice_not?: InputMaybe;\n latestFXPrice_not_in?: InputMaybe>;\n latestPrice?: InputMaybe;\n latestPrice_?: InputMaybe;\n latestPrice_contains?: InputMaybe;\n latestPrice_contains_nocase?: InputMaybe;\n latestPrice_ends_with?: InputMaybe;\n latestPrice_ends_with_nocase?: InputMaybe;\n latestPrice_gt?: InputMaybe;\n latestPrice_gte?: InputMaybe;\n latestPrice_in?: InputMaybe>;\n latestPrice_lt?: InputMaybe;\n latestPrice_lte?: InputMaybe;\n latestPrice_not?: InputMaybe;\n latestPrice_not_contains?: InputMaybe;\n latestPrice_not_contains_nocase?: InputMaybe;\n latestPrice_not_ends_with?: InputMaybe;\n latestPrice_not_ends_with_nocase?: InputMaybe;\n latestPrice_not_in?: InputMaybe>;\n latestPrice_not_starts_with?: InputMaybe;\n latestPrice_not_starts_with_nocase?: InputMaybe;\n latestPrice_starts_with?: InputMaybe;\n latestPrice_starts_with_nocase?: InputMaybe;\n latestUSDPrice?: InputMaybe;\n latestUSDPriceTimestamp?: InputMaybe;\n latestUSDPriceTimestamp_gt?: InputMaybe;\n latestUSDPriceTimestamp_gte?: InputMaybe;\n latestUSDPriceTimestamp_in?: InputMaybe>;\n latestUSDPriceTimestamp_lt?: InputMaybe;\n latestUSDPriceTimestamp_lte?: InputMaybe;\n latestUSDPriceTimestamp_not?: InputMaybe;\n latestUSDPriceTimestamp_not_in?: InputMaybe>;\n latestUSDPrice_gt?: InputMaybe;\n latestUSDPrice_gte?: InputMaybe;\n latestUSDPrice_in?: InputMaybe>;\n latestUSDPrice_lt?: InputMaybe;\n latestUSDPrice_lte?: InputMaybe;\n latestUSDPrice_not?: InputMaybe;\n latestUSDPrice_not_in?: InputMaybe>;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n totalBalanceNotional?: InputMaybe;\n totalBalanceNotional_gt?: InputMaybe;\n totalBalanceNotional_gte?: InputMaybe;\n totalBalanceNotional_in?: InputMaybe>;\n totalBalanceNotional_lt?: InputMaybe;\n totalBalanceNotional_lte?: InputMaybe;\n totalBalanceNotional_not?: InputMaybe;\n totalBalanceNotional_not_in?: InputMaybe>;\n totalBalanceUSD?: InputMaybe;\n totalBalanceUSD_gt?: InputMaybe;\n totalBalanceUSD_gte?: InputMaybe;\n totalBalanceUSD_in?: InputMaybe>;\n totalBalanceUSD_lt?: InputMaybe;\n totalBalanceUSD_lte?: InputMaybe;\n totalBalanceUSD_not?: InputMaybe;\n totalBalanceUSD_not_in?: InputMaybe>;\n totalSwapCount?: InputMaybe;\n totalSwapCount_gt?: InputMaybe;\n totalSwapCount_gte?: InputMaybe;\n totalSwapCount_in?: InputMaybe>;\n totalSwapCount_lt?: InputMaybe;\n totalSwapCount_lte?: InputMaybe;\n totalSwapCount_not?: InputMaybe;\n totalSwapCount_not_in?: InputMaybe>;\n totalVolumeNotional?: InputMaybe;\n totalVolumeNotional_gt?: InputMaybe;\n totalVolumeNotional_gte?: InputMaybe;\n totalVolumeNotional_in?: InputMaybe>;\n totalVolumeNotional_lt?: InputMaybe;\n totalVolumeNotional_lte?: InputMaybe;\n totalVolumeNotional_not?: InputMaybe;\n totalVolumeNotional_not_in?: InputMaybe>;\n totalVolumeUSD?: InputMaybe;\n totalVolumeUSD_gt?: InputMaybe;\n totalVolumeUSD_gte?: InputMaybe;\n totalVolumeUSD_in?: InputMaybe>;\n totalVolumeUSD_lt?: InputMaybe;\n totalVolumeUSD_lte?: InputMaybe;\n totalVolumeUSD_not?: InputMaybe;\n totalVolumeUSD_not_in?: InputMaybe>;\n};\n\nexport enum Token_OrderBy {\n Address = 'address',\n Decimals = 'decimals',\n FxOracleDecimals = 'fxOracleDecimals',\n Id = 'id',\n LatestFxPrice = 'latestFXPrice',\n LatestPrice = 'latestPrice',\n LatestPriceAsset = 'latestPrice__asset',\n LatestPriceBlock = 'latestPrice__block',\n LatestPriceId = 'latestPrice__id',\n LatestPricePrice = 'latestPrice__price',\n LatestPricePricingAsset = 'latestPrice__pricingAsset',\n LatestUsdPrice = 'latestUSDPrice',\n LatestUsdPriceTimestamp = 'latestUSDPriceTimestamp',\n Name = 'name',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n Symbol = 'symbol',\n TotalBalanceNotional = 'totalBalanceNotional',\n TotalBalanceUsd = 'totalBalanceUSD',\n TotalSwapCount = 'totalSwapCount',\n TotalVolumeNotional = 'totalVolumeNotional',\n TotalVolumeUsd = 'totalVolumeUSD'\n}\n\nexport type TradePair = {\n __typename?: 'TradePair';\n /** Token Address - Token Address */\n id: Scalars['ID'];\n token0: Token;\n token1: Token;\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n};\n\nexport type TradePairSnapshot = {\n __typename?: 'TradePairSnapshot';\n id: Scalars['ID'];\n pair: TradePair;\n timestamp: Scalars['Int'];\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n};\n\nexport type TradePairSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pair?: InputMaybe;\n pair_?: InputMaybe;\n pair_contains?: InputMaybe;\n pair_contains_nocase?: InputMaybe;\n pair_ends_with?: InputMaybe;\n pair_ends_with_nocase?: InputMaybe;\n pair_gt?: InputMaybe;\n pair_gte?: InputMaybe;\n pair_in?: InputMaybe>;\n pair_lt?: InputMaybe;\n pair_lte?: InputMaybe;\n pair_not?: InputMaybe;\n pair_not_contains?: InputMaybe;\n pair_not_contains_nocase?: InputMaybe;\n pair_not_ends_with?: InputMaybe;\n pair_not_ends_with_nocase?: InputMaybe;\n pair_not_in?: InputMaybe>;\n pair_not_starts_with?: InputMaybe;\n pair_not_starts_with_nocase?: InputMaybe;\n pair_starts_with?: InputMaybe;\n pair_starts_with_nocase?: InputMaybe;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n};\n\nexport enum TradePairSnapshot_OrderBy {\n Id = 'id',\n Pair = 'pair',\n PairId = 'pair__id',\n PairTotalSwapFee = 'pair__totalSwapFee',\n PairTotalSwapVolume = 'pair__totalSwapVolume',\n Timestamp = 'timestamp',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume'\n}\n\nexport type TradePair_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n token0?: InputMaybe;\n token0_?: InputMaybe;\n token0_contains?: InputMaybe;\n token0_contains_nocase?: InputMaybe;\n token0_ends_with?: InputMaybe;\n token0_ends_with_nocase?: InputMaybe;\n token0_gt?: InputMaybe;\n token0_gte?: InputMaybe;\n token0_in?: InputMaybe>;\n token0_lt?: InputMaybe;\n token0_lte?: InputMaybe;\n token0_not?: InputMaybe;\n token0_not_contains?: InputMaybe;\n token0_not_contains_nocase?: InputMaybe;\n token0_not_ends_with?: InputMaybe;\n token0_not_ends_with_nocase?: InputMaybe;\n token0_not_in?: InputMaybe>;\n token0_not_starts_with?: InputMaybe;\n token0_not_starts_with_nocase?: InputMaybe;\n token0_starts_with?: InputMaybe;\n token0_starts_with_nocase?: InputMaybe;\n token1?: InputMaybe;\n token1_?: InputMaybe;\n token1_contains?: InputMaybe;\n token1_contains_nocase?: InputMaybe;\n token1_ends_with?: InputMaybe;\n token1_ends_with_nocase?: InputMaybe;\n token1_gt?: InputMaybe;\n token1_gte?: InputMaybe;\n token1_in?: InputMaybe>;\n token1_lt?: InputMaybe;\n token1_lte?: InputMaybe;\n token1_not?: InputMaybe;\n token1_not_contains?: InputMaybe;\n token1_not_contains_nocase?: InputMaybe;\n token1_not_ends_with?: InputMaybe;\n token1_not_ends_with_nocase?: InputMaybe;\n token1_not_in?: InputMaybe>;\n token1_not_starts_with?: InputMaybe;\n token1_not_starts_with_nocase?: InputMaybe;\n token1_starts_with?: InputMaybe;\n token1_starts_with_nocase?: InputMaybe;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n};\n\nexport enum TradePair_OrderBy {\n Id = 'id',\n Token0 = 'token0',\n Token0Address = 'token0__address',\n Token0Decimals = 'token0__decimals',\n Token0FxOracleDecimals = 'token0__fxOracleDecimals',\n Token0Id = 'token0__id',\n Token0LatestFxPrice = 'token0__latestFXPrice',\n Token0LatestUsdPrice = 'token0__latestUSDPrice',\n Token0LatestUsdPriceTimestamp = 'token0__latestUSDPriceTimestamp',\n Token0Name = 'token0__name',\n Token0Symbol = 'token0__symbol',\n Token0TotalBalanceNotional = 'token0__totalBalanceNotional',\n Token0TotalBalanceUsd = 'token0__totalBalanceUSD',\n Token0TotalSwapCount = 'token0__totalSwapCount',\n Token0TotalVolumeNotional = 'token0__totalVolumeNotional',\n Token0TotalVolumeUsd = 'token0__totalVolumeUSD',\n Token1 = 'token1',\n Token1Address = 'token1__address',\n Token1Decimals = 'token1__decimals',\n Token1FxOracleDecimals = 'token1__fxOracleDecimals',\n Token1Id = 'token1__id',\n Token1LatestFxPrice = 'token1__latestFXPrice',\n Token1LatestUsdPrice = 'token1__latestUSDPrice',\n Token1LatestUsdPriceTimestamp = 'token1__latestUSDPriceTimestamp',\n Token1Name = 'token1__name',\n Token1Symbol = 'token1__symbol',\n Token1TotalBalanceNotional = 'token1__totalBalanceNotional',\n Token1TotalBalanceUsd = 'token1__totalBalanceUSD',\n Token1TotalSwapCount = 'token1__totalSwapCount',\n Token1TotalVolumeNotional = 'token1__totalVolumeNotional',\n Token1TotalVolumeUsd = 'token1__totalVolumeUSD',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume'\n}\n\nexport type User = {\n __typename?: 'User';\n id: Scalars['ID'];\n sharesOwned?: Maybe>;\n swaps?: Maybe>;\n userInternalBalances?: Maybe>;\n};\n\n\nexport type UserSharesOwnedArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserSwapsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserUserInternalBalancesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type UserInternalBalance = {\n __typename?: 'UserInternalBalance';\n balance: Scalars['BigDecimal'];\n id: Scalars['ID'];\n token: Scalars['Bytes'];\n tokenInfo?: Maybe;\n userAddress?: Maybe;\n};\n\nexport type UserInternalBalance_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n balance?: InputMaybe;\n balance_gt?: InputMaybe;\n balance_gte?: InputMaybe;\n balance_in?: InputMaybe>;\n balance_lt?: InputMaybe;\n balance_lte?: InputMaybe;\n balance_not?: InputMaybe;\n balance_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n token?: InputMaybe;\n tokenInfo?: InputMaybe;\n tokenInfo_?: InputMaybe;\n tokenInfo_contains?: InputMaybe;\n tokenInfo_contains_nocase?: InputMaybe;\n tokenInfo_ends_with?: InputMaybe;\n tokenInfo_ends_with_nocase?: InputMaybe;\n tokenInfo_gt?: InputMaybe;\n tokenInfo_gte?: InputMaybe;\n tokenInfo_in?: InputMaybe>;\n tokenInfo_lt?: InputMaybe;\n tokenInfo_lte?: InputMaybe;\n tokenInfo_not?: InputMaybe;\n tokenInfo_not_contains?: InputMaybe;\n tokenInfo_not_contains_nocase?: InputMaybe;\n tokenInfo_not_ends_with?: InputMaybe;\n tokenInfo_not_ends_with_nocase?: InputMaybe;\n tokenInfo_not_in?: InputMaybe>;\n tokenInfo_not_starts_with?: InputMaybe;\n tokenInfo_not_starts_with_nocase?: InputMaybe;\n tokenInfo_starts_with?: InputMaybe;\n tokenInfo_starts_with_nocase?: InputMaybe;\n token_contains?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_in?: InputMaybe>;\n userAddress?: InputMaybe;\n userAddress_?: InputMaybe;\n userAddress_contains?: InputMaybe;\n userAddress_contains_nocase?: InputMaybe;\n userAddress_ends_with?: InputMaybe;\n userAddress_ends_with_nocase?: InputMaybe;\n userAddress_gt?: InputMaybe;\n userAddress_gte?: InputMaybe;\n userAddress_in?: InputMaybe>;\n userAddress_lt?: InputMaybe;\n userAddress_lte?: InputMaybe;\n userAddress_not?: InputMaybe;\n userAddress_not_contains?: InputMaybe;\n userAddress_not_contains_nocase?: InputMaybe;\n userAddress_not_ends_with?: InputMaybe;\n userAddress_not_ends_with_nocase?: InputMaybe;\n userAddress_not_in?: InputMaybe>;\n userAddress_not_starts_with?: InputMaybe;\n userAddress_not_starts_with_nocase?: InputMaybe;\n userAddress_starts_with?: InputMaybe;\n userAddress_starts_with_nocase?: InputMaybe;\n};\n\nexport enum UserInternalBalance_OrderBy {\n Balance = 'balance',\n Id = 'id',\n Token = 'token',\n TokenInfo = 'tokenInfo',\n TokenInfoAddress = 'tokenInfo__address',\n TokenInfoDecimals = 'tokenInfo__decimals',\n TokenInfoFxOracleDecimals = 'tokenInfo__fxOracleDecimals',\n TokenInfoId = 'tokenInfo__id',\n TokenInfoLatestFxPrice = 'tokenInfo__latestFXPrice',\n TokenInfoLatestUsdPrice = 'tokenInfo__latestUSDPrice',\n TokenInfoLatestUsdPriceTimestamp = 'tokenInfo__latestUSDPriceTimestamp',\n TokenInfoName = 'tokenInfo__name',\n TokenInfoSymbol = 'tokenInfo__symbol',\n TokenInfoTotalBalanceNotional = 'tokenInfo__totalBalanceNotional',\n TokenInfoTotalBalanceUsd = 'tokenInfo__totalBalanceUSD',\n TokenInfoTotalSwapCount = 'tokenInfo__totalSwapCount',\n TokenInfoTotalVolumeNotional = 'tokenInfo__totalVolumeNotional',\n TokenInfoTotalVolumeUsd = 'tokenInfo__totalVolumeUSD',\n UserAddress = 'userAddress',\n UserAddressId = 'userAddress__id'\n}\n\nexport type User_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n sharesOwned_?: InputMaybe;\n swaps_?: InputMaybe;\n userInternalBalances_?: InputMaybe;\n};\n\nexport enum User_OrderBy {\n Id = 'id',\n SharesOwned = 'sharesOwned',\n Swaps = 'swaps',\n UserInternalBalances = 'userInternalBalances'\n}\n\nexport type _Block_ = {\n __typename?: '_Block_';\n /** The hash of the block */\n hash?: Maybe;\n /** The block number */\n number: Scalars['Int'];\n /** Integer representation of the timestamp stored in blocks for the chain */\n timestamp?: Maybe;\n};\n\n/** The type for the top-level _meta field */\nexport type _Meta_ = {\n __typename?: '_Meta_';\n /**\n * Information about a specific subgraph block. The hash of the block\n * will be null if the _meta field has a block constraint that asks for\n * a block number. It will be filled if the _meta field has no block constraint\n * and therefore asks for the latest block\n *\n */\n block: _Block_;\n /** The deployment ID */\n deployment: Scalars['String'];\n /** If `true`, the subgraph encountered indexing errors at some past block */\n hasIndexingErrors: Scalars['Boolean'];\n};\n\nexport enum _SubgraphErrorPolicy_ {\n /** Data will be returned even if the subgraph has indexing errors */\n Allow = 'allow',\n /** If the subgraph has indexing errors, data will be omitted. The default. */\n Deny = 'deny'\n}\n\nexport type PoolShareQueryVariables = Exact<{\n id: Scalars['ID'];\n block?: InputMaybe;\n}>;\n\n\nexport type PoolShareQuery = { __typename?: 'Query', poolShare?: { __typename?: 'PoolShare', id: string, balance: string, userAddress: { __typename?: 'User', id: string }, poolId: { __typename?: 'Pool', id: string, address: string } } | null };\n\nexport type PoolSharesQueryVariables = Exact<{\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolSharesQuery = { __typename?: 'Query', poolShares: Array<{ __typename?: 'PoolShare', id: string, balance: string, userAddress: { __typename?: 'User', id: string }, poolId: { __typename?: 'Pool', id: string, address: string } }> };\n\nexport type SubgraphPoolShareFragment = { __typename?: 'PoolShare', id: string, balance: string, userAddress: { __typename?: 'User', id: string }, poolId: { __typename?: 'Pool', id: string, address: string } };\n\nexport type PoolsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolsQuery = { __typename?: 'Query', pools: Array<{ __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null }> };\n\nexport type AllPoolsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type AllPoolsQuery = { __typename?: 'Query', pool0: Array<{ __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null }>, pool1000: Array<{ __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null }>, pool2000: Array<{ __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null }> };\n\nexport type PoolQueryVariables = Exact<{\n id: Scalars['ID'];\n block?: InputMaybe;\n}>;\n\n\nexport type PoolQuery = { __typename?: 'Query', pool?: { __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null } | null };\n\nexport type SubgraphPoolFragment = { __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null };\n\nexport type SubgraphPoolTokenFragment = { __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } };\n\nexport type SubgraphSubPoolTokenFragment = { __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null };\n\nexport type TokenAttrsFragment = { __typename?: 'Token', address: string, symbol?: string | null, decimals: number };\n\nexport type SubgraphSubPoolFragment = { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null };\n\nexport type TokenTreeFragment = { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null };\n\nexport type SubgraphPriceRateProviderFragment = { __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } };\n\nexport type PoolHistoricalLiquiditiesQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolHistoricalLiquiditiesQuery = { __typename?: 'Query', poolHistoricalLiquidities: Array<{ __typename?: 'PoolHistoricalLiquidity', id: string, poolTotalShares: string, poolLiquidity: string, poolShareValue: string, pricingAsset: string, block: string, poolId: { __typename?: 'Pool', id: string } }> };\n\nexport type PoolSnapshotsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolSnapshotsQuery = { __typename?: 'Query', poolSnapshots: Array<{ __typename?: 'PoolSnapshot', id: string, totalShares: string, swapVolume: string, swapFees: string, timestamp: number, pool: { __typename?: 'Pool', id: string } }> };\n\nexport type SubgraphPoolSnapshotFragment = { __typename?: 'PoolSnapshot', id: string, totalShares: string, swapVolume: string, swapFees: string, timestamp: number, pool: { __typename?: 'Pool', id: string } };\n\nexport type JoinExitsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type JoinExitsQuery = { __typename?: 'Query', joinExits: Array<{ __typename?: 'JoinExit', amounts: Array, id: string, sender: string, timestamp: number, tx: string, type: InvestType, user: { __typename?: 'User', id: string }, pool: { __typename?: 'Pool', id: string, tokensList: Array } }> };\n\nexport type SubgraphJoinExitFragment = { __typename?: 'JoinExit', amounts: Array, id: string, sender: string, timestamp: number, tx: string, type: InvestType, user: { __typename?: 'User', id: string }, pool: { __typename?: 'Pool', id: string, tokensList: Array } };\n\nexport type BalancersQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type BalancersQuery = { __typename?: 'Query', balancers: Array<{ __typename?: 'Balancer', id: string, totalLiquidity: string, totalSwapVolume: string, totalSwapFee: string, totalSwapCount: string, poolCount: number }> };\n\nexport type SubgraphBalancerFragment = { __typename?: 'Balancer', id: string, totalLiquidity: string, totalSwapVolume: string, totalSwapFee: string, totalSwapCount: string, poolCount: number };\n\nexport type TokenPricesQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type TokenPricesQuery = { __typename?: 'Query', tokenPrices: Array<{ __typename?: 'TokenPrice', id: string, asset: string, amount: string, pricingAsset: string, price: string, block: string, timestamp: number, poolId: { __typename?: 'Pool', id: string } }> };\n\nexport type SubgraphTokenPriceFragment = { __typename?: 'TokenPrice', id: string, asset: string, amount: string, pricingAsset: string, price: string, block: string, timestamp: number, poolId: { __typename?: 'Pool', id: string } };\n\nexport type TokenLatestPricesQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type TokenLatestPricesQuery = { __typename?: 'Query', latestPrices: Array<{ __typename?: 'LatestPrice', id: string, asset: string, price: string, pricingAsset: string, poolId: { __typename?: 'Pool', id: string } }> };\n\nexport type TokenLatestPriceQueryVariables = Exact<{\n id: Scalars['ID'];\n}>;\n\n\nexport type TokenLatestPriceQuery = { __typename?: 'Query', latestPrice?: { __typename?: 'LatestPrice', id: string, asset: string, price: string, pricingAsset: string, poolId: { __typename?: 'Pool', id: string } } | null };\n\nexport type SubgraphTokenLatestPriceFragment = { __typename?: 'LatestPrice', id: string, asset: string, price: string, pricingAsset: string, poolId: { __typename?: 'Pool', id: string } };\n\nexport type UserQueryVariables = Exact<{\n id: Scalars['ID'];\n block?: InputMaybe;\n}>;\n\n\nexport type UserQuery = { __typename?: 'Query', user?: { __typename?: 'User', id: string, sharesOwned?: Array<{ __typename?: 'PoolShare', balance: string, poolId: { __typename?: 'Pool', id: string } }> | null } | null };\n\nexport type UsersQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type UsersQuery = { __typename?: 'Query', users: Array<{ __typename?: 'User', id: string, sharesOwned?: Array<{ __typename?: 'PoolShare', balance: string, poolId: { __typename?: 'Pool', id: string } }> | null }> };\n\nexport type SubgraphUserFragment = { __typename?: 'User', id: string, sharesOwned?: Array<{ __typename?: 'PoolShare', balance: string, poolId: { __typename?: 'Pool', id: string } }> | null };\n\nexport const SubgraphPoolShareFragmentDoc = gql`\n fragment SubgraphPoolShare on PoolShare {\n id\n balance\n userAddress {\n id\n }\n poolId {\n id\n address\n }\n}\n `;\nexport const SubgraphSubPoolFragmentDoc = gql`\n fragment SubgraphSubPool on Pool {\n id\n totalShares\n address\n poolType\n mainIndex\n}\n `;\nexport const SubgraphSubPoolTokenFragmentDoc = gql`\n fragment SubgraphSubPoolToken on PoolToken {\n address\n balance\n weight\n priceRate\n symbol\n decimals\n isExemptFromYieldProtocolFee\n}\n `;\nexport const TokenTreeFragmentDoc = gql`\n fragment TokenTree on Token {\n latestUSDPrice\n latestFXPrice\n pool {\n ...SubgraphSubPool\n tokens(first: 100, orderBy: index) {\n ...SubgraphSubPoolToken\n token {\n latestUSDPrice\n pool {\n ...SubgraphSubPool\n tokens(first: 100, orderBy: index) {\n ...SubgraphSubPoolToken\n token {\n latestUSDPrice\n pool {\n ...SubgraphSubPool\n }\n }\n }\n }\n }\n }\n }\n}\n ${SubgraphSubPoolFragmentDoc}\n${SubgraphSubPoolTokenFragmentDoc}`;\nexport const SubgraphPoolTokenFragmentDoc = gql`\n fragment SubgraphPoolToken on PoolToken {\n id\n symbol\n name\n decimals\n address\n balance\n managedBalance\n weight\n priceRate\n isExemptFromYieldProtocolFee\n token {\n ...TokenTree\n }\n}\n ${TokenTreeFragmentDoc}`;\nexport const SubgraphPriceRateProviderFragmentDoc = gql`\n fragment SubgraphPriceRateProvider on PriceRateProvider {\n address\n token {\n address\n }\n}\n `;\nexport const SubgraphPoolFragmentDoc = gql`\n fragment SubgraphPool on Pool {\n id\n address\n poolType\n poolTypeVersion\n factory\n strategyType\n symbol\n name\n swapEnabled\n swapFee\n protocolYieldFeeCache\n protocolSwapFeeCache\n owner\n totalWeight\n totalSwapVolume\n totalSwapFee\n totalLiquidity\n totalShares\n tokens(first: 100, orderBy: index) {\n ...SubgraphPoolToken\n }\n swapsCount\n holdersCount\n tokensList\n amp\n priceRateProviders(first: 100) {\n ...SubgraphPriceRateProvider\n }\n expiryTime\n unitSeconds\n createTime\n principalToken\n baseToken\n wrappedIndex\n mainIndex\n lowerTarget\n upperTarget\n sqrtAlpha\n sqrtBeta\n root3Alpha\n isInRecoveryMode\n isPaused\n alpha\n beta\n c\n s\n lambda\n tauAlphaX\n tauAlphaY\n tauBetaX\n tauBetaY\n u\n v\n w\n z\n dSq\n delta\n epsilon\n}\n ${SubgraphPoolTokenFragmentDoc}\n${SubgraphPriceRateProviderFragmentDoc}`;\nexport const TokenAttrsFragmentDoc = gql`\n fragment TokenAttrs on Token {\n address\n symbol\n decimals\n}\n `;\nexport const SubgraphPoolSnapshotFragmentDoc = gql`\n fragment SubgraphPoolSnapshot on PoolSnapshot {\n id\n pool {\n id\n }\n totalShares\n swapVolume\n swapFees\n timestamp\n}\n `;\nexport const SubgraphJoinExitFragmentDoc = gql`\n fragment SubgraphJoinExit on JoinExit {\n amounts\n id\n sender\n timestamp\n tx\n type\n user {\n id\n }\n pool {\n id\n tokensList\n }\n}\n `;\nexport const SubgraphBalancerFragmentDoc = gql`\n fragment SubgraphBalancer on Balancer {\n id\n totalLiquidity\n totalSwapVolume\n totalSwapFee\n totalSwapCount\n poolCount\n}\n `;\nexport const SubgraphTokenPriceFragmentDoc = gql`\n fragment SubgraphTokenPrice on TokenPrice {\n id\n poolId {\n id\n }\n asset\n amount\n pricingAsset\n price\n block\n timestamp\n}\n `;\nexport const SubgraphTokenLatestPriceFragmentDoc = gql`\n fragment SubgraphTokenLatestPrice on LatestPrice {\n id\n asset\n price\n poolId {\n id\n }\n pricingAsset\n}\n `;\nexport const SubgraphUserFragmentDoc = gql`\n fragment SubgraphUser on User {\n id\n sharesOwned(first: 1000) {\n balance\n poolId {\n id\n }\n }\n}\n `;\nexport const PoolShareDocument = gql`\n query PoolShare($id: ID!, $block: Block_height) {\n poolShare(id: $id, block: $block) {\n ...SubgraphPoolShare\n }\n}\n ${SubgraphPoolShareFragmentDoc}`;\nexport const PoolSharesDocument = gql`\n query PoolShares($first: Int, $orderBy: PoolShare_orderBy, $orderDirection: OrderDirection, $skip: Int, $where: PoolShare_filter, $block: Block_height) {\n poolShares(\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n skip: $skip\n where: $where\n block: $block\n ) {\n ...SubgraphPoolShare\n }\n}\n ${SubgraphPoolShareFragmentDoc}`;\nexport const PoolsDocument = gql`\n query Pools($skip: Int, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $where: Pool_filter, $block: Block_height) {\n pools(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPool\n }\n}\n ${SubgraphPoolFragmentDoc}`;\nexport const AllPoolsDocument = gql`\n query AllPools($skip: Int, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $where: Pool_filter, $block: Block_height) {\n pool0: pools(\n first: 1000\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPool\n }\n pool1000: pools(\n first: 1000\n skip: 1000\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPool\n }\n pool2000: pools(\n first: 1000\n skip: 2000\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPool\n }\n}\n ${SubgraphPoolFragmentDoc}`;\nexport const PoolDocument = gql`\n query Pool($id: ID!, $block: Block_height) {\n pool(id: $id, block: $block) {\n ...SubgraphPool\n }\n}\n ${SubgraphPoolFragmentDoc}`;\nexport const PoolHistoricalLiquiditiesDocument = gql`\n query PoolHistoricalLiquidities($skip: Int, $first: Int, $orderBy: PoolHistoricalLiquidity_orderBy, $orderDirection: OrderDirection, $where: PoolHistoricalLiquidity_filter, $block: Block_height) {\n poolHistoricalLiquidities(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n id\n poolId {\n id\n }\n poolTotalShares\n poolLiquidity\n poolShareValue\n pricingAsset\n block\n }\n}\n `;\nexport const PoolSnapshotsDocument = gql`\n query PoolSnapshots($skip: Int, $first: Int, $orderBy: PoolSnapshot_orderBy, $orderDirection: OrderDirection, $where: PoolSnapshot_filter, $block: Block_height) {\n poolSnapshots(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPoolSnapshot\n }\n}\n ${SubgraphPoolSnapshotFragmentDoc}`;\nexport const JoinExitsDocument = gql`\n query JoinExits($skip: Int, $first: Int, $orderBy: JoinExit_orderBy, $orderDirection: OrderDirection, $where: JoinExit_filter, $block: Block_height) {\n joinExits(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphJoinExit\n }\n}\n ${SubgraphJoinExitFragmentDoc}`;\nexport const BalancersDocument = gql`\n query Balancers($skip: Int, $first: Int, $orderBy: Balancer_orderBy, $orderDirection: OrderDirection, $where: Balancer_filter, $block: Block_height) {\n balancers(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphBalancer\n }\n}\n ${SubgraphBalancerFragmentDoc}`;\nexport const TokenPricesDocument = gql`\n query TokenPrices($skip: Int, $first: Int, $orderBy: TokenPrice_orderBy, $orderDirection: OrderDirection, $where: TokenPrice_filter, $block: Block_height) {\n tokenPrices(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphTokenPrice\n }\n}\n ${SubgraphTokenPriceFragmentDoc}`;\nexport const TokenLatestPricesDocument = gql`\n query TokenLatestPrices($skip: Int, $first: Int, $orderBy: LatestPrice_orderBy, $orderDirection: OrderDirection, $where: LatestPrice_filter, $block: Block_height) {\n latestPrices(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphTokenLatestPrice\n }\n}\n ${SubgraphTokenLatestPriceFragmentDoc}`;\nexport const TokenLatestPriceDocument = gql`\n query TokenLatestPrice($id: ID!) {\n latestPrice(id: $id) {\n ...SubgraphTokenLatestPrice\n }\n}\n ${SubgraphTokenLatestPriceFragmentDoc}`;\nexport const UserDocument = gql`\n query User($id: ID!, $block: Block_height) {\n user(id: $id, block: $block) {\n ...SubgraphUser\n }\n}\n ${SubgraphUserFragmentDoc}`;\nexport const UsersDocument = gql`\n query Users($skip: Int, $first: Int, $orderBy: User_orderBy, $orderDirection: OrderDirection, $where: User_filter, $block: Block_height) {\n users(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphUser\n }\n}\n ${SubgraphUserFragmentDoc}`;\n\nexport type SdkFunctionWrapper = (action: (requestHeaders?:Record) => Promise, operationName: string, operationType?: string) => Promise;\n\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType) => action();\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n PoolShare(variables: PoolShareQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolShareDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolShare', 'query');\n },\n PoolShares(variables?: PoolSharesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolSharesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolShares', 'query');\n },\n Pools(variables?: PoolsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Pools', 'query');\n },\n AllPools(variables?: AllPoolsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(AllPoolsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'AllPools', 'query');\n },\n Pool(variables: PoolQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Pool', 'query');\n },\n PoolHistoricalLiquidities(variables?: PoolHistoricalLiquiditiesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolHistoricalLiquiditiesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolHistoricalLiquidities', 'query');\n },\n PoolSnapshots(variables?: PoolSnapshotsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolSnapshotsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolSnapshots', 'query');\n },\n JoinExits(variables?: JoinExitsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(JoinExitsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'JoinExits', 'query');\n },\n Balancers(variables?: BalancersQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(BalancersDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Balancers', 'query');\n },\n TokenPrices(variables?: TokenPricesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(TokenPricesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'TokenPrices', 'query');\n },\n TokenLatestPrices(variables?: TokenLatestPricesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(TokenLatestPricesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'TokenLatestPrices', 'query');\n },\n TokenLatestPrice(variables: TokenLatestPriceQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(TokenLatestPriceDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'TokenLatestPrice', 'query');\n },\n User(variables: UserQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(UserDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'User', 'query');\n },\n Users(variables?: UsersQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(UsersDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Users', 'query');\n }\n };\n}\nexport type Sdk = ReturnType;","import { GraphQLClient } from 'graphql-request';\nimport * as Dom from 'graphql-request/dist/types.dom';\nimport gql from 'graphql-tag';\nexport type Maybe = T | null;\nexport type InputMaybe = Maybe;\nexport type Exact = { [K in keyof T]: T[K] };\nexport type MakeOptional = Omit & { [SubKey in K]?: Maybe };\nexport type MakeMaybe = Omit & { [SubKey in K]: Maybe };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n BigDecimal: string;\n BigInt: string;\n Bytes: string;\n Int8: any;\n};\n\nexport type BlockChangedFilter = {\n number_gte: Scalars['Int'];\n};\n\nexport type Block_Height = {\n hash?: InputMaybe;\n number?: InputMaybe;\n number_gte?: InputMaybe;\n};\n\nexport enum Chain {\n Arbitrum = 'Arbitrum',\n Avalanche = 'Avalanche',\n Base = 'Base',\n Gnosis = 'Gnosis',\n Optimism = 'Optimism',\n Polygon = 'Polygon',\n PolygonZkEvm = 'PolygonZkEvm'\n}\n\nexport type Gauge = {\n __typename?: 'Gauge';\n /** Timestamp at which Balancer DAO added the gauge to GaugeController [seconds] */\n addedTimestamp: Scalars['Int'];\n /** Address of the gauge */\n address: Scalars['Bytes'];\n /** Equal to: - */\n id: Scalars['ID'];\n /** Reference to LiquidityGauge */\n liquidityGauge?: Maybe;\n /** Reference to RootGauge */\n rootGauge?: Maybe;\n /** Type of the gauge */\n type: GaugeType;\n};\n\nexport type GaugeFactory = {\n __typename?: 'GaugeFactory';\n /** List of gauges created through the factory */\n gauges?: Maybe>;\n /** Factory contract address */\n id: Scalars['ID'];\n /** Number of gauges created through the factory */\n numGauges: Scalars['Int'];\n};\n\n\nexport type GaugeFactoryGaugesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type GaugeFactory_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n gauges_?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n numGauges?: InputMaybe;\n numGauges_gt?: InputMaybe;\n numGauges_gte?: InputMaybe;\n numGauges_in?: InputMaybe>;\n numGauges_lt?: InputMaybe;\n numGauges_lte?: InputMaybe;\n numGauges_not?: InputMaybe;\n numGauges_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n};\n\nexport enum GaugeFactory_OrderBy {\n gauges = 'gauges',\n id = 'id',\n numGauges = 'numGauges'\n}\n\nexport type GaugeShare = {\n __typename?: 'GaugeShare';\n /** User's balance of gauge deposit tokens */\n balance: Scalars['BigDecimal'];\n /** Reference to LiquidityGauge entity */\n gauge: LiquidityGauge;\n /** Equal to: - */\n id: Scalars['ID'];\n /** Reference to User entity */\n user: User;\n};\n\nexport type GaugeShare_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n balance?: InputMaybe;\n balance_gt?: InputMaybe;\n balance_gte?: InputMaybe;\n balance_in?: InputMaybe>;\n balance_lt?: InputMaybe;\n balance_lte?: InputMaybe;\n balance_not?: InputMaybe;\n balance_not_in?: InputMaybe>;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n};\n\nexport enum GaugeShare_OrderBy {\n balance = 'balance',\n gauge = 'gauge',\n gauge__id = 'gauge__id',\n gauge__isKilled = 'gauge__isKilled',\n gauge__isPreferentialGauge = 'gauge__isPreferentialGauge',\n gauge__poolAddress = 'gauge__poolAddress',\n gauge__poolId = 'gauge__poolId',\n gauge__relativeWeightCap = 'gauge__relativeWeightCap',\n gauge__streamer = 'gauge__streamer',\n gauge__symbol = 'gauge__symbol',\n gauge__totalSupply = 'gauge__totalSupply',\n id = 'id',\n user = 'user',\n user__id = 'user__id'\n}\n\nexport type GaugeType = {\n __typename?: 'GaugeType';\n /** Type ID */\n id: Scalars['ID'];\n /** Name of the type - empty string if call reverts */\n name: Scalars['String'];\n};\n\nexport type GaugeType_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n};\n\nexport enum GaugeType_OrderBy {\n id = 'id',\n name = 'name'\n}\n\nexport type GaugeVote = {\n __typename?: 'GaugeVote';\n /** Reference to Gauge entity */\n gauge: Gauge;\n /** Equal to: - */\n id: Scalars['ID'];\n /** Timestamp at which user voted [seconds] */\n timestamp?: Maybe;\n /** Reference to User entity */\n user: User;\n /** Weight of veBAL power user has used to vote */\n weight?: Maybe;\n};\n\nexport type GaugeVote_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n weight?: InputMaybe;\n weight_gt?: InputMaybe;\n weight_gte?: InputMaybe;\n weight_in?: InputMaybe>;\n weight_lt?: InputMaybe;\n weight_lte?: InputMaybe;\n weight_not?: InputMaybe;\n weight_not_in?: InputMaybe>;\n};\n\nexport enum GaugeVote_OrderBy {\n gauge = 'gauge',\n gauge__addedTimestamp = 'gauge__addedTimestamp',\n gauge__address = 'gauge__address',\n gauge__id = 'gauge__id',\n id = 'id',\n timestamp = 'timestamp',\n user = 'user',\n user__id = 'user__id',\n weight = 'weight'\n}\n\nexport type Gauge_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n addedTimestamp?: InputMaybe;\n addedTimestamp_gt?: InputMaybe;\n addedTimestamp_gte?: InputMaybe;\n addedTimestamp_in?: InputMaybe>;\n addedTimestamp_lt?: InputMaybe;\n addedTimestamp_lte?: InputMaybe;\n addedTimestamp_not?: InputMaybe;\n addedTimestamp_not_in?: InputMaybe>;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n liquidityGauge?: InputMaybe;\n liquidityGauge_?: InputMaybe;\n liquidityGauge_contains?: InputMaybe;\n liquidityGauge_contains_nocase?: InputMaybe;\n liquidityGauge_ends_with?: InputMaybe;\n liquidityGauge_ends_with_nocase?: InputMaybe;\n liquidityGauge_gt?: InputMaybe;\n liquidityGauge_gte?: InputMaybe;\n liquidityGauge_in?: InputMaybe>;\n liquidityGauge_lt?: InputMaybe;\n liquidityGauge_lte?: InputMaybe;\n liquidityGauge_not?: InputMaybe;\n liquidityGauge_not_contains?: InputMaybe;\n liquidityGauge_not_contains_nocase?: InputMaybe;\n liquidityGauge_not_ends_with?: InputMaybe;\n liquidityGauge_not_ends_with_nocase?: InputMaybe;\n liquidityGauge_not_in?: InputMaybe>;\n liquidityGauge_not_starts_with?: InputMaybe;\n liquidityGauge_not_starts_with_nocase?: InputMaybe;\n liquidityGauge_starts_with?: InputMaybe;\n liquidityGauge_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n rootGauge?: InputMaybe;\n rootGauge_?: InputMaybe;\n rootGauge_contains?: InputMaybe;\n rootGauge_contains_nocase?: InputMaybe;\n rootGauge_ends_with?: InputMaybe;\n rootGauge_ends_with_nocase?: InputMaybe;\n rootGauge_gt?: InputMaybe;\n rootGauge_gte?: InputMaybe;\n rootGauge_in?: InputMaybe>;\n rootGauge_lt?: InputMaybe;\n rootGauge_lte?: InputMaybe;\n rootGauge_not?: InputMaybe;\n rootGauge_not_contains?: InputMaybe;\n rootGauge_not_contains_nocase?: InputMaybe;\n rootGauge_not_ends_with?: InputMaybe;\n rootGauge_not_ends_with_nocase?: InputMaybe;\n rootGauge_not_in?: InputMaybe>;\n rootGauge_not_starts_with?: InputMaybe;\n rootGauge_not_starts_with_nocase?: InputMaybe;\n rootGauge_starts_with?: InputMaybe;\n rootGauge_starts_with_nocase?: InputMaybe;\n type?: InputMaybe;\n type_?: InputMaybe;\n type_contains?: InputMaybe;\n type_contains_nocase?: InputMaybe;\n type_ends_with?: InputMaybe;\n type_ends_with_nocase?: InputMaybe;\n type_gt?: InputMaybe;\n type_gte?: InputMaybe;\n type_in?: InputMaybe>;\n type_lt?: InputMaybe;\n type_lte?: InputMaybe;\n type_not?: InputMaybe;\n type_not_contains?: InputMaybe;\n type_not_contains_nocase?: InputMaybe;\n type_not_ends_with?: InputMaybe;\n type_not_ends_with_nocase?: InputMaybe;\n type_not_in?: InputMaybe>;\n type_not_starts_with?: InputMaybe;\n type_not_starts_with_nocase?: InputMaybe;\n type_starts_with?: InputMaybe;\n type_starts_with_nocase?: InputMaybe;\n};\n\nexport enum Gauge_OrderBy {\n addedTimestamp = 'addedTimestamp',\n address = 'address',\n id = 'id',\n liquidityGauge = 'liquidityGauge',\n liquidityGauge__id = 'liquidityGauge__id',\n liquidityGauge__isKilled = 'liquidityGauge__isKilled',\n liquidityGauge__isPreferentialGauge = 'liquidityGauge__isPreferentialGauge',\n liquidityGauge__poolAddress = 'liquidityGauge__poolAddress',\n liquidityGauge__poolId = 'liquidityGauge__poolId',\n liquidityGauge__relativeWeightCap = 'liquidityGauge__relativeWeightCap',\n liquidityGauge__streamer = 'liquidityGauge__streamer',\n liquidityGauge__symbol = 'liquidityGauge__symbol',\n liquidityGauge__totalSupply = 'liquidityGauge__totalSupply',\n rootGauge = 'rootGauge',\n rootGauge__chain = 'rootGauge__chain',\n rootGauge__id = 'rootGauge__id',\n rootGauge__isKilled = 'rootGauge__isKilled',\n rootGauge__recipient = 'rootGauge__recipient',\n rootGauge__relativeWeightCap = 'rootGauge__relativeWeightCap',\n type = 'type',\n type__id = 'type__id',\n type__name = 'type__name'\n}\n\nexport type LiquidityGauge = {\n __typename?: 'LiquidityGauge';\n /** Factory contract address */\n factory: GaugeFactory;\n /** Reference to Gauge entity - created when LiquidityGauge is added to GaugeController */\n gauge?: Maybe;\n /** LiquidityGauge contract address */\n id: Scalars['ID'];\n /** Whether Balancer DAO killed the gauge */\n isKilled: Scalars['Boolean'];\n /** Whether the LiquidityGauge is the most recent added to GaugeController */\n isPreferentialGauge: Scalars['Boolean'];\n /** Reference to Pool entity */\n pool?: Maybe;\n /** Address of the pool (lp_token of the gauge) */\n poolAddress: Scalars['Bytes'];\n /** Pool ID if lp_token is a Balancer pool; null otherwise */\n poolId?: Maybe;\n /** Relative weight cap of the gauge (0.01 = 1%) - V2 factories only */\n relativeWeightCap?: Maybe;\n /** List of reward tokens depositted in the gauge - ChildChainLiquidityGauge only */\n rewardTokensList?: Maybe>;\n /** List of user shares */\n shares?: Maybe>;\n /** Address of the contract that streams reward tokens to the gauge - ChildChainLiquidityGauge only */\n streamer?: Maybe;\n /** ERC20 token symbol */\n symbol: Scalars['String'];\n /** List of reward tokens depositted in the gauge */\n tokens?: Maybe>;\n /** Total of BPTs users have staked in the LiquidityGauge */\n totalSupply: Scalars['BigDecimal'];\n};\n\n\nexport type LiquidityGaugeSharesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type LiquidityGaugeTokensArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type LiquidityGauge_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n factory?: InputMaybe;\n factory_?: InputMaybe;\n factory_contains?: InputMaybe;\n factory_contains_nocase?: InputMaybe;\n factory_ends_with?: InputMaybe;\n factory_ends_with_nocase?: InputMaybe;\n factory_gt?: InputMaybe;\n factory_gte?: InputMaybe;\n factory_in?: InputMaybe>;\n factory_lt?: InputMaybe;\n factory_lte?: InputMaybe;\n factory_not?: InputMaybe;\n factory_not_contains?: InputMaybe;\n factory_not_contains_nocase?: InputMaybe;\n factory_not_ends_with?: InputMaybe;\n factory_not_ends_with_nocase?: InputMaybe;\n factory_not_in?: InputMaybe>;\n factory_not_starts_with?: InputMaybe;\n factory_not_starts_with_nocase?: InputMaybe;\n factory_starts_with?: InputMaybe;\n factory_starts_with_nocase?: InputMaybe;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n isKilled?: InputMaybe;\n isKilled_in?: InputMaybe>;\n isKilled_not?: InputMaybe;\n isKilled_not_in?: InputMaybe>;\n isPreferentialGauge?: InputMaybe;\n isPreferentialGauge_in?: InputMaybe>;\n isPreferentialGauge_not?: InputMaybe;\n isPreferentialGauge_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n poolAddress?: InputMaybe;\n poolAddress_contains?: InputMaybe;\n poolAddress_gt?: InputMaybe;\n poolAddress_gte?: InputMaybe;\n poolAddress_in?: InputMaybe>;\n poolAddress_lt?: InputMaybe;\n poolAddress_lte?: InputMaybe;\n poolAddress_not?: InputMaybe;\n poolAddress_not_contains?: InputMaybe;\n poolAddress_not_in?: InputMaybe>;\n poolId?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n relativeWeightCap?: InputMaybe;\n relativeWeightCap_gt?: InputMaybe;\n relativeWeightCap_gte?: InputMaybe;\n relativeWeightCap_in?: InputMaybe>;\n relativeWeightCap_lt?: InputMaybe;\n relativeWeightCap_lte?: InputMaybe;\n relativeWeightCap_not?: InputMaybe;\n relativeWeightCap_not_in?: InputMaybe>;\n rewardTokensList?: InputMaybe>;\n rewardTokensList_contains?: InputMaybe>;\n rewardTokensList_contains_nocase?: InputMaybe>;\n rewardTokensList_not?: InputMaybe>;\n rewardTokensList_not_contains?: InputMaybe>;\n rewardTokensList_not_contains_nocase?: InputMaybe>;\n shares_?: InputMaybe;\n streamer?: InputMaybe;\n streamer_contains?: InputMaybe;\n streamer_gt?: InputMaybe;\n streamer_gte?: InputMaybe;\n streamer_in?: InputMaybe>;\n streamer_lt?: InputMaybe;\n streamer_lte?: InputMaybe;\n streamer_not?: InputMaybe;\n streamer_not_contains?: InputMaybe;\n streamer_not_in?: InputMaybe>;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n tokens_?: InputMaybe;\n totalSupply?: InputMaybe;\n totalSupply_gt?: InputMaybe;\n totalSupply_gte?: InputMaybe;\n totalSupply_in?: InputMaybe>;\n totalSupply_lt?: InputMaybe;\n totalSupply_lte?: InputMaybe;\n totalSupply_not?: InputMaybe;\n totalSupply_not_in?: InputMaybe>;\n};\n\nexport enum LiquidityGauge_OrderBy {\n factory = 'factory',\n factory__id = 'factory__id',\n factory__numGauges = 'factory__numGauges',\n gauge = 'gauge',\n gauge__addedTimestamp = 'gauge__addedTimestamp',\n gauge__address = 'gauge__address',\n gauge__id = 'gauge__id',\n id = 'id',\n isKilled = 'isKilled',\n isPreferentialGauge = 'isPreferentialGauge',\n pool = 'pool',\n poolAddress = 'poolAddress',\n poolId = 'poolId',\n pool__address = 'pool__address',\n pool__id = 'pool__id',\n pool__poolId = 'pool__poolId',\n relativeWeightCap = 'relativeWeightCap',\n rewardTokensList = 'rewardTokensList',\n shares = 'shares',\n streamer = 'streamer',\n symbol = 'symbol',\n tokens = 'tokens',\n totalSupply = 'totalSupply'\n}\n\nexport type LockSnapshot = {\n __typename?: 'LockSnapshot';\n /** veBAL balance at the moment user locks */\n bias: Scalars['BigDecimal'];\n /** Equal to - */\n id: Scalars['ID'];\n /** veBAL decay rate (per second) */\n slope: Scalars['BigDecimal'];\n /** Timestamp at which the snapshot was taken [seconds] */\n timestamp: Scalars['Int'];\n /** Reference to User entity */\n user: User;\n};\n\nexport type LockSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n bias?: InputMaybe;\n bias_gt?: InputMaybe;\n bias_gte?: InputMaybe;\n bias_in?: InputMaybe>;\n bias_lt?: InputMaybe;\n bias_lte?: InputMaybe;\n bias_not?: InputMaybe;\n bias_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n slope?: InputMaybe;\n slope_gt?: InputMaybe;\n slope_gte?: InputMaybe;\n slope_in?: InputMaybe>;\n slope_lt?: InputMaybe;\n slope_lte?: InputMaybe;\n slope_not?: InputMaybe;\n slope_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n};\n\nexport enum LockSnapshot_OrderBy {\n bias = 'bias',\n id = 'id',\n slope = 'slope',\n timestamp = 'timestamp',\n user = 'user',\n user__id = 'user__id'\n}\n\nexport type OmniVotingEscrowLock = {\n __typename?: 'OmniVotingEscrowLock';\n /** veBAL balance at the moment user locks */\n bias: Scalars['BigDecimal'];\n /** Chain where the lock was bridged to */\n dstChainId: Scalars['Int'];\n /** Equal to: - */\n id: Scalars['ID'];\n /** User on the local chain (reference to User entity) */\n localUser: User;\n /** User address on the remote chain */\n remoteUser: Scalars['Bytes'];\n /** veBAL decay rate (per second) */\n slope: Scalars['BigDecimal'];\n /** Timestamp the lock was created [seconds] */\n timestamp: Scalars['Int'];\n /** Reference to VotingEscrow entity */\n votingEscrowID: VotingEscrow;\n};\n\nexport type OmniVotingEscrowLock_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n bias?: InputMaybe;\n bias_gt?: InputMaybe;\n bias_gte?: InputMaybe;\n bias_in?: InputMaybe>;\n bias_lt?: InputMaybe;\n bias_lte?: InputMaybe;\n bias_not?: InputMaybe;\n bias_not_in?: InputMaybe>;\n dstChainId?: InputMaybe;\n dstChainId_gt?: InputMaybe;\n dstChainId_gte?: InputMaybe;\n dstChainId_in?: InputMaybe>;\n dstChainId_lt?: InputMaybe;\n dstChainId_lte?: InputMaybe;\n dstChainId_not?: InputMaybe;\n dstChainId_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n localUser?: InputMaybe;\n localUser_?: InputMaybe;\n localUser_contains?: InputMaybe;\n localUser_contains_nocase?: InputMaybe;\n localUser_ends_with?: InputMaybe;\n localUser_ends_with_nocase?: InputMaybe;\n localUser_gt?: InputMaybe;\n localUser_gte?: InputMaybe;\n localUser_in?: InputMaybe>;\n localUser_lt?: InputMaybe;\n localUser_lte?: InputMaybe;\n localUser_not?: InputMaybe;\n localUser_not_contains?: InputMaybe;\n localUser_not_contains_nocase?: InputMaybe;\n localUser_not_ends_with?: InputMaybe;\n localUser_not_ends_with_nocase?: InputMaybe;\n localUser_not_in?: InputMaybe>;\n localUser_not_starts_with?: InputMaybe;\n localUser_not_starts_with_nocase?: InputMaybe;\n localUser_starts_with?: InputMaybe;\n localUser_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n remoteUser?: InputMaybe;\n remoteUser_contains?: InputMaybe;\n remoteUser_gt?: InputMaybe;\n remoteUser_gte?: InputMaybe;\n remoteUser_in?: InputMaybe>;\n remoteUser_lt?: InputMaybe;\n remoteUser_lte?: InputMaybe;\n remoteUser_not?: InputMaybe;\n remoteUser_not_contains?: InputMaybe;\n remoteUser_not_in?: InputMaybe>;\n slope?: InputMaybe;\n slope_gt?: InputMaybe;\n slope_gte?: InputMaybe;\n slope_in?: InputMaybe>;\n slope_lt?: InputMaybe;\n slope_lte?: InputMaybe;\n slope_not?: InputMaybe;\n slope_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n votingEscrowID?: InputMaybe;\n votingEscrowID_?: InputMaybe;\n votingEscrowID_contains?: InputMaybe;\n votingEscrowID_contains_nocase?: InputMaybe;\n votingEscrowID_ends_with?: InputMaybe;\n votingEscrowID_ends_with_nocase?: InputMaybe;\n votingEscrowID_gt?: InputMaybe;\n votingEscrowID_gte?: InputMaybe;\n votingEscrowID_in?: InputMaybe>;\n votingEscrowID_lt?: InputMaybe;\n votingEscrowID_lte?: InputMaybe;\n votingEscrowID_not?: InputMaybe;\n votingEscrowID_not_contains?: InputMaybe;\n votingEscrowID_not_contains_nocase?: InputMaybe;\n votingEscrowID_not_ends_with?: InputMaybe;\n votingEscrowID_not_ends_with_nocase?: InputMaybe;\n votingEscrowID_not_in?: InputMaybe>;\n votingEscrowID_not_starts_with?: InputMaybe;\n votingEscrowID_not_starts_with_nocase?: InputMaybe;\n votingEscrowID_starts_with?: InputMaybe;\n votingEscrowID_starts_with_nocase?: InputMaybe;\n};\n\nexport enum OmniVotingEscrowLock_OrderBy {\n bias = 'bias',\n dstChainId = 'dstChainId',\n id = 'id',\n localUser = 'localUser',\n localUser__id = 'localUser__id',\n remoteUser = 'remoteUser',\n slope = 'slope',\n timestamp = 'timestamp',\n votingEscrowID = 'votingEscrowID',\n votingEscrowID__id = 'votingEscrowID__id',\n votingEscrowID__stakedSupply = 'votingEscrowID__stakedSupply'\n}\n\n/** Defines the order direction, either ascending or descending */\nexport enum OrderDirection {\n asc = 'asc',\n desc = 'desc'\n}\n\nexport type Pool = {\n __typename?: 'Pool';\n /** Address of the pool (lp_token of the gauge) */\n address: Scalars['Bytes'];\n /** List of gauges created for the pool */\n gauges?: Maybe>;\n /** List of the pool's gauges addresses */\n gaugesList: Array;\n /** Address of the pool (lp_token of the gauge) */\n id: Scalars['ID'];\n /** Pool ID if lp_token is a Balancer pool; null otherwise */\n poolId?: Maybe;\n /** Most recent, unkilled gauge in the GaugeController */\n preferentialGauge?: Maybe;\n};\n\n\nexport type PoolGaugesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type Pool_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n gaugesList?: InputMaybe>;\n gaugesList_contains?: InputMaybe>;\n gaugesList_contains_nocase?: InputMaybe>;\n gaugesList_not?: InputMaybe>;\n gaugesList_not_contains?: InputMaybe>;\n gaugesList_not_contains_nocase?: InputMaybe>;\n gauges_?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n preferentialGauge?: InputMaybe;\n preferentialGauge_?: InputMaybe;\n preferentialGauge_contains?: InputMaybe;\n preferentialGauge_contains_nocase?: InputMaybe;\n preferentialGauge_ends_with?: InputMaybe;\n preferentialGauge_ends_with_nocase?: InputMaybe;\n preferentialGauge_gt?: InputMaybe;\n preferentialGauge_gte?: InputMaybe;\n preferentialGauge_in?: InputMaybe>;\n preferentialGauge_lt?: InputMaybe;\n preferentialGauge_lte?: InputMaybe;\n preferentialGauge_not?: InputMaybe;\n preferentialGauge_not_contains?: InputMaybe;\n preferentialGauge_not_contains_nocase?: InputMaybe;\n preferentialGauge_not_ends_with?: InputMaybe;\n preferentialGauge_not_ends_with_nocase?: InputMaybe;\n preferentialGauge_not_in?: InputMaybe>;\n preferentialGauge_not_starts_with?: InputMaybe;\n preferentialGauge_not_starts_with_nocase?: InputMaybe;\n preferentialGauge_starts_with?: InputMaybe;\n preferentialGauge_starts_with_nocase?: InputMaybe;\n};\n\nexport enum Pool_OrderBy {\n address = 'address',\n gauges = 'gauges',\n gaugesList = 'gaugesList',\n id = 'id',\n poolId = 'poolId',\n preferentialGauge = 'preferentialGauge',\n preferentialGauge__id = 'preferentialGauge__id',\n preferentialGauge__isKilled = 'preferentialGauge__isKilled',\n preferentialGauge__isPreferentialGauge = 'preferentialGauge__isPreferentialGauge',\n preferentialGauge__poolAddress = 'preferentialGauge__poolAddress',\n preferentialGauge__poolId = 'preferentialGauge__poolId',\n preferentialGauge__relativeWeightCap = 'preferentialGauge__relativeWeightCap',\n preferentialGauge__streamer = 'preferentialGauge__streamer',\n preferentialGauge__symbol = 'preferentialGauge__symbol',\n preferentialGauge__totalSupply = 'preferentialGauge__totalSupply'\n}\n\nexport type Query = {\n __typename?: 'Query';\n /** Access to subgraph metadata */\n _meta?: Maybe<_Meta_>;\n gauge?: Maybe;\n gaugeFactories: Array;\n gaugeFactory?: Maybe;\n gaugeShare?: Maybe;\n gaugeShares: Array;\n gaugeType?: Maybe;\n gaugeTypes: Array;\n gaugeVote?: Maybe;\n gaugeVotes: Array;\n gauges: Array;\n liquidityGauge?: Maybe;\n liquidityGauges: Array;\n lockSnapshot?: Maybe;\n lockSnapshots: Array;\n omniVotingEscrowLock?: Maybe;\n omniVotingEscrowLocks: Array;\n pool?: Maybe;\n pools: Array;\n rewardToken?: Maybe;\n rewardTokens: Array;\n rootGauge?: Maybe;\n rootGauges: Array;\n singleRecipientGauge?: Maybe;\n singleRecipientGauges: Array;\n user?: Maybe;\n users: Array;\n votingEscrow?: Maybe;\n votingEscrowLock?: Maybe;\n votingEscrowLocks: Array;\n votingEscrows: Array;\n};\n\n\nexport type Query_MetaArgs = {\n block?: InputMaybe;\n};\n\n\nexport type QueryGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeFactoriesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGaugeFactoryArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeShareArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeSharesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGaugeTypeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeTypesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGaugeVoteArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeVotesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryLiquidityGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryLiquidityGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryLockSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryLockSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryOmniVotingEscrowLockArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryOmniVotingEscrowLocksArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryRewardTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryRewardTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryRootGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryRootGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QuerySingleRecipientGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QuerySingleRecipientGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryUserArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUsersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryVotingEscrowArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryVotingEscrowLockArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryVotingEscrowLocksArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryVotingEscrowsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\nexport type RewardToken = {\n __typename?: 'RewardToken';\n /** ERC20 token decimals - zero if call to decimals() reverts */\n decimals: Scalars['Int'];\n /** Reference to LiquidityGauge entity */\n gauge: LiquidityGauge;\n /** Equal to: - */\n id: Scalars['ID'];\n /** Timestamp at which finishes the period of rewards */\n periodFinish?: Maybe;\n /** Rate of reward tokens streamed per second */\n rate?: Maybe;\n /** ERC20 token symbol - empty string if call to symbol() reverts */\n symbol: Scalars['String'];\n /** Amount of reward tokens that has been deposited into the gauge */\n totalDeposited: Scalars['BigDecimal'];\n};\n\nexport type RewardToken_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n decimals?: InputMaybe;\n decimals_gt?: InputMaybe;\n decimals_gte?: InputMaybe;\n decimals_in?: InputMaybe>;\n decimals_lt?: InputMaybe;\n decimals_lte?: InputMaybe;\n decimals_not?: InputMaybe;\n decimals_not_in?: InputMaybe>;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n periodFinish?: InputMaybe;\n periodFinish_gt?: InputMaybe;\n periodFinish_gte?: InputMaybe;\n periodFinish_in?: InputMaybe>;\n periodFinish_lt?: InputMaybe;\n periodFinish_lte?: InputMaybe;\n periodFinish_not?: InputMaybe;\n periodFinish_not_in?: InputMaybe>;\n rate?: InputMaybe;\n rate_gt?: InputMaybe;\n rate_gte?: InputMaybe;\n rate_in?: InputMaybe>;\n rate_lt?: InputMaybe;\n rate_lte?: InputMaybe;\n rate_not?: InputMaybe;\n rate_not_in?: InputMaybe>;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n totalDeposited?: InputMaybe;\n totalDeposited_gt?: InputMaybe;\n totalDeposited_gte?: InputMaybe;\n totalDeposited_in?: InputMaybe>;\n totalDeposited_lt?: InputMaybe;\n totalDeposited_lte?: InputMaybe;\n totalDeposited_not?: InputMaybe;\n totalDeposited_not_in?: InputMaybe>;\n};\n\nexport enum RewardToken_OrderBy {\n decimals = 'decimals',\n gauge = 'gauge',\n gauge__id = 'gauge__id',\n gauge__isKilled = 'gauge__isKilled',\n gauge__isPreferentialGauge = 'gauge__isPreferentialGauge',\n gauge__poolAddress = 'gauge__poolAddress',\n gauge__poolId = 'gauge__poolId',\n gauge__relativeWeightCap = 'gauge__relativeWeightCap',\n gauge__streamer = 'gauge__streamer',\n gauge__symbol = 'gauge__symbol',\n gauge__totalSupply = 'gauge__totalSupply',\n id = 'id',\n periodFinish = 'periodFinish',\n rate = 'rate',\n symbol = 'symbol',\n totalDeposited = 'totalDeposited'\n}\n\nexport type RootGauge = {\n __typename?: 'RootGauge';\n /** Chain where emissions by this gauge will be bridged to */\n chain: Chain;\n /** Factory contract address */\n factory: GaugeFactory;\n /** Reference to Gauge entity - created when LiquidityGauge is added to GaugeController */\n gauge?: Maybe;\n /** RootGauge contract address */\n id: Scalars['ID'];\n /** Whether Balancer DAO killed the gauge */\n isKilled: Scalars['Boolean'];\n /** Address where emissions by this gauge will be bridged to */\n recipient: Scalars['Bytes'];\n /** Relative weight cap of the gauge (0.01 = 1%) - V2 factories only */\n relativeWeightCap?: Maybe;\n};\n\nexport type RootGauge_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n chain?: InputMaybe;\n chain_in?: InputMaybe>;\n chain_not?: InputMaybe;\n chain_not_in?: InputMaybe>;\n factory?: InputMaybe;\n factory_?: InputMaybe;\n factory_contains?: InputMaybe;\n factory_contains_nocase?: InputMaybe;\n factory_ends_with?: InputMaybe;\n factory_ends_with_nocase?: InputMaybe;\n factory_gt?: InputMaybe;\n factory_gte?: InputMaybe;\n factory_in?: InputMaybe>;\n factory_lt?: InputMaybe;\n factory_lte?: InputMaybe;\n factory_not?: InputMaybe;\n factory_not_contains?: InputMaybe;\n factory_not_contains_nocase?: InputMaybe;\n factory_not_ends_with?: InputMaybe;\n factory_not_ends_with_nocase?: InputMaybe;\n factory_not_in?: InputMaybe>;\n factory_not_starts_with?: InputMaybe;\n factory_not_starts_with_nocase?: InputMaybe;\n factory_starts_with?: InputMaybe;\n factory_starts_with_nocase?: InputMaybe;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n isKilled?: InputMaybe;\n isKilled_in?: InputMaybe>;\n isKilled_not?: InputMaybe;\n isKilled_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n recipient?: InputMaybe;\n recipient_contains?: InputMaybe;\n recipient_gt?: InputMaybe;\n recipient_gte?: InputMaybe;\n recipient_in?: InputMaybe>;\n recipient_lt?: InputMaybe;\n recipient_lte?: InputMaybe;\n recipient_not?: InputMaybe;\n recipient_not_contains?: InputMaybe;\n recipient_not_in?: InputMaybe>;\n relativeWeightCap?: InputMaybe;\n relativeWeightCap_gt?: InputMaybe;\n relativeWeightCap_gte?: InputMaybe;\n relativeWeightCap_in?: InputMaybe>;\n relativeWeightCap_lt?: InputMaybe;\n relativeWeightCap_lte?: InputMaybe;\n relativeWeightCap_not?: InputMaybe;\n relativeWeightCap_not_in?: InputMaybe>;\n};\n\nexport enum RootGauge_OrderBy {\n chain = 'chain',\n factory = 'factory',\n factory__id = 'factory__id',\n factory__numGauges = 'factory__numGauges',\n gauge = 'gauge',\n gauge__addedTimestamp = 'gauge__addedTimestamp',\n gauge__address = 'gauge__address',\n gauge__id = 'gauge__id',\n id = 'id',\n isKilled = 'isKilled',\n recipient = 'recipient',\n relativeWeightCap = 'relativeWeightCap'\n}\n\nexport type SingleRecipientGauge = {\n __typename?: 'SingleRecipientGauge';\n /** Factory contract address */\n factory: GaugeFactory;\n /** Reference to Gauge entity - created when SingleRecipientGauge is added to GaugeController */\n gauge?: Maybe;\n /** SingleRecipientGauge contract address */\n id: Scalars['ID'];\n /** Whether Balancer DAO killed the gauge */\n isKilled: Scalars['Boolean'];\n /** Address where emissions for this gauge will be sent to */\n recipient: Scalars['Bytes'];\n /** Relative weight cap of the gauge (0.01 = 1%) - V2 factories only */\n relativeWeightCap?: Maybe;\n};\n\nexport type SingleRecipientGauge_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n factory?: InputMaybe;\n factory_?: InputMaybe;\n factory_contains?: InputMaybe;\n factory_contains_nocase?: InputMaybe;\n factory_ends_with?: InputMaybe;\n factory_ends_with_nocase?: InputMaybe;\n factory_gt?: InputMaybe;\n factory_gte?: InputMaybe;\n factory_in?: InputMaybe>;\n factory_lt?: InputMaybe;\n factory_lte?: InputMaybe;\n factory_not?: InputMaybe;\n factory_not_contains?: InputMaybe;\n factory_not_contains_nocase?: InputMaybe;\n factory_not_ends_with?: InputMaybe;\n factory_not_ends_with_nocase?: InputMaybe;\n factory_not_in?: InputMaybe>;\n factory_not_starts_with?: InputMaybe;\n factory_not_starts_with_nocase?: InputMaybe;\n factory_starts_with?: InputMaybe;\n factory_starts_with_nocase?: InputMaybe;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n isKilled?: InputMaybe;\n isKilled_in?: InputMaybe>;\n isKilled_not?: InputMaybe;\n isKilled_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n recipient?: InputMaybe;\n recipient_contains?: InputMaybe;\n recipient_gt?: InputMaybe;\n recipient_gte?: InputMaybe;\n recipient_in?: InputMaybe>;\n recipient_lt?: InputMaybe;\n recipient_lte?: InputMaybe;\n recipient_not?: InputMaybe;\n recipient_not_contains?: InputMaybe;\n recipient_not_in?: InputMaybe>;\n relativeWeightCap?: InputMaybe;\n relativeWeightCap_gt?: InputMaybe;\n relativeWeightCap_gte?: InputMaybe;\n relativeWeightCap_in?: InputMaybe>;\n relativeWeightCap_lt?: InputMaybe;\n relativeWeightCap_lte?: InputMaybe;\n relativeWeightCap_not?: InputMaybe;\n relativeWeightCap_not_in?: InputMaybe>;\n};\n\nexport enum SingleRecipientGauge_OrderBy {\n factory = 'factory',\n factory__id = 'factory__id',\n factory__numGauges = 'factory__numGauges',\n gauge = 'gauge',\n gauge__addedTimestamp = 'gauge__addedTimestamp',\n gauge__address = 'gauge__address',\n gauge__id = 'gauge__id',\n id = 'id',\n isKilled = 'isKilled',\n recipient = 'recipient',\n relativeWeightCap = 'relativeWeightCap'\n}\n\nexport type Subscription = {\n __typename?: 'Subscription';\n /** Access to subgraph metadata */\n _meta?: Maybe<_Meta_>;\n gauge?: Maybe;\n gaugeFactories: Array;\n gaugeFactory?: Maybe;\n gaugeShare?: Maybe;\n gaugeShares: Array;\n gaugeType?: Maybe;\n gaugeTypes: Array;\n gaugeVote?: Maybe;\n gaugeVotes: Array;\n gauges: Array;\n liquidityGauge?: Maybe;\n liquidityGauges: Array;\n lockSnapshot?: Maybe;\n lockSnapshots: Array;\n omniVotingEscrowLock?: Maybe;\n omniVotingEscrowLocks: Array;\n pool?: Maybe;\n pools: Array;\n rewardToken?: Maybe;\n rewardTokens: Array;\n rootGauge?: Maybe;\n rootGauges: Array;\n singleRecipientGauge?: Maybe;\n singleRecipientGauges: Array;\n user?: Maybe;\n users: Array;\n votingEscrow?: Maybe;\n votingEscrowLock?: Maybe;\n votingEscrowLocks: Array;\n votingEscrows: Array;\n};\n\n\nexport type Subscription_MetaArgs = {\n block?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeFactoriesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugeFactoryArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeShareArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeSharesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugeTypeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeTypesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugeVoteArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeVotesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionLiquidityGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionLiquidityGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionLockSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionLockSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionOmniVotingEscrowLockArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionOmniVotingEscrowLocksArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionRewardTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionRewardTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionRootGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionRootGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionSingleRecipientGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionSingleRecipientGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionUserArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUsersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionVotingEscrowArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionVotingEscrowLockArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionVotingEscrowLocksArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionVotingEscrowsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\nexport type User = {\n __typename?: 'User';\n /** List of gauge the user has shares */\n gaugeShares?: Maybe>;\n /** List of votes on gauges */\n gaugeVotes?: Maybe>;\n /** User address */\n id: Scalars['ID'];\n /** List of omni locks the user created */\n omniVotingLocks?: Maybe>;\n /** List of locks the user created */\n votingLocks?: Maybe>;\n};\n\n\nexport type UserGaugeSharesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserGaugeVotesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserOmniVotingLocksArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserVotingLocksArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type User_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n gaugeShares_?: InputMaybe;\n gaugeVotes_?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n omniVotingLocks_?: InputMaybe;\n or?: InputMaybe>>;\n votingLocks_?: InputMaybe;\n};\n\nexport enum User_OrderBy {\n gaugeShares = 'gaugeShares',\n gaugeVotes = 'gaugeVotes',\n id = 'id',\n omniVotingLocks = 'omniVotingLocks',\n votingLocks = 'votingLocks'\n}\n\nexport type VotingEscrow = {\n __typename?: 'VotingEscrow';\n /** VotingEscrow contract address */\n id: Scalars['ID'];\n /** List of veBAL locks created */\n locks?: Maybe>;\n /** List of veBAL locks created */\n omniLocks?: Maybe>;\n /** Amount of B-80BAL-20WETH BPT locked, only applies on mainnet */\n stakedSupply?: Maybe;\n};\n\n\nexport type VotingEscrowLocksArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type VotingEscrowOmniLocksArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type VotingEscrowLock = {\n __typename?: 'VotingEscrowLock';\n /** veBAL balance at the moment user locks */\n bias: Scalars['BigDecimal'];\n /** Equal to: - */\n id: Scalars['ID'];\n /** Amount of B-80BAL-20WETH BPT the user has locked */\n lockedBalance: Scalars['BigDecimal'];\n /** veBAL decay rate (per second) */\n slope: Scalars['BigDecimal'];\n /** Timestamp at which the lock was created [seconds] */\n timestamp: Scalars['Int'];\n /** Timestamp at which B-80BAL-20WETH BPT can be unlocked by user [seconds] */\n unlockTime: Scalars['BigInt'];\n /** Timestamp at which the lcok was created [seconds]. Same as timestamp */\n updatedAt: Scalars['Int'];\n /** Reference to User entity */\n user: User;\n /** Reference to VotingEscrow entity */\n votingEscrowID: VotingEscrow;\n};\n\nexport type VotingEscrowLock_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n bias?: InputMaybe;\n bias_gt?: InputMaybe;\n bias_gte?: InputMaybe;\n bias_in?: InputMaybe>;\n bias_lt?: InputMaybe;\n bias_lte?: InputMaybe;\n bias_not?: InputMaybe;\n bias_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n lockedBalance?: InputMaybe;\n lockedBalance_gt?: InputMaybe;\n lockedBalance_gte?: InputMaybe;\n lockedBalance_in?: InputMaybe>;\n lockedBalance_lt?: InputMaybe;\n lockedBalance_lte?: InputMaybe;\n lockedBalance_not?: InputMaybe;\n lockedBalance_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n slope?: InputMaybe;\n slope_gt?: InputMaybe;\n slope_gte?: InputMaybe;\n slope_in?: InputMaybe>;\n slope_lt?: InputMaybe;\n slope_lte?: InputMaybe;\n slope_not?: InputMaybe;\n slope_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n unlockTime?: InputMaybe;\n unlockTime_gt?: InputMaybe;\n unlockTime_gte?: InputMaybe;\n unlockTime_in?: InputMaybe>;\n unlockTime_lt?: InputMaybe;\n unlockTime_lte?: InputMaybe;\n unlockTime_not?: InputMaybe;\n unlockTime_not_in?: InputMaybe>;\n updatedAt?: InputMaybe;\n updatedAt_gt?: InputMaybe;\n updatedAt_gte?: InputMaybe;\n updatedAt_in?: InputMaybe>;\n updatedAt_lt?: InputMaybe;\n updatedAt_lte?: InputMaybe;\n updatedAt_not?: InputMaybe;\n updatedAt_not_in?: InputMaybe>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n votingEscrowID?: InputMaybe;\n votingEscrowID_?: InputMaybe;\n votingEscrowID_contains?: InputMaybe;\n votingEscrowID_contains_nocase?: InputMaybe;\n votingEscrowID_ends_with?: InputMaybe;\n votingEscrowID_ends_with_nocase?: InputMaybe;\n votingEscrowID_gt?: InputMaybe;\n votingEscrowID_gte?: InputMaybe;\n votingEscrowID_in?: InputMaybe>;\n votingEscrowID_lt?: InputMaybe;\n votingEscrowID_lte?: InputMaybe;\n votingEscrowID_not?: InputMaybe;\n votingEscrowID_not_contains?: InputMaybe;\n votingEscrowID_not_contains_nocase?: InputMaybe;\n votingEscrowID_not_ends_with?: InputMaybe;\n votingEscrowID_not_ends_with_nocase?: InputMaybe;\n votingEscrowID_not_in?: InputMaybe>;\n votingEscrowID_not_starts_with?: InputMaybe;\n votingEscrowID_not_starts_with_nocase?: InputMaybe;\n votingEscrowID_starts_with?: InputMaybe;\n votingEscrowID_starts_with_nocase?: InputMaybe;\n};\n\nexport enum VotingEscrowLock_OrderBy {\n bias = 'bias',\n id = 'id',\n lockedBalance = 'lockedBalance',\n slope = 'slope',\n timestamp = 'timestamp',\n unlockTime = 'unlockTime',\n updatedAt = 'updatedAt',\n user = 'user',\n user__id = 'user__id',\n votingEscrowID = 'votingEscrowID',\n votingEscrowID__id = 'votingEscrowID__id',\n votingEscrowID__stakedSupply = 'votingEscrowID__stakedSupply'\n}\n\nexport type VotingEscrow_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n locks_?: InputMaybe;\n omniLocks_?: InputMaybe;\n or?: InputMaybe>>;\n stakedSupply?: InputMaybe;\n stakedSupply_gt?: InputMaybe;\n stakedSupply_gte?: InputMaybe;\n stakedSupply_in?: InputMaybe>;\n stakedSupply_lt?: InputMaybe;\n stakedSupply_lte?: InputMaybe;\n stakedSupply_not?: InputMaybe;\n stakedSupply_not_in?: InputMaybe>;\n};\n\nexport enum VotingEscrow_OrderBy {\n id = 'id',\n locks = 'locks',\n omniLocks = 'omniLocks',\n stakedSupply = 'stakedSupply'\n}\n\nexport type _Block_ = {\n __typename?: '_Block_';\n /** The hash of the block */\n hash?: Maybe;\n /** The block number */\n number: Scalars['Int'];\n /** Integer representation of the timestamp stored in blocks for the chain */\n timestamp?: Maybe;\n};\n\n/** The type for the top-level _meta field */\nexport type _Meta_ = {\n __typename?: '_Meta_';\n /**\n * Information about a specific subgraph block. The hash of the block\n * will be null if the _meta field has a block constraint that asks for\n * a block number. It will be filled if the _meta field has no block constraint\n * and therefore asks for the latest block\n *\n */\n block: _Block_;\n /** The deployment ID */\n deployment: Scalars['String'];\n /** If `true`, the subgraph encountered indexing errors at some past block */\n hasIndexingErrors: Scalars['Boolean'];\n};\n\nexport enum _SubgraphErrorPolicy_ {\n /** Data will be returned even if the subgraph has indexing errors */\n allow = 'allow',\n /** If the subgraph has indexing errors, data will be omitted. The default. */\n deny = 'deny'\n}\n\nexport type GaugeShareQueryVariables = Exact<{\n id: Scalars['ID'];\n block?: InputMaybe;\n}>;\n\n\nexport type GaugeShareQuery = { __typename?: 'Query', gaugeShare?: { __typename?: 'GaugeShare', id: string, balance: string, user: { __typename?: 'User', id: string }, gauge: { __typename?: 'LiquidityGauge', id: string, isKilled: boolean, poolId?: string | null, poolAddress: string, totalSupply: string } } | null };\n\nexport type GaugeSharesQueryVariables = Exact<{\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type GaugeSharesQuery = { __typename?: 'Query', gaugeShares: Array<{ __typename?: 'GaugeShare', id: string, balance: string, user: { __typename?: 'User', id: string }, gauge: { __typename?: 'LiquidityGauge', id: string, isKilled: boolean, poolId?: string | null, poolAddress: string, totalSupply: string } }> };\n\nexport type SubgraphGaugeShareFragment = { __typename?: 'GaugeShare', id: string, balance: string, user: { __typename?: 'User', id: string }, gauge: { __typename?: 'LiquidityGauge', id: string, isKilled: boolean, poolId?: string | null, poolAddress: string, totalSupply: string } };\n\nexport type LiquidityGaugesQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type LiquidityGaugesQuery = { __typename?: 'Query', liquidityGauges: Array<{ __typename?: 'LiquidityGauge', id: string, symbol: string, poolAddress: string, poolId?: string | null, streamer?: string | null, totalSupply: string, factory: { __typename?: 'GaugeFactory', id: string, numGauges: number }, tokens?: Array<{ __typename?: 'RewardToken', id: string, symbol: string, decimals: number, totalDeposited: string, rate?: string | null, periodFinish?: string | null }> | null }> };\n\nexport type SubgraphLiquidityGaugeFragment = { __typename?: 'LiquidityGauge', id: string, symbol: string, poolAddress: string, poolId?: string | null, streamer?: string | null, totalSupply: string, factory: { __typename?: 'GaugeFactory', id: string, numGauges: number }, tokens?: Array<{ __typename?: 'RewardToken', id: string, symbol: string, decimals: number, totalDeposited: string, rate?: string | null, periodFinish?: string | null }> | null };\n\nexport type PoolsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolsQuery = { __typename?: 'Query', pools: Array<{ __typename?: 'Pool', id: string, poolId?: string | null, preferentialGauge?: { __typename?: 'LiquidityGauge', id: string, symbol: string, poolAddress: string, poolId?: string | null, streamer?: string | null, totalSupply: string, factory: { __typename?: 'GaugeFactory', id: string, numGauges: number }, tokens?: Array<{ __typename?: 'RewardToken', id: string, symbol: string, decimals: number, totalDeposited: string, rate?: string | null, periodFinish?: string | null }> | null } | null }> };\n\nexport type SubgraphPoolWithPreferentialGaugeFragment = { __typename?: 'Pool', id: string, poolId?: string | null, preferentialGauge?: { __typename?: 'LiquidityGauge', id: string, symbol: string, poolAddress: string, poolId?: string | null, streamer?: string | null, totalSupply: string, factory: { __typename?: 'GaugeFactory', id: string, numGauges: number }, tokens?: Array<{ __typename?: 'RewardToken', id: string, symbol: string, decimals: number, totalDeposited: string, rate?: string | null, periodFinish?: string | null }> | null } | null };\n\nexport type PoolGaugesQueryVariables = Exact<{\n where?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolGaugesQuery = { __typename?: 'Query', pools: Array<{ __typename?: 'Pool', gauges?: Array<{ __typename?: 'LiquidityGauge', id: string, relativeWeightCap?: string | null }> | null, preferentialGauge?: { __typename?: 'LiquidityGauge', id: string } | null }> };\n\nexport const SubgraphGaugeShareFragmentDoc = gql`\n fragment SubgraphGaugeShare on GaugeShare {\n id\n balance\n user {\n id\n }\n gauge {\n id\n isKilled\n poolId\n poolAddress\n totalSupply\n }\n}\n `;\nexport const SubgraphLiquidityGaugeFragmentDoc = gql`\n fragment SubgraphLiquidityGauge on LiquidityGauge {\n id\n symbol\n poolAddress\n poolId\n streamer\n factory {\n id\n numGauges\n }\n totalSupply\n tokens {\n id\n symbol\n decimals\n totalDeposited\n rate\n periodFinish\n }\n}\n `;\nexport const SubgraphPoolWithPreferentialGaugeFragmentDoc = gql`\n fragment SubgraphPoolWithPreferentialGauge on Pool {\n id\n poolId\n preferentialGauge {\n ...SubgraphLiquidityGauge\n }\n}\n ${SubgraphLiquidityGaugeFragmentDoc}`;\nexport const GaugeShareDocument = gql`\n query GaugeShare($id: ID!, $block: Block_height) {\n gaugeShare(id: $id, block: $block) {\n ...SubgraphGaugeShare\n }\n}\n ${SubgraphGaugeShareFragmentDoc}`;\nexport const GaugeSharesDocument = gql`\n query GaugeShares($first: Int, $orderBy: GaugeShare_orderBy, $orderDirection: OrderDirection, $skip: Int, $where: GaugeShare_filter, $block: Block_height) {\n gaugeShares(\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n skip: $skip\n where: $where\n block: $block\n ) {\n ...SubgraphGaugeShare\n }\n}\n ${SubgraphGaugeShareFragmentDoc}`;\nexport const LiquidityGaugesDocument = gql`\n query LiquidityGauges($skip: Int, $first: Int, $orderBy: LiquidityGauge_orderBy, $orderDirection: OrderDirection, $where: LiquidityGauge_filter, $block: Block_height) {\n liquidityGauges(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphLiquidityGauge\n }\n}\n ${SubgraphLiquidityGaugeFragmentDoc}`;\nexport const PoolsDocument = gql`\n query Pools($skip: Int, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $where: Pool_filter, $block: Block_height) {\n pools(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPoolWithPreferentialGauge\n }\n}\n ${SubgraphPoolWithPreferentialGaugeFragmentDoc}`;\nexport const PoolGaugesDocument = gql`\n query PoolGauges($where: Pool_filter, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $skip: Int, $block: Block_height) {\n pools(\n where: $where\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n skip: $skip\n block: $block\n ) {\n gauges {\n id\n relativeWeightCap\n }\n preferentialGauge {\n id\n }\n }\n}\n `;\n\nexport type SdkFunctionWrapper = (action: (requestHeaders?:Record) => Promise, operationName: string, operationType?: string) => Promise;\n\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType) => action();\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n GaugeShare(variables: GaugeShareQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(GaugeShareDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'GaugeShare', 'query');\n },\n GaugeShares(variables?: GaugeSharesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(GaugeSharesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'GaugeShares', 'query');\n },\n LiquidityGauges(variables?: LiquidityGaugesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(LiquidityGaugesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'LiquidityGauges', 'query');\n },\n Pools(variables?: PoolsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Pools', 'query');\n },\n PoolGauges(variables?: PoolGaugesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolGaugesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolGauges', 'query');\n }\n };\n}\nexport type Sdk = ReturnType;","import { GraphQLClient } from 'graphql-request';\nimport { getSdk, Sdk } from './generated/balancer-subgraph-types';\nimport * as Gauges from './generated/balancer-gauges';\nimport * as V2 from './generated/balancer-subgraph-types';\n\nexport * from './generated/balancer-subgraph-types';\n\nexport type SubgraphClient = Sdk;\nexport type GaugesClient = Gauges.Sdk;\nexport type SubgraphLiquidityGauge = Gauges.LiquidityGauge;\nexport type SubgraphPool = V2.SubgraphPoolFragment;\n\nexport function createSubgraphClient(subgraphUrl: string): SubgraphClient {\n const client = new GraphQLClient(subgraphUrl);\n\n return getSdk(client);\n}\n\nexport function createGaugesClient(url: string): GaugesClient {\n const client = new GraphQLClient(url);\n\n return Gauges.getSdk(client);\n}\n","import { set } from 'lodash';\nimport { Fragment, JsonFragment, Interface, Result } from '@ethersproject/abi';\nimport { CallOverrides } from '@ethersproject/contracts';\nimport { Multicall3, Multicall3__factory } from '@/contracts';\nimport { Provider } from '@ethersproject/providers';\n\nexport class Multicaller3 {\n private interface: Interface;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private calls: [string, string, any][] = [];\n private paths: string[] = [];\n address = '0xcA11bde05977b3631167028862bE2a173976CA11';\n multicall: Multicall3;\n\n constructor(\n abi: string | Array,\n provider: Provider,\n private options: CallOverrides = {}\n ) {\n this.interface = new Interface(abi);\n this.multicall = Multicall3__factory.connect(this.address, provider);\n }\n\n call(\n path: string,\n address: string,\n functionName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n params?: any[]\n ): Multicaller3 {\n this.calls.push([address, functionName, params]);\n this.paths.push(path);\n return this;\n }\n\n async execute(\n from: Record = {},\n batchSize = 1024 // Define the number of function calls in each batch\n ): Promise> {\n const obj = from;\n const results = await this.executeMulticall(batchSize);\n results.forEach((result, i) =>\n set(obj, this.paths[i], result.length > 1 ? result : result[0])\n );\n this.calls = [];\n this.paths = [];\n return obj;\n }\n\n private async executeMulticall(batchSize: number): Promise {\n const numBatches = Math.ceil(this.calls.length / batchSize);\n const results: Result[] = [];\n\n const batchPromises = [];\n\n for (let batchIndex = 0; batchIndex < numBatches; batchIndex++) {\n const batchCalls = this.calls.slice(\n batchIndex * batchSize,\n (batchIndex + 1) * batchSize\n );\n\n const batchRequests = batchCalls.map(\n ([address, functionName, params]) => ({\n target: address,\n allowFailure: true,\n callData: this.interface.encodeFunctionData(functionName, params),\n })\n );\n\n batchPromises.push(\n this.multicall.callStatic.aggregate3(batchRequests, this.options)\n );\n }\n\n const batchResults = await Promise.all(batchPromises);\n\n batchResults.forEach((res, batchIndex) => {\n const offset = batchIndex * batchSize;\n\n for (let i = 0; i < res.length; i++) {\n const callIndex = offset + i;\n const { success, returnData } = res[i];\n\n if (success) {\n try {\n const result = this.interface.decodeFunctionResult(\n this.calls[callIndex][1],\n returnData\n );\n results[callIndex] = result;\n } catch (e) {\n console.error('Multicall error', this.paths[callIndex]);\n results[callIndex] = [];\n }\n } else {\n console.error('Failed request in multicall', this.paths[callIndex]);\n results[callIndex] = [];\n }\n }\n });\n\n return results;\n }\n}\n","import { Multicaller3 } from '@/lib/utils/multiCaller3';\nimport { SubgraphPoolBase } from '@/.';\nimport { Provider } from '@ethersproject/providers';\nimport { formatFixed } from '@ethersproject/bignumber';\nimport { SubgraphToken } from '@balancer-labs/sor';\nimport { PoolToken, Pool } from '@/types';\n\nconst abi = [\n 'function getSwapFeePercentage() view returns (uint256)',\n 'function percentFee() view returns (uint256)',\n 'function protocolPercentFee() view returns (uint256)',\n 'function getNormalizedWeights() view returns (uint256[])',\n 'function totalSupply() view returns (uint256)',\n 'function getVirtualSupply() view returns (uint256)',\n 'function getActualSupply() view returns (uint256)',\n 'function getTargets() view returns (uint256 lowerTarget, uint256 upperTarget)',\n 'function getTokenRates() view returns (uint256, uint256)',\n 'function getWrappedTokenRate() view returns (uint256)',\n 'function getAmplificationParameter() view returns (uint256 value, bool isUpdating, uint256 precision)',\n 'function getPausedState() view returns (bool)',\n 'function inRecoveryMode() view returns (bool)',\n 'function getRate() view returns (uint256)',\n 'function getScalingFactors() view returns (uint256[] memory)', // do we need this here?\n 'function getPoolTokens(bytes32) view returns (address[], uint256[])',\n];\n\nconst getTotalSupplyFn = (poolType: string) => {\n if (poolType.includes('Linear') || ['StablePhantom'].includes(poolType)) {\n return 'getVirtualSupply';\n } else if (poolType === 'ComposableStable') {\n return 'getActualSupply';\n } else {\n return 'totalSupply';\n }\n};\n\nconst getSwapFeeFn = (poolType: string) => {\n if (poolType === 'Element') {\n return 'percentFee';\n } else if (poolType === 'FX') {\n return 'protocolPercentFee';\n } else {\n return 'getSwapFeePercentage';\n }\n};\n\ntype GenericToken = SubgraphToken | PoolToken;\ntype GenericPool = Omit & {\n tokens: GenericToken[];\n};\n\ninterface OnchainData {\n poolTokens: [string[], string[]];\n totalShares: string;\n swapFee: string;\n isPaused?: boolean;\n inRecoveryMode?: boolean;\n rate?: string;\n scalingFactors?: string[];\n weights?: string[];\n targets?: [string, string];\n wrappedTokenRate?: string;\n amp?: [string, boolean, string];\n tokenRates?: [string, string];\n}\n\nconst defaultCalls = (\n id: string,\n address: string,\n vaultAddress: string,\n poolType: string,\n multicaller: Multicaller3\n) => {\n multicaller.call(`${id}.poolTokens`, vaultAddress, 'getPoolTokens', [id]);\n multicaller.call(`${id}.totalShares`, address, getTotalSupplyFn(poolType));\n multicaller.call(`${id}.swapFee`, address, getSwapFeeFn(poolType));\n // Following where added to the pools query contract, however legacy onchain data didn't have them.\n // multicaller.call(`${id}.isPaused`, address, 'getPausedState');\n // multicaller.call(`${id}.inRecoveryMode`, address, 'inRecoveryMode');\n // multicaller.call(`${id}.rate`, address, 'getRate');\n // multicaller.call(`${id}.scalingFactors`, address, 'getScalingFactors');\n};\n\nconst weightedCalls = (\n id: string,\n address: string,\n multicaller: Multicaller3\n) => {\n multicaller.call(`${id}.weights`, address, 'getNormalizedWeights');\n};\n\nconst linearCalls = (\n id: string,\n address: string,\n multicaller: Multicaller3\n) => {\n multicaller.call(`${id}.targets`, address, 'getTargets');\n multicaller.call(`${id}.wrappedTokenRate`, address, 'getWrappedTokenRate');\n};\n\nconst stableCalls = (\n id: string,\n address: string,\n multicaller: Multicaller3\n) => {\n multicaller.call(`${id}.amp`, address, 'getAmplificationParameter');\n};\n\nconst gyroECalls = (id: string, address: string, multicaller: Multicaller3) => {\n multicaller.call(`${id}.tokenRates`, address, 'getTokenRates');\n};\n\nconst poolTypeCalls = (poolType: string, poolTypeVersion = 1) => {\n const do_nothing = () => ({});\n switch (poolType) {\n case 'Weighted':\n case 'LiquidityBootstrapping':\n case 'Investment':\n return weightedCalls;\n case 'Stable':\n case 'StablePhantom':\n case 'MetaStable':\n case 'ComposableStable':\n return stableCalls;\n case 'GyroE':\n if (poolTypeVersion === 2) {\n return gyroECalls;\n } else {\n return do_nothing;\n }\n case 'Gyro2':\n if (poolTypeVersion === 2) {\n // Gyro2 V2 has tokenRates same as GyroE V2\n return gyroECalls;\n } else {\n return do_nothing;\n }\n case 'AaveLinear':\n if (poolTypeVersion === 1) {\n return linearCalls;\n } else {\n return do_nothing;\n }\n default:\n return do_nothing;\n }\n};\n\nconst merge = (pool: T, result: OnchainData) => ({\n ...pool,\n tokens: result.poolTokens\n ? pool.tokens.map((token) => {\n const idx = result.poolTokens[0]\n .map((t) => t.toLowerCase())\n .indexOf(token.address);\n const wrappedToken =\n pool.wrappedIndex && pool.tokensList[pool.wrappedIndex];\n const tokenDecimals =\n token.decimals === undefined ? 18 : token.decimals;\n return {\n ...token,\n balance: formatFixed(result.poolTokens[1][idx], tokenDecimals),\n weight:\n (result.weights && formatFixed(result.weights[idx], 18)) ||\n token.weight,\n priceRate:\n (result.wrappedTokenRate &&\n wrappedToken &&\n wrappedToken.toLowerCase() === token.address.toLowerCase() &&\n formatFixed(result.wrappedTokenRate, 18)) ||\n token.priceRate,\n } as SubgraphToken;\n })\n : pool.tokens,\n totalShares: result.totalShares\n ? formatFixed(result.totalShares, 18)\n : pool.totalShares,\n swapFee: result.swapFee ? formatFixed(result.swapFee, 18) : pool.swapFee,\n amp:\n (result.amp &&\n result.amp[0] &&\n formatFixed(result.amp[0], String(result.amp[2]).length - 1)) ||\n pool.amp,\n lowerTarget:\n (result.targets && formatFixed(result.targets[0], 18)) || pool.lowerTarget,\n upperTarget:\n (result.targets && formatFixed(result.targets[1], 18)) || pool.upperTarget,\n tokenRates:\n (result.tokenRates &&\n result.tokenRates.map((rate) => formatFixed(rate, 18))) ||\n pool.tokenRates,\n // rate: result.rate,\n // isPaused: result.isPaused,\n // inRecoveryMode: result.inRecoveryMode,\n // scalingFactors: result.scalingFactors,\n});\n\nexport const fetchOnChainPoolData = async (\n pools: {\n id: string;\n address: string;\n poolType: string;\n poolTypeVersion?: number;\n }[],\n vaultAddress: string,\n provider: Provider,\n batchSize = 1024\n): Promise<{ [id: string]: OnchainData }> => {\n if (pools.length === 0) {\n return {};\n }\n\n const multicaller = new Multicaller3(abi, provider);\n\n pools.forEach(({ id, address, poolType, poolTypeVersion }) => {\n defaultCalls(id, address, vaultAddress, poolType, multicaller);\n poolTypeCalls(poolType, poolTypeVersion)(id, address, multicaller);\n });\n\n const results = (await multicaller.execute({}, batchSize)) as {\n [id: string]: OnchainData;\n };\n\n return results;\n};\n\nexport async function getOnChainBalances(\n subgraphPoolsOriginal: T[],\n _multiAddress: string,\n vaultAddress: string,\n provider: Provider,\n batchSize = 1024\n): Promise {\n if (subgraphPoolsOriginal.length === 0) return subgraphPoolsOriginal;\n\n const poolsWithOnchainData: T[] = [];\n\n const onchainData = (await fetchOnChainPoolData(\n subgraphPoolsOriginal,\n vaultAddress,\n provider,\n batchSize\n )) as { [id: string]: OnchainData };\n\n subgraphPoolsOriginal.forEach((pool) => {\n const data = onchainData[pool.id];\n poolsWithOnchainData.push(merge(pool, data));\n });\n\n return poolsWithOnchainData;\n}\n","import { PoolDataService, SubgraphPoolBase } from '@balancer-labs/sor';\nimport {\n OrderDirection,\n Pool_OrderBy,\n PoolsQueryVariables,\n SubgraphClient,\n} from '@/modules/subgraph/subgraph';\nimport { parseInt } from 'lodash';\nimport { getOnChainBalances } from './onChainData3';\nimport { Provider } from '@ethersproject/providers';\nimport {\n BalancerNetworkConfig,\n BalancerSdkSorConfig,\n GraphQLQuery,\n} from '@/types';\nimport { GraphQLArgs } from '@/lib/graphql/types';\nimport {\n GraphQLArgsBuilder,\n SubgraphArgsFormatter,\n} from '@/lib/graphql/args-builder';\n\nimport { Logger } from '@/lib/utils/logger';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function mapPools(pools: any[]): SubgraphPoolBase[] {\n return pools.map((pool) => ({\n ...pool,\n poolType: pool.poolType || '',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n tokens: (pool.tokens || []).map((token: any) => ({\n ...token,\n weight: token.weight || null,\n })),\n totalWeight: pool.totalWeight || undefined,\n amp: pool.amp || undefined,\n expiryTime: pool.expiryTime ? parseInt(pool.expiryTime) : undefined,\n unitSeconds: pool.unitSeconds ? parseInt(pool.unitSeconds) : undefined,\n principalToken: pool.principalToken || undefined,\n baseToken: pool.baseToken || undefined,\n }));\n}\n\nexport class SubgraphPoolDataService implements PoolDataService {\n private readonly defaultArgs: GraphQLArgs;\n constructor(\n private readonly client: SubgraphClient,\n private readonly provider: Provider,\n private readonly network: BalancerNetworkConfig,\n private readonly sorConfig?: BalancerSdkSorConfig,\n query?: GraphQLQuery\n ) {\n // Default args can be overwritten by passing in a queryArgs object to .getPools\n this.defaultArgs = query?.args || {\n orderBy: Pool_OrderBy.TotalLiquidity,\n orderDirection: OrderDirection.Desc,\n where: {\n swapEnabled: {\n eq: true,\n },\n totalShares: {\n gt: 0.000000000001,\n },\n },\n };\n }\n\n /**\n * Returns pools from the subgraph filtered by queryArgs with on-chain balances\n *\n * @param queryArgs\n * @returns SubgraphPoolBase[]\n */\n async getPools(queryArgs?: GraphQLArgs): Promise {\n const pools = await this.getSubgraphPools(queryArgs);\n\n const filteredPools = pools.filter((p) => {\n if (!this.network.poolsToIgnore) return true;\n const index = this.network.poolsToIgnore.findIndex(\n (id) => id.toLowerCase() === p.id.toLowerCase()\n );\n return index === -1;\n });\n\n const mapped = mapPools(filteredPools);\n\n if (this.sorConfig && this.sorConfig.fetchOnChainBalances === false) {\n return mapped;\n }\n\n const logger = Logger.getInstance();\n logger.time(`fetching on-chain balances for ${mapped.length} pools`);\n\n const onChainBalances = await getOnChainBalances(\n mapped,\n this.network.addresses.contracts.multicall,\n this.network.addresses.contracts.vault,\n this.provider,\n this.network.multicallBatchSize\n );\n\n logger.timeEnd(`fetching on-chain balances for ${mapped.length} pools`);\n\n return onChainBalances;\n }\n\n private async getSubgraphPools(queryArgs?: GraphQLArgs) {\n const formattedQuery = new GraphQLArgsBuilder(\n queryArgs || this.defaultArgs\n ).format(new SubgraphArgsFormatter()) as PoolsQueryVariables;\n\n if (formattedQuery.first) {\n const { pools } = await this.client.Pools(formattedQuery);\n return pools;\n }\n\n const { pool0, pool1000, pool2000 } = await this.client.AllPools(\n formattedQuery\n );\n\n const pools = [...pool0, ...pool1000, ...pool2000];\n\n return pools;\n }\n}\n","import { TokenPriceService } from '@balancer-labs/sor';\nimport { SubgraphClient } from '@/modules/subgraph/subgraph';\nimport { keyBy } from 'lodash';\n\nexport class SubgraphTokenPriceService implements TokenPriceService {\n private readonly weth: string;\n\n constructor(private readonly client: SubgraphClient, weth: string) {\n //the subgraph addresses are all toLowerCase\n this.weth = weth.toLowerCase();\n }\n\n public async getNativeAssetPriceInToken(\n tokenAddress: string\n ): Promise {\n const ethPerToken = await this.getLatestPriceInEthFromSubgraph(\n tokenAddress\n );\n\n if (!ethPerToken) {\n throw Error('No price found in the subgraph');\n }\n\n // We want the price of 1 ETH in terms of the token base units\n return `${1 / ethPerToken}`;\n }\n\n public async getLatestPriceInEthFromSubgraph(\n tokenAddress: string\n ): Promise {\n tokenAddress = tokenAddress.toLowerCase();\n\n const { latestPrices } = await this.client.TokenLatestPrices({\n where: { asset_in: [tokenAddress, this.weth] },\n });\n const pricesKeyedOnId = keyBy(latestPrices, 'id');\n\n //the ids are set as ${asset}-${pricingAsset}\n //first try to find an exact match\n if (pricesKeyedOnId[`${tokenAddress}-${this.weth}`]) {\n return parseFloat(pricesKeyedOnId[`${tokenAddress}-${this.weth}`].price);\n }\n\n //no exact match, try to traverse the path\n const matchingLatestPrices = latestPrices.filter(\n (price) => price.asset === tokenAddress\n );\n\n //pick the first one we match on.\n //There is no timestamp on latestPrice, should get introduced to allow for sorting by latest\n for (const tokenPrice of matchingLatestPrices) {\n const pricingAssetPricedInEth =\n pricesKeyedOnId[`${tokenPrice.pricingAsset}-${this.weth}`];\n\n //1 BAL = 20 USDC, 1 USDC = 0.00025 ETH, 1 BAL = 20 * 0.00025\n if (pricingAssetPricedInEth) {\n return (\n parseFloat(tokenPrice.price) *\n parseFloat(pricingAssetPricedInEth.price)\n );\n }\n }\n\n return null;\n }\n}\n","import { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { BalancerNetworkConfig, BalancerSdkConfig } from '@/types';\nexport function getNetworkConfig(\n config: BalancerSdkConfig\n): BalancerNetworkConfig {\n if (typeof config.network === 'number') {\n const networkConfig = BALANCER_NETWORK_CONFIG[config.network];\n\n return {\n ...networkConfig,\n urls: {\n ...networkConfig.urls,\n subgraph: config.customSubgraphUrl ?? networkConfig.urls.subgraph,\n },\n tenderly: config.tenderly,\n };\n }\n\n return {\n ...config.network,\n urls: {\n ...config.network.urls,\n subgraph: config.customSubgraphUrl ?? config.network.urls.subgraph,\n },\n tenderly: config.network.tenderly,\n };\n}\n","export const POOLS_TO_IGNORE = [\n '0x00c2a4be503869fa751c2dbcb7156cc970b5a8da000000000000000000000477',\n '0x02d928e68d8f10c0358566152677db51e1e2dc8c00000000000000000000051e',\n '0x04248aabca09e9a1a3d5129a7ba05b7f17de768400000000000000000000050e',\n '0x05513ca725b6ce035ca2641075474eb469f05f4c00020000000000000000041f',\n '0x0a0fb4ff697de5ac5b6770cd8ee1b72af80b57cf000000000000000000000496',\n '0x0afbd58beca09545e4fb67772faf3858e610bcd00000000000000000000004b9',\n '0x0d05aac44ac7dd3c7ba5d50be93eb884a057d23400000000000000000000051c',\n '0x11839d635e2f0270da37e8ef4324d4d5d54329570002000000000000000004d8',\n '0x126e7643235ec0ab9c103c507642dc3f4ca23c66000000000000000000000468',\n '0x133d241f225750d2c92948e464a5a80111920331000000000000000000000476',\n '0x159cb00338fb63f263fd6f621df619cef71da9540000000000000000000004d5',\n '0x173063a30e095313eee39411f07e95a8a806014e0002000000000000000003ab',\n '0x1bd2f176a812e312077bca87e37c08432bb09f3e0000000000000000000005a1',\n '0x20b156776114e8a801e9767d90c6ccccc8adf398000000000000000000000499',\n '0x246ffb4d928e394a02e45761fecdba6c2e79b8eb000000000000000000000541',\n '0x25accb7943fd73dda5e23ba6329085a3c24bfb6a000200000000000000000387',\n '0x26c2b83fc8535deead276f5cc3ad9c1a2192e02700020000000000000000056b',\n '0x2b218683178d029bab6c9789b1073aa6c96e517600000000000000000000058c',\n '0x2ba7aa2213fa2c909cd9e46fed5a0059542b36b00000000000000000000003a3',\n '0x2bbf681cc4eb09218bee85ea2a5d3d13fa40fc0c0000000000000000000000fd',\n '0x2e52c64fd319e380cdbcfc4577ea1fda558a32e40002000000000000000005ba',\n '0x2f4eb100552ef93840d5adc30560e5513dfffacb000000000000000000000334',\n '0x2ff1a9dbdacd55297452cfd8a4d94724bc22a5f7000000000000000000000484',\n '0x3035917be42af437cbdd774be26b9ec90a2bd677000200000000000000000543',\n '0x331d50e0b00fc1c32742f151e56b9b616227e23e00000000000000000000047c',\n '0x334c96d792e4b26b841d28f53235281cec1be1f200020000000000000000038a',\n '0x335d1709d4da9aca59d16328db5cd4ea66bfe06b0000000000000000000004d6',\n '0x395d8a1d9ad82b5abe558f8abbfe183b27138af40000000000000000000004e5',\n '0x3bb22fc9033b802f2ac47c18885f63476f158afc000000000000000000000483',\n '0x3c640f0d3036ad85afa2d5a9e32be651657b874f00000000000000000000046b',\n '0x3cdae4f12a67ba563499e102f309c73213cb241c000000000000000000000335',\n '0x3dbb8d974b82e82ce79c20c0f5995f4f1f533ede000000000000000000000470',\n '0x3f7a7fd7f214be45ec26820fd01ac3be4fc75aa70002000000000000000004c5',\n '0x3fcb7085b8f2f473f80bf6d879cae99ea4de934400000000000000000000056d',\n '0x41503c9d499ddbd1dcdf818a1b05e9774203bf46000000000000000000000594',\n '0x4228290ee9cab692938ff0b4ba303fbcdb68e9f200020000000000000000057d',\n '0x454ed96955d04d2f5cdd05e0fd1c77975bfe5307000000000000000000000410',\n '0x481c5fc05d63a58aa2f0f2aa417c021b5d419cb200000000000000000000056a',\n '0x483006684f422a9448023b2382615c57c5ecf18f000000000000000000000488',\n '0x4a82b580365cff9b146281ab72500957a849abdc000000000000000000000494',\n '0x4c81255cc9ed7062180ea99962fe05ac0d57350b0000000000000000000005a3',\n '0x4c8d2e60863e8d7e1033eda2b3d84e92a641802000000000000000000000040f',\n '0x4cbde5c4b4b53ebe4af4adb85404725985406163000000000000000000000595',\n '0x4ce0bd7debf13434d3ae127430e9bd4291bfb61f00020000000000000000038b',\n '0x4ce277df0feb5b4d07a0ca2adcf5326e4005239d000000000000000000000518',\n '0x4fd4687ec38220f805b6363c3c1e52d0df3b5023000200000000000000000473',\n '0x4fd63966879300cafafbb35d157dc5229278ed230000000000000000000000e9',\n '0x50cf90b954958480b8df7958a9e965752f62712400000000000000000000046f',\n '0x53bc3cba3832ebecbfa002c12023f8ab1aa3a3a0000000000000000000000411',\n '0x5a6a8cffb4347ff7fc484bf5f0f8a2e234d34255000200000000000000000275',\n '0x5b3240b6be3e7487d61cd1afdfc7fe4fa1d81e6400000000000000000000037b',\n '0x60683b05e9a39e3509d8fdb9c959f23170f8a0fa000000000000000000000489',\n '0x60d604890feaa0b5460b28a424407c24fe89374a0000000000000000000004fc',\n '0x639883476960a23b38579acfd7d71561a0f408cf000200000000000000000505',\n '0x652d486b80c461c397b0d95612a404da936f3db30000000000000000000000e7',\n '0x6667c6fa9f2b3fc1cc8d85320b62703d938e43850000000000000000000004fb',\n '0x6a1eb2e9b45e772f55bd9a34659a04b6f75da68700000000000000000000040d',\n '0x6c56e72c551b5ac4bf54a620a76077ca768c8fe40002000000000000000004da',\n '0x70b7d3b3209a59fb0400e17f67f3ee8c37363f4900020000000000000000018f',\n '0x7337224d59cb16c2dc6938cd45a7b2c60c865d6a0000000000000000000004d4',\n '0x74cbfaf94a3577c539a9dcee9870a6349a33b34f000000000000000000000534',\n '0x779d01f939d78a918a3de18cc236ee89221dfd4e0000000000000000000004c7',\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe',\n '0x804cdb9116a10bb78768d3252355a1b18067bf8f0000000000000000000000fb',\n '0x813e3fe1761f714c502d1d2d3a7cceb33f37f59d00000000000000000000040c',\n '0x82698aecc9e28e9bb27608bd52cf57f704bd1b83000000000000000000000336',\n '0x8a6b25e33b12d1bb6929a8793961076bd1f9d3eb0002000000000000000003e8',\n '0x8e6ec57a822c2f527f2df7c7d7d361df3e7530a1000000000000000000000498',\n '0x8f4063446f5011bc1c9f79a819efe87776f23704000000000000000000000197',\n '0x9001cbbd96f54a658ff4e6e65ab564ded76a543100000000000000000000050a',\n '0x9210f1204b5a24742eba12f710636d76240df3d00000000000000000000000fc',\n '0x9516a2d25958edb8da246a320f2c7d94a0dbe25d000000000000000000000519',\n '0x959216bb492b2efa72b15b7aacea5b5c984c3cca000200000000000000000472',\n '0x968024662b9566b42d78af23a0f441bc8723fa83000200000000000000000418',\n '0x99c88ad7dc566616548adde8ed3effa730eb6c3400000000000000000000049a',\n '0x9b1c8407a360443a9e5eca004713e4088fab8ac0000000000000000000000497',\n '0x9b692f571b256140a39a34676bffa30634c586e100000000000000000000059d',\n '0x9d7f992c900fbea0ec314bdd71b7cc1becf76a33000200000000000000000573',\n '0x9fb771d530b0ceba5160f7bfe2dd1e8b8aa1340300000000000000000000040e',\n '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d',\n '0xa1697f9af0875b63ddc472d6eebada8c1fab85680000000000000000000004f9',\n '0xa3823e50f20982656557a4a6a9c06ba5467ae9080000000000000000000000e6',\n '0xa718042e5622099e5f0ace4e7122058ab39e1bbe000200000000000000000475',\n '0xa8b103a10a94f4f2d7ed2fdcd5545e807557330700000000000000000000048e',\n '0xac5b4ef7ede2f2843a704e96dcaa637f4ba3dc3f00000000000000000000051d',\n '0xac976bb42cb0c85635644e8c7c74d0e0286aa61c0000000000000000000003cb',\n '0xae37d54ae477268b9997d4161b96b8200755935c000000000000000000000337',\n '0xae8535c23afedda9304b03c68a3563b75fc8f92b0000000000000000000005a0',\n '0xb0f75e97a114a4eb4a425edc48990e6760726709000000000000000000000198',\n '0xb5e3de837f869b0248825e0175da73d4e8c3db6b000200000000000000000474',\n '0xb841b062ea8ccf5c4cb78032e91de4ae875560420002000000000000000005b7',\n '0xb9bd68a77ccf8314c0dfe51bc291c77590c4e9e6000200000000000000000385',\n '0xbb6881874825e60e1160416d6c426eae65f2459e000000000000000000000592',\n '0xbc0f2372008005471874e426e86ccfae7b4de79d000000000000000000000485',\n '0xbf2ef8bdc2fc0f3203b3a01778e3ec5009aeef3300000000000000000000058d',\n '0xbfa413a2ff0f20456d57b643746133f54bfe0cd20000000000000000000004c3',\n '0xc2b021133d1b0cf07dba696fd5dd89338428225b000000000000000000000598',\n '0xc443c15033fcb6cf72cc24f1bda0db070ddd9786000000000000000000000593',\n '0xc50d4347209f285247bda8a09fc1c12ce42031c3000000000000000000000590',\n '0xc5dc1316ab670a2eed5716d7f19ced321191f38200000000000000000000056e',\n '0xc8c79fcd0e859e7ec81118e91ce8e4379a481ee6000000000000000000000196',\n '0xcaa052584b462198a5a9356c28bce0634d65f65c0000000000000000000004db',\n '0xcbfa4532d8b2ade2c261d3dd5ef2a2284f7926920000000000000000000004fa',\n '0xcfae6e251369467f465f13836ac8135bd42f8a56000000000000000000000591',\n '0xd4e7c1f3da1144c9e2cfd1b015eda7652b4a439900000000000000000000046a',\n '0xd6e355036f41dc261b3f1ed3bbc6003e87aadb4f000000000000000000000495',\n '0xd7edb56f63b2a0191742aea32df1f98ca81ed9c600000000000000000000058e',\n '0xd997f35c9b1281b82c8928039d14cddab5e13c2000000000000000000000019c',\n '0xdba274b4d04097b90a72b62467d828cefd708037000000000000000000000486',\n '0xdc063deafce952160ec112fa382ac206305657e60000000000000000000004c4',\n '0xdec02e6642e2c999af429f5ce944653cad15e093000000000000000000000469',\n '0xe03af00fabe8401560c1ff7d242d622a5b601573000000000000000000000493',\n '0xe0fcbf4d98f0ad982db260f86cf28b49845403c5000000000000000000000504',\n '0xe2d16b0a39f3fbb4389a0e8f1efcbecfb3d1e6e10000000000000000000005a7',\n '0xe4dc3c1998ac693d68f4c77476d7c815694c3e94000200000000000000000416',\n '0xe6bcc79f328eec93d4ec8f7ed35534d9ab549faa0000000000000000000000e8',\n '0xe8c56405bc405840154d9b572927f4197d110de10000000000000000000005a4',\n '0xeb486af868aeb3b6e53066abc9623b1041b42bc000000000000000000000046c',\n '0xeb567dde03f3da7fe185bdacd5ab495ab220769d000000000000000000000548',\n '0xec3626fee40ef95e7c0cbb1d495c8b67b34d398300000000000000000000053d',\n '0xf22ff21e17157340575158ad7394e068048dd98b0000000000000000000004b8',\n '0xf57c794f42da72b38c8f610ff3b5e8502e48cbde00000000000000000000055c',\n '0xf71d0774b214c4cf51e33eb3d30ef98132e4dbaa00000000000000000000046e',\n '0xfa24a90a3f2bbe5feea92b95cd0d14ce709649f900000000000000000000058f',\n '0xfd11ccdbdb7ab91cb9427a6d6bf570c95876d1950000000000000000000004c2',\n '0xfebb0bbf162e64fb9d0dfe186e517d84c395f016000000000000000000000502',\n '0xfef969638c52899f91781f1be594af6f40b99bad00000000000000000000047b',\n '0x02e139d53ebf4033bf78ab66c6a1e7f1f204487f0002000000000000000009f9',\n '0x03090a9811181a2afe830a3a0b467698ccf3a8b1000000000000000000000bf5',\n '0x0320c1c5b6df19a194d48882aaec1c72940081d9000000000000000000000a7d',\n '0x04b54ea92d73de2d62d651db7d9778f0c49157d8000200000000000000000ba2',\n '0x0503dd6b2d3dd463c9bef67fb5156870af63393e00000000000000000000042e',\n '0x0889b240a5876aae745ac19f1771853671dc5d36000000000000000000000b3f',\n '0x0bc54e914f53f98d16035f4f0d948f3e09c2fac0000200000000000000000bac',\n '0x0c06e87c7b88d998f645b91c1f53b51294b12bca000100000000000000000bb9',\n '0x10b040038f87219d9b42e025e3bd9b8095c87dd9000000000000000000000b11',\n '0x117a3d474976274b37b7b94af5dcade5c90c6e85000000000000000000000aca',\n '0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000a5f',\n '0x1379b816b9be611431d693290289c204720ca56d000100000000000000000b6f',\n '0x150e7b885bdfce974f2abe88a72fdbd692175c6f0002000000000000000009fd',\n '0x178e029173417b1f9c8bc16dcec6f697bc323746000000000000000000000758',\n '0x1aafc31091d93c3ff003cff5d2d8f7ba2e7284250000000000000000000003b3',\n '0x216690738aac4aa0c4770253ca26a28f0115c595000000000000000000000b2c',\n '0x216d6db0c28204014618482c369d7fbf0a8f3232000100000000000000000b60',\n '0x230ecdb2a7cee56d6889965a023aa0473d6da507000000000000000000000bf3',\n '0x252ff6a3a6fd7b5e8e999de8e3f5c3b306ed1401000200000000000000000bec',\n '0x25e57f4612912614e6c99616bd2abb9b5ae71e99000000000000000000000bf0',\n '0x2645b13fd2c5295296e94a76280b968bdcbbdfed000000000000000000000c11',\n '0x284eb68520c8fa83361c1a3a5910aec7f873c18b000000000000000000000ac9',\n '0x2c8dbe8eb86135d9f2f26d196748c088d47f73e7000200000000000000000a29',\n '0x31bccf9e28b94e5dacebaa67fe8bc1603cecd904000000000000000000000a01',\n '0x341068a547c3cde3c09e338714010dd01b32f93f000200000000000000000a34',\n '0x3db543faf7a92052de7860c5c9debabee59ed5bd000000000000000000000a62',\n '0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd00000000000000000000070d',\n '0x3efb91c4f9b103ee45885695c67794591916f34e000200000000000000000b43',\n '0x402cfdb7781fa85d52f425352661128250b79e12000000000000000000000be3',\n '0x43894de14462b421372bcfe445fa51b1b4a0ff3d000000000000000000000b36',\n '0x4739e50b59b552d490d3fdc60d200977a38510c0000000000000000000000b10',\n '0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b',\n '0x4a0b73f0d13ff6d43e304a174697e3d5cfd310a400020000000000000000091c',\n '0x4a77ef015ddcd972fd9ba2c7d5d658689d090f1a000000000000000000000b38',\n '0x4ae3661afa119892f0cc8c43edaf6a94989ac171000000000000000000000c06',\n '0x4ccb966d8246240afb7a1a24628efb930870b1c40002000000000000000009fc',\n '0x52cc8389c6b93d740325729cc7c958066cee4262000000000000000000000b0f',\n '0x5b77107fcdf2b41903bab2bc555d4fc14cf7667d000000000000000000000b32',\n '0x5bae72b75caab1f260d21bc028c630140607d6e8000000000000000000000ac6',\n '0x600bd01b6526611079e12e1ff93aba7a3e34226f0000000000000000000009e4',\n '0x63ce19ccd39930725b8a3d2733627804718ab83d000000000000000000000bf2',\n '0x64efad69f099813021b41f4cac6e749fd55e188f000000000000000000000b39',\n '0x6933ec1ca55c06a894107860c92acdfd2dd8512f000000000000000000000428',\n '0x6abe4e7a497b8293c258389c1b00d177e4f257ed00010000000000000000080d',\n '0x6c8c7fc50247a47038015eb1fd5dc105d05dafba000200000000000000000ba0',\n '0x7079a25dec33be61bbd81b2fb69b468e80d3e72c0000000000000000000009ff',\n '0x71bd10c2a590b5858f5576550c163976a48af906000000000000000000000b27',\n '0x7c82a23b4c48d796dee36a9ca215b641c6a8709d000000000000000000000acd',\n '0x7f4f4942f2a14b6ab7b08b10ada1aacede4ee8d4000200000000000000000b44',\n '0x86aef31951e0a3a54333bd9e72f9a95587d058c5000200000000000000000912',\n '0x882c7a84231484b3e9f3fd45ac04b1eb5d35b076000200000000000000000a91',\n '0x894c82800526e0391e709c0983a5aea3718b7f6d000000000000000000000ac5',\n '0x89b28a9494589b09dbccb69911c189f74fdadc5a000000000000000000000b33',\n '0x89bb15076c9f2d86aa98ec6cffc1a71e31c38953000000000000000000000bf1',\n '0x89f1146fee52b5d9166e9c83cc388b6d8f69f1380001000000000000000009e7',\n '0x8a819a4cabd6efcb4e5504fe8679a1abd831dd8f00000000000000000000042d',\n '0x8b58a1e7fff52001c22386c2918d45938a6a9be30001000000000000000008d9',\n '0x8b8225bfedebaf1708c55743acb4ad43fd4d0f21000200000000000000000918',\n '0x8fbd0f8e490735cfc3abf4f29cbddd5c3289b9a7000000000000000000000b5b',\n '0x8fd39252d683fdb60bddd4df4b53c9380b496d59000200000000000000000b45',\n '0x9321e2250767d79bab5aa06daa8606a2b3b7b4c5000000000000000000000bf4',\n '0x949a12b95ec5b80c375b98963a5d6b33b0d0efff0002000000000000000009fe',\n '0x9a020bdc2faff5bd24c6acc2020d01ff9f2c627a000000000000000000000ae2',\n '0x9cf9358300e34bf9373d30129a1e718d8d058b54000200000000000000000913',\n '0x9e34631547adcf2f8cefa0f5f223955c7b137571000000000000000000000ad5',\n '0xa5a935833f6a5312715f182733eab088452335d7000100000000000000000bee',\n '0xa5fe91dde37d8bf2dacacc0168b115d28ed03f84000000000000000000000b35',\n '0xa8bf1c584519be0184311c48adbdc4c15cb2e8c1000000000000000000000bf6',\n '0xab269164a10fab22bc87c39946da06c870b172d6000000000000000000000bfc',\n '0xac2cae8d2f78a4a8f92f20dbe74042cd0a8d5af3000000000000000000000be2',\n '0xae646817e458c0be890b81e8d880206710e3c44e000000000000000000000acb',\n '0xaef2c171dbe64b0c18977e16e70bfd29d4ee0256000000000000000000000ac8',\n '0xb0c830dceb4ef55a60192472c20c8bf19df03488000000000000000000000be1',\n '0xb266ac3b7c98d7bcb28731dac0ef42dba1b276be000000000000000000000be4',\n '0xb371aa09f5a110ab69b39a84b5469d29f9b22b76000000000000000000000b37',\n '0xb3d658d5b95bf04e2932370dd1ff976fe18dd66a000000000000000000000ace',\n '0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e',\n '0xb59be8f3c85a9dd6e2899103b6fbf6ea405b99a4000000000000000000000b34',\n '0xb878ecce26838fbba4f78cb5b791a0e09152c067000000000000000000000427',\n '0xb973ca96a3f0d61045f53255e319aedb6ed4924000000000000000000000042f',\n '0xbd4e35784c832d0f9049b54cb3609e5907c5b495000100000000000000000b14',\n '0xc55ec796a4debe625d95436a3531f4950b11bdcf000000000000000000000b3e',\n '0xc7e6389e364f4275eb442ef215ed21877028e2af000000000000000000000ac7',\n '0xc83b55bbd005f1f84906545fcdb145dee53523e0000200000000000000000b30',\n '0xcb21a9e647c95127ed784626485b3104cb28d0e7000000000000000000000425',\n '0xd00f9ca46ce0e4a63067c4657986f0167b0de1e5000000000000000000000b42',\n '0xd2f3b9e67c69762dd1c88f1d3dadd1649a190761000200000000000000000bf7',\n '0xd4accb350f9cf59fe3cf7a5ee6ed9ace6a568ea9000200000000000000000b75',\n '0xda1cd1711743e57dd57102e9e61b75f3587703da000000000000000000000acc',\n '0xdae301690004946424e41051ace1791083be42a1000000000000000000000b40',\n '0xde0a77ab6689b980c30306b10f9131a007e1af81000200000000000000000ba1',\n '0xe051605a83deae38d26a7346b100ef1ac2ef8a0b0000000000000000000003ce',\n '0xe1fb90d0d3b47e551d494d7ebe8f209753526b01000000000000000000000ac4',\n '0xe2272cddb2cc408e79e02a73d1db9acc24a843d5000200000000000000000ba7',\n '0xe2dc0e0f2c358d6e31836dee69a558ab8d1390e70000000000000000000009fa',\n '0xe4885ed2818cc9e840a25f94f9b2a28169d1aea7000000000000000000000b29',\n '0xe6909c2f18a29d97217a6146f045e1780606991f000100000000000000000bfe',\n '0xe78b25c06db117fdf8f98583cdaaa6c92b79e917000000000000000000000b2b',\n '0xea11645ac7d8f2def94c9d8d86bd766296c9b6b6000000000000000000000b3a',\n '0xeb480dbbdd921cd6c359e4cc4c65ddea6395e2a1000200000000000000000946',\n '0xed35f28f837e96f81240ebb82e0e3f518c7e8a2f000100000000000000000bb5',\n '0xf0211cceebe6fcc45052b4e57ee95d233f5669d2000100000000000000000c01',\n '0xf22a66046b5307842f21b311ecb4c462c24c0635000000000000000000000b15',\n '0xf28f17be00f8ca3c9b7f66a4aad5513757fb3341000200000000000000000b5a',\n '0xf42ed61450458ee4620f5ef4f29adb25a6ef0fb6000000000000000000000bf8',\n '0xf48f01dcb2cbb3ee1f6aab0e742c2d3941039d56000000000000000000000445',\n '0xf93579002dbe8046c43fefe86ec78b1112247bb8000000000000000000000759',\n '0xf984eb2b8a7ef780245a797a2fccd82f346409ca000000000000000000000a59',\n '0xfa2c0bd8327c99db5bde4c9e9e5cbf30946351bb000000000000000000000948',\n '0xff4ce5aaab5a627bf82f4a571ab1ce94aa365ea600000000000000000000075a',\n '0x1ac55c31dac78ca943cb8ebfca5945ce09e036e2000000000000000000000024',\n '0x225e0047671939a8d78e08ebd692788abe63f15c000000000000000000000009',\n '0x41211bba6d37f5a74b22e667533f080c7c7f3f1300000000000000000000000b',\n '0x4de21b365d6543661d0e105e579a34b963862497000200000000000000000045',\n '0x581ec1f5e7ced12b186deae32256adb53bdd5b08000000000000000000000001',\n '0x66f33ae36dd80327744207a48122f874634b3ada000100000000000000000013',\n '0xa3ed6f78edc29f69df8a0d16b1d1ccf9871f918c000000000000000000000032',\n '0xa611a551b95b205ccd9490657acf7899daee5db700000000000000000000002e',\n '0xb95829adbacd8af89e291dee78bc09e24de51d6b000000000000000000000043',\n '0xb973ca96a3f0d61045f53255e319aedb6ed49240000200000000000000000011',\n '0xba1a5b19d09a79dada039b1f974015c5a989d5fd000100000000000000000046',\n '0xbb9cd48d33033f5effbedec9dd700c7d7e1dcf5000000000000000000000000e',\n '0xd16f72b02da5f51231fde542a8b9e2777a478c8800000000000000000000000f',\n '0xd4015683b8153666190e0b2bec352580ebc4caca00000000000000000000000d',\n '0xe15cac1df3621e001f76210ab12a7f1a1691481f000000000000000000000044',\n '0xe7f88d7d4ef2eb18fcf9dd7216ba7da1c46f3dd600000000000000000000000a',\n '0xf48f01dcb2cbb3ee1f6aab0e742c2d3941039d56000200000000000000000012',\n '0xfedb19ec000d38d92af4b21436870f115db22725000000000000000000000010',\n '0xffff76a3280e95dc855696111c2562da09db2ac000000000000000000000000c',\n '0x00fcd3d55085e998e291a0005cedecf58ac14c4000020000000000000000047f',\n '0x077794c30afeccdf5ad2abc0588e8cee7197b71a000000000000000000000352',\n '0x117a3d474976274b37b7b94af5dcade5c90c6e85000000000000000000000381',\n '0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000353',\n '0x19b1c92631405a0a9495ccba0becf4f2e8e908bd000000000000000000000410',\n '0x1e550b7764da9638fdd32c8a701364de31f45ee800000000000000000000047c',\n '0x1fa7f727934226aedab636d62a084931b97d366b000000000000000000000411',\n '0x23ca0306b21ea71552b148cf3c4db4fc85ae19290000000000000000000000c9',\n '0x284eb68520c8fa83361c1a3a5910aec7f873c18b000000000000000000000380',\n '0x2a96254ca32020b20ed3506f8f75318da24709f9000200000000000000000456',\n '0x36942963e3b6f37ecc45a4e72349558514233f0000000000000000000000048a',\n '0x3f53a862919ccfa023cb6ace91378a79fb0f6bf500000000000000000000040f',\n '0x40af308e3d07ec769d85eb80afb116525ff4ac99000000000000000000000485',\n '0x418de00ae109e6f874d872658767866d680eaa1900000000000000000000047d',\n '0x45c4d1376943ab28802b995acffc04903eb5223f000000000000000000000470',\n '0x4689122d360c4725d244c5cfea22861333d862e6000100000000000000000468',\n '0x4739e50b59b552d490d3fdc60d200977a38510c0000000000000000000000409',\n '0x49a0e3334496442a9706e481617724e7e37eaa080000000000000000000003ff',\n '0x519cce718fcd11ac09194cff4517f12d263be067000000000000000000000382',\n '0x52cc8389c6b93d740325729cc7c958066cee4262000000000000000000000408',\n '0x567ecfcb22205d279bb8eed3e066989902bf03d5000000000000000000000452',\n '0x585d95df0231fa08aeee35ff0c16b92fd0ecdc3300020000000000000000045f',\n '0x5a7f39435fd9c381e4932fa2047c9a5136a5e3e7000000000000000000000400',\n '0x5bae72b75caab1f260d21bc028c630140607d6e8000000000000000000000350',\n '0x6cb787a419c3e6ee2e9ff365856c29cd10659113000000000000000000000474',\n '0x7c82a23b4c48d796dee36a9ca215b641c6a8709d000000000000000000000406',\n '0x81fc12c60ee5b753cf5fd0adc342dfb5f3817e3200000000000000000000035d',\n '0x894c82800526e0391e709c0983a5aea3718b7f6d00000000000000000000034f',\n '0x970712708a08e8fb152be4d81b2dc586923f5369000200000000000000000479',\n '0x9bf7c3b63c77b4b4f2717776f15a4bec1b532a280000000000000000000000c8',\n '0x9cebf13bb702f253abf1579294694a1edad00eaa000000000000000000000486',\n '0x9e34631547adcf2f8cefa0f5f223955c7b137571000000000000000000000407',\n '0x9fb7d6dcac7b6aa20108bad226c35b85a9e31b63000200000000000000000412',\n '0xa1ea76c42b2938cfa9abea12357881006c52851300000000000000000000048f',\n '0xa50f89e9f439fde2a6fe05883721a00475da3c4500000000000000000000048b',\n '0xa612b6aed2e7ca1a3a4f23fbca9128461bbb7718000000000000000000000274',\n '0xa8af146d79ac0bb981e4e0d8b788ec5711b1d5d000000000000000000000047b',\n '0xad28940024117b442a9efb6d0f25c8b59e1c950b00000000000000000000046f',\n '0xae646817e458c0be890b81e8d880206710e3c44e00000000000000000000039d',\n '0xaef2c171dbe64b0c18977e16e70bfd29d4ee0256000000000000000000000351',\n '0xbbf9d705b75f408cfcaee91da32966124d2c6f7d00000000000000000000047e',\n '0xbd724eb087d4cc0f61a5fed1fffaf937937e14de000000000000000000000473',\n '0xbe0f30217be1e981add883848d0773a86d2d2cd4000000000000000000000471',\n '0xc46be4b8bb6b5a3d3120660efae9c5416318ed40000000000000000000000472',\n '0xc69771058481551261709d8db44977e9afde645000010000000000000000042a',\n '0xc6eee8cb7643ec2f05f46d569e9ec8ef8b41b389000000000000000000000475',\n '0xcba9ff45cfb9ce238afde32b0148eb82cbe635620000000000000000000003fd',\n '0xcf8b555b7754556cf2ac2165e77ee23ed8517d7900020000000000000000045e',\n '0xd0dc20e6342db2de82692b8dc842301ff9121805000200000000000000000454',\n '0xd3d5d45f4edf82ba0dfaf061d230766032a10e07000200000000000000000413',\n '0xd6d20527c7b0669989ee082b9d3a1c63af742290000000000000000000000483',\n '0xda1cd1711743e57dd57102e9e61b75f3587703da0000000000000000000003fc',\n '0xe1fb90d0d3b47e551d494d7ebe8f209753526b0100000000000000000000034e',\n '0xee02583596aee94cccb7e8ccd3921d955f17982a00000000000000000000040a',\n '0xf984eb2b8a7ef780245a797a2fccd82f346409ca00000000000000000000034d',\n '0xff8f84e8c87532af96aef5582ee451572233678b000200000000000000000478',\n '0x054e7b0c73e1ee5aed6864fa511658fc2b54bcaa000000000000000000000015',\n '0x3f1a2c4a3a751f6626bd90ef16e104f0772d4d6b00020000000000000000001b',\n '0x7275c131b1f67e8b53b4691f92b0e35a4c1c6e22000000000000000000000010',\n '0xa154009870e9b6431305f19b09f9cfd7284d4e7a000000000000000000000013',\n '0xa1d14d922a575232066520eda11e27760946c991000000000000000000000012',\n '0xa826a114b0c7db4d1ff4a4be845a78998c64564c000000000000000000000008',\n '0xea67626e1f0b59e0d172a04f5702ef90bcdf440c00000000000000000000000f',\n '0xeb496161099d45b3ea4892408ef745c6182eb56e00000000000000000000000e',\n '0xece571847897fd61e764d455dc15cf1cd9de8d6f000000000000000000000014',\n '0xed3e2f496cbcd8e212192fb8d1499842f04a0d19000000000000000000000009',\n '0x02c9dcb975262719a61f9b40bdf0987ead9add3a000000000000000000000006',\n '0x16c9a4d841e88e52b51936106010f27085a529ec00000000000000000000000c',\n '0x32be2d0ddeaf3333501b24a28668ce373ba8e763000200000000000000000014',\n '0x32f03464fdf909fdf3798f87ff3712b10c59bd86000000000000000000000005',\n '0x4b718e0e2fea1da68b763cd50c446fba03ceb2ea00000000000000000000000b',\n '0x68a69c596b3839023c0e08d09682314f582314e5000200000000000000000011',\n '0x6f34a44fce1506352a171232163e7716dd073ade000200000000000000000015',\n '0x9e2d87f904862671eb49cb358e74284762cc9f42000200000000000000000013',\n '0xac4b72c01072a52b73ca71105504f1372efcce0d000000000000000000000003',\n '0xbfd65c6160cfd638a85c645e6e6d8acac5dac935000000000000000000000004',\n '0xe274c9deb6ed34cfe4130f8d0a8a948dea5bb28600000000000000000000000d',\n];\n","import { TokenPriceService } from '@balancer-labs/sor';\nimport { gql, request } from 'graphql-request';\nimport { Network } from '@/types';\n\nexport class ApiTokenPriceService implements TokenPriceService {\n private chainKey: string;\n\n private balancerApiUrl = 'https://api-v3.balancer.fi/';\n\n private tokenPriceQuery = gql`\n query queryTokenPrices($chainKey: GqlChain!) {\n tokenGetCurrentPrices(chains: [$chainKey]) {\n address\n price\n }\n }\n `;\n\n constructor(private readonly chainId: number) {\n this.chainKey = Network[chainId];\n }\n async getNativeAssetPriceInToken(tokenAddress: string): Promise {\n const { tokenGetCurrentPrices: tokenPrices } = await request(\n this.balancerApiUrl,\n this.tokenPriceQuery,\n {\n chainKey: this.chainKey,\n }\n );\n const tokenPriceUsd = (\n tokenPrices as { address: string; price: number }[]\n ).find(\n ({ address }) => address.toLowerCase() === tokenAddress.toLowerCase()\n );\n if (!tokenPriceUsd) {\n throw new Error('Token Price not found in the API');\n }\n const nativeAssetPriceUsd = (\n tokenPrices as { address: string; price: number }[]\n ).find(\n ({ address }) =>\n address.toLowerCase() ===\n NativeAssetAddress[this.chainKey as keyof typeof NativeAssetAddress]\n );\n if (!nativeAssetPriceUsd) {\n throw new Error('Native Token Price not found in the API');\n }\n const tokenPriceInNativeAsset =\n tokenPriceUsd.price / nativeAssetPriceUsd.price;\n return String(tokenPriceInNativeAsset);\n }\n}\n\nenum NativeAssetAddress {\n MAINNET = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n POLYGON = '0x0000000000000000000000000000000000001010',\n ARBITRUM = '0x912ce59144191c1204e64559fe8253a0e49e6548',\n AVALANCHE = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n BASE = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n FANTOM = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n GNOSIS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n OPTIMISM = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n ZKEVM = '0xa2036f0538221a77a3937f1379699f44945018d0',\n}\n","export function getCoingeckoApiBaseUrl(isDemoApi = true): string {\n if (isDemoApi) {\n return 'https://api.coingecko.com/api/v3/';\n }\n return 'https://pro-api.coingecko.com/api/v3/';\n}\n\nexport function getCoingeckoApiKeyHeaderName(isDemoApi = true): string {\n if (isDemoApi) {\n return 'x-cg-demo-api-key';\n }\n return 'x-cg-pro-api-key';\n}\n","import { TokenPriceService } from '@balancer-labs/sor';\nimport axios from 'axios';\nimport { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { Network, BalancerNetworkConfig, CoingeckoConfig } from '@/types';\nimport {\n getCoingeckoApiBaseUrl,\n getCoingeckoApiKeyHeaderName,\n} from '@/lib/utils/coingecko-api';\n\nexport class CoingeckoTokenPriceService implements TokenPriceService {\n private readonly urlBase: string;\n private readonly apiKey: string;\n private readonly coingeckoApiKeyHeaderName: string;\n constructor(private readonly chainId: number, coingecko: CoingeckoConfig) {\n this.urlBase = `${getCoingeckoApiBaseUrl(\n coingecko?.isDemoApiKey\n )}simple/token_price/${this.platformId}?vs_currencies=${\n this.nativeAssetId\n }`;\n this.coingeckoApiKeyHeaderName = getCoingeckoApiKeyHeaderName(\n coingecko?.isDemoApiKey\n );\n this.apiKey = coingecko.coingeckoApiKey;\n }\n\n public async getNativeAssetPriceInToken(\n tokenAddress: string\n ): Promise {\n const ethPerToken = await this.getTokenPriceInNativeAsset(tokenAddress);\n\n // We get the price of token in terms of ETH\n // We want the price of 1 ETH in terms of the token base units\n return `${1 / parseFloat(ethPerToken)}`;\n }\n\n /**\n * @dev Assumes that the native asset has 18 decimals\n * @param tokenAddress - the address of the token contract\n * @returns the price of 1 ETH in terms of the token base units\n */\n async getTokenPriceInNativeAsset(tokenAddress: string): Promise {\n const endpoint = `${this.urlBase}&contract_addresses=${tokenAddress}`;\n\n const { data } = await axios.get(endpoint, {\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '',\n },\n });\n\n if (\n data[tokenAddress.toLowerCase()] === undefined ||\n data[tokenAddress.toLowerCase()][this.nativeAssetId] === undefined\n ) {\n throw Error('No price returned from Coingecko');\n }\n\n return data[tokenAddress.toLowerCase()][this.nativeAssetId];\n }\n\n private get platformId(): string {\n const networkConfig: BalancerNetworkConfig =\n BALANCER_NETWORK_CONFIG[this.chainId as Network];\n return networkConfig.thirdParty.coingecko.platformId || '2';\n }\n\n private get nativeAssetId(): string {\n const networkConfig: BalancerNetworkConfig =\n BALANCER_NETWORK_CONFIG[this.chainId as Network];\n return networkConfig.thirdParty.coingecko.nativeAssetId || '';\n }\n}\n","import { SOR, SorConfig, TokenPriceService } from '@balancer-labs/sor';\nimport { Provider, JsonRpcProvider } from '@ethersproject/providers';\nimport { SubgraphPoolDataService } from './pool-data/subgraphPoolDataService';\nimport {\n SubgraphClient,\n createSubgraphClient,\n} from '@/modules/subgraph/subgraph';\nimport {\n BalancerNetworkConfig,\n BalancerSdkConfig,\n BalancerSdkSorConfig,\n CoingeckoConfig,\n} from '@/types';\nimport { SubgraphTokenPriceService } from './token-price/subgraphTokenPriceService';\nimport { getNetworkConfig } from '@/modules/sdk.helpers';\nimport { POOLS_TO_IGNORE } from '@/lib/constants/poolsToIgnore';\nimport { ApiTokenPriceService } from '@/modules/sor/token-price/apiTokenPriceService';\nimport { CoingeckoTokenPriceService } from '@/modules/sor/token-price/coingeckoTokenPriceService';\n\nexport class Sor extends SOR {\n constructor(sdkConfig: BalancerSdkConfig) {\n const network = getNetworkConfig(sdkConfig);\n const sorConfig = Sor.getSorConfig(sdkConfig);\n const sorNetworkConfig = Sor.getSorNetworkConfig(network);\n const provider = new JsonRpcProvider(\n sdkConfig.rpcUrl,\n sdkConfig.network as number\n );\n const subgraphClient = createSubgraphClient(network.urls.subgraph);\n\n const poolDataService = Sor.getPoolDataService(\n network,\n sorConfig,\n provider,\n subgraphClient\n );\n\n const tokenPriceService = Sor.getTokenPriceService(\n network,\n sorConfig,\n subgraphClient,\n sdkConfig.coingecko\n );\n\n super(provider, sorNetworkConfig, poolDataService, tokenPriceService);\n }\n\n private static getSorConfig(config: BalancerSdkConfig): BalancerSdkSorConfig {\n return {\n tokenPriceService: 'api',\n poolDataService: 'subgraph',\n fetchOnChainBalances: true,\n ...config.sor,\n };\n }\n\n private static getSorNetworkConfig(\n network: BalancerNetworkConfig\n ): SorConfig {\n return {\n ...network,\n vault: network.addresses.contracts.vault,\n weth: network.addresses.tokens.wrappedNativeAsset,\n lbpRaisingTokens: network.addresses.tokens?.lbpRaisingTokens,\n wETHwstETH: network.pools.wETHwstETH,\n connectingTokens: network.sorConnectingTokens,\n triPathMidPoolIds: network.sorTriPathMidPoolIds,\n };\n }\n\n private static getPoolDataService(\n network: BalancerNetworkConfig,\n sorConfig: BalancerSdkSorConfig,\n provider: Provider,\n subgraphClient: SubgraphClient\n ) {\n // For SOR we want to ignore all configured pools (for Vault/Simulation we don't)\n const allPoolsToIgnore = [\n ...(network.poolsToIgnore ?? []),\n ...POOLS_TO_IGNORE,\n ];\n return typeof sorConfig.poolDataService === 'object'\n ? sorConfig.poolDataService\n : new SubgraphPoolDataService(\n subgraphClient,\n provider,\n { ...network, poolsToIgnore: allPoolsToIgnore },\n sorConfig\n );\n }\n\n private static getTokenPriceService(\n network: BalancerNetworkConfig,\n sorConfig: BalancerSdkSorConfig,\n subgraphClient: SubgraphClient,\n coingeckoConfig?: CoingeckoConfig\n ): TokenPriceService {\n if (sorConfig.tokenPriceService === 'coingecko' && coingeckoConfig) {\n return new CoingeckoTokenPriceService(network.chainId, coingeckoConfig);\n }\n if (typeof sorConfig.tokenPriceService === 'object') {\n return sorConfig.tokenPriceService;\n } else if (sorConfig.tokenPriceService === 'subgraph') {\n return new SubgraphTokenPriceService(\n subgraphClient,\n network.addresses.tokens.wrappedNativeAsset\n );\n }\n return new ApiTokenPriceService(network.chainId);\n }\n}\n","import {\n QuerySimpleFlashSwapParameters,\n QuerySimpleFlashSwapResponse,\n SimpleFlashSwapParameters,\n SwapType,\n} from '../types';\nimport { queryBatchSwap } from '../queryBatchSwap';\nimport { BatchSwap } from '../types';\nimport { sum } from 'lodash';\n\nfunction checkSimpleFlashSwapParams(params: {\n poolIds: string[];\n assets: string[];\n}) {\n if (params.poolIds.length > 2) {\n throw new Error('Simple flash swap only supports a maximum of two pools');\n }\n\n if (params.assets.length > 2) {\n throw new Error(\n 'Simple flash swap only supports a maximum of to two assets (tokens)'\n );\n }\n}\n\nfunction createSwaps(\n poolIds: SimpleFlashSwapParameters['poolIds'],\n amount: string\n): BatchSwap['swaps'] {\n return [\n {\n poolId: poolIds[0],\n assetInIndex: 0,\n assetOutIndex: 1,\n amount,\n userData: '0x',\n },\n {\n poolId: poolIds[1],\n assetInIndex: 1,\n assetOutIndex: 0,\n amount: '0',\n userData: '0x',\n },\n ];\n}\n\nexport function convertSimpleFlashSwapToBatchSwapParameters({\n poolIds,\n assets,\n flashLoanAmount,\n walletAddress,\n}: SimpleFlashSwapParameters & {\n walletAddress: string;\n}): BatchSwap {\n checkSimpleFlashSwapParams({ poolIds, assets });\n\n const swaps = createSwaps(poolIds, flashLoanAmount);\n\n const funds = {\n sender: walletAddress,\n fromInternalBalance: false,\n recipient: walletAddress,\n toInternalBalance: false,\n };\n\n const limits = ['0', '0'];\n\n const deadline = '999999999999999999';\n\n return {\n kind: SwapType.SwapExactIn,\n swaps,\n assets,\n funds,\n limits,\n deadline,\n };\n}\n\nfunction deltaToExpectedProfit(delta: string) {\n return Number(delta) * -1;\n}\n\nfunction calcProfit(profits: string[]) {\n return sum(profits);\n}\n\n/**\n * Simple interface to test if a simple flash swap is valid and see potential profits.\n *\n * A \"simple\" flash swap is an arbitrage executed with only two tokens and two pools,\n * swapping in the first pool and then back in the second pool for a profit. For more\n * complex flash swaps, you will have to use the batch swap method.\n *\n * Learn more: A [Flash Swap](https://dev.balancer.fi/resources/swaps/flash-swaps).\n *\n * _NB: This method doesn't execute a flashSwap\n *\n * @param {SimpleFlashSwapParameters} params - BatchSwap information used for query.\n * @param {Contract} params.vaultContract - the ethersjs contract for the Balancer Vault.\n * @param {string} params.flashLoanAmount - initial input amount for the flash loan (first asset)\n * @param {string[]} params.poolIds - array of Balancer pool ids\n * @param {string[]} params.assets - array of token addresses\n * @returns {Promise} Returns an ethersjs transaction response\n */\nexport async function querySimpleFlashSwap(\n params: QuerySimpleFlashSwapParameters\n): Promise {\n checkSimpleFlashSwapParams(params);\n\n const [tokenAddress0, tokenAddress1] = params.assets;\n\n try {\n const deltas = await queryBatchSwap(\n params.vaultContract,\n SwapType.SwapExactIn,\n createSwaps(params.poolIds, params.flashLoanAmount),\n params.assets\n );\n\n const profits = {\n [tokenAddress0]: deltaToExpectedProfit(deltas[0]).toString(),\n [tokenAddress1]: deltaToExpectedProfit(deltas[1]).toString(),\n };\n\n return {\n profits,\n isProfitable:\n calcProfit([profits[tokenAddress0], profits[tokenAddress1]]) > 0,\n };\n } catch (err) {\n throw `Failed to querySimpleFlashSwap: ${err}`;\n }\n}\n","import { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { JsonFragment } from '@ethersproject/abi';\nimport { networkAddresses } from '@/lib/constants/config';\nimport { BatchRelayerLibrary__factory } from '@/contracts';\n\n/**\n * Maps SOR data to get the tokenIn used in swaps.\n * Logic related to a relayer wrapping and unwrapping tokens.\n * SOR returns list of already wrapped tokenAddresses used in the swap.\n * However tokenIn defined as an input is the unwrapped token.\n * Note: tokenAddresses are transformed in SOR lib wrapInfo.setWrappedInfo\n * TODO: Once PR is merged, this table can be removed.\n */\ntype WrappedList = {\n [key: string]: string;\n};\n\nconst underlyingToWrappedMap: WrappedList = {\n // stETH => wstETH\n '0xae7ab96520de3a18e5e111b5eaab095312d7fe84':\n '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',\n\n // AMPL => WAMPL\n '0xd46ba6d942050d489dbd938a2c909a5d5039a161':\n '0xedb171c18ce90b633db442f2a6f72874093b49ef',\n\n // aAMPL -> ubAAMPL\n '0x1e6bb68acec8fefbd87d192be09bb274170a0548':\n '0xF03387d8d0FF326ab586A58E0ab4121d106147DF',\n};\n\n/**\n * Vault swaps are operating on wrapped tokens. When user is sending an unwrapped token, it's wrapped in a relayer.\n * SOR is returning an array of tokens already wrapped.\n * Converts tokenIn to match tokenIn used in a swap.\n *\n * TODO: add tokenIn and tokenOut addressed used for swap in the SOR results as tokenInForSwap, tokenOutForSwap\n *\n * @param token token address\n * @returns wrapped token address\n */\nfunction tokenForSwaps(token: string): string {\n let wrapped = token;\n // eslint-disable-next-line no-prototype-builtins\n if (underlyingToWrappedMap.hasOwnProperty(token)) {\n wrapped = underlyingToWrappedMap[token as keyof WrappedList];\n }\n return wrapped;\n}\n\nexport enum Relayers {\n vault = 1,\n lido = 2,\n}\n\nexport interface SwapRelayer {\n id: Relayers;\n address: string;\n}\n\n/**\n * Resolves a contract address for sending swap transaction to.\n * Balancer is using relayers to automatically wrap / unwrap tokens not compatibile with ERC20.\n */\nfunction relayerResolver(\n assetIn: string,\n assetOut: string,\n chainId: number\n): SwapRelayer {\n const { tokens, contracts } = networkAddresses(chainId);\n\n let to = {\n id: Relayers.vault,\n address: contracts.vault,\n };\n\n if (tokens.stETH && contracts.lidoRelayer)\n if ([assetIn, assetOut].includes(tokens.stETH))\n to = {\n id: Relayers.lido,\n address: contracts.lidoRelayer,\n };\n\n return to;\n}\n\nfunction swapFragment(relayer: SwapRelayer): JsonFragment[] {\n if (relayer.id === Relayers.lido)\n return BatchRelayerLibrary__factory.abi.filter(\n (f) =>\n f.type === 'function' &&\n f.name &&\n ['swap', 'batchSwap'].includes(f.name)\n );\n else\n return Vault__factory.abi.filter(\n (f) =>\n f.type === 'function' &&\n f.name &&\n ['swap', 'batchSwap'].includes(f.name)\n );\n}\n\nfunction batchSwapFragment(\n assetIn: string,\n assetOut: string,\n chainId: number\n): JsonFragment[] {\n const { tokens, contracts } = networkAddresses(chainId);\n if (tokens.stETH && contracts.lidoRelayer) {\n if ([assetIn, assetOut].includes(tokens.stETH)) {\n const relayerSignaturesForSwaps = BatchRelayerLibrary__factory.abi.filter(\n (f) => f.type === 'function' && f.name === 'batchSwap'\n );\n return relayerSignaturesForSwaps;\n }\n }\n const vaultSignaturesForSwaps = Vault__factory.abi.filter(\n (f) => f.type === 'function' && f.name === 'batchSwap'\n );\n return vaultSignaturesForSwaps;\n}\n\nexport { tokenForSwaps, relayerResolver, swapFragment, batchSwapFragment };\n","import { SwapInfo } from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { tokenForSwaps } from './swap_utils';\nimport { SwapType } from '../types';\n\ninterface AmountForLimit {\n amount: BigNumber;\n max: (slippage: number) => BigNumber;\n min: (slippage: number) => BigNumber;\n}\n\ninterface SDKSwapInfo extends SwapInfo {\n /** Name mapping to improve readability. */\n amountIn: BigNumber;\n amountOut: BigNumber;\n /** Name mapping for amounts used specifically for limits calculations. */\n amountInForLimits: AmountForLimit;\n amountOutForLimits: AmountForLimit;\n /** Wrapped token addresses used in the swap. */\n tokenInForSwaps: string;\n tokenOutFromSwaps: string;\n}\n\n/** Applies slippage to a number */\nfunction amountForLimit(amount: BigNumber): AmountForLimit {\n return {\n amount,\n max: (maxSlippage: number): BigNumber => {\n return amount.mul(1e4 + maxSlippage).div(1e4);\n },\n min: (maxSlippage: number): BigNumber => {\n return amount.mul(1e4 - maxSlippage).div(1e4);\n },\n };\n}\n\nfunction decorateSorSwapInfo(\n swapInfo: SwapInfo,\n swapType: SwapType\n): SDKSwapInfo {\n const amountIn =\n swapType === SwapType.SwapExactIn\n ? swapInfo.swapAmount\n : swapInfo.returnAmount;\n const amountOut =\n swapType === SwapType.SwapExactIn\n ? swapInfo.returnAmount\n : swapInfo.swapAmount;\n const amountInForLimits =\n swapType === SwapType.SwapExactIn\n ? swapInfo.swapAmountForSwaps || swapInfo.swapAmount\n : swapInfo.returnAmountFromSwaps || swapInfo.returnAmount;\n const amountOutForLimits =\n swapType === SwapType.SwapExactIn\n ? swapInfo.returnAmountFromSwaps || swapInfo.returnAmount\n : swapInfo.swapAmountForSwaps || swapInfo.swapAmount;\n const tokenInForSwaps = tokenForSwaps(swapInfo.tokenIn);\n const tokenOutFromSwaps = tokenForSwaps(swapInfo.tokenOut);\n\n return {\n ...swapInfo,\n amountIn,\n amountOut,\n amountInForLimits: amountForLimit(amountInForLimits),\n amountOutForLimits: amountForLimit(amountOutForLimits),\n tokenInForSwaps,\n tokenOutFromSwaps,\n };\n}\n\nexport { SDKSwapInfo, tokenForSwaps, decorateSorSwapInfo };\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { FundManagement, SingleSwap, Swap, SwapType } from '../types';\nimport { Interface, JsonFragment } from '@ethersproject/abi';\nimport { SwapInfo } from '@balancer-labs/sor';\nimport { SDKSwapInfo, decorateSorSwapInfo } from './swap_info_decorator';\nimport { AddressZero } from '@ethersproject/constants';\nimport { swapFragment, relayerResolver, SwapRelayer } from './swap_utils';\n\nclass SingleSwapBuilder {\n private swapInfo: SDKSwapInfo;\n funds?: FundManagement;\n limit?: BigNumberish;\n deadline?: string;\n relayer: SwapRelayer;\n readonly functionName = 'swap';\n\n /**\n * Building swap transaction data\n *\n * @param swapInfo SOR result\n * @param kind\n * @param chainId used to resolve relayer addresses\n */\n constructor(\n swapInfo: SwapInfo,\n private readonly kind: SwapType,\n private readonly chainId: number\n ) {\n this.swapInfo = decorateSorSwapInfo(swapInfo, kind);\n this.relayer = relayerResolver(\n this.swapInfo.tokenIn,\n this.swapInfo.tokenOut,\n this.chainId\n );\n }\n\n setFunds(sender: string, recipient?: string): void {\n this.funds = {\n sender,\n recipient: recipient || sender,\n fromInternalBalance: false,\n toInternalBalance: false,\n };\n }\n\n /**\n * @param deadline block timestamp\n */\n setDeadline(deadline: string): void {\n this.deadline = deadline;\n }\n\n get amount(): BigNumber {\n return this.kind === SwapType.SwapExactOut\n ? this.swapInfo.amountOutForLimits.amount\n : this.swapInfo.amountInForLimits.amount;\n }\n\n /**\n * Calculates the limit for token amount.\n * https://dev.balancer.fi/guides/swaps/single-swaps\n * https://dev.balancer.fi/resources/swaps/single-swap\n *\n * For swap:\n * The meaning of limit depends on the value of kind\n * GIVEN_IN: The minimum amount of tokens we would accept to receive from the swap.\n * GIVEN_OUT: The maximum amount of tokens we would be sending to swap.\n *\n * @param maxSlippage [bps], eg: 1 === 0.01%, 100 === 1%\n */\n setLimits(maxSlippage: number): void {\n this.limit =\n this.kind === SwapType.SwapExactIn\n ? this.swapInfo.amountOutForLimits.min(maxSlippage).toString()\n : this.swapInfo.amountInForLimits.max(maxSlippage).toString();\n }\n\n get singleSwap(): SingleSwap {\n const poolId = this.swapInfo.swaps[0].poolId;\n const kind = this.kind;\n const assetIn = this.swapInfo.tokenInForSwaps;\n const assetOut = this.swapInfo.tokenOutFromSwaps;\n const amount = this.amount.toString();\n const userData = '0x';\n\n return {\n poolId,\n kind,\n assetIn,\n assetOut,\n amount,\n userData,\n };\n }\n\n attributes(): Swap {\n if (!this.funds || !this.limit || !this.deadline) {\n throw new Error('Uninitialized arguments');\n }\n\n // TODO: Raise errors when some parameters are missing\n let attrs: Swap = {\n request: this.singleSwap,\n funds: this.funds,\n limit: this.limit,\n deadline: this.deadline,\n };\n\n // TODO: Call this logic from a relayer module maybe? Do we actually need to do that?\n // additional parameters on a contract:\n // https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/standalone-utils/contracts/relayer/VaultActions.sol#L44\n const fragment = this.fragment();\n if (fragment[0].inputs && fragment[0].inputs?.length > 4) {\n attrs = {\n ...attrs,\n value: '0',\n outputReference: '0',\n };\n }\n\n return attrs;\n }\n\n data(): string {\n const contractInterface = new Interface(this.fragment());\n\n return contractInterface.encodeFunctionData(\n 'swap',\n Object.values(this.attributes())\n );\n }\n\n value(maxSlippage: number): BigNumber {\n let amount = BigNumber.from(0);\n if (this.swapInfo.tokenIn === AddressZero)\n amount =\n this.kind === SwapType.SwapExactIn\n ? this.swapInfo.amountIn\n : this.swapInfo.amountInForLimits.max(maxSlippage);\n return amount;\n }\n\n to(): string {\n return this.relayer.address;\n }\n\n private fragment(): JsonFragment[] {\n return swapFragment(this.relayer).filter(\n (f) => f.name === this.functionName\n );\n }\n}\n\nexport { SingleSwapBuilder };\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { BatchSwap, FundManagement, SwapType } from '../types';\nimport { Interface, JsonFragment } from '@ethersproject/abi';\nimport { SwapInfo } from '@balancer-labs/sor';\nimport { SDKSwapInfo, decorateSorSwapInfo } from './swap_info_decorator';\nimport { AddressZero } from '@ethersproject/constants';\nimport { swapFragment, relayerResolver, SwapRelayer } from './swap_utils';\n\nclass BatchSwapBuilder {\n private swapInfo: SDKSwapInfo;\n funds?: FundManagement;\n limits?: BigNumberish[];\n deadline?: string;\n relayer: SwapRelayer;\n readonly functionName = 'batchSwap';\n\n /**\n * Building swap transaction data\n *\n * @param swapInfo SOR result\n * @param kind\n */\n constructor(\n swapInfo: SwapInfo,\n private readonly kind: SwapType,\n private readonly chainId: number\n ) {\n this.swapInfo = decorateSorSwapInfo(swapInfo, kind);\n this.relayer = relayerResolver(\n this.swapInfo.tokenIn,\n this.swapInfo.tokenOut,\n this.chainId\n );\n }\n\n setFunds(sender: string, recipient?: string): void {\n this.funds = {\n sender,\n recipient: recipient || sender,\n fromInternalBalance: false,\n toInternalBalance: false,\n };\n }\n\n /**\n * @param deadline block timestamp\n */\n setDeadline(deadline: string): void {\n this.deadline = deadline;\n }\n\n /**\n * Given IN it's the minimum amount we are willing to accept.\n * Given OUT it's the fixed amount defined as output.\n */\n minAmountOut(maxSlippage: number): BigNumber {\n return this.kind === SwapType.SwapExactIn\n ? this.swapInfo.amountOutForLimits.min(maxSlippage)\n : this.swapInfo.amountOutForLimits.amount;\n }\n\n /**\n * Given IN it's the fixed amount we define as input.\n * Given OUT it's the maximum amount we are willing to pay for the request.\n */\n maxAmountIn(maxSlippage: number): BigNumber {\n return this.kind === SwapType.SwapExactOut\n ? this.swapInfo.amountInForLimits.max(maxSlippage)\n : this.swapInfo.amountInForLimits.amount;\n }\n\n /**\n * Calculates limits for token amount.\n * Maximum number of tokens to send is a positive number\n * Minimum amount of tokens to receive is a negative number\n * https://dev.balancer.fi/guides/swaps/batch-swaps\n * https://dev.balancer.fi/resources/swaps/batch-swaps#multi-hop-examples\n *\n * For batchSwap:\n * An array of of the maximum net amounts of each asset which can be taken to perform the swap.\n * Should the total trade require more than limits[i] tokens to be taken from sender for any i\n * then the transaction shall fail.\n *\n * @param maxSlippage [bps], eg: 1 === 0.01%, 100 === 1%\n */\n setLimits(maxSlippage: number): void {\n // TODO: This implementation handles only a single input. We might want to extend it for multiple token inputs\n this.limits = this.swapInfo.tokenAddresses\n .map((token) => {\n let amount = BigNumber.from(0);\n if (token === this.swapInfo.tokenInForSwaps) {\n amount = this.maxAmountIn(maxSlippage);\n }\n if (token === this.swapInfo.tokenOutFromSwaps) {\n amount = this.minAmountOut(maxSlippage).mul(-1);\n }\n return amount;\n })\n .map((limit) => limit.toString().split('.')[0]);\n }\n\n attributes(): BatchSwap {\n // TODO: Raise errors when some parameters are missing\n if (!this.funds || !this.limits || !this.deadline) {\n throw new Error('Uninitialized arguments');\n }\n\n let attrs: BatchSwap = {\n kind: this.kind,\n swaps: this.swapInfo.swaps,\n assets: this.swapInfo.tokenAddresses,\n funds: this.funds,\n limits: this.limits,\n deadline: this.deadline,\n };\n\n const fragment = this.fragment();\n\n // TODO: Call this logic from a relayer module maybe? Do we actually need to do that?\n // additional parameters on a contract:\n // https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/standalone-utils/contracts/relayer/VaultActions.sol#L67\n if (fragment[0].inputs && fragment[0].inputs?.length > 6) {\n attrs = {\n ...attrs,\n value: '0',\n outputReferences: [],\n };\n }\n\n return attrs;\n }\n\n data(): string {\n const contractInterface = new Interface(this.fragment());\n\n return contractInterface.encodeFunctionData(\n 'batchSwap',\n Object.values(this.attributes())\n );\n }\n\n value(maxSlippage: number): BigNumber {\n let amount = BigNumber.from(0);\n if (this.swapInfo.tokenIn === AddressZero)\n amount = this.maxAmountIn(maxSlippage);\n return amount;\n }\n\n to(): string {\n return this.relayer.address;\n }\n\n private fragment(): JsonFragment[] {\n return swapFragment(this.relayer).filter(\n (f) => f.name === this.functionName\n );\n }\n}\n\nexport { BatchSwapBuilder };\n","import { SOR, SubgraphPoolBase, SwapInfo, SwapTypes } from '@balancer-labs/sor';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { Vault } from '@/contracts/Vault';\nimport {\n BatchSwap,\n QuerySimpleFlashSwapParameters,\n QuerySimpleFlashSwapResponse,\n SimpleFlashSwapParameters,\n FindRouteParameters,\n BuildTransactionParameters,\n SwapAttributes,\n SwapType,\n TokenAmounts,\n SwapsOptions,\n} from './types';\nimport { queryBatchSwap, getSorSwapInfo } from './queryBatchSwap';\nimport { balancerVault } from '@/lib/constants/config';\nimport { getLimitsForSlippage } from './helpers';\nimport { BalancerSdkConfig } from '@/types';\nimport { SwapInput } from './types';\nimport { Sor } from '@/modules/sor/sor.module';\nimport {\n convertSimpleFlashSwapToBatchSwapParameters,\n querySimpleFlashSwap,\n} from './flashSwap';\nimport {\n SingleSwapBuilder,\n BatchSwapBuilder,\n} from '@/modules/swaps/swap_builder';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport { GraphQLArgs } from '@/lib/graphql';\n\nconst buildRouteDefaultOptions = {\n maxPools: 4,\n gasPrice: '1',\n deadline: '999999999999999999',\n maxSlippage: 10, // in bspt, eg: 10 = 0.1%\n};\n\nexport class Swaps {\n readonly sor: SOR;\n chainId: number;\n vaultContract: Vault;\n\n // TODO: sorOrConfig - let's make it more predictable and always pass configuration explicitly\n constructor(sorOrConfig: SOR | BalancerSdkConfig) {\n if (sorOrConfig instanceof SOR) {\n this.sor = sorOrConfig;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.chainId = (this.sor.provider)['_network']['chainId'];\n } else {\n this.sor = new Sor(sorOrConfig);\n if (typeof sorOrConfig.network === 'number')\n this.chainId = sorOrConfig.network as number;\n else this.chainId = sorOrConfig.network.chainId;\n }\n\n this.vaultContract = Vault__factory.connect(\n balancerVault,\n this.sor.provider\n );\n }\n\n static getLimitsForSlippage(\n tokensIn: string[],\n tokensOut: string[],\n swapType: SwapType,\n deltas: string[],\n assets: string[],\n slippage: string\n ): string[] {\n // TO DO - Check best way to do this?\n const limits = getLimitsForSlippage(\n tokensIn,\n tokensOut,\n swapType,\n deltas,\n assets,\n slippage\n );\n\n return limits.map((l) => l.toString());\n }\n\n /**\n * Uses SOR to find optimal route for a trading pair and amount\n *\n * @param FindRouteParameters\n * @param FindRouteParameters.tokenIn Address\n * @param FindRouteParameters.tokenOut Address\n * @param FindRouteParameters.amount BigNumber with a trade amount\n * @param FindRouteParameters.gasPrice BigNumber current gas price\n * @param FindRouteParameters.maxPools number of pool included in path, default 4\n * @returns Best trade route information\n */\n async findRouteGivenIn({\n tokenIn,\n tokenOut,\n amount,\n gasPrice,\n maxPools = 4,\n }: FindRouteParameters): Promise {\n return this.sor.getSwaps(tokenIn, tokenOut, SwapTypes.SwapExactIn, amount, {\n gasPrice,\n maxPools,\n });\n }\n\n /**\n * Uses SOR to find optimal route for a trading pair and amount\n *\n * @param FindRouteParameters\n * @param FindRouteParameters.tokenIn Address\n * @param FindRouteParameters.tokenOut Address\n * @param FindRouteParameters.amount BigNumber with a trade amount\n * @param FindRouteParameters.gasPrice BigNumber current gas price\n * @param FindRouteParameters.maxPools number of pool included in path, default 4\n * @returns Best trade route information\n */\n async findRouteGivenOut({\n tokenIn,\n tokenOut,\n amount,\n gasPrice,\n maxPools = 4,\n }: FindRouteParameters): Promise {\n return this.sor.getSwaps(\n tokenIn,\n tokenOut,\n SwapTypes.SwapExactOut,\n amount,\n {\n gasPrice,\n maxPools,\n }\n );\n }\n\n /**\n * Uses SOR to find optimal route for a trading pair and amount\n *\n * @param BuildTransactionParameters\n * @param BuildTransactionParameters.userAddress Address\n * @param BuildTransactionParameters.swapInfo result of route finding\n * @param BuildTransactionParameters.kind 0 - givenIn, 1 - givenOut\n * @param BuildTransactionParameters.deadline block linux timestamp as string\n * @param BuildTransactionParameters.maxSlippage [bps], eg: 1 === 0.01%, 100 === 1%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildSwap({\n userAddress,\n recipient,\n swapInfo,\n kind,\n deadline,\n maxSlippage,\n }: BuildTransactionParameters): SwapAttributes {\n if (!this.chainId) throw 'Missing network configuration';\n\n // one vs batch (gas cost optimisation when using single swap)\n const builder =\n swapInfo.swaps.length > 1\n ? new BatchSwapBuilder(swapInfo, kind, this.chainId)\n : new SingleSwapBuilder(swapInfo, kind, this.chainId);\n builder.setFunds(userAddress, recipient);\n builder.setDeadline(deadline);\n builder.setLimits(maxSlippage);\n\n const to = builder.to();\n const { functionName } = builder;\n const attributes = builder.attributes();\n const data = builder.data();\n const value = builder.value(maxSlippage);\n\n return { to, functionName, attributes, data, value };\n }\n\n /**\n * Uses SOR to find optimal route for a trading pair and amount\n * and builds a transaction request\n *\n * @param sender Sender of the swap\n * @param recipient Reciever of the swap\n * @param tokenIn Address of tokenIn\n * @param tokenOut Address of tokenOut\n * @param amount Amount of tokenIn to swap as a string with 18 decimals precision\n * @param options\n * @param options.maxPools number of pool included in path\n * @param options.gasPrice BigNumber current gas price\n * @param options.deadline BigNumber block timestamp\n * @param options.maxSlippage [bps], eg: 1 === 0.01%, 100 === 1%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n async buildRouteExactIn(\n sender: string,\n recipient: string,\n tokenIn: string,\n tokenOut: string,\n amount: string,\n options: SwapsOptions = buildRouteDefaultOptions\n ): Promise {\n const opts = {\n ...buildRouteDefaultOptions,\n ...options,\n };\n\n const swapInfo = await this.findRouteGivenIn({\n tokenIn,\n tokenOut,\n amount: BigNumber.from(amount),\n gasPrice: BigNumber.from(opts.gasPrice),\n maxPools: opts.maxPools,\n });\n\n const tx = this.buildSwap({\n userAddress: sender, // sender account\n recipient, // recipient account\n swapInfo, // result from the previous step\n kind: SwapType.SwapExactIn, // or SwapExactOut\n deadline: opts.deadline, // BigNumber block timestamp\n maxSlippage: opts.maxSlippage, // [bps], eg: 1 == 0.01%, 100 == 1%\n });\n\n // TODO: add query support\n // query will be a function that returns the deltas for the swap in { [address: string]: string } format\n // const query = this.queryBatchSwap(tx);\n\n return tx;\n }\n\n /**\n * Encode batchSwap in an ABI byte string\n *\n * [See method for a batchSwap](https://dev.balancer.fi/references/contracts/apis/the-vault#batch-swaps).\n *\n * _NB: This method doesn't execute a batchSwap -- it returns an [ABI byte string](https://docs.soliditylang.org/en/latest/abi-spec.html)\n * containing the data of the function call on a contract, which can then be sent to the network to be executed.\n * (ex. [sendTransaction](https://web3js.readthedocs.io/en/v1.2.11/web3-eth.html#sendtransaction)).\n *\n * @param {BatchSwap} batchSwap - BatchSwap information used for query.\n * @param {SwapType} batchSwap.kind - either exactIn or exactOut\n * @param {BatchSwapSteps[]} batchSwap.swaps - sequence of swaps\n * @param {string[]} batchSwap.assets - array contains the addresses of all assets involved in the swaps\n * @param {FundManagement} batchSwap.funds - object containing information about where funds should be taken/sent\n * @param {number[]} batchSwap.limits - limits for each token involved in the swap, where either the maximum number of tokens to send (by passing a positive value) or the minimum amount of tokens to receive (by passing a negative value) is specified\n * @param {string} batchSwap.deadline - time (in Unix timestamp) after which it will no longer attempt to make a trade\n * @returns {string} encodedBatchSwapData - Returns an ABI byte string containing the data of the function call on a contract\n */\n static encodeBatchSwap(batchSwap: BatchSwap): string {\n const vaultInterface = Vault__factory.createInterface();\n\n return vaultInterface.encodeFunctionData('batchSwap', [\n batchSwap.kind,\n batchSwap.swaps,\n batchSwap.assets,\n batchSwap.funds,\n batchSwap.limits,\n batchSwap.deadline,\n ]);\n }\n\n /**\n * Encode simple flash swap into a ABI byte string\n *\n * A \"simple\" flash swap is an arbitrage executed with only two tokens and two pools,\n * swapping in the first pool and then back in the second pool for a profit. For more\n * complex flash swaps, you will have to use the batch swap method.\n *\n * Learn more: A [Flash Swap](https://dev.balancer.fi/resources/swaps/flash-swaps).\n *\n * @param {SimpleFlashSwapParameters} params - BatchSwap information used for query.\n * @param {string} params.flashLoanAmount - initial input amount for the flash loan (first asset)\n * @param {string[]} params.poolIds - array of Balancer pool ids\n * @param {string[]} params.assets - array of token addresses\n * @param {string} params.walletAddress - array of token addresses\n * @returns {string} encodedBatchSwapData - Returns an ABI byte string containing the data of the function call on a contract\n */\n static encodeSimpleFlashSwap(params: SimpleFlashSwapParameters): string {\n return this.encodeBatchSwap(\n convertSimpleFlashSwapToBatchSwapParameters(params)\n );\n }\n\n /**\n * fetchPools saves updated pools data to SOR internal onChainBalanceCache.\n *\n * @returns Boolean indicating whether pools data was fetched correctly (true) or not (false).\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async fetchPools(queryArgs?: GraphQLArgs): Promise {\n return this.sor.fetchPools(queryArgs);\n }\n\n public getPools(): SubgraphPoolBase[] {\n return this.sor.getPools();\n }\n\n /**\n * queryBatchSwap simulates a call to `batchSwap`, returning an array of Vault asset deltas.\n * @param batchSwap - BatchSwap information used for query.\n * @param {SwapType} batchSwap.kind - either exactIn or exactOut.\n * @param {BatchSwapStep[]} batchSwap.swaps - sequence of swaps.\n * @param {string[]} batchSwap.assets - array contains the addresses of all assets involved in the swaps.\n * @returns {Promise} Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the\n * Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at\n * the same index in the `assets` array.\n */\n async queryBatchSwap(\n batchSwap: Pick\n ): Promise {\n return await queryBatchSwap(\n this.vaultContract,\n batchSwap.kind,\n batchSwap.swaps,\n batchSwap.assets\n );\n }\n\n /**\n * Simple interface to test if a simple flash swap is valid and see potential profits.\n *\n * A \"simple\" flash swap is an arbitrage executed with only two tokens and two pools,\n * swapping in the first pool and then back in the second pool for a profit. For more\n * complex flash swaps, you will have to use the batch swap method.\n *\n * Learn more: A [Flash Swap](https://dev.balancer.fi/resources/swaps/flash-swaps).\n *\n * _NB: This method doesn't execute a flashSwap\n *\n * @param {SimpleFlashSwapParameters} params - BatchSwap information used for query.\n * @param {string} params.flashLoanAmount - initial input amount for the flash loan (first asset)\n * @param {string[]} params.poolIds - array of Balancer pool ids\n * @param {string[]} params.assets - array of token addresses\n * @returns {Promise<{profits: Record, isProfitable: boolean}>} Returns an ethersjs transaction response\n */\n async querySimpleFlashSwap(\n params: Omit\n ): Promise {\n return await querySimpleFlashSwap({\n ...params,\n vaultContract: this.vaultContract,\n });\n }\n\n /**\n * Use SOR to get swapInfo for tokenIn<>tokenOut.\n * @param {SwapInput} swapInput - Swap information used for querying using SOR.\n * @param {string} swapInput.tokenIn - Addresse of asset in.\n * @param {string} swapInput.tokenOut - Addresse of asset out.\n * @param {SwapType} swapInput.swapType - Type of Swap, ExactIn/Out.\n * @param {string} swapInput.amount - Amount used in swap.\n * @returns {Promise} SOR swap info.\n */\n async getSorSwap(swapInput: SwapInput): Promise {\n return await getSorSwapInfo(\n swapInput.tokenIn,\n swapInput.tokenOut,\n swapInput.swapType,\n swapInput.amount,\n this.sor\n );\n }\n\n async queryExactIn(swap: SwapInfo): Promise {\n const deltas = await this.query(swap, SwapType.SwapExactIn);\n return this.assetDeltas(deltas.map(String), swap.tokenAddresses);\n }\n\n async queryExactOut(swap: SwapInfo): Promise {\n const deltas = await this.query(swap, SwapType.SwapExactOut);\n return this.assetDeltas(deltas.map(String), swap.tokenAddresses);\n }\n\n private query(swap: SwapInfo, kind: SwapType): Promise {\n const { swaps, tokenAddresses: assets } = swap;\n\n const funds = {\n sender: AddressZero,\n recipient: AddressZero,\n fromInternalBalance: false,\n toInternalBalance: false,\n };\n\n return this.vaultContract.callStatic.queryBatchSwap(\n kind,\n swaps,\n assets,\n funds\n );\n }\n\n private assetDeltas(deltas: string[], assets: string[]): TokenAmounts {\n return Object.fromEntries(deltas.map((delta, idx) => [assets[idx], delta]));\n }\n}\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\n\nimport { ExitPoolRequest, JoinPoolRequest } from '@/types';\nimport { SwapType, BatchSwapStep, FundManagement } from '@/modules/swaps/types';\n\nexport enum PoolKind {\n WEIGHTED = 0,\n LEGACY_STABLE,\n COMPOSABLE_STABLE,\n COMPOSABLE_STABLE_V2,\n}\n\nexport type OutputReference = {\n index: number;\n key: BigNumber;\n};\n\nexport interface EncodeBatchSwapInput {\n swapType: SwapType;\n swaps: BatchSwapStep[];\n assets: string[];\n funds: FundManagement;\n limits: string[];\n deadline: BigNumberish;\n value: BigNumberish;\n outputReferences: OutputReference[];\n}\n\nexport interface EncodeExitPoolInput {\n poolId: string;\n poolKind: number;\n sender: string;\n recipient: string;\n outputReferences: OutputReference[];\n exitPoolRequest: ExitPoolRequest;\n}\n\nexport interface EncodeJoinPoolInput {\n poolId: string;\n kind: number;\n sender: string;\n recipient: string;\n joinPoolRequest: JoinPoolRequest;\n value: BigNumberish;\n outputReference: string;\n}\n\nexport interface EncodeWrapAaveDynamicTokenInput {\n staticToken: string;\n sender: string;\n recipient: string;\n amount: BigNumberish;\n fromUnderlying: boolean;\n outputReference: BigNumberish;\n}\n\nexport interface EncodeUnwrapAaveStaticTokenInput {\n staticToken: string;\n sender: string;\n recipient: string;\n amount: BigNumberish;\n toUnderlying: boolean;\n outputReference: BigNumberish;\n}\n\nexport interface EncodeUnwrapInput {\n wrappedToken: string;\n sender: string;\n recipient: string;\n amount: BigNumberish;\n outputReference: BigNumberish;\n}\n\nexport interface EncodeUnwrapWstETHInput {\n sender: string;\n recipient: string;\n amount: BigNumberish;\n outputReference: BigNumberish;\n}\n\nexport type ExitPoolData = ExitPoolRequest & EncodeExitPoolInput;\nexport type JoinPoolData = JoinPoolRequest & EncodeJoinPoolInput;\n","import { JsonRpcSigner } from '@ethersproject/providers';\nimport { BigNumberish, BigNumber } from '@ethersproject/bignumber';\nimport { MaxUint256 } from '@ethersproject/constants';\nimport { BatchRelayerLibrary__factory } from '@/contracts';\nimport { IVault, Vault } from '@/contracts/Vault';\nimport {\n EncodeBatchSwapInput,\n EncodeExitPoolInput,\n EncodeJoinPoolInput,\n EncodeUnwrapAaveStaticTokenInput,\n EncodeUnwrapInput,\n EncodeUnwrapWstETHInput,\n EncodeWrapAaveDynamicTokenInput,\n ExitPoolData,\n JoinPoolData,\n} from './types';\nimport { ExitPoolRequest, JoinPoolRequest } from '@/types';\nimport { Swap } from '../swaps/types';\nimport { RelayerAuthorization } from '@/lib/utils';\nimport FundManagementStruct = IVault.FundManagementStruct;\nimport SingleSwapStruct = IVault.SingleSwapStruct;\n\nexport * from './types';\n\nconst relayerLibrary = BatchRelayerLibrary__factory.createInterface();\n\nexport class Relayer {\n static CHAINED_REFERENCE_TEMP_PREFIX = 'ba10'; // Temporary reference: it is deleted after a read.\n static CHAINED_REFERENCE_READONLY_PREFIX = 'ba11'; // Read-only reference: it is not deleted after a read.\n\n static encodeApproveVault(tokenAddress: string, maxAmount: string): string {\n return relayerLibrary.encodeFunctionData('approveVault', [\n tokenAddress,\n maxAmount,\n ]);\n }\n\n static encodeSetRelayerApproval(\n relayerAdress: string,\n approved: boolean,\n authorisation: string\n ): string {\n return relayerLibrary.encodeFunctionData('setRelayerApproval', [\n relayerAdress,\n approved,\n authorisation,\n ]);\n }\n\n static encodeGaugeWithdraw(\n gaugeAddress: string,\n sender: string,\n recipient: string,\n amount: string\n ): string {\n return relayerLibrary.encodeFunctionData('gaugeWithdraw', [\n gaugeAddress,\n sender,\n recipient,\n amount,\n ]);\n }\n\n static encodeGaugeDeposit(\n gaugeAddress: string,\n sender: string,\n recipient: string,\n amount: string\n ): string {\n return relayerLibrary.encodeFunctionData('gaugeDeposit', [\n gaugeAddress,\n sender,\n recipient,\n amount,\n ]);\n }\n\n static encodeSwap(params: Swap): string {\n return relayerLibrary.encodeFunctionData('swap', [\n params.request as SingleSwapStruct,\n params.funds as FundManagementStruct,\n params.limit,\n params.deadline as BigNumberish,\n params.value as BigNumberish,\n params.outputReference as BigNumberish,\n ]);\n }\n\n static encodeBatchSwap(params: EncodeBatchSwapInput): string {\n return relayerLibrary.encodeFunctionData('batchSwap', [\n params.swapType,\n params.swaps,\n params.assets,\n params.funds,\n params.limits,\n params.deadline,\n params.value,\n params.outputReferences,\n ]);\n }\n\n static encodeExitPool(params: EncodeExitPoolInput): string {\n return relayerLibrary.encodeFunctionData('exitPool', [\n params.poolId,\n params.poolKind,\n params.sender,\n params.recipient,\n params.exitPoolRequest,\n params.outputReferences,\n ]);\n }\n\n static encodeJoinPool(params: EncodeJoinPoolInput): string {\n return relayerLibrary.encodeFunctionData('joinPool', [\n params.poolId,\n params.kind,\n params.sender,\n params.recipient,\n params.joinPoolRequest,\n params.value,\n params.outputReference,\n ]);\n }\n\n static encodeWrapAaveDynamicToken(\n params: EncodeWrapAaveDynamicTokenInput\n ): string {\n return relayerLibrary.encodeFunctionData('wrapAaveDynamicToken', [\n params.staticToken,\n params.sender,\n params.recipient,\n params.amount,\n params.fromUnderlying,\n params.outputReference,\n ]);\n }\n\n static encodeUnwrapAaveStaticToken(\n params: EncodeUnwrapAaveStaticTokenInput\n ): string {\n return relayerLibrary.encodeFunctionData('unwrapAaveStaticToken', [\n params.staticToken,\n params.sender,\n params.recipient,\n params.amount,\n params.toUnderlying,\n params.outputReference,\n ]);\n }\n\n static encodeUnwrapWstETH(params: EncodeUnwrapWstETHInput): string {\n return relayerLibrary.encodeFunctionData('unwrapWstETH', [\n params.sender,\n params.recipient,\n params.amount,\n params.outputReference,\n ]);\n }\n\n static encodeUnwrap(\n params: EncodeUnwrapInput,\n linearPoolType: string\n ): string {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let unwrapType: any;\n\n /**\n * Other unwrap types available on BatchRelayerLibrary that does not seem to\n * have a respective Linear pool type in the SDK:\n * - unwrapUnbuttonToken\n * - unwrapWstETH\n */\n\n switch (linearPoolType) {\n case 'AaveLinear':\n return this.encodeUnwrapAaveStaticToken({\n staticToken: params.wrappedToken,\n sender: params.sender,\n recipient: params.recipient,\n amount: params.amount,\n toUnderlying: true,\n outputReference: params.outputReference,\n });\n case 'BeefyLinear':\n case 'ERC4626Linear':\n unwrapType = 'unwrapERC4626';\n break;\n case 'EulerLinear':\n unwrapType = 'unwrapEuler';\n break;\n case 'GearboxLinear':\n unwrapType = 'unwrapGearbox';\n break;\n case 'ReaperLinear':\n unwrapType = 'unwrapReaperVaultToken';\n break;\n case 'TetuLinear':\n unwrapType = 'unwrapTetu';\n break;\n case 'YearnLinear':\n unwrapType = 'unwrapYearn';\n break;\n case 'MidasLinear':\n unwrapType = 'unwrapCompoundV2';\n break;\n case 'SiloLinear':\n unwrapType = 'unwrapShareToken';\n break;\n default:\n throw new Error(\n 'Unwrapping not supported for this pool type: ' + linearPoolType\n );\n }\n\n return relayerLibrary.encodeFunctionData(unwrapType, [\n params.wrappedToken,\n params.sender,\n params.recipient,\n params.amount,\n params.outputReference,\n ]);\n }\n\n static encodePeekChainedReferenceValue(reference: BigNumberish): string {\n return relayerLibrary.encodeFunctionData('peekChainedReferenceValue', [\n reference,\n ]);\n }\n\n static toChainedReference(key: BigNumberish, isTemporary = true): BigNumber {\n const prefix = isTemporary\n ? Relayer.CHAINED_REFERENCE_TEMP_PREFIX\n : Relayer.CHAINED_REFERENCE_READONLY_PREFIX;\n // The full padded prefix is 66 characters long, with 64 hex characters and the 0x prefix.\n const paddedPrefix = `0x${prefix}${'0'.repeat(64 - prefix.length)}`;\n return BigNumber.from(paddedPrefix).add(key);\n }\n\n static fromChainedReference(ref: string, isTemporary = true): BigNumber {\n const prefix = isTemporary\n ? Relayer.CHAINED_REFERENCE_TEMP_PREFIX\n : Relayer.CHAINED_REFERENCE_READONLY_PREFIX;\n // The full padded prefix is 66 characters long, with 64 hex characters and the 0x prefix.\n const paddedPrefix = `0x${prefix}${'0'.repeat(64 - prefix.length)}`;\n return BigNumber.from(ref).sub(BigNumber.from(paddedPrefix));\n }\n\n /**\n * Returns true if `amount` is not actually an amount, but rather a chained reference.\n */\n static isChainedReference(amount: string): boolean {\n const amountBn = BigNumber.from(amount);\n const mask = BigNumber.from(\n '0xfff0000000000000000000000000000000000000000000000000000000000000'\n );\n const readonly =\n '0xba10000000000000000000000000000000000000000000000000000000000000';\n const check = amountBn.toBigInt() & mask.toBigInt();\n return readonly === BigNumber.from(check)._hex.toString();\n }\n\n static formatExitPoolInput(params: ExitPoolData): EncodeExitPoolInput {\n const {\n assets,\n minAmountsOut,\n userData,\n toInternalBalance,\n poolId,\n poolKind,\n sender,\n recipient,\n outputReferences,\n } = params;\n\n const exitPoolRequest: ExitPoolRequest = {\n assets,\n minAmountsOut,\n userData,\n toInternalBalance,\n };\n\n const exitPoolInput: EncodeExitPoolInput = {\n poolId,\n poolKind,\n sender,\n recipient,\n outputReferences,\n exitPoolRequest,\n };\n return exitPoolInput;\n }\n\n static formatJoinPoolInput(params: JoinPoolData): EncodeJoinPoolInput {\n const {\n assets,\n maxAmountsIn,\n userData,\n fromInternalBalance,\n poolId,\n kind,\n sender,\n recipient,\n value,\n outputReference,\n } = params;\n\n const joinPoolRequest: JoinPoolRequest = {\n assets,\n maxAmountsIn,\n userData,\n fromInternalBalance,\n };\n\n const joinPoolInput: EncodeJoinPoolInput = {\n poolId,\n kind,\n sender,\n recipient,\n value,\n outputReference,\n joinPoolRequest,\n };\n\n return joinPoolInput;\n }\n\n static signRelayerApproval = async (\n relayerAddress: string,\n signerAddress: string,\n signer: JsonRpcSigner,\n vault: Vault\n ): Promise => {\n const approval = vault.interface.encodeFunctionData('setRelayerApproval', [\n signerAddress,\n relayerAddress,\n true,\n ]);\n\n const signature =\n await RelayerAuthorization.signSetRelayerApprovalAuthorization(\n vault,\n signer,\n relayerAddress,\n approval\n );\n\n const calldata = RelayerAuthorization.encodeCalldataAuthorization(\n '0x',\n MaxUint256,\n signature\n );\n\n return calldata;\n };\n}\n","import { BalancerSdkConfig } from '@/types';\nimport { GraphQLClient } from 'graphql-request';\nimport { getNetworkConfig } from '../sdk.helpers';\nimport { getSdk } from './generated/balancer-subgraph-types';\nimport { SubgraphClient } from './subgraph';\n\nexport class Subgraph {\n public readonly url: string;\n public readonly client: SubgraphClient;\n\n constructor(config: BalancerSdkConfig) {\n this.url = getNetworkConfig(config).urls.subgraph;\n this.client = this.initClient();\n }\n\n private initClient(): SubgraphClient {\n const client = new GraphQLClient(this.url);\n return getSdk(client);\n }\n}\n","import { Swaps } from '@/modules/swaps/swaps.module';\nimport { BalancerSdkConfig } from '@/types';\nimport {\n SubgraphPoolBase,\n ZERO,\n parseToPoolsDict,\n getSpotPriceAfterSwapForPath,\n} from '@balancer-labs/sor';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\n\nexport class Pricing {\n private readonly swaps: Swaps;\n\n constructor(config: BalancerSdkConfig, swaps?: Swaps) {\n if (swaps) {\n this.swaps = swaps;\n } else {\n this.swaps = new Swaps(config);\n }\n }\n\n /**\n * Retrieves pools using poolDataService.\n * @returns {boolean} Boolean indicating whether pools data was fetched correctly (true) or not (false).\n */\n async fetchPools(): Promise {\n return this.swaps.fetchPools();\n }\n\n /**\n * Get currently saved pools list (fetched using fetchPools()).\n * @returns {SubgraphPoolBase[]} pools list.\n */\n public getPools(): SubgraphPoolBase[] {\n return this.swaps.getPools();\n }\n\n /**\n * Calculates Spot Price for a token pair - finds most liquid path and uses this as reference SP.\n * @param { string } tokenIn Token in address.\n * @param { string } tokenOut Token out address.\n * @param { SubgraphPoolBase[] } pools Optional - Pool data. Will be fetched via dataProvider if not supplied.\n * @returns { string } Spot price.\n */\n async getSpotPrice(\n tokenIn: string,\n tokenOut: string,\n pools: SubgraphPoolBase[] = []\n ): Promise {\n // If pools list isn't supplied fetch it from swaps data provider\n if (pools.length === 0) {\n await this.fetchPools();\n pools = this.getPools();\n }\n\n // We find the path for the pair with the highest liquidity and use this as the ref SP\n const poolsDict = parseToPoolsDict(pools, 0);\n // This creates all paths for tokenIn>Out ordered by liquidity\n const paths = this.swaps.sor.routeProposer.getCandidatePathsFromDict(\n tokenIn,\n tokenOut,\n 0,\n poolsDict,\n 4\n );\n\n if (paths.length === 0)\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_PAIR);\n return getSpotPriceAfterSwapForPath(paths[0], 0, ZERO).toString();\n }\n}\n","import { Contract } from '@ethersproject/contracts';\nimport { Provider } from '@ethersproject/providers';\nimport { Signer } from '@ethersproject/abstract-signer';\n\nconst abi = [\n 'function getPoolId() view returns (bytes32)',\n 'function getSwapFeePercentage() view returns (uint256)',\n 'function getProtocolFeesCollector() view returns (address)',\n 'function inRecoveryMode() view returns (bool)',\n];\n\nexport const BasePool = (\n address: string,\n signerOrProvider: Signer | Provider\n): Contract => new Contract(address, abi, signerOrProvider);\n","import { set } from 'lodash';\nimport { Fragment, JsonFragment, Interface, Result } from '@ethersproject/abi';\nimport { CallOverrides } from '@ethersproject/contracts';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { Multicall } from '@/contracts';\n\nexport class Multicaller {\n private interface: Interface;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private calls: [string, string, any][] = [];\n private paths: string[] = [];\n\n constructor(\n private multicall: Multicall,\n abi: string | Array,\n private options: CallOverrides = {}\n ) {\n this.interface = new Interface(abi);\n }\n\n call(\n path: string,\n address: string,\n functionName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n params?: any[]\n ): Multicaller {\n this.calls.push([address, functionName, params]);\n this.paths.push(path);\n return this;\n }\n\n async execute(\n from: Record = {}\n ): Promise> {\n const obj = from;\n const results = await this.executeMulticall();\n results.forEach((result, i) =>\n set(obj, this.paths[i], result.length > 1 ? result : result[0])\n );\n this.calls = [];\n this.paths = [];\n return obj;\n }\n\n private async executeMulticall(): Promise {\n const [, res] = await this.multicall.callStatic.aggregate(\n this.calls.map(([address, functionName, params]) => ({\n target: address,\n callData: this.interface.encodeFunctionData(functionName, params),\n })),\n this.options\n );\n\n return res.map((result: BytesLike, i: number) =>\n this.interface.decodeFunctionResult(this.calls[i][1], result)\n );\n }\n}\n","export const oneSecondInMs = 1000;\nexport const twentyFourHoursInSecs = 24 * 60 * 60;\n\nexport function toJsTimestamp(unixTimestamp: number): number {\n return unixTimestamp * oneSecondInMs;\n}\n\nexport function toUnixTimestamp(jsTimestamp: number): number {\n return Math.round(jsTimestamp / oneSecondInMs);\n}\n\nexport function isLessThan24Hours(incomingDateInSec: number): boolean {\n const now = Math.round(Date.now() / 1000);\n const difference = now - incomingDateInSec;\n\n return difference < twentyFourHoursInSecs;\n}\n","import { JsonFragment } from '@ethersproject/abi';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { formatUnits } from '@ethersproject/units';\nimport { Multicall, VeBal__factory } from '@/contracts';\nimport { Multicaller } from '@/lib/utils/multiCaller';\nimport { toJsTimestamp } from '@/lib/utils/time';\n\nexport type VeBalLockInfo = {\n lockedEndDate: number;\n lockedAmount: string;\n totalSupply: string;\n epoch: string;\n hasExistingLock: boolean;\n isExpired: boolean;\n};\n\ntype VeBalLockInfoResult = {\n locked: BigNumber[];\n epoch: BigNumber;\n totalSupply: BigNumber;\n};\n\nexport class VeBal {\n constructor(private veBalAddress: string, private multicall: Multicall) {}\n\n public async getLockInfo(\n account: string\n ): Promise {\n if (!this.veBalAddress) throw new Error('veBal address must be defined');\n\n const multicaller = new Multicaller(this.multicall, [\n ...(VeBal__factory.abi as readonly JsonFragment[]),\n ]);\n\n multicaller.call('locked', this.veBalAddress, 'locked', [account]);\n multicaller.call('epoch', this.veBalAddress, 'epoch');\n multicaller.call('totalSupply', this.veBalAddress, 'totalSupply()');\n\n const result = await multicaller.execute();\n\n return this.formatLockInfo(result);\n }\n\n public formatLockInfo(lockInfo: VeBalLockInfoResult): VeBalLockInfo {\n const [lockedAmount, lockedEndDate] = lockInfo.locked;\n\n const hasExistingLock = lockedAmount.gt(0);\n const lockedEndDateNormalised = toJsTimestamp(lockedEndDate.toNumber());\n const isExpired = hasExistingLock && Date.now() > lockedEndDateNormalised;\n\n return {\n lockedEndDate: lockedEndDateNormalised,\n lockedAmount: formatUnits(lockedAmount),\n totalSupply: formatUnits(lockInfo.totalSupply),\n epoch: formatUnits(lockInfo.epoch, 0),\n hasExistingLock,\n isExpired,\n };\n }\n}\n","import { Provider } from '@ethersproject/providers';\nimport { Contract } from '@ethersproject/contracts';\nimport { formatUnits } from '@ethersproject/units';\n\nimport { VeDelegationProxy__factory } from '@/contracts';\nimport { ContractAddresses } from '@/types';\n\nexport class VeBalProxy {\n instance: Contract;\n\n constructor(addresses: ContractAddresses, provider: Provider) {\n if (!addresses.veBalProxy)\n throw new Error('veBalProxy address must be defined');\n this.instance = VeDelegationProxy__factory.connect(\n addresses.veBalProxy,\n provider\n );\n }\n\n async getAdjustedBalance(account: string): Promise {\n const balance = await this.instance.adjustedBalanceOf(account);\n return formatUnits(balance);\n }\n}\n","import { Contract } from '@ethersproject/contracts';\nimport { Provider } from '@ethersproject/providers';\nimport { Signer } from '@ethersproject/abstract-signer';\n\nimport { BasePool } from './implementations/base-pool';\nimport { VeBal } from './implementations/veBAL';\nimport { VeBalProxy } from './implementations/veBAL-proxy';\nimport {\n AaveLinearPoolFactory,\n AaveLinearPoolFactory__factory,\n BalancerHelpers,\n BalancerHelpers__factory,\n BalancerRelayer__factory,\n ComposableStablePoolFactory,\n ComposableStablePoolFactory__factory,\n ERC20,\n ERC20__factory,\n ERC4626LinearPoolFactory,\n ERC4626LinearPoolFactory__factory,\n EulerLinearPoolFactory,\n EulerLinearPoolFactory__factory,\n GaugeClaimHelper,\n GaugeClaimHelper__factory,\n GearboxLinearPoolFactory,\n GearboxLinearPoolFactory__factory,\n GyroConfig,\n GyroConfig__factory,\n LidoRelayer,\n LidoRelayer__factory,\n LiquidityGaugeV5__factory,\n Multicall,\n Multicall__factory,\n Vault,\n Vault__factory,\n WeightedPoolFactory,\n WeightedPoolFactory__factory,\n YearnLinearPoolFactory,\n YearnLinearPoolFactory__factory,\n} from '@/contracts';\nimport { Network } from '@/lib/constants/network';\nimport { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { ContractAddresses } from '@/types';\n\ntype ContractFactory = (\n address: string,\n signerOrProvider: Signer | Provider\n) => Contract;\n\nexport interface ContractInstances {\n aaveLinearPoolFactory?: AaveLinearPoolFactory;\n balancerHelpers: BalancerHelpers;\n BasePool: ContractFactory;\n composableStablePoolFactory?: ComposableStablePoolFactory;\n ERC20: ContractFactory;\n erc4626LinearPoolFactory?: ERC4626LinearPoolFactory;\n eulerLinearPoolFactory?: EulerLinearPoolFactory;\n gaugeClaimHelper?: GaugeClaimHelper;\n gearboxLinearPoolFactory?: GearboxLinearPoolFactory;\n gyroConfig?: GyroConfig;\n lidoRelayer?: LidoRelayer;\n liquidityGauge: ContractFactory;\n multicall: Multicall;\n relayer: Contract;\n vault: Vault;\n veBal?: VeBal;\n veBalProxy?: VeBalProxy;\n weightedPoolFactory?: WeightedPoolFactory;\n yearnLinearPoolFactory?: YearnLinearPoolFactory;\n}\n\nexport class Contracts {\n contractAddresses: ContractAddresses;\n private instances: ContractInstances;\n\n /**\n * Create instances of Balancer contracts connected to passed provider.\n * @param { Network | ContractAddresses } networkOrAddresses\n * @param { Provider } provider\n */\n constructor(\n networkOrAddresses: Network | ContractAddresses,\n provider: Provider\n ) {\n // Access addresses using passed network if available\n if (typeof networkOrAddresses === 'number') {\n this.contractAddresses =\n BALANCER_NETWORK_CONFIG[networkOrAddresses].addresses.contracts;\n } else {\n this.contractAddresses = networkOrAddresses;\n }\n\n const vault: Vault = Vault__factory.connect(\n this.contractAddresses.vault,\n provider\n );\n const balancerHelpers: BalancerHelpers = BalancerHelpers__factory.connect(\n this.contractAddresses.balancerHelpers,\n provider\n );\n let lidoRelayer: undefined | LidoRelayer;\n if (this.contractAddresses.lidoRelayer)\n lidoRelayer = LidoRelayer__factory.connect(\n this.contractAddresses.lidoRelayer,\n provider\n );\n\n const multicall: Multicall = Multicall__factory.connect(\n this.contractAddresses.multicall,\n provider\n );\n const relayer = BalancerRelayer__factory.connect(\n this.contractAddresses.balancerRelayer,\n provider\n );\n let veBal: undefined | VeBal;\n if (this.contractAddresses.veBal) {\n veBal = new VeBal(this.contractAddresses.veBal, multicall);\n }\n let veBalProxy: undefined | VeBalProxy;\n if (this.contractAddresses.veBalProxy) {\n veBalProxy = new VeBalProxy(this.contractAddresses, provider);\n }\n let gaugeClaimHelper: undefined | GaugeClaimHelper;\n if (this.contractAddresses.gaugeClaimHelper)\n gaugeClaimHelper = GaugeClaimHelper__factory.connect(\n this.contractAddresses.gaugeClaimHelper,\n provider\n );\n let composableStablePoolFactory: undefined | ComposableStablePoolFactory;\n if (this.contractAddresses.composableStablePoolFactory) {\n composableStablePoolFactory =\n ComposableStablePoolFactory__factory.connect(\n this.contractAddresses.composableStablePoolFactory,\n provider\n );\n }\n let weightedPoolFactory: undefined | WeightedPoolFactory;\n if (this.contractAddresses.weightedPoolFactory) {\n weightedPoolFactory = WeightedPoolFactory__factory.connect(\n this.contractAddresses.weightedPoolFactory,\n provider\n );\n }\n let aaveLinearPoolFactory: undefined | AaveLinearPoolFactory;\n if (this.contractAddresses.aaveLinearPoolFactory) {\n aaveLinearPoolFactory = AaveLinearPoolFactory__factory.connect(\n this.contractAddresses.aaveLinearPoolFactory,\n provider\n );\n }\n let erc4626LinearPoolFactory: undefined | ERC4626LinearPoolFactory;\n if (this.contractAddresses.erc4626LinearPoolFactory) {\n erc4626LinearPoolFactory = ERC4626LinearPoolFactory__factory.connect(\n this.contractAddresses.erc4626LinearPoolFactory,\n provider\n );\n }\n let eulerLinearPoolFactory: undefined | EulerLinearPoolFactory;\n if (this.contractAddresses.eulerLinearPoolFactory) {\n eulerLinearPoolFactory = EulerLinearPoolFactory__factory.connect(\n this.contractAddresses.eulerLinearPoolFactory,\n provider\n );\n }\n let gearboxLinearPoolFactory: undefined | GearboxLinearPoolFactory;\n if (this.contractAddresses.gearboxLinearPoolFactory) {\n gearboxLinearPoolFactory = GearboxLinearPoolFactory__factory.connect(\n this.contractAddresses.gearboxLinearPoolFactory,\n provider\n );\n }\n let yearnLinearPoolFactory: undefined | YearnLinearPoolFactory;\n if (this.contractAddresses.yearnLinearPoolFactory) {\n yearnLinearPoolFactory = YearnLinearPoolFactory__factory.connect(\n this.contractAddresses.yearnLinearPoolFactory,\n provider\n );\n }\n let gyroConfig: undefined | GyroConfig;\n if (this.contractAddresses.gyroConfigProxy) {\n gyroConfig = GyroConfig__factory.connect(\n this.contractAddresses.gyroConfigProxy,\n provider\n );\n }\n\n this.instances = {\n aaveLinearPoolFactory,\n balancerHelpers,\n BasePool: this.getBasePool,\n composableStablePoolFactory,\n ERC20: this.getErc20,\n erc4626LinearPoolFactory,\n eulerLinearPoolFactory,\n gaugeClaimHelper,\n gearboxLinearPoolFactory,\n gyroConfig,\n liquidityGauge: this.getLiquidityGauge,\n lidoRelayer,\n multicall,\n relayer,\n veBal,\n veBalProxy,\n weightedPoolFactory,\n yearnLinearPoolFactory,\n vault,\n };\n }\n\n /**\n * Expose contract instances.\n */\n get contracts(): ContractInstances {\n return this.instances;\n }\n\n /**\n * Helper to create ERC20 contract.\n * @param { string } address ERC20 address.\n * @param { Signer | Provider } signerOrProvider Signer or Provider.\n * @returns Contract.\n */\n getErc20(address: string, signerOrProvider: Signer | Provider): ERC20 {\n return ERC20__factory.connect(address, signerOrProvider);\n }\n\n /**\n * Helper to create base pool contract.\n * @param { string } address pool address.\n * @param { Signer | Provider } signerOrProvider Signer or Provider.\n * @returns Contract.\n */\n getBasePool(address: string, signerOrProvider: Signer | Provider): Contract {\n return BasePool(address, signerOrProvider);\n }\n\n /**\n * Helper to create LiquidityGauge contract.\n * @param { string } address Gauge address.\n * @param { Signer | Provider} signerOrProvider Signer or Provider.\n * @returns Contract.\n */\n getLiquidityGauge = LiquidityGaugeV5__factory.connect;\n}\n","/**\n * Calculate the Impermanent Loss for a given pool and user.\n *\n * 1. Prepare the data:\n * a. get exit price for pools' tokens\n * b. get entry price for pools' tokens\n * 2. calculate delta values for tokens in pools\n * 3. calculate and return the impermanent loss as percentage rounded to 2 decimal places.\n *\n */\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Findable, Pool, PoolToken, Price } from '@/types';\nimport { Logger } from '@/lib/utils/logger';\n\ntype Asset = {\n priceDelta: number;\n weight: number;\n};\n\ntype TokenPrices = {\n [key: string]: number;\n};\n\nexport class ImpermanentLossService {\n constructor(\n private tokenPrices: Findable,\n private tokenHistoricalPrices: Findable\n ) {}\n\n /**\n * entry point to calculate impermanent loss.\n *\n * The function will\n * - retrieve the tokens' historical value at the desired time in the future\n * - calculate the relative variation between current and historical value\n * - return the IL in percentage rounded to 2 decimal places\n *\n * @param timestamp UNIX timestamp from which the IL is desired\n * @param pool the pool\n * @returns the impermanent loss as percentage rounded to 2 decimal places\n */\n async calcImpLoss(timestamp: number, pool: Pool): Promise {\n if (timestamp * 1000 >= Date.now()) {\n console.error(\n `[ImpermanentLossService][calcImpLoss]Error: ${BalancerError.getMessage(\n BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE\n )}`\n );\n throw new BalancerError(BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE);\n }\n const assets = await this.prepareData(timestamp, pool);\n\n const poolValueDelta = this.getPoolValueDelta(assets);\n const holdValueDelta = this.getHoldValueDelta(assets);\n\n const impLoss = this.calculateImpermanentLoss(\n poolValueDelta,\n holdValueDelta\n );\n return impLoss;\n }\n\n calculateImpermanentLoss(\n poolValueDelta: number,\n holdValueDelta: number\n ): number {\n return (\n Math.floor(Math.abs(poolValueDelta / holdValueDelta - 1) * 100 * 100) /\n 100\n );\n }\n\n getPoolValueDelta(assets: Asset[]): number {\n return assets.reduce(\n (result, asset) =>\n result * Math.pow(Math.abs(asset.priceDelta + 1), asset.weight),\n 1\n );\n }\n\n getHoldValueDelta(assets: Asset[]): number {\n return assets.reduce(\n (result, asset) => result + Math.abs(asset.priceDelta + 1) * asset.weight,\n 0\n );\n }\n\n /**\n * prepare the data for calculating the impermanent loss\n *\n * @param entryTimestamp UNIX timestamp from which the IL is desired\n * @param pool the pool\n * @returns a list of pair weight/price delta for each token in the pool\n * @throws BalancerError if\n * 1. a token's price is unknown\n * 2. a token's weight is unknown\n * 3. the user has no liquidity invested in the pool\n */\n async prepareData(entryTimestamp: number, pool: Pool): Promise {\n const poolTokens = pool.tokens.filter(\n (token) => token.address !== pool.address\n );\n\n const weights = this.getWeights(poolTokens);\n\n const tokenAddresses = poolTokens.map((t) => t.address);\n\n const entryPrices = await this.getEntryPrices(\n entryTimestamp,\n tokenAddresses\n );\n const exitPrices: TokenPrices = await this.getExitPrices(poolTokens);\n\n return this.getAssets(poolTokens, exitPrices, entryPrices, weights);\n }\n\n getAssets(\n poolTokens: PoolToken[],\n exitPrices: TokenPrices,\n entryPrices: TokenPrices,\n weights: number[]\n ): Asset[] {\n return poolTokens.map((token, i) => ({\n priceDelta: this.getDelta(\n entryPrices[token.address],\n exitPrices[token.address]\n ),\n weight: weights[i],\n }));\n }\n\n getDelta(entryPrice: number, exitPrice: number): number {\n if (entryPrice === 0) {\n console.error(\n `[ImpermanentLossService][getDelta]Error: ${BalancerError.getMessage(\n BalancerErrorCode.ILLEGAL_PARAMETER\n )}: entry price is 0`\n );\n throw new BalancerError(BalancerErrorCode.ILLEGAL_PARAMETER);\n }\n return (exitPrice - entryPrice) / entryPrice;\n }\n\n /**\n * returns the list of token's weights.\n *\n * @param poolTokens the pools' tokens\n * @returns the list of token's weights\n * @throws BalancerError if a token's weight is missing\n *\n */\n getWeights(poolTokens: PoolToken[]): number[] {\n const noWeights = poolTokens.every((token) => !token.weight);\n const uniformWeight = Math.round((1 / poolTokens.length) * 100) / 100;\n const weights: number[] = noWeights\n ? poolTokens.map(() => uniformWeight) // if no weight is returned we assume the tokens are balanced uniformly in the pool\n : poolTokens.map((token) => Number(token.weight ?? 0));\n\n if (weights.some((w) => w === 0)) {\n console.error(\n `[ImpermanentLossService][getWeights]Error: ${BalancerError.getMessage(\n BalancerErrorCode.MISSING_WEIGHT\n )}`\n );\n throw new BalancerError(BalancerErrorCode.MISSING_WEIGHT);\n }\n return weights;\n }\n\n /**\n * get the current's tokens' prices\n * @param tokens the pools' tokens\n * @returns a list of tokens with prices\n */\n async getExitPrices(tokens: PoolToken[]): Promise {\n const prices = await Promise.all(\n tokens.map((token) => this.tokenPrices.find(token.address))\n ).catch(() => []);\n\n if (!prices.length || prices.some((price) => price?.usd === undefined)) {\n console.error(\n `[ImpermanentLossService][getExitPrices]Error: ${BalancerError.getMessage(\n BalancerErrorCode.MISSING_PRICE_RATE\n )}`\n );\n throw new BalancerError(BalancerErrorCode.MISSING_PRICE_RATE);\n }\n\n const tokensWithPrice = tokens.map((token, i) => ({\n ...token,\n price: prices[i],\n }));\n\n const tokenPrices: TokenPrices = {};\n for (const token of tokensWithPrice) {\n if (token.price?.usd) tokenPrices[token.address] = +token.price.usd; // price.usd is never undefined but JS complains\n }\n return tokenPrices;\n }\n\n /**\n * get the tokens' price at a given time\n *\n * @param timestamp the Unix timestamp\n * @param tokenAddresses the tokens' addresses\n * @returns a map of tokens' price\n */\n async getEntryPrices(\n timestamp: number,\n tokenAddresses: string[]\n ): Promise {\n const prices: TokenPrices = {};\n for (const address of tokenAddresses) {\n const price = await this.tokenHistoricalPrices\n .findBy(address, timestamp)\n .catch((reason) => {\n const logger = Logger.getInstance();\n logger.warn(\n `[ImpermanentLossService][getEntryPrices]Error: ${reason.message}`\n );\n return undefined;\n });\n if (!price?.usd) {\n const logger = Logger.getInstance();\n logger.warn(\n `[ImpermanentLossService][getEntryPrices]Error: ${BalancerError.getMessage(\n BalancerErrorCode.MISSING_PRICE_RATE\n )}`\n );\n throw new BalancerError(BalancerErrorCode.MISSING_PRICE_RATE);\n }\n prices[address] = +price.usd;\n }\n return prices;\n }\n}\n","/**\n * Weekly Bal emissions are fixed / year according to:\n * https://docs.google.com/spreadsheets/d/1FY0gi596YWBOTeu_mrxhWcdF74SwKMNhmu0qJVgs0KI/edit#gid=0\n *\n * Using regular numbers for simplicity assuming frontend use only.\n *\n * Calculation source\n * https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/liquidity-mining/contracts/BalancerTokenAdmin.sol\n */\n\nexport const INITIAL_RATE = 145000;\nexport const START_EPOCH_TIME = 1648465251;\nconst RATE_REDUCTION_TIME = 365 * 86400;\nconst RATE_REDUCTION_COEFFICIENT = 2 ** (1 / 4);\n\n/**\n * Weekly BAL emissions\n *\n * @param currentTimestamp used to get the epoch\n * @returns BAL emitted in a week\n */\nexport const weekly = (\n currentTimestamp: number = Math.round(new Date().getTime() / 1000)\n): number => {\n const miningEpoch = Math.floor(\n (currentTimestamp - START_EPOCH_TIME) / RATE_REDUCTION_TIME\n );\n\n const rate = INITIAL_RATE * RATE_REDUCTION_COEFFICIENT ** -miningEpoch;\n\n return rate;\n};\n\n/**\n * Total BAL emitted in epoch (1 year)\n *\n * @param epoch starting from 0 for the first year of emissions\n * @returns BAL emitted in epoch\n */\nexport const total = (epoch: number): number => {\n const weeklyRate = INITIAL_RATE * RATE_REDUCTION_COEFFICIENT ** -epoch;\n const dailyRate = weeklyRate / 7;\n\n return dailyRate * 365;\n};\n\n/**\n * Total BAL emitted between two timestamps\n *\n * @param start starting timestamp\n * @param end ending timestamp\n * @returns BAL emitted in period\n */\nexport const between = (start: number, end: number): number => {\n if (start < START_EPOCH_TIME) {\n throw 'start timestamp before emission schedule deployment';\n }\n if (end < start) {\n throw 'cannot finish before starting';\n }\n\n let totalEmissions = 0;\n\n const startingEpoch = Math.floor(\n (start - START_EPOCH_TIME) / RATE_REDUCTION_TIME\n );\n const endingEpoch = Math.floor(\n (end - START_EPOCH_TIME) / RATE_REDUCTION_TIME\n );\n\n for (\n let currentEpoch = startingEpoch;\n currentEpoch <= endingEpoch;\n currentEpoch++\n ) {\n totalEmissions += total(currentEpoch);\n }\n\n // Subtract what isn't emmited within the time range\n const startingEpochEnd =\n START_EPOCH_TIME + RATE_REDUCTION_TIME * (startingEpoch + 1);\n const endingEpochStart = START_EPOCH_TIME + RATE_REDUCTION_TIME * endingEpoch;\n\n const secondsInStartingEpoch = startingEpochEnd - start;\n const secondsInEndingEpoch = end - endingEpochStart;\n\n totalEmissions -=\n (total(startingEpoch) * (RATE_REDUCTION_TIME - secondsInStartingEpoch)) /\n RATE_REDUCTION_TIME;\n totalEmissions -=\n (total(endingEpoch) * (RATE_REDUCTION_TIME - secondsInEndingEpoch)) /\n RATE_REDUCTION_TIME;\n\n return totalEmissions;\n};\n","import { Findable, Price } from '@/types';\nimport { BaseFeeDistributor } from '@/modules/data';\n\nexport interface ProtocolRevenueData {\n lastWeekBalRevenue: number;\n lastWeekBBAUsdRevenue: number;\n veBalSupply: number;\n}\n\nexport class ProtocolRevenue {\n constructor(\n private repository: BaseFeeDistributor,\n private tokenPrices: Findable\n ) {}\n\n async data(now = Date.now()): Promise {\n const data = await this.repository.multicallData(now);\n const balPrice = await this.tokenPrices.find(data.balAddress);\n\n if (!balPrice || !balPrice.usd) {\n throw `No BAL USD price found`;\n }\n\n return {\n lastWeekBalRevenue: data.balAmount * parseFloat(balPrice.usd),\n lastWeekBBAUsdRevenue: data.bbAUsdAmount * data.bbAUsdPrice,\n veBalSupply: data.veBalSupply,\n };\n }\n}\n","/**\n * Calculates pool fees\n *\n * 1. Pool fees in last 24hrs\n */\nimport { isLessThan24Hours } from '@/lib/utils/time';\nimport { Pool, Findable, PoolAttribute } from '@/types';\n\nexport class PoolFees {\n constructor(\n private yesterdaysPools: Findable | undefined\n ) {}\n\n // 🚨 this is adding 1 call to get yesterday's block height and 2nd call to fetch yesterday's pools data from subgraph\n // TODO: find a better data source for that eg. add blocks to graph, replace with a database, or dune\n async last24h(pool: Pool): Promise {\n let yesterdaysPool;\n if (this.yesterdaysPools) {\n yesterdaysPool = await this.yesterdaysPools.find(pool.id);\n }\n if (!pool.totalSwapFee) {\n return 0;\n }\n\n if (!yesterdaysPool?.totalSwapFee) {\n // Process edge case when pool creation time is less that 24h\n if (pool.createTime && isLessThan24Hours(pool.createTime)) {\n return parseFloat(pool.totalSwapFee);\n }\n return 0;\n }\n\n return (\n parseFloat(pool.totalSwapFee) - parseFloat(yesterdaysPool.totalSwapFee)\n );\n }\n}\n","import { formatUnits } from '@ethersproject/units';\nimport * as emissions from '@/modules/data/bal/emissions';\nimport type {\n Findable,\n Pool,\n PoolAttribute,\n Price,\n Token,\n TokenAttribute,\n LiquidityGauge,\n Network,\n PoolToken,\n} from '@/types';\nimport { BaseFeeDistributor } from '@/modules/data';\nimport { ProtocolRevenue } from './protocol-revenue';\nimport { Liquidity } from '@/modules/liquidity/liquidity.module';\nimport { identity, zipObject, pickBy } from 'lodash';\nimport { PoolFees } from '../fees/fees';\nimport { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { Logger } from '@/lib/utils/logger';\nimport { GyroConfigRepository } from '@/modules/data/gyro-config/repository';\nimport { POOLS_TO_IGNORE } from '@/lib/constants/poolsToIgnore';\n\nexport interface AprBreakdown {\n swapFees: number;\n tokenAprs: {\n total: number;\n breakdown: { [address: string]: number };\n };\n stakingApr: {\n min: number;\n max: number;\n };\n rewardAprs: {\n total: number;\n breakdown: { [address: string]: number };\n };\n protocolApr: number;\n min: number;\n max: number;\n}\n\n/**\n * Calculates pool APR via summing up sources of APR:\n *\n * 1. Swap fees (pool level) data coming from subgraph\n * 2. Yield bearing pool tokens, with data from external sources eg: http endpoints, subgraph, onchain\n * * stETH\n * * aave\n * * usd+\n * map token: calculatorFn\n * 3. Staking rewards based from veBal gauges\n */\nexport class PoolApr {\n constructor(\n private pools: Findable,\n private tokenPrices: Findable,\n private tokenMeta: Findable,\n private tokenYields: Findable,\n private feeCollector: Findable,\n private yesterdaysPools?: Findable,\n private liquidityGauges?: Findable,\n private feeDistributor?: BaseFeeDistributor,\n private gyroConfigRepository?: GyroConfigRepository\n ) {}\n\n /**\n * Pool revenue via swap fees.\n * Fees and liquidity are takes from subgraph as USD floats.\n *\n * @returns APR [bsp] from fees accumulated over last 24h\n */\n async swapFees(pool: Pool): Promise {\n // 365 * dailyFees * (1 - protocolFees) / totalLiquidity\n const last24hFees = await this.last24hFees(pool);\n const totalLiquidity = await this.totalLiquidity(pool);\n // TODO: what to do when we are missing last24hFees or totalLiquidity?\n // eg: stable phantom returns 0\n if (!last24hFees || !totalLiquidity) {\n return 0;\n }\n const dailyFees =\n last24hFees * (1 - (await this.protocolSwapFeePercentage(pool)));\n const feesDailyBsp = 10000 * (dailyFees / parseFloat(totalLiquidity));\n\n return Math.round(365 * feesDailyBsp);\n }\n\n /**\n * Pool revenue from holding yield-bearing wrapped tokens.\n *\n * @returns APR [bsp] from tokens contained in the pool\n */\n async tokenAprs(pool: Pool): Promise {\n if (!pool.tokens) {\n return {\n total: 0,\n breakdown: {},\n };\n }\n\n const totalLiquidity = await this.totalLiquidity(pool);\n\n // Filter out BPT: token with the same address as the pool\n // TODO: move this to data layer\n const bptFreeTokens = pool.tokens.filter((token) => {\n return token.address !== pool.address;\n });\n\n // Get each token APRs\n const aprs = await Promise.all(\n bptFreeTokens.map(async (token) => {\n let apr = 0;\n const tokenYield = await this.tokenYields.find(token.address);\n if (tokenYield) {\n // metastable pools incorrectly apply the swap fee to the yield earned.\n // they don't have the concept of a yield fee like the newer pools do.\n if (\n pool.poolType === 'MetaStable' ||\n pool.poolType.includes('Gyro')\n ) {\n apr =\n tokenYield * (1 - (await this.protocolSwapFeePercentage(pool)));\n } else if (\n pool.poolType === 'ComposableStable' ||\n (pool.poolType === 'Weighted' && pool.poolTypeVersion >= 2)\n ) {\n if (token.isExemptFromYieldProtocolFee) {\n apr = tokenYield;\n } else {\n apr =\n tokenYield *\n (1 - parseFloat(pool.protocolYieldFeeCache || '0.5'));\n }\n } else {\n apr = tokenYield;\n }\n } else {\n // Handle subpool APRs with recursive call to get the subPool APR\n const subPool = await this.pools.findBy('address', token.address);\n\n if (subPool) {\n // INFO: Liquidity mining APR can't cascade to other pools\n const subSwapFees = await this.swapFees(subPool);\n const subtokenAprs = await this.tokenAprs(subPool);\n let subApr = subtokenAprs.total;\n if (\n pool.poolType === 'ComposableStable' ||\n (pool.poolType === 'Weighted' && pool.poolTypeVersion === 2)\n ) {\n if (!token.isExemptFromYieldProtocolFee) {\n subApr =\n subApr *\n (1 - parseFloat(pool.protocolYieldFeeCache || '0.5'));\n }\n }\n apr = subSwapFees + subApr;\n }\n }\n\n return apr;\n })\n );\n\n // Get token weights normalised by usd price\n const getWeight = async (token: PoolToken): Promise => {\n let tokenPrice: string | undefined;\n if (token.weight) {\n return parseFloat(token.weight);\n } else if (token.token?.pool?.poolType) {\n const poolToken = await this.pools.findBy('address', token.address);\n if (poolToken) {\n tokenPrice = (await this.bptPrice(poolToken)).toString();\n }\n } else {\n tokenPrice =\n token.price?.usd ||\n (await this.tokenPrices.find(token.address))?.usd ||\n token.token?.latestUSDPrice;\n }\n if (tokenPrice) {\n // using floats assuming frontend purposes with low precision needs\n const tokenValue = parseFloat(token.balance) * parseFloat(tokenPrice);\n return tokenValue / parseFloat(totalLiquidity);\n } else {\n throw `No price for ${token.address}`;\n }\n };\n\n // Normalise tokenAPRs according to weights\n const weightedAprs = await Promise.all(\n bptFreeTokens.map(async (token, idx) => {\n if (aprs[idx] === 0) {\n return 0;\n }\n\n // Handle missing token weights, usually due to missing token prices\n try {\n const weight = await getWeight(token);\n return Math.round(aprs[idx] * weight);\n } catch (e) {\n const logger = Logger.getInstance();\n logger.error(e as string);\n return 0;\n }\n })\n );\n\n // sum them up to get pool APRs\n const apr = weightedAprs.reduce((sum, apr) => sum + apr, 0);\n const breakdown = pickBy(\n zipObject(\n bptFreeTokens.map((t) => t.address),\n weightedAprs\n ),\n identity\n );\n\n return {\n total: apr,\n breakdown,\n };\n }\n\n /**\n * Calculates staking rewards based on veBal gauges deployed with Curve Finance contracts.\n * https://curve.readthedocs.io/dao-gauges.html\n *\n * Terminology:\n * - LP token of a gauge is a BPT of a pool\n * - Depositing into a gauge is called staking on the frontend\n * - gauge totalSupply - BPT tokens deposited to a gauge\n * - gauge workingSupply - effective BPT tokens participating in reward distribution. sum of 40% deposit + 60% boost from individual user's veBal\n * - gauge relative weight - weight of this gauge in bal inflation distribution [0..1] scaled to 1e18\n *\n * APR sources:\n * - gauge BAL emissions = min: 40% of totalSupply, max: 40% of totalSupply + 60% of totalSupply * gauge LPs voting power\n * https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/liquidity-mining/contracts/gauges/ethereum/LiquidityGaugeV5.vy#L338\n * - gauge reward tokens: Admin or designated depositor has an option to deposit additional reward with a weekly accruing cadence.\n * https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/liquidity-mining/contracts/gauges/ethereum/LiquidityGaugeV5.vy#L641\n * rate: amount of token per second\n *\n * @param pool\n * @param boost range between 1 and 2.5\n * @returns APR [bsp] from protocol rewards.\n */\n async stakingApr(pool: Pool, boost = 1): Promise {\n if (!this.liquidityGauges) {\n return 0;\n }\n\n // Data resolving\n const gauge = await this.liquidityGauges.findBy('poolId', pool.id);\n if (\n !gauge ||\n (pool.chainId == 1 && gauge.workingSupply === 0) ||\n (pool.chainId > 1 && gauge.totalSupply === 0) ||\n (pool.chainId > 1 && gauge.balInflationRate === 0)\n ) {\n return 0;\n }\n\n const bal =\n BALANCER_NETWORK_CONFIG[pool.chainId as Network].addresses.tokens.bal;\n if (!bal) {\n return 0;\n }\n\n const [balPrice, bptPriceUsd] = await Promise.all([\n this.tokenPrices.find(bal), // BAL\n this.bptPrice(pool),\n ]);\n\n if (!balPrice?.usd) {\n throw 'Missing BAL price';\n }\n\n const gaugeSupply = (gauge.workingSupply + 0.4) / 0.4; // Only 40% of LP token staked accrue emissions, totalSupply = workingSupply * 2.5\n const gaugeSupplyUsd = gaugeSupply * bptPriceUsd;\n\n // Handle child chain gauges with inflation_rate\n // balInflationRate - amount of BAL tokens per second as a float\n if (gauge.balInflationRate) {\n const reward =\n gauge.balInflationRate * 86400 * 365 * parseFloat(balPrice.usd);\n return Math.round((boost * 10000 * reward) / gaugeSupplyUsd);\n } else if (pool.chainId > 1) {\n // TODO: remove after all gauges are migrated (around 01-07-2023), Subgraph is returning BAL staking rewards as reward tokens for L2 gauges.\n if (!gauge.rewardTokens) {\n return 0;\n }\n\n const balReward = bal && gauge.rewardTokens[bal];\n if (balReward) {\n let reward: { address: string; value: number };\n try {\n reward = await this.rewardTokenApr(bal, balReward);\n const totalSupplyUsd = gauge.totalSupply * bptPriceUsd;\n const rewardValue = reward.value / totalSupplyUsd;\n return Math.round(10000 * rewardValue);\n } catch (e) {\n return 0;\n }\n } else {\n return 0;\n }\n }\n\n // Handle mainnet gauges\n const balPriceUsd = parseFloat(balPrice.usd);\n const now = Math.round(new Date().getTime() / 1000);\n const totalBalEmissions = (emissions.weekly(now) / 7) * 365;\n const gaugeBalEmissions = totalBalEmissions * gauge.relativeWeight;\n const gaugeBalEmissionsUsd = gaugeBalEmissions * balPriceUsd;\n const gaugeBalAprBps = Math.round(\n (boost * 10000 * gaugeBalEmissionsUsd) / gaugeSupplyUsd\n );\n\n return gaugeBalAprBps;\n }\n\n /**\n * Some gauges are holding tokens distributed as rewards to LPs.\n *\n * @param pool\n * @returns APR [bsp] from token rewards.\n */\n async rewardAprs(pool: Pool): Promise {\n if (!this.liquidityGauges) {\n return { total: 0, breakdown: {} };\n }\n\n // Data resolving\n const gauge = await this.liquidityGauges.findBy('poolId', pool.id);\n if (\n !gauge ||\n !gauge.rewardTokens ||\n Object.keys(gauge.rewardTokens).length < 1\n ) {\n return { total: 0, breakdown: {} };\n }\n\n // BAL rewards already returned as stakingApr, so we can filter them out\n const bal =\n BALANCER_NETWORK_CONFIG[pool.chainId as Network].addresses.tokens.bal;\n const rewardTokenAddresses = Object.keys(gauge.rewardTokens).filter(\n (a) => a != bal\n );\n\n // Gets each tokens rate, extrapolate to a year and convert to USD\n const rewards = rewardTokenAddresses.map(async (tAddress) => {\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n const data = gauge!.rewardTokens![tAddress];\n try {\n const reward = await this.rewardTokenApr(tAddress, data);\n return reward;\n } catch (e) {\n return { address: tAddress, value: 0 };\n }\n });\n\n // Get the gauge totalSupplyUsd\n const bptPriceUsd = await this.bptPrice(pool);\n const totalSupplyUsd = gauge.totalSupply * bptPriceUsd;\n\n if (totalSupplyUsd == 0) {\n return { total: 0, breakdown: {} };\n }\n\n const rewardTokensBreakdown: Record = {};\n\n let total = 0;\n for await (const reward of Object.values(rewards)) {\n const rewardValue = reward.value / totalSupplyUsd;\n const rewardValueScaled = Math.round(10000 * rewardValue);\n total += rewardValueScaled;\n rewardTokensBreakdown[reward.address] = rewardValueScaled;\n }\n\n return {\n total,\n breakdown: rewardTokensBreakdown,\n };\n }\n\n /**\n * 80BAL-20WETH pool is accruing protocol revenue.\n *\n * @param pool\n * @returns accrued protocol revenue as APR [bsp]\n */\n async protocolApr(pool: Pool): Promise {\n const veBalPoolId =\n '0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014';\n\n if (pool.id != veBalPoolId || !this.feeDistributor) {\n return 0;\n }\n\n const revenue = new ProtocolRevenue(this.feeDistributor, this.tokenPrices);\n\n const { lastWeekBalRevenue, lastWeekBBAUsdRevenue, veBalSupply } =\n await revenue.data();\n\n const bptPrice = await this.bptPrice(pool);\n if (!bptPrice) {\n throw 'bptPrice for veBal pool missing';\n }\n\n const dailyRevenue = (lastWeekBalRevenue + lastWeekBBAUsdRevenue) / 7;\n const apr = Math.round(\n (10000 * (365 * dailyRevenue)) / (bptPrice * veBalSupply)\n );\n\n return apr;\n }\n\n /**\n * Composes all sources for total pool APR.\n *\n * @returns pool APR split [bsp]\n */\n async apr(pool: Pool): Promise {\n if (POOLS_TO_IGNORE.includes(pool.id)) {\n return {\n swapFees: 0,\n tokenAprs: {\n total: 0,\n breakdown: {},\n },\n stakingApr: {\n min: 0,\n max: 0,\n },\n rewardAprs: {\n total: 0,\n breakdown: {},\n },\n protocolApr: 0,\n min: 0,\n max: 0,\n };\n }\n const [\n swapFees,\n tokenAprs,\n minStakingApr,\n maxStakingApr,\n rewardAprs,\n protocolApr,\n ] = await Promise.all([\n this.swapFees(pool), // pool snapshot for last 24h fees dependency\n this.tokenAprs(pool),\n this.stakingApr(pool),\n this.stakingApr(pool, 2.5),\n this.rewardAprs(pool),\n this.protocolApr(pool),\n ]);\n\n return {\n swapFees,\n tokenAprs,\n stakingApr: {\n min: minStakingApr,\n max: maxStakingApr,\n },\n rewardAprs,\n protocolApr,\n min: swapFees + tokenAprs.total + rewardAprs.total + minStakingApr,\n max:\n swapFees +\n tokenAprs.total +\n rewardAprs.total +\n protocolApr +\n maxStakingApr,\n };\n }\n\n private async last24hFees(pool: Pool): Promise {\n const poolFees = new PoolFees(this.yesterdaysPools);\n return poolFees.last24h(pool);\n }\n\n /**\n * Total Liquidity based on USD token prices taken from external price feed, eg: coingecko.\n *\n * @param pool\n * @returns Pool liquidity in USD\n */\n private async totalLiquidity(pool: Pool): Promise {\n try {\n const liquidityService = new Liquidity(this.pools, this.tokenPrices);\n const liquidity = await liquidityService.getLiquidity(pool);\n return liquidity;\n } catch (err) {\n const logger = Logger.getInstance();\n logger.warn('Liquidity calculcation failed, falling back to subgraph');\n return pool.totalLiquidity;\n }\n }\n\n /**\n * BPT price as pool totalLiquidity / pool total Shares\n * Total Liquidity is calculated based on USD token prices taken from external price feed, eg: coingecko.\n *\n * @param pool\n * @returns BPT price in USD\n */\n private async bptPrice(pool: Pool) {\n return (\n parseFloat(await this.totalLiquidity(pool)) / parseFloat(pool.totalShares)\n );\n }\n\n private async protocolSwapFeePercentage(pool: Pool) {\n let fee = 0.5;\n if (pool.poolType.includes('Gyro') && this.gyroConfigRepository) {\n fee = await this.gyroConfigRepository.getGyroProtocolFee(pool.address);\n } else if (pool.protocolSwapFeeCache) {\n fee = parseFloat(pool.protocolSwapFeeCache);\n } else {\n fee = (await this.feeCollector.find('')) || 0.5;\n }\n return fee;\n }\n\n private async rewardTokenApr(\n tokenAddress: string,\n rewardData: { rate: BigNumber; period_finish: BigNumber; decimals?: number }\n ) {\n if (rewardData.period_finish.toNumber() < Date.now() / 1000) {\n return {\n address: tokenAddress,\n value: 0,\n };\n } else {\n const yearlyReward = rewardData.rate.mul(86400).mul(365);\n const price = await this.tokenPrices.find(tokenAddress);\n if (price && price.usd) {\n let decimals = 18;\n if (rewardData.decimals) {\n decimals = rewardData.decimals;\n } else {\n const meta = await this.tokenMeta.find(tokenAddress);\n decimals = meta?.decimals || 18;\n }\n const yearlyRewardUsd =\n parseFloat(formatUnits(yearlyReward, decimals)) *\n parseFloat(price.usd);\n return {\n address: tokenAddress,\n value: yearlyRewardUsd,\n };\n } else {\n throw `No USD price for ${tokenAddress}`;\n }\n }\n }\n}\n","import { BigNumber, parseFixed } from '@ethersproject/bignumber';\nimport { Zero, WeiPerEther } from '@ethersproject/constants';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { isSameAddress, parsePoolInfo } from '@/lib/utils';\nimport { _downscaleDown } from '@/lib/utils/solidityMaths';\nimport { Pool, PoolAttribute, PoolType } from '@/types';\n\nimport { Findable } from '../data/types';\nimport { PoolTypeConcerns } from '../pools/pool-type-concerns';\n\ntype SpotPrices = { [tokenIn: string]: string };\n\nconst supportedPoolTypes: string[] = Object.values(PoolType);\nexport interface Node {\n address: string;\n id: string;\n joinAction: JoinAction;\n exitAction: ExitAction;\n isProportionalExit: boolean;\n type: string;\n children: Node[];\n marked: boolean;\n index: string;\n proportionOfParent: BigNumber;\n parent: Node | undefined;\n isLeaf: boolean;\n spotPrices: SpotPrices;\n decimals: number;\n balance: string;\n priceRate: string;\n}\n\ntype JoinAction = 'input' | 'batchSwap' | 'wrap' | 'joinPool';\nconst joinActions = new Map();\nsupportedPoolTypes.forEach((type) => {\n if (type.includes('Linear') && supportedPoolTypes.includes(type))\n joinActions.set(type as PoolType, 'batchSwap');\n});\njoinActions.set(PoolType.Element, 'batchSwap');\njoinActions.set(PoolType.Investment, 'joinPool');\njoinActions.set(PoolType.LiquidityBootstrapping, 'joinPool');\njoinActions.set(PoolType.MetaStable, 'joinPool');\njoinActions.set(PoolType.Stable, 'joinPool');\njoinActions.set(PoolType.StablePhantom, 'batchSwap');\njoinActions.set(PoolType.Weighted, 'joinPool');\njoinActions.set(PoolType.ComposableStable, 'joinPool');\n\ntype ExitAction = 'output' | 'batchSwap' | 'unwrap' | 'exitPool';\nconst exitActions = new Map();\nsupportedPoolTypes.forEach((type) => {\n if (type.includes('Linear') && supportedPoolTypes.includes(type))\n exitActions.set(type as PoolType, 'batchSwap');\n});\nexitActions.set(PoolType.Element, 'batchSwap');\nexitActions.set(PoolType.Investment, 'exitPool');\nexitActions.set(PoolType.LiquidityBootstrapping, 'exitPool');\nexitActions.set(PoolType.MetaStable, 'exitPool');\nexitActions.set(PoolType.Stable, 'exitPool');\nexitActions.set(PoolType.StablePhantom, 'batchSwap');\nexitActions.set(PoolType.Weighted, 'exitPool');\nexitActions.set(PoolType.ComposableStable, 'exitPool');\n\nexport class PoolGraph {\n constructor(private pools: Findable) {}\n\n async buildGraphFromRootPool(\n poolId: string,\n tokensToUnwrap: string[]\n ): Promise {\n const rootPool = await this.pools.find(poolId);\n if (!rootPool) throw new BalancerError(BalancerErrorCode.POOL_DOESNT_EXIST);\n const nodeIndex = 0;\n const rootNode = await this.buildGraphFromPool(\n rootPool.address,\n nodeIndex,\n undefined,\n WeiPerEther,\n tokensToUnwrap\n );\n return rootNode[0];\n }\n\n getTokenTotal(pool: Pool): BigNumber {\n const bptIndex = pool.tokensList.indexOf(pool.address);\n let total = Zero;\n const { balancesEvm } = parsePoolInfo(pool);\n balancesEvm.forEach((balance, i) => {\n // Ignore phantomBpt balance\n if (bptIndex !== i) {\n total = total.add(balance);\n }\n });\n return total;\n }\n\n async buildGraphFromPool(\n address: string,\n nodeIndex: number,\n parent: Node | undefined,\n proportionOfParent: BigNumber,\n tokensToUnwrap: string[]\n ): Promise<[Node, number]> {\n const pool = await this.pools.findBy('address', address);\n\n if (!pool) {\n if (!parent) {\n // If pool not found by address and is root pool (without parent), then throw error\n throw new BalancerError(BalancerErrorCode.POOL_DOESNT_EXIST);\n } else {\n // If pool not found by address, but it has parent, assume it's a leaf token and add a leafTokenNode\n const parentPool = (await this.pools.findBy(\n 'address',\n parent.address\n )) as Pool;\n const tokenIndex = parentPool.tokensList.indexOf(address);\n const leafTokenDecimals = parentPool.tokens[tokenIndex].decimals ?? 18;\n const { balancesEvm } = parsePoolInfo(parentPool);\n\n const nodeInfo = PoolGraph.createInputTokenNode(\n nodeIndex,\n address,\n leafTokenDecimals,\n parent,\n proportionOfParent,\n balancesEvm[tokenIndex].toString()\n );\n return nodeInfo;\n }\n }\n\n const joinAction = joinActions.get(pool.poolType);\n const exitAction = exitActions.get(pool.poolType);\n if (!joinAction || !exitAction)\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n\n const tokenTotal = this.getTokenTotal(pool);\n // Spot price service\n const { spotPriceCalculator } = PoolTypeConcerns.from(pool.poolType);\n const spotPrices: SpotPrices = {};\n let decimals = 18;\n // Spot price of a path is product of the sp of each pool in path. We calculate the sp for each pool token here to use as required later.\n pool.tokens.forEach((token) => {\n if (isSameAddress(token.address, pool.address)) {\n // Updated node with BPT token decimal\n decimals = token.decimals ? token.decimals : 18;\n return;\n }\n const sp = spotPriceCalculator.calcPoolSpotPrice(\n token.address,\n pool.address,\n pool\n );\n spotPrices[token.address] = sp;\n });\n\n let poolNode: Node = {\n address: pool.address,\n id: pool.id,\n type: pool.poolType,\n joinAction,\n exitAction,\n isProportionalExit: false,\n children: [],\n marked: false,\n index: nodeIndex.toString(),\n parent,\n proportionOfParent,\n isLeaf: false,\n spotPrices,\n decimals,\n balance: pool.totalShares,\n priceRate: WeiPerEther.toString(),\n };\n this.updateNodeIfProportionalExit(pool, poolNode);\n nodeIndex++;\n if (pool.poolType.toString().includes('Linear')) {\n [poolNode, nodeIndex] = this.createLinearNodeChildren(\n poolNode,\n nodeIndex,\n pool,\n tokensToUnwrap\n );\n } else {\n const { balancesEvm } = parsePoolInfo(pool);\n for (let i = 0; i < pool.tokens.length; i++) {\n // ignore any phantomBpt tokens\n if (isSameAddress(pool.tokens[i].address, pool.address)) continue;\n let proportion: BigNumber;\n // If the pool is a weighted pool we can use the actual tokenWeight as proportion\n if (pool.poolType === 'Weighted') {\n const tokenWeight = pool.tokens[i].weight as string;\n proportion = parseFixed(tokenWeight, 18);\n } else {\n proportion = BigNumber.from(balancesEvm[i])\n .mul((1e18).toString())\n .div(tokenTotal);\n }\n const finalProportion = proportion\n .mul(proportionOfParent)\n .div((1e18).toString());\n const childNode = await this.buildGraphFromPool(\n pool.tokens[i].address,\n nodeIndex,\n poolNode,\n finalProportion,\n tokensToUnwrap\n );\n nodeIndex = childNode[1];\n if (childNode[0]) poolNode.children.push(childNode[0]);\n }\n }\n return [poolNode, nodeIndex];\n }\n\n /**\n * Updates isProportionalExit for Node if the pool supports it\n * @param pool\n * @param node\n */\n updateNodeIfProportionalExit(pool: Pool, node: Node): void {\n if (pool.poolType === PoolType.Weighted) node.isProportionalExit = true;\n else if (\n pool.poolType === PoolType.ComposableStable &&\n pool.poolTypeVersion > 2\n )\n node.isProportionalExit = true;\n }\n\n createLinearNodeChildren(\n linearPoolNode: Node,\n nodeIndex: number,\n linearPool: Pool,\n tokensToUnwrap: string[]\n ): [Node, number] {\n // Main token\n if (linearPool.mainIndex === undefined)\n throw new Error('Issue With Linear Pool');\n\n if (\n tokensToUnwrap\n .map((t) => t.toLowerCase())\n .includes(linearPool.tokensList[linearPool.mainIndex].toLowerCase())\n ) {\n // Linear pool will be joined via wrapped token. This will be the child node.\n const wrappedNodeInfo = this.createWrappedTokenNode(\n linearPool,\n nodeIndex,\n linearPoolNode,\n linearPoolNode.proportionOfParent\n );\n linearPoolNode.children.push(wrappedNodeInfo[0]);\n return [linearPoolNode, wrappedNodeInfo[1]];\n } else {\n const { balancesEvm } = parsePoolInfo(linearPool);\n const mainTokenDecimals =\n linearPool.tokens[linearPool.mainIndex].decimals ?? 18;\n\n const nodeInfo = PoolGraph.createInputTokenNode(\n nodeIndex,\n linearPool.tokensList[linearPool.mainIndex],\n mainTokenDecimals,\n linearPoolNode,\n linearPoolNode.proportionOfParent,\n balancesEvm[linearPool.mainIndex].toString()\n );\n linearPoolNode.children.push(nodeInfo[0]);\n nodeIndex = nodeInfo[1];\n return [linearPoolNode, nodeIndex];\n }\n }\n\n createWrappedTokenNode(\n linearPool: Pool,\n nodeIndex: number,\n parent: Node | undefined,\n proportionOfParent: BigNumber\n ): [Node, number] {\n if (\n linearPool.wrappedIndex === undefined ||\n linearPool.mainIndex === undefined\n )\n throw new Error('Issue With Linear Pool');\n\n const { balancesEvm, upScaledBalances, scalingFactorsRaw, priceRates } =\n parsePoolInfo(linearPool);\n\n const wrappedTokenNode: Node = {\n type: 'WrappedToken',\n address: linearPool.tokensList[linearPool.wrappedIndex],\n id: 'N/A',\n children: [],\n marked: false,\n joinAction: 'wrap',\n exitAction: 'unwrap',\n isProportionalExit: false,\n index: nodeIndex.toString(),\n parent,\n proportionOfParent,\n isLeaf: false,\n spotPrices: {},\n decimals: 18,\n balance: balancesEvm[linearPool.wrappedIndex].toString(),\n priceRate: priceRates[linearPool.wrappedIndex].toString(),\n };\n nodeIndex++;\n\n const mainTokenDecimals =\n linearPool.tokens[linearPool.mainIndex].decimals ?? 18;\n\n /**\n * - upscaledBalances takes price rate into account, which is equivalent to unwrapping tokens\n * - downscaling with scalingFactorsRaw will downscale the unwrapped balance to the main token decimals\n */\n const unwrappedBalance = _downscaleDown(\n upScaledBalances[linearPool.wrappedIndex],\n scalingFactorsRaw[linearPool.mainIndex]\n ).toString();\n\n const inputNode = PoolGraph.createInputTokenNode(\n nodeIndex,\n linearPool.tokensList[linearPool.mainIndex],\n mainTokenDecimals,\n wrappedTokenNode,\n proportionOfParent,\n unwrappedBalance\n );\n wrappedTokenNode.children = [inputNode[0]];\n nodeIndex = inputNode[1];\n return [wrappedTokenNode, nodeIndex];\n }\n\n static createInputTokenNode(\n nodeIndex: number,\n address: string,\n decimals: number,\n parent: Node | undefined,\n proportionOfParent: BigNumber,\n balance: string\n ): [Node, number] {\n return [\n {\n address,\n id: 'N/A',\n type: 'Input',\n children: [],\n marked: false,\n joinAction: 'input',\n exitAction: 'output',\n isProportionalExit: false,\n index: nodeIndex.toString(), // This will be updated with real amounts in join construction.\n parent,\n proportionOfParent,\n isLeaf: true,\n spotPrices: {},\n decimals,\n balance,\n priceRate: WeiPerEther.toString(),\n },\n nodeIndex + 1,\n ];\n }\n\n static orderByBfs(root: Node): Node[] {\n // Breadth first traversal of graph\n const nodes: Node[] = [];\n const orderedNodes: Node[] = [];\n root.marked = true;\n nodes.push(root);\n while (nodes.length > 0) {\n const currentNode = nodes.shift(); // removes first\n if (currentNode) orderedNodes.push(currentNode);\n currentNode?.children.forEach((c) => {\n if (!c.marked) {\n c.marked = true;\n nodes.push(c);\n }\n });\n }\n return orderedNodes;\n }\n\n // Return a list of leaf token addresses\n static getLeafAddresses(nodes: Node[]): string[] {\n return nodes.filter((n) => n.isLeaf).map((n) => n.address);\n }\n\n /**\n * Checks if list of Nodes only contains pools that support proportional exits\n * @param nodes\n * @returns\n */\n static isProportionalPools(nodes: Node[]): boolean {\n return nodes.every((node) => {\n if (node.children.length > 1) return node.isProportionalExit;\n else return true;\n });\n }\n\n // Get full graph from root pool and return ordered nodes\n getGraphNodes = async (\n isJoin: boolean,\n poolId: string,\n tokensToUnwrap: string[]\n ): Promise => {\n const rootPool = await this.pools.find(poolId);\n if (!rootPool) throw new BalancerError(BalancerErrorCode.POOL_DOESNT_EXIST);\n\n const rootNode = await this.buildGraphFromRootPool(poolId, tokensToUnwrap);\n\n if (rootNode.id !== poolId) throw new Error('Error creating graph nodes');\n\n if (isJoin) return PoolGraph.orderByBfs(rootNode).reverse();\n else return PoolGraph.orderByBfs(rootNode);\n };\n}\n","import { defaultAbiCoder, Result } from '@ethersproject/abi';\n\nexport class WeightedPoolDecoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Decodes the userData parameter for providing the initial liquidity to a WeightedPool\n * @param data - encoded data\n */\n static joinInit = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256[]'], data);\n\n /**\n * Decodes the userData parameter for joining a WeightedPool with exact token inputs\n * @param data - encoded data\n */\n static joinExactTokensInForBPTOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256[]', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for joining a WeightedPool with a single token to receive an exact amount of BPT\n * @param data - encoded data\n */\n static joinTokenInForExactBPTOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for joining a WeightedPool proportionally to receive an exact amount of BPT\n * @param data - encoded data\n */\n static joinAllTokensInForExactBPTOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for exiting a WeightedPool by removing a single token in return for an exact amount of BPT\n * @param data - encoded data\n */\n static exitExactBPTInForOneTokenOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for exiting a WeightedPool by removing tokens in return for an exact amount of BPT\n * @param data - encoded data\n *\n */\n static exitExactBPTInForTokensOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for exiting a WeightedPool by removing exact amounts of tokens\n * @param data - encoded data\n */\n static exitBPTInForExactTokensOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256[]', 'uint256'], data);\n}\n","import { parseFixed, BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { defaultAbiCoder } from '@ethersproject/abi';\nimport { Zero } from '@ethersproject/constants';\nimport { bnum } from '@balancer-labs/sor';\n\nimport { PoolDictionary, Pool } from '../poolSource';\nimport { WeightedPoolDecoder } from '@/pool-weighted/decoder';\nimport { WeightedPoolJoinKind } from '@/pool-weighted/encoder';\nimport { isSameAddress } from '@/lib/utils';\nimport { Relayer } from '@/modules/relayer/relayer.module';\nimport { RelayerModel } from '../relayer';\nimport { ActionType } from '../vaultModel.module';\nimport { PoolToken } from '@/types';\n\nexport interface JoinPoolRequest {\n actionType: ActionType.Join;\n poolId: string;\n encodedUserData: string;\n outputReference: string;\n}\n\nexport class JoinModel {\n constructor(private relayerModel: RelayerModel) {}\n\n /**\n * Finds join kind given encoded user data.\n * @param encodedUserData\n * @returns\n */\n joinKind(encodedUserData: string): WeightedPoolJoinKind {\n const decodedUserData = defaultAbiCoder.decode(\n ['uint256'],\n encodedUserData\n );\n const joinKind = decodedUserData[0] as BigNumber;\n if (!joinKind) throw new Error('No exit kind.');\n return joinKind.toNumber() as WeightedPoolJoinKind;\n }\n\n /**\n * Decodes user join data and returns token input amounts\n * @param encodedUserData\n * @param joinKind\n * @returns\n */\n decodeJoinData(\n encodedUserData: string,\n joinKind: WeightedPoolJoinKind\n ): string | string[] {\n // At the moment all pools have same structure so just use WeightedPoolDecoded for all\n if (joinKind === WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT) {\n const bptAmountOut =\n WeightedPoolDecoder.joinAllTokensInForExactBPTOut(encodedUserData);\n return bptAmountOut.toString();\n } else if (joinKind === WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT) {\n const [, amountsIn] =\n WeightedPoolDecoder.joinExactTokensInForBPTOut(encodedUserData);\n return amountsIn;\n } else if (joinKind === WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT) {\n const [, bptAmountOut, tokenIndex] =\n WeightedPoolDecoder.joinTokenInForExactBPTOut(encodedUserData);\n return [bptAmountOut.toString(), tokenIndex];\n } else throw new Error('Non supported join data');\n }\n\n allTokensInForExactBPTOut(): string {\n throw new Error('joinAllTokensInForExactBPTOut not supported');\n /*\n We need maths for _calcAllTokensInGivenExactBptOut\n From SC:\n uint256 bptAmountOut = userData.allTokensInForExactBptOut();\n // Note that there is no maximum amountsIn parameter: this is handled by `IVault.joinPool`.\n \n uint256[] memory amountsIn = WeightedMath._calcAllTokensInGivenExactBptOut(balances, bptAmountOut, totalSupply);\n \n return (bptAmountOut, amountsIn);\n \n const bptAmountOut = this.decodeJoinData(\n encodedUserData,\n PoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT\n );\n */\n }\n\n joinExactTokensInForBPTOut(\n encodedUserData: string,\n pool: Pool\n ): [string, string[], string[]] {\n // This does not include a value for pre-minted BPT\n const amountsInWithRef = this.decodeJoinData(\n encodedUserData,\n WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT\n ) as string[];\n\n const amountsIn =\n this.relayerModel.doChainedRefReplacements(amountsInWithRef);\n // Calculate amount of BPT out given exact amounts in\n const bptAmountOut = pool._calcBptOutGivenExactTokensIn(\n amountsIn.map((a) => BigNumber.from(a))\n );\n\n // Updates BPT/totalShares value for pool\n if (\n pool.SubgraphType == 'StablePhantom' ||\n pool.SubgraphType == 'ComposableStable'\n ) {\n // Update BPT balance\n // totalShares will be updated as a side effect within SOR\n const bptAsPoolToken = pool.tokens.find((t: PoolToken) =>\n isSameAddress(t.address, pool.address)\n );\n if (!bptAsPoolToken)\n throw new Error('Pool does not contain BPT as a token');\n const bptBalanceEVM = parseFixed(\n bptAsPoolToken.balance.toString(),\n bptAsPoolToken.decimals\n );\n // subtract value because joining pool reduces pre-minted BPT being held by the pool\n pool.updateTokenBalanceForPool(\n pool.address,\n bptBalanceEVM.sub(bptAmountOut)\n );\n } else {\n // For pools that do not contain BPT as a token, update totalShares directly\n pool.updateTokenBalanceForPool(\n pool.address,\n pool.totalShares.add(bptAmountOut)\n );\n }\n\n const tokensWithoutBpt = pool.tokens.filter(\n (t: PoolToken) => !isSameAddress(t.address, pool.address)\n );\n // Update each tokens balance\n amountsIn.forEach((amount, i) => {\n const balanceEvm = parseFixed(\n tokensWithoutBpt[i].balance.toString(),\n tokensWithoutBpt[i].decimals\n );\n pool.updateTokenBalanceForPool(\n tokensWithoutBpt[i].address,\n balanceEvm.add(amount)\n );\n });\n return [\n bptAmountOut.toString(),\n tokensWithoutBpt.map((t: PoolToken) => t.address),\n amountsIn,\n ];\n }\n\n joinTokenInForExactBPTOut(\n encodedUserData: string,\n pool: Pool\n ): [string, string, string] {\n const [bptAmountOutWithRef, tokenInIndex] = this.decodeJoinData(\n encodedUserData,\n WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT\n ) as string;\n\n const bptAmountOut =\n this.relayerModel.doChainedRefReplacement(bptAmountOutWithRef);\n // Uses an existing SOR functionality so need to deal with pairData and scaling\n const pairData = pool.parsePoolPairData(\n pool.tokensList[Number(tokenInIndex)],\n pool.address\n );\n\n const bptAmountOutHuman = formatFixed(bptAmountOut, 18);\n // Needs human scale\n const amountInHuman = pool\n ._tokenInForExactTokenOut(\n pairData as never,\n bnum(bptAmountOutHuman.toString())\n )\n .dp(pairData.decimalsIn);\n const amountInEvm = parseFixed(\n amountInHuman.toString(),\n pairData.decimalsIn\n );\n\n // Update balances of tokenIn and tokenOut - use EVM scale\n pool.updateTokenBalanceForPool(\n pairData.tokenIn,\n pairData.balanceIn.add(amountInEvm)\n );\n // For a join we have to add the extra BPT to the balance as this is equivalent to bptTotalSupply\n pool.updateTokenBalanceForPool(\n pairData.tokenOut,\n pairData.balanceOut.add(bptAmountOut)\n );\n\n return [amountInEvm.toString(), pairData.tokenIn, amountInEvm.toString()];\n }\n\n /**\n * Perform the specified exit type.\n * @param joinPoolRequest\n * @returns tokens out\n */\n async doJoinPool(\n joinPoolRequest: JoinPoolRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n const pool = pools[joinPoolRequest.poolId];\n const joinKind = this.joinKind(joinPoolRequest.encodedUserData);\n let bptOut = '0';\n let tokens: string[] = [];\n let amounts: string[] = [];\n if (joinKind === WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT) {\n // Returns amount of tokens in - This isn't currently implemented\n bptOut = this.allTokensInForExactBPTOut();\n } else if (joinKind === WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT) {\n // Returns amount of BPT out\n [bptOut, tokens, amounts] = this.joinExactTokensInForBPTOut(\n joinPoolRequest.encodedUserData,\n pool\n );\n } else if (joinKind === WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT) {\n // Returns amount of tokenIn\n let tokenIn: string, amountIn: string;\n [bptOut, tokenIn, amountIn] = this.joinTokenInForExactBPTOut(\n joinPoolRequest.encodedUserData,\n pool\n );\n tokens.push(tokenIn);\n amounts.push(amountIn);\n } else throw new Error('Exit type not implemented');\n\n tokens.push(pool.address);\n // -ve because coming from Vault\n amounts.push(Zero.sub(bptOut).toString());\n\n if (\n joinPoolRequest.outputReference &&\n Relayer.isChainedReference(joinPoolRequest.outputReference)\n ) {\n this.relayerModel.setChainedReferenceValue(\n joinPoolRequest.outputReference,\n bptOut\n );\n }\n return [tokens, amounts];\n }\n}\n","import { parseFixed, BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { defaultAbiCoder } from '@ethersproject/abi';\nimport { Zero } from '@ethersproject/constants';\nimport { bnum } from '@balancer-labs/sor';\n\nimport { PoolDictionary, Pool } from '../poolSource';\nimport { ComposableStablePoolExitKind } from '@/pool-composable-stable';\nimport { WeightedPoolDecoder } from '@/pool-weighted/decoder';\nimport { WeightedPoolExitKind } from '@/pool-weighted/encoder';\nimport { isSameAddress } from '@/lib/utils';\nimport { RelayerModel } from '../relayer';\nimport { ActionType } from '../vaultModel.module';\nimport { OutputReference } from '@/modules/relayer/types';\nimport { PoolToken } from '@/types';\n\nexport interface ExitPoolRequest {\n actionType: ActionType.Exit;\n poolId: string;\n encodedUserData: string;\n outputReferences: OutputReference[];\n}\n\nfunction getBalancesForTokens(pool: Pool, tokens: string[]): string[] {\n const balances: string[] = [];\n tokens.forEach((t) => {\n const tokenIndex = pool.tokens.findIndex((pt: PoolToken) =>\n isSameAddress(pt.address, t)\n );\n if (tokenIndex < 0) throw 'Pool does not contain tokenIn';\n balances.push(\n parseFixed(\n pool.tokens[tokenIndex].balance,\n pool.tokens[tokenIndex].decimals\n ).toString()\n );\n });\n return balances;\n}\n\nexport class ExitModel {\n constructor(private relayerModel: RelayerModel) {}\n\n /**\n * Finds exit kind given encoded user data and pool type.\n * @param poolType\n * @param encodedUserData\n * @returns\n */\n exitKind(poolType: string, encodedUserData: string): WeightedPoolExitKind {\n const decodedUserData = defaultAbiCoder.decode(\n ['uint256'],\n encodedUserData\n );\n const exitKind = decodedUserData[0] as BigNumber;\n if (!exitKind) throw new Error('No exit kind.');\n if (poolType === 'ComposableStable') {\n if (\n exitKind.toNumber() ===\n ComposableStablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT\n )\n return WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT;\n if (\n exitKind.toNumber() ===\n ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT\n )\n return WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT;\n else {\n return WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT;\n }\n } else {\n return exitKind.toNumber() as WeightedPoolExitKind;\n }\n }\n\n /**\n * Decodes user exit data and returns token input amounts\n * @param encodedUserData\n * @param exitKind\n * @returns\n */\n decodeExitData(\n encodedUserData: string,\n exitKind: WeightedPoolExitKind\n ): string[] {\n // At the moment all pools have same structure so just use WeightedPoolDecoded for all\n if (exitKind === WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT) {\n const [, amountsOut, maxBPTAmountIn] =\n WeightedPoolDecoder.exitBPTInForExactTokensOut(encodedUserData);\n return [amountsOut.toString(), maxBPTAmountIn.toString()];\n } else if (\n exitKind === WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT\n ) {\n const [, bptIn, tokenIndex] =\n WeightedPoolDecoder.exitExactBPTInForOneTokenOut(encodedUserData);\n return [bptIn.toString(), tokenIndex.toString()];\n } else if (exitKind === WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT) {\n const [, bptIn] =\n WeightedPoolDecoder.exitExactBPTInForTokensOut(encodedUserData);\n return [bptIn.toString()];\n } else throw new Error('Non supported exit data');\n }\n\n /**\n * Exit pool, BPT in to tokens out.\n * Updates pool balances.\n * @param encodedUserData\n * @param pool\n * @returns tokensOut\n */\n exactBptInForTokensOut(\n encodedUserData: string,\n pool: Pool\n ): [string, string[], string[]] {\n const [bptInWithRef] = this.decodeExitData(\n encodedUserData,\n WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT\n );\n\n const bptIn = this.relayerModel.doChainedRefReplacement(bptInWithRef);\n // Calculate amount of tokens out given an exact amount of BPT in\n const amountsOut = pool\n ._calcTokensOutGivenExactBptIn(BigNumber.from(bptIn))\n .map((a: BigNumber) => a.toString());\n\n // Updates BPT/totalShares value for pool\n if (\n pool.SubgraphType == 'StablePhantom' ||\n pool.SubgraphType == 'ComposableStable'\n ) {\n // Update BPT balance\n // totalShares will be updated as a side effect within SOR\n const bptAsPoolToken = pool.tokens.find((t: PoolToken) =>\n isSameAddress(t.address, pool.address)\n );\n if (!bptAsPoolToken)\n throw new Error('Pool does not contain BPT as a token');\n const bptBalanceEVM = parseFixed(\n bptAsPoolToken.balance.toString(),\n bptAsPoolToken.decimals\n );\n pool.updateTokenBalanceForPool(\n pool.address,\n bptBalanceEVM.add(bptIn) // add value because exiting pool increases pre-minted BPT being held by the pool\n );\n } else {\n // For pools that do not contain BPT as a token, update totalShares directly\n pool.updateTokenBalanceForPool(pool.address, pool.totalShares.sub(bptIn));\n }\n\n const tokensWithoutBpt = pool.tokens.filter(\n (t: PoolToken) => !isSameAddress(t.address, pool.address)\n );\n // Update each tokens balance\n amountsOut.forEach((amountOut: string, i: number) => {\n const balanceEvm = parseFixed(\n tokensWithoutBpt[i].balance.toString(),\n tokensWithoutBpt[i].decimals\n );\n pool.updateTokenBalanceForPool(\n tokensWithoutBpt[i].address,\n balanceEvm.sub(amountOut)\n );\n });\n return [\n bptIn,\n tokensWithoutBpt.map((t: PoolToken) => t.address),\n amountsOut,\n ];\n }\n\n /**\n * Exit pool, BPT in to single token out.\n * Updates pool balances.\n * @param encodedUserData\n * @param pool\n * @returns tokens out\n */\n exactBptInForOneTokenOut(\n encodedUserData: string,\n pool: Pool\n ): [string, string[], string[]] {\n const [bptInWithRef, tokenIndex] = this.decodeExitData(\n encodedUserData,\n WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT\n );\n const bptIn = this.relayerModel.doChainedRefReplacement(bptInWithRef);\n // Uses an existing SOR functionality so need to deal with pairData and scaling\n const pairData = pool.parsePoolPairData(\n pool.address,\n pool.tokensList[Number(tokenIndex)]\n );\n // Calculation requires floating point number input\n const amountInHuman: string = formatFixed(bptIn, pairData.decimalsIn);\n // Calculate amount of token out given an exact amount of BPT in\n const amountOutHuman = pool\n ._exactTokenInForTokenOut(pairData as never, bnum(amountInHuman))\n .dp(pairData.decimalsOut);\n const amountOutEvm = parseFixed(\n amountOutHuman.toString(),\n pairData.decimalsOut\n );\n\n // Update balances use EVM scaled\n const poolBalances = getBalancesForTokens(pool, [\n pool.address,\n pairData.tokenOut,\n ]);\n // Subtract token out amount from pool\n pool.updateTokenBalanceForPool(\n pairData.tokenOut,\n BigNumber.from(poolBalances[1]).sub(amountOutEvm)\n );\n\n if (\n pool.SubgraphType == 'StablePhantom' ||\n pool.SubgraphType == 'ComposableStable'\n ) {\n // Add value because exiting pool increases pre-minted BPT being held by the pool\n // totalShares is updated as a side effect on SOR\n pool.updateTokenBalanceForPool(\n pool.address,\n BigNumber.from(poolBalances[0]).add(bptIn)\n );\n } else {\n // Exiting a pool is equivalent to removing from totalSupply (totalShares) so must sub here\n pool.updateTokenBalanceForPool(pool.address, pool.totalShares.sub(bptIn));\n }\n\n const tokensWithoutBpt = pool.tokensList.filter(\n (t: string) => !isSameAddress(t, pool.address)\n );\n const amountsOut = new Array(tokensWithoutBpt.length).fill('0');\n amountsOut[Number(tokenIndex)] = amountOutEvm.toString();\n return [bptIn, tokensWithoutBpt, amountsOut];\n }\n\n /**\n * Perform the specified exit type.\n * @param exitPoolRequest\n * @returns tokens out\n */\n async doExitPool(\n exitPoolRequest: ExitPoolRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n const pool = pools[exitPoolRequest.poolId];\n const exitKind = this.exitKind(\n pool.SubgraphType,\n exitPoolRequest.encodedUserData\n );\n let amountsOut: string[] = [];\n let bptIn: string;\n let tokensOut: string[] = [];\n const tokens: string[] = [];\n const deltas: string[] = [];\n if (exitKind === WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT) {\n [bptIn, tokensOut, amountsOut] = this.exactBptInForTokensOut(\n exitPoolRequest.encodedUserData,\n pool\n );\n } else if (\n exitKind === WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT\n ) {\n [bptIn, tokensOut, amountsOut] = this.exactBptInForOneTokenOut(\n exitPoolRequest.encodedUserData,\n pool\n );\n } else throw new Error('Exit type not implemented');\n\n // Save any chained references\n for (let i = 0; i < exitPoolRequest.outputReferences.length; i++) {\n const tokenOut =\n pool.tokensList[exitPoolRequest.outputReferences[i].index];\n const tokenOutIndex = tokensOut.indexOf(tokenOut);\n if (tokenOutIndex === -1) throw new Error('Token out not found');\n this.relayerModel.setChainedReferenceValue(\n exitPoolRequest.outputReferences[i].key.toString(),\n amountsOut[tokenOutIndex]\n );\n }\n tokens.push(pool.address, ...tokensOut);\n deltas.push(bptIn, ...amountsOut.map((a) => Zero.sub(a).toString()));\n return [tokens, deltas];\n }\n}\n","import { parseFixed, BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { Zero } from '@ethersproject/constants';\nimport { bnum } from '@balancer-labs/sor';\n\nimport { PoolDictionary, Pool } from '../poolSource';\nimport { EncodeBatchSwapInput } from '@/modules/relayer/types';\nimport { Swap, SwapType } from '@/modules/swaps/types';\nimport { Relayer } from '@/modules/relayer/relayer.module';\nimport { RelayerModel } from '../relayer';\nimport { ActionType } from '../vaultModel.module';\n\nexport interface SwapRequest\n extends Pick {\n actionType: ActionType.Swap;\n}\n\nexport interface BatchSwapRequest\n extends Pick<\n EncodeBatchSwapInput,\n 'swaps' | 'assets' | 'funds' | 'swapType' | 'outputReferences'\n > {\n actionType: ActionType.BatchSwap;\n}\n\nexport class SwapModel {\n constructor(private relayerModel: RelayerModel) {}\n\n /**\n * Performs a single swap with one pool.\n * @param swapRequest\n * @returns Returns the net Vault asset balance delta. Positive amount represent token (or ETH) sent to the Vault, and negative amount represent token (or ETH) sent by the Vault. Delta corresponds to the asset out.\n */\n async doSingleSwap(\n swapRequest: SwapRequest,\n pools: PoolDictionary\n ): Promise {\n const amountIn = this.relayerModel.doChainedRefReplacement(\n swapRequest.request.amount.toString()\n );\n\n const pool = pools[swapRequest.request.poolId];\n const [, amountOutEvm] = this.doSwap(\n swapRequest.request.assetIn,\n swapRequest.request.assetOut,\n pool,\n swapRequest.request.kind,\n amountIn\n );\n\n const delta = Zero.sub(amountOutEvm);\n if (!swapRequest.outputReference)\n throw new Error('Missing outputReference');\n\n // Swap return values are signed, as they are Vault deltas (positive values correspond to assets sent\n // to the Vault, and negative values are assets received from the Vault). To simplify the chained reference\n // value model, we simply store the absolute value.\n this.relayerModel.setChainedReferenceValue(\n swapRequest.outputReference.toString(),\n delta.abs().toString()\n );\n return [delta.toString(), amountIn];\n }\n\n /**\n * Performs a series of swaps with one or multiple Pools.\n * @param batchSwapRequest\n * @returns Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at the same index in the `assets` array.\n */\n async doBatchSwap(\n batchSwapRequest: BatchSwapRequest,\n pools: PoolDictionary\n ): Promise {\n const assets = batchSwapRequest.assets;\n const deltas = new Array(assets.length).fill(Zero);\n // Used for multihop swaps where previous swap return is used as input to next swap\n let previousAmount: string;\n\n for (let i = 0; i < batchSwapRequest.swaps.length; ++i) {\n const amount = batchSwapRequest.swaps[i].amount;\n if (Relayer.isChainedReference(amount)) {\n batchSwapRequest.swaps[i].amount =\n this.relayerModel.getChainedReferenceValue(amount);\n }\n }\n\n // Handle each swap in order\n batchSwapRequest.swaps.forEach((swap) => {\n const tokenIn = assets[swap.assetInIndex];\n const tokenOut = assets[swap.assetOutIndex];\n const pool = pools[swap.poolId];\n let amount = swap.amount;\n if (amount === '0') amount = previousAmount;\n const [amountInEvm, amountOutEvm] = this.doSwap(\n tokenIn,\n tokenOut,\n pool,\n batchSwapRequest.swapType,\n amount\n );\n\n previousAmount =\n batchSwapRequest.swapType === SwapType.SwapExactIn\n ? amountOutEvm.toString()\n : amountInEvm.toString();\n\n deltas[swap.assetInIndex] = deltas[swap.assetInIndex].add(amountInEvm);\n deltas[swap.assetOutIndex] = deltas[swap.assetOutIndex].sub(amountOutEvm);\n });\n\n for (let i = 0; i < batchSwapRequest.outputReferences.length; i++) {\n // Batch swap return values are signed, as they are Vault deltas (positive values correspond to assets sent\n // to the Vault, and negative values are assets received from the Vault). To simplify the chained reference\n // value model, we simply store the absolute value.\n this.relayerModel.setChainedReferenceValue(\n batchSwapRequest.outputReferences[i].key.toString(),\n deltas[batchSwapRequest.outputReferences[i].index].abs().toString()\n );\n }\n return deltas.map((d) => d.toString());\n }\n\n /**\n * Perform swap against a pool (and update balances)\n * @param tokenIn\n * @param tokenOut\n * @param pool\n * @param swapType\n * @param amount (EVM Scale)\n * @returns\n */\n doSwap(\n tokenIn: string,\n tokenOut: string,\n pool: Pool,\n swapType: SwapType,\n amount: string\n ): BigNumber[] {\n const pairData = pool.parsePoolPairData(tokenIn, tokenOut);\n const isExactIn = swapType === SwapType.SwapExactIn;\n let amountInEvm: string | BigNumber = isExactIn\n ? BigNumber.from(amount)\n : Zero;\n let amountOutEvm: string | BigNumber = isExactIn\n ? Zero\n : BigNumber.from(amount);\n const amountInHuman: string | BigNumber = formatFixed(\n amountInEvm,\n pairData.decimalsIn\n );\n const amountOutHuman: string | BigNumber = formatFixed(\n amountOutEvm,\n pairData.decimalsOut\n );\n\n if (isExactIn) {\n // Needs human scale\n const amountOutHuman = pool\n ._exactTokenInForTokenOut(\n pairData as never,\n bnum(amountInHuman.toString())\n )\n .dp(pairData.decimalsOut);\n amountOutEvm = parseFixed(\n amountOutHuman.toString(),\n pairData.decimalsOut\n );\n } else {\n // Needs human scale\n const amountInHuman = pool\n ._tokenInForExactTokenOut(\n pairData as never,\n bnum(amountOutHuman.toString())\n )\n .dp(pairData.decimalsIn);\n amountInEvm = parseFixed(amountInHuman.toString(), pairData.decimalsIn);\n }\n // Update balances of tokenIn and tokenOut - use EVM scale\n pool.updateTokenBalanceForPool(\n pairData.tokenIn,\n pairData.balanceIn.add(amountInEvm)\n );\n pool.updateTokenBalanceForPool(\n pairData.tokenOut,\n pairData.balanceOut.sub(amountOutEvm)\n );\n return [amountInEvm, amountOutEvm];\n }\n}\n","import { LinearPool } from '@balancer-labs/sor';\nimport { parseFixed } from '@ethersproject/bignumber';\n\nimport { EncodeUnwrapAaveStaticTokenInput } from '@/modules/relayer/types';\n\nimport { PoolDictionary } from '../poolSource';\nimport { RelayerModel } from '../relayer';\nimport { ActionType } from '../vaultModel.module';\nimport { WeiPerEther, Zero } from '@ethersproject/constants';\nimport { SolidityMaths } from '@/lib/utils/solidityMaths';\n\nexport interface UnwrapRequest\n extends Pick {\n poolId: string;\n actionType: ActionType.Unwrap;\n}\n\nexport class UnwrapModel {\n constructor(private relayerModel: RelayerModel) {}\n\n /**\n * Perform the specified unwrap type.\n * @param unwrapRequest\n * @param pools\n * @returns tokens out and their respective deltas\n */\n async doUnwrap(\n unwrapRequest: UnwrapRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n const pool = pools[unwrapRequest.poolId] as LinearPool;\n const wrappedToken = pool.tokens[pool.wrappedIndex];\n const underlyingToken = pool.tokens[pool.mainIndex];\n\n const amountIn = this.relayerModel.doChainedRefReplacement(\n unwrapRequest.amount.toString()\n );\n\n // must be negative because is leaving the vault\n const amountOut = SolidityMaths.divDownFixed(\n SolidityMaths.mulDownFixed(\n BigInt(amountIn),\n parseFixed(wrappedToken.priceRate, 18).toBigInt()\n ),\n WeiPerEther.toBigInt()\n ).toString();\n\n // Save chained references\n this.relayerModel.setChainedReferenceValue(\n unwrapRequest.outputReference.toString(),\n amountOut\n );\n\n const tokens = [wrappedToken.address, underlyingToken.address];\n const deltas = [amountIn, Zero.sub(amountOut).toString()];\n return [tokens, deltas];\n }\n}\n","import { PoolDictionary } from '../poolSource';\nimport { RelayerModel } from '../relayer';\nimport { JoinModel, JoinPoolRequest } from './join';\nimport { ExitModel, ExitPoolRequest } from './exit';\nimport { SwapModel, BatchSwapRequest, SwapRequest } from './swap';\nimport { UnwrapModel, UnwrapRequest } from './unwrap';\n\nexport class PoolModel {\n joinModel: JoinModel;\n exitModel: ExitModel;\n swapModel: SwapModel;\n unwrapModel: UnwrapModel;\n\n constructor(private relayerModel: RelayerModel) {\n this.joinModel = new JoinModel(relayerModel);\n this.exitModel = new ExitModel(relayerModel);\n this.swapModel = new SwapModel(relayerModel);\n this.unwrapModel = new UnwrapModel(relayerModel);\n }\n\n async doJoin(\n joinPoolRequest: JoinPoolRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n return this.joinModel.doJoinPool(joinPoolRequest, pools);\n }\n\n async doExit(\n exitPoolRequest: ExitPoolRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n return this.exitModel.doExitPool(exitPoolRequest, pools);\n }\n\n async doBatchSwap(\n batchSwapRequest: BatchSwapRequest,\n pools: PoolDictionary\n ): Promise {\n return this.swapModel.doBatchSwap(batchSwapRequest, pools);\n }\n\n async doSingleSwap(\n swapRequest: SwapRequest,\n pools: PoolDictionary\n ): Promise {\n return this.swapModel.doSingleSwap(swapRequest, pools);\n }\n\n async doUnwrap(\n unwrapRequest: UnwrapRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n return this.unwrapModel.doUnwrap(unwrapRequest, pools);\n }\n}\n","import { Relayer } from '@/modules/relayer/relayer.module';\n\nexport class RelayerModel {\n chainedRefs: Record = {};\n\n /**\n * Stores `value` as the amount referenced by chained reference `ref`.\n * @param ref\n * @param value\n */\n setChainedReferenceValue(ref: string, value: string): void {\n this.chainedRefs[ref] = value;\n }\n\n /**\n * Returns the amount referenced by chained reference `ref`.\n * @param ref\n * @returns\n */\n getChainedReferenceValue(ref: string): string {\n return this.chainedRefs[ref];\n }\n\n doChainedRefReplacement(amount: string): string {\n if (Relayer.isChainedReference(amount.toString())) {\n return this.getChainedReferenceValue(amount.toString());\n } else return amount;\n }\n\n doChainedRefReplacements(amounts: string[]): string[] {\n return amounts.map((amount) =>\n this.doChainedRefReplacement(amount).toString()\n );\n }\n}\n","import { cloneDeep } from 'lodash';\nimport {\n SubgraphPoolBase,\n SubgraphToken,\n PoolDataService,\n WeightedPool,\n StablePool,\n MetaStablePool,\n LinearPool,\n PhantomStablePool,\n ComposableStablePool,\n} from '@balancer-labs/sor';\nimport { Logger } from '@/lib/utils/logger';\n\nexport interface PoolDictionary {\n [poolId: string]: Pool;\n}\n\nexport type Pool =\n | (\n | WeightedPool\n | StablePool\n | LinearPool\n | MetaStablePool\n | PhantomStablePool\n | ComposableStablePool\n ) & { SubgraphType: string };\n\nexport class PoolsSource {\n poolsArray: SubgraphPoolBase[] = [];\n poolsDict: PoolDictionary = {};\n constructor(\n private poolDataService: PoolDataService,\n private wrappedNativeAsset: string\n ) {}\n dataSource(): PoolDataService {\n return this.poolDataService;\n }\n\n async all(refresh = false): Promise {\n if (refresh || this.poolsArray.length === 0) {\n const list = cloneDeep(await this.dataSource().getPools());\n for (const pool of list) {\n // For non pre-minted BPT pools we add the BPT to the token list. This makes the SOR functions work for joins/exits\n if (\n [\n 'Weighted',\n 'Investment',\n 'Stable',\n 'LiquidityBootstrapping',\n ].includes(pool.poolType)\n ) {\n const BptAsToken: SubgraphToken = {\n address: pool.address,\n balance: pool.totalShares,\n decimals: 18,\n priceRate: '1',\n weight: '0',\n };\n pool.tokens.push(BptAsToken);\n pool.tokensList.push(pool.address);\n }\n }\n this.poolsArray = list;\n }\n return this.poolsArray;\n }\n\n parseToPoolsDict(pools: SubgraphPoolBase[]): PoolDictionary {\n return Object.fromEntries(\n cloneDeep(pools)\n .filter(\n (pool) => pool.tokensList.length > 0 && pool.tokens[0].balance !== '0'\n )\n .map((pool) => [pool.id, this.parseNewPool(pool)])\n .filter(([, pool]) => pool !== undefined)\n );\n }\n\n parseNewPool(subgraphPool: SubgraphPoolBase): Pool | undefined {\n // We're not interested in any pools which don't allow swapping\n if (!subgraphPool.swapEnabled) return undefined;\n\n let pool: Pool = {} as Pool;\n\n try {\n if (\n ['Weighted', 'Investment', 'LiquidityBootstrapping'].includes(\n subgraphPool.poolType\n )\n ) {\n const sorPool = WeightedPool.fromPool(subgraphPool, false);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType === 'Stable') {\n const sorPool = StablePool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType === 'MetaStable') {\n const sorPool = MetaStablePool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType.toString().includes('Linear')) {\n const sorPool = LinearPool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType === 'StablePhantom') {\n const sorPool = PhantomStablePool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType === 'ComposableStable') {\n const sorPool = ComposableStablePool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else {\n const logger = Logger.getInstance();\n logger.warn(\n `Unknown pool type or type field missing: ${subgraphPool.poolType} ${subgraphPool.id}`\n );\n return undefined;\n }\n if (!pool) throw new Error('Issue with Pool');\n pool.SubgraphType = subgraphPool.poolType;\n } catch (err) {\n console.error(`Error parseNewPool`);\n return undefined;\n }\n return pool;\n }\n\n /**\n * Converts Subgraph array into PoolDictionary\n * @param refresh\n * @returns\n */\n async poolsDictionary(refresh = false): Promise {\n if (refresh || Object.keys(this.poolsDict).length === 0) {\n const poolsArray = await this.all(refresh);\n this.poolsDict = this.parseToPoolsDict(poolsArray);\n }\n return this.poolsDict;\n }\n}\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { Zero } from '@ethersproject/constants';\nimport { PoolDataService } from '@balancer-labs/sor';\n\nimport { PoolModel } from './poolModel/poolModel';\nimport { JoinPoolRequest } from './poolModel/join';\nimport { ExitPoolRequest } from './poolModel/exit';\nimport { BatchSwapRequest, SwapRequest } from './poolModel/swap';\nimport { UnwrapRequest } from './poolModel/unwrap';\nimport { RelayerModel } from './relayer';\nimport { PoolsSource } from './poolSource';\nimport {\n EncodeBatchSwapInput,\n EncodeJoinPoolInput,\n EncodeExitPoolInput,\n} from '../relayer/types';\nimport { Swap } from '../swaps/types';\n\nexport enum ActionType {\n BatchSwap,\n Join,\n Exit,\n Swap,\n Unwrap,\n}\n\nexport type Requests =\n | BatchSwapRequest\n | JoinPoolRequest\n | ExitPoolRequest\n | SwapRequest\n | UnwrapRequest;\n\n/**\n * Controller / use-case layer for interacting with pools data.\n */\nexport class VaultModel {\n poolsSource: PoolsSource;\n\n constructor(poolDataService: PoolDataService, wrappedNativeAsset: string) {\n this.poolsSource = new PoolsSource(poolDataService, wrappedNativeAsset);\n }\n\n updateDeltas(\n deltas: Record,\n assets: string[],\n amounts: string[]\n ): Record {\n assets.forEach((t, i) => {\n if (!deltas[t]) deltas[t] = Zero;\n deltas[t] = deltas[t].add(amounts[i]);\n });\n return deltas;\n }\n\n async multicall(\n rawCalls: Requests[],\n refresh = false\n ): Promise> {\n const relayerModel = new RelayerModel();\n const poolModel = new PoolModel(relayerModel);\n const pools = await this.poolsSource.poolsDictionary(refresh);\n const deltas: Record = {};\n for (const call of rawCalls) {\n let tokens: string[] = [];\n let amounts: string[] = [];\n switch (call.actionType) {\n case ActionType.Join: {\n [tokens, amounts] = await poolModel.doJoin(call, pools);\n break;\n }\n case ActionType.Exit: {\n [tokens, amounts] = await poolModel.doExit(call, pools);\n break;\n }\n case ActionType.BatchSwap: {\n tokens = call.assets;\n amounts = await poolModel.doBatchSwap(call, pools);\n break;\n }\n case ActionType.Swap: {\n tokens = [call.request.assetOut, call.request.assetIn];\n amounts = await poolModel.doSingleSwap(call, pools);\n break;\n }\n case ActionType.Unwrap: {\n [tokens, amounts] = await poolModel.doUnwrap(call, pools);\n break;\n }\n default:\n break;\n }\n this.updateDeltas(deltas, tokens, amounts);\n }\n return deltas;\n }\n\n static mapSwapRequest(call: Swap): SwapRequest {\n const swapRequest: SwapRequest = {\n actionType: ActionType.Swap,\n request: call.request,\n funds: call.funds,\n outputReference: call.outputReference,\n };\n return swapRequest;\n }\n\n static mapBatchSwapRequest(call: EncodeBatchSwapInput): BatchSwapRequest {\n const batchSwapRequest: BatchSwapRequest = {\n actionType: ActionType.BatchSwap,\n swaps: call.swaps,\n assets: call.assets,\n funds: call.funds,\n swapType: call.swapType,\n outputReferences: call.outputReferences,\n };\n return batchSwapRequest;\n }\n\n static mapJoinPoolRequest(call: EncodeJoinPoolInput): JoinPoolRequest {\n const joinPoolRequest: JoinPoolRequest = {\n actionType: ActionType.Join,\n poolId: call.poolId,\n encodedUserData: call.joinPoolRequest.userData,\n outputReference: call.outputReference,\n };\n return joinPoolRequest;\n }\n\n static mapExitPoolRequest(call: EncodeExitPoolInput): ExitPoolRequest {\n const exitPoolRequest: ExitPoolRequest = {\n actionType: ActionType.Exit,\n poolId: call.poolId,\n encodedUserData: call.exitPoolRequest.userData,\n outputReferences: call.outputReferences,\n };\n return exitPoolRequest;\n }\n\n static mapUnwrapRequest(\n amount: BigNumberish,\n outputReference: BigNumberish,\n poolId: string\n ): UnwrapRequest {\n const unwrapRequest: UnwrapRequest = {\n actionType: ActionType.Unwrap,\n poolId,\n amount,\n outputReference,\n };\n return unwrapRequest;\n }\n}\n","import { cloneDeep } from 'lodash';\nimport { BigNumber, BigNumberish, parseFixed } from '@ethersproject/bignumber';\nimport { AddressZero, WeiPerEther, Zero } from '@ethersproject/constants';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { EncodeJoinPoolInput, Relayer } from '@/modules/relayer/relayer.module';\nimport {\n FundManagement,\n SingleSwap,\n Swap,\n SwapType,\n} from '@/modules/swaps/types';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport { BalancerNetworkConfig, JoinPoolRequest, PoolType } from '@/types';\nimport { PoolGraph, Node } from '../graph/graph';\n\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { networkAddresses } from '@/lib/constants/config';\nimport { AssetHelpers, getEthValue, isSameAddress, replace } from '@/lib/utils';\nimport {\n SolidityMaths,\n _computeScalingFactor,\n _upscale,\n} from '@/lib/utils/solidityMaths';\nimport { calcPriceImpact } from '../pricing/priceImpact';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { getPoolAddress } from '@/pool-utils';\nimport { Simulation, SimulationType } from '../simulation/simulation.module';\nimport { Requests, VaultModel } from '../vaultModel/vaultModel.module';\nimport { SwapRequest } from '../vaultModel/poolModel/swap';\nimport { JoinPoolRequest as JoinPoolModelRequest } from '../vaultModel/poolModel/join';\nimport { JsonRpcSigner } from '@ethersproject/providers';\nimport { BalancerRelayer__factory } from '@/contracts/factories/BalancerRelayer__factory';\nimport { Logger } from '@/lib/utils/logger';\n\nconst balancerRelayerInterface = BalancerRelayer__factory.createInterface();\n\n// Quickly switch useful debug logs on/off\nconst DEBUG = false;\n\nfunction debugLog(log: string) {\n const logger = Logger.getInstance();\n if (DEBUG) logger.info(log);\n}\n\nexport class Join {\n private relayer: string;\n private wrappedNativeAsset;\n constructor(\n private poolGraph: PoolGraph,\n networkConfig: BalancerNetworkConfig,\n private simulationService: Simulation\n ) {\n const { tokens, contracts } = networkAddresses(networkConfig.chainId);\n this.relayer = contracts.balancerRelayer;\n this.wrappedNativeAsset = tokens.wrappedNativeAsset;\n }\n\n private checkInputs(tokensIn: string[], amountsIn: string[]) {\n if (tokensIn.length === 0)\n throw new BalancerError(BalancerErrorCode.MISSING_TOKENS);\n\n if (amountsIn.every((a) => a === '0'))\n throw new BalancerError(BalancerErrorCode.JOIN_WITH_ZERO_AMOUNT);\n\n if (tokensIn.length != amountsIn.length)\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n\n if (\n tokensIn.some((t) => t === AddressZero) &&\n tokensIn.some(\n (t) => t.toLowerCase() === this.wrappedNativeAsset.toLowerCase()\n )\n )\n throw new BalancerError(BalancerErrorCode.INPUT_TOKEN_INVALID);\n }\n\n async joinPool(\n poolId: string,\n tokensIn: string[],\n amountsIn: string[],\n userAddress: string,\n slippage: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType,\n authorisation?: string\n ): Promise<{\n to: string;\n encodedCall: string;\n expectedOut: string;\n minOut: string;\n priceImpact: string;\n value: BigNumberish;\n }> {\n this.checkInputs(tokensIn, amountsIn);\n\n // Create nodes for each pool/token interaction and order by breadth first\n const orderedNodes = await this.poolGraph.getGraphNodes(true, poolId, []);\n\n const nativeAssetIndex = tokensIn.findIndex((t) => t === AddressZero);\n const isNativeAssetJoin = nativeAssetIndex !== -1;\n const tokensInWithoutNativeAsset = replace(\n tokensIn,\n nativeAssetIndex,\n this.wrappedNativeAsset.toLowerCase()\n );\n\n const joinPaths = Join.getJoinPaths(\n orderedNodes,\n tokensInWithoutNativeAsset,\n amountsIn\n );\n\n const totalBptZeroPi = Join.totalBptZeroPriceImpact(joinPaths);\n /*\n - Create calls with 0 min bpt for each root join\n - static call (or V4 special call) to get actual amounts for each root join\n - Apply slippage to amounts\n - Recreate calls with minAmounts === actualAmountsWithSlippage\n - Return minAmoutOut (sum actualAmountsWithSlippage), UI would use this to display to user\n - Return updatedCalls, UI would use this to execute tx\n */\n // Create calls with 0 expected for each root join\n // Peek is enabled here so we can static call the returned amounts and use these to set limits\n debugLog(`\\n--- Simulation Calls ---`);\n const {\n multiRequests,\n encodedCall: queryData,\n outputIndexes,\n } = await this.createCalls(\n joinPaths,\n userAddress,\n isNativeAssetJoin,\n undefined,\n authorisation\n );\n\n // TODO: add this back once relayerV6 is released and we're able to peek while joining with ETH\n // const simulationValue = isNativeAssetJoin\n // ? simulationDeltas[this.wrappedNativeAsset.toLowerCase()]\n // : Zero;\n\n // static call (or V4 special call) to get actual amounts for each root join\n const { amountsOut, totalAmountOut } = await this.amountsOutByJoinPath(\n userAddress,\n multiRequests,\n queryData,\n tokensInWithoutNativeAsset,\n outputIndexes,\n signer,\n simulationType,\n '0' // TODO: change to simulationValue.tosString() once relayerV6 is released\n );\n\n const { minAmountsOut, totalMinAmountOut } = this.minAmountsOutByJoinPath(\n slippage,\n amountsOut,\n totalAmountOut\n );\n const priceImpact = calcPriceImpact(\n BigInt(totalAmountOut),\n totalBptZeroPi.toBigInt(),\n true\n ).toString();\n\n // Create calls with minAmountsOut\n debugLog(`\\n--- Final Calls ---`);\n const { encodedCall, deltas } = await this.createCalls(\n joinPaths,\n userAddress,\n isNativeAssetJoin,\n minAmountsOut,\n authorisation\n );\n\n const value = isNativeAssetJoin\n ? deltas[this.wrappedNativeAsset.toLowerCase()]\n : Zero;\n debugLog(`Total value: ${value.toString()}`);\n\n this.assertDeltas(\n poolId,\n deltas,\n tokensInWithoutNativeAsset,\n amountsIn,\n totalMinAmountOut\n );\n\n return {\n to: this.relayer,\n encodedCall,\n expectedOut: totalAmountOut,\n minOut: totalMinAmountOut,\n priceImpact,\n value,\n };\n }\n\n private assertDeltas(\n poolId: string,\n deltas: Record,\n tokensIn: string[],\n amountsIn: string[],\n minBptOut: string\n ): void {\n const poolAddress = getPoolAddress(poolId);\n const outDiff = deltas[poolAddress.toLowerCase()].add(minBptOut);\n\n if (outDiff.abs().gt(3)) {\n console.error(\n `join assertDeltas, bptOut: `,\n poolAddress,\n minBptOut,\n deltas[poolAddress.toLowerCase()]?.toString()\n );\n throw new BalancerError(BalancerErrorCode.JOIN_DELTA_AMOUNTS);\n }\n delete deltas[poolAddress.toLowerCase()];\n\n tokensIn.forEach((token, i) => {\n if (\n !BigNumber.from(amountsIn[i]).eq(0) &&\n deltas[token.toLowerCase()]?.toString() !== amountsIn[i]\n ) {\n console.error(\n `join assertDeltas, tokenIn: `,\n token,\n amountsIn[i],\n deltas[token.toLowerCase()]?.toString()\n );\n throw new BalancerError(BalancerErrorCode.JOIN_DELTA_AMOUNTS);\n }\n delete deltas[token.toLowerCase()];\n });\n\n for (const token in deltas) {\n if (deltas[token].toString() !== '0') {\n console.error(\n `join assertDeltas, non-input token should be 0: `,\n token,\n deltas[token].toString()\n );\n throw new BalancerError(BalancerErrorCode.JOIN_DELTA_AMOUNTS);\n }\n }\n }\n\n // Create join paths from tokensIn all the way to the root node.\n static getJoinPaths = (\n orderedNodes: Node[],\n tokensIn: string[],\n amountsIn: string[]\n ): Node[][] => {\n const joinPaths: Node[][] = [];\n\n // Filter all nodes that contain a token in the tokensIn array\n const inputNodes = orderedNodes.filter((node) =>\n tokensIn\n .filter((t, i) => BigNumber.from(amountsIn[i]).gt(0)) // Remove input tokens with 0 amounts\n .map((tokenIn) => tokenIn.toLowerCase())\n .includes(node.address.toLowerCase())\n );\n\n // If inputNodes contain at least one leaf token, then add path to join proportionally with all leaf tokens contained in tokensIn\n const containsLeafNode = inputNodes.some((node) => node.isLeaf);\n if (containsLeafNode) {\n joinPaths.push(orderedNodes);\n }\n\n // Add a join path for each non-leaf input node\n const nonLeafInputNodes = inputNodes.filter((node) => !node.isLeaf);\n nonLeafInputNodes.forEach((nonLeafInputNode) => {\n // Get amount in for current node\n const nonLeafAmountIn = amountsIn.find((amountIn, i) =>\n isSameAddress(tokensIn[i], nonLeafInputNode.address)\n ) as string;\n // Split amount in between nodes with same non-leaf input token based on proportionOfParent\n const totalProportions = nonLeafInputNodes\n .filter((node) => isSameAddress(node.address, nonLeafInputNode.address))\n .reduce(\n (total, node) => total.add(node.proportionOfParent),\n BigNumber.from(0)\n );\n const proportionalNonLeafAmountIn = BigNumber.from(nonLeafAmountIn)\n .mul(nonLeafInputNode.proportionOfParent)\n .div(totalProportions)\n .toString();\n // Create input node for current non-leaf input token\n const [inputTokenNode] = PoolGraph.createInputTokenNode(\n 0, // temp value that will be updated after creation\n nonLeafInputNode.address,\n nonLeafInputNode.decimals,\n nonLeafInputNode.parent,\n WeiPerEther,\n nonLeafInputNode.balance\n );\n // Update index to be actual amount in\n inputTokenNode.index = proportionalNonLeafAmountIn;\n inputTokenNode.isLeaf = false;\n // Start join path with input node\n const nonLeafJoinPath = [inputTokenNode];\n // Add each parent to the join path until we reach the root node\n let parent = inputTokenNode.parent;\n let currentChild = inputTokenNode;\n while (parent) {\n const parentCopy = cloneDeep(parent);\n parentCopy.children = parentCopy.children.map((child) => {\n if (child.address === currentChild.address) {\n // Replace original child with current child that was modified to handle the non-leaf join\n return currentChild;\n } else {\n // Update index of siblings that are not within the join path to be 0\n return { ...child, index: '0' };\n }\n });\n nonLeafJoinPath.push(parentCopy);\n currentChild = parentCopy;\n parent = parentCopy.parent;\n }\n // Add join path to list of join paths\n joinPaths.push(nonLeafJoinPath);\n });\n\n // After creating all join paths, update the index of each input node to be the amount in for that node\n // All other node indexes will be used as a reference to store the amounts out for that node\n this.updateInputAmounts(joinPaths, tokensIn, amountsIn);\n\n return joinPaths;\n };\n\n /*\n AmountsIn should be adjusted after being split between tokensIn to fix eventual rounding issues.\n This prevents the transaction to leave out dust amounts.\n */\n private static updateInputAmounts = (\n joinPaths: Node[][],\n tokensIn: string[],\n amountsIn: string[]\n ): void => {\n // Helper function to calculate and adjust amount difference for each token in\n const ajdustAmountInDiff = (\n tokenInInputNodes: Node[],\n amountIn: string\n ): void => {\n if (tokenInInputNodes.length > 1) {\n // Sum of amountsIn from each input node with same tokenIn\n const amountsInSumforTokenIn = tokenInInputNodes.reduce(\n (sum, currentNode) => sum.add(currentNode.index),\n BigNumber.from(0)\n );\n // Compare total amountIn with sum of amountIn split between each input node with same tokenIn\n const diff = BigNumber.from(amountIn).sub(amountsInSumforTokenIn);\n // Apply difference to first input node with same tokenIn\n tokenInInputNodes[0].index = diff\n .add(tokenInInputNodes[0].index)\n .toString();\n }\n };\n\n // Update amountsIn within leaf join path\n const leafJoinPath = joinPaths.find((joinPath) => joinPath[0].isLeaf);\n if (leafJoinPath) {\n // Update input proportions so inputs are shared correctly between leaf nodes with same tokenIn\n const totalProportions = this.updateTotalProportions(leafJoinPath);\n // Update input nodes to have correct input amount\n leafJoinPath.forEach((node) => {\n if (node.joinAction === 'input')\n node = this.updateNodeAmount(\n node,\n tokensIn,\n amountsIn,\n totalProportions\n );\n });\n // Adjust amountIn for each tokenIn to fix eventual rounding issues\n tokensIn.forEach((tokenIn, i) => {\n const tokenInInputNodes = leafJoinPath.filter(\n (inputNode) =>\n inputNode.isLeaf && isSameAddress(inputNode.address, tokenIn)\n );\n ajdustAmountInDiff(tokenInInputNodes, amountsIn[i]);\n });\n }\n\n // Adjust amountsIn shared between non-leaf join paths with same tokenIn\n const nonLeafJoinPaths = joinPaths.filter(\n (joinPath) => !joinPath[0].isLeaf\n );\n if (nonLeafJoinPaths.length > 1) {\n tokensIn.forEach((tokenIn, i) => {\n const tokenInInputNodes = nonLeafJoinPaths\n .map((path) => path[0])\n .filter((node) => isSameAddress(node.address, tokenIn));\n ajdustAmountInDiff(tokenInInputNodes, amountsIn[i]);\n });\n }\n };\n\n private createCalls = async (\n joinPaths: Node[][],\n userAddress: string,\n isNativeAssetJoin: boolean,\n minAmountsOut?: string[], // one for each joinPath\n authorisation?: string\n ): Promise<{\n multiRequests: Requests[][];\n encodedCall: string;\n outputIndexes: number[];\n deltas: Record;\n }> => {\n // Create calls for both leaf and non-leaf inputs\n const { multiRequests, encodedCalls, outputIndexes, deltas } =\n this.createActionCalls(\n joinPaths,\n userAddress,\n isNativeAssetJoin,\n minAmountsOut\n );\n\n if (authorisation) {\n encodedCalls.unshift(this.createSetRelayerApproval(authorisation));\n }\n const encodedCall = balancerRelayerInterface.encodeFunctionData(\n 'multicall',\n [encodedCalls]\n );\n\n return {\n multiRequests,\n encodedCall,\n outputIndexes: authorisation\n ? outputIndexes.map((i) => i + 1)\n : outputIndexes,\n deltas,\n };\n };\n\n /*\n 1. For each input token:\n 1. recursively find the spot price for each pool in the path of the join\n 2. take the product to get the spot price of the path\n 3. multiply the input amount of that token by the path spot price to get the \"zeroPriceImpact\" amount of BPT for that token\n 2. Sum each tokens zeroPriceImpact BPT amount to get total zeroPriceImpact BPT\n */\n static totalBptZeroPriceImpact = (joinPaths: Node[][]): BigNumber => {\n // Add bptZeroPriceImpact for all inputs\n let totalBptZeroPi = BigNumber.from('0');\n joinPaths.forEach((joinPath) => {\n const isLeafJoin = joinPath[0].isLeaf;\n if (isLeafJoin) {\n // Calculate bptZeroPriceImpact for leaf inputs\n const leafNodes = joinPath.filter((node) => node.isLeaf);\n leafNodes.forEach((leafNode) => {\n const bptOut = this.bptOutZeroPiForInputNode(leafNode);\n totalBptZeroPi = totalBptZeroPi.add(bptOut);\n });\n } else {\n // Calculate bptZeroPriceImpact for non-leaf inputs\n const bptOut = this.bptOutZeroPiForInputNode(joinPath[0]);\n totalBptZeroPi = totalBptZeroPi.add(bptOut);\n }\n });\n return totalBptZeroPi;\n };\n\n /*\n 1. recursively find the spot price for each pool in the path of the join\n 2. take the product to get the spot price of the path\n 3. multiply the input amount of that token by the path spot price to get the \"zeroPriceImpact\" amount of BPT for that token \n */\n static bptOutZeroPiForInputNode = (inputNode: Node): bigint => {\n if (inputNode.index === '0' || inputNode.joinAction !== 'input')\n return BigInt(0);\n let spProduct = 1;\n let parentNode: Node | undefined = inputNode.parent;\n let childAddress = inputNode.address;\n // Traverse up graph until we reach root adding each node\n while (parentNode !== undefined) {\n if (\n parentNode.joinAction === 'batchSwap' ||\n parentNode.joinAction === 'joinPool'\n ) {\n const sp = parentNode.spotPrices[childAddress.toLowerCase()];\n spProduct = spProduct * parseFloat(sp);\n childAddress = parentNode.address;\n }\n parentNode = parentNode.parent;\n }\n const spPriceScaled = parseFixed(spProduct.toFixed(18), 18);\n const scalingFactor = _computeScalingFactor(BigInt(inputNode.decimals));\n const inputAmountScaled = _upscale(BigInt(inputNode.index), scalingFactor);\n const bptOut = SolidityMaths.divDownFixed(\n inputAmountScaled,\n spPriceScaled.toBigInt()\n );\n return bptOut;\n };\n\n /*\n Simulate transaction and decodes each output of interest.\n */\n private amountsOutByJoinPath = async (\n userAddress: string,\n multiRequests: Requests[][],\n callData: string,\n tokensIn: string[],\n outputIndexes: number[],\n signer: JsonRpcSigner,\n simulationType: SimulationType,\n value: string\n ): Promise<{ amountsOut: string[]; totalAmountOut: string }> => {\n const amountsOut = await this.simulationService.simulateGeneralisedJoin(\n this.relayer,\n multiRequests,\n callData,\n outputIndexes,\n userAddress,\n tokensIn,\n signer,\n simulationType,\n value\n );\n\n const totalAmountOut = amountsOut\n .reduce((sum, amount) => sum.add(BigNumber.from(amount)), Zero)\n .toString();\n\n return {\n amountsOut,\n totalAmountOut,\n };\n };\n\n /*\n Apply slippage to amounts\n */\n private minAmountsOutByJoinPath = (\n slippage: string,\n amounts: string[],\n totalAmountOut: string\n ): { minAmountsOut: string[]; totalMinAmountOut: string } => {\n const minAmountsOut = amounts.map((amount) =>\n subSlippage(BigNumber.from(amount), BigNumber.from(slippage)).toString()\n );\n const totalMinAmountOut = subSlippage(\n BigNumber.from(totalAmountOut),\n BigNumber.from(slippage)\n ).toString();\n\n return {\n minAmountsOut,\n totalMinAmountOut,\n };\n };\n\n private updateDeltas(\n deltas: Record,\n assets: string[],\n amounts: string[]\n ): Record {\n assets.forEach((t, i) => {\n const asset = t.toLowerCase();\n if (!deltas[asset]) deltas[asset] = Zero;\n deltas[asset] = deltas[asset].add(amounts[i]);\n });\n return deltas;\n }\n\n // Create actions for each Node and return in multicall array\n // Create calls for each path, use value stored in minBptAmounts if available\n private createActionCalls = (\n joinPaths: Node[][],\n userAddress: string,\n isNativeAssetJoin: boolean,\n minAmountsOut?: string[]\n ): {\n multiRequests: Requests[][];\n encodedCalls: string[];\n outputIndexes: number[];\n deltas: Record;\n } => {\n const multiRequests: Requests[][] = [];\n const encodedCalls: string[] = [];\n const outputIndexes: number[] = [];\n const isSimulation = !minAmountsOut;\n const deltas: Record = {};\n\n joinPaths.forEach((joinPath, j) => {\n const isLeafJoin = joinPath[0].isLeaf;\n const modelRequests: Requests[] = [];\n\n joinPath.forEach((node, i) => {\n // Prevent adding action calls with input amounts equal 0\n if (\n node.children.length > 0 &&\n node.children.filter((c) => this.shouldBeConsidered(c)).length === 0\n ) {\n node.index = '0';\n return;\n }\n\n // Sender's rule\n // 1. If any child node is an input node, tokens are coming from the user\n const hasChildInput = node.children\n .filter((c) => this.shouldBeConsidered(c))\n .some((c) => c.joinAction === 'input');\n const sender = hasChildInput ? userAddress : this.relayer;\n\n // Recipient's rule\n // 1. Transactions with sibling input node must be sent to user because it will be the sender of the following transaction (per sender's rule above)\n // e.g. boostedMetaAlt - MAI/bbausd - joining with MAI from user and bbausd from earlier actions. MAI needs to come from user.\n // 2. Last transaction must be sent to the user\n // 3. Otherwise relayer\n // Note: scenario 1 usually happens with joinPool transactions that have both BPT and undelying tokens as tokensIn\n const isLastChainedCall = i === joinPath.length - 1;\n const hasSiblingInput =\n (isLeafJoin && // non-leaf joins don't have siblings that should be considered\n node.parent?.children\n .filter((s) => this.shouldBeConsidered(s))\n .some((s) => s.joinAction === 'input')) ??\n false;\n const recipient =\n isLastChainedCall || hasSiblingInput ? userAddress : this.relayer;\n\n // Last action will use minBptOut to protect user. Middle calls can safely have 0 minimum as tx will revert if last fails.\n const minOut =\n isLastChainedCall && minAmountsOut ? minAmountsOut[j] : '0';\n\n switch (node.joinAction) {\n case 'batchSwap':\n {\n const { modelRequest, encodedCall, assets, amounts } =\n this.createSwap(\n node,\n j,\n minOut,\n sender,\n recipient,\n isNativeAssetJoin,\n isSimulation\n );\n modelRequests.push(modelRequest);\n encodedCalls.push(encodedCall);\n this.updateDeltas(deltas, assets, amounts);\n }\n break;\n case 'joinPool':\n {\n const { modelRequest, encodedCall, assets, amounts, minBptOut } =\n this.createJoinPool(\n node,\n j,\n minOut,\n sender,\n recipient,\n isNativeAssetJoin,\n isSimulation\n );\n modelRequests.push(modelRequest);\n encodedCalls.push(encodedCall);\n this.updateDeltas(\n deltas,\n [node.address, ...assets],\n [minBptOut, ...amounts]\n );\n }\n break;\n default:\n return;\n }\n });\n if (isSimulation) {\n const outputRef = 100 * j;\n const encodedPeekCall = Relayer.encodePeekChainedReferenceValue(\n Relayer.toChainedReference(outputRef, false)\n );\n encodedCalls.push(encodedPeekCall);\n outputIndexes.push(encodedCalls.indexOf(encodedPeekCall));\n }\n multiRequests.push(modelRequests);\n });\n\n return { multiRequests, encodedCalls, outputIndexes, deltas };\n };\n\n /**\n * Creates a map of node address and total proportion. Used for the case where there may be multiple inputs using same token, e.g. DAI input to 2 pools.\n * @param nodes nodes to consider.\n */\n static updateTotalProportions = (\n nodes: Node[]\n ): Record => {\n const totalProportions: Record = {};\n nodes.forEach((node) => {\n if (!totalProportions[node.address])\n totalProportions[node.address] = node.proportionOfParent;\n else {\n totalProportions[node.address] = totalProportions[node.address].add(\n node.proportionOfParent\n );\n }\n });\n return totalProportions;\n };\n\n /**\n * Uses relayer to approve itself to act in behalf of the user\n *\n * @param authorisation Encoded authorisation call.\n * @returns relayer approval call\n */\n private createSetRelayerApproval = (authorisation: string): string => {\n return Relayer.encodeSetRelayerApproval(this.relayer, true, authorisation);\n };\n\n static updateNodeAmount = (\n node: Node,\n tokensIn: string[],\n amountsIn: string[],\n totalProportions: Record\n ): Node => {\n /*\n An input node requires a real amount (not an outputRef) as it is first node in chain.\n This amount will be used when chaining to parent.\n Amounts are split proportionally between all inputs with same token.\n */\n const tokenIndex = tokensIn\n .map((t) => t.toLowerCase())\n .indexOf(node.address.toLowerCase());\n if (tokenIndex === -1) {\n node.index = '0';\n return node;\n }\n\n // Calculate proportional split\n const totalProportion = totalProportions[node.address];\n const inputProportion = node.proportionOfParent\n .mul((1e18).toString())\n .div(totalProportion);\n const inputAmount = inputProportion\n .mul(amountsIn[tokenIndex])\n .div((1e18).toString());\n // Update index with actual value\n node.index = inputAmount.toString();\n // console.log(\n // `${node.type} ${node.address} prop: ${node.proportionOfParent.toString()}\n // ${node.joinAction} (\n // Inputs: ${inputAmount.toString()}\n // OutputRef: ${node.index}\n // )`\n // );\n return node;\n };\n\n private createSwap = (\n node: Node,\n joinPathIndex: number,\n expectedOut: string,\n sender: string,\n recipient: string,\n isNativeAssetJoin: boolean,\n isSimulation: boolean\n ): {\n modelRequest: SwapRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n } => {\n // We only need swaps for main > linearBpt so shouldn't be more than token > token\n if (node.children.length !== 1) throw new Error('Unsupported swap');\n const tokenIn = node.children[0].address;\n const amountIn = this.getOutputRefValue(joinPathIndex, node.children[0]);\n\n // Single swap limits are always positive\n // Swap within generalisedJoin is always exactIn, so use minAmountOut to set limit\n const limit: string = expectedOut;\n\n const assetIn =\n isNativeAssetJoin && !isSimulation\n ? this.replaceWrappedNativeAsset([tokenIn])[0]\n : tokenIn;\n\n const request: SingleSwap = {\n poolId: node.id,\n kind: SwapType.SwapExactIn,\n assetIn,\n assetOut: node.address,\n amount: amountIn.value,\n userData: '0x',\n };\n\n const fromInternalBalance = this.allImmediateChildrenSendToInternal(node);\n const toInternalBalance = this.allSiblingsSendToInternal(node);\n\n const funds: FundManagement = {\n sender,\n recipient,\n fromInternalBalance,\n toInternalBalance,\n };\n\n const outputReference = BigNumber.from(\n this.getOutputRefValue(joinPathIndex, node).value\n );\n\n const value =\n isNativeAssetJoin && !isSimulation\n ? getEthValue([assetIn], [amountIn.value])\n : Zero;\n\n const call: Swap = {\n request,\n funds,\n limit,\n deadline: BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value,\n outputReference,\n };\n\n const encodedCall = Relayer.encodeSwap(call);\n\n debugLog(`\\nSwap:`);\n debugLog(`${JSON.stringify(call)}`);\n debugLog(`Partial value: ${JSON.stringify(call.value?.toString())}`);\n\n const modelRequest = VaultModel.mapSwapRequest(call);\n\n const hasChildInput = node.children.some((c) => c.joinAction === 'input');\n // If node has no child input the swap is part of a chain and token in shouldn't be considered for user deltas\n const userTokenIn = !hasChildInput ? '0' : amountIn.value;\n // If node has parent the swap is part of a chain and BPT out shouldn't be considered for user deltas\n const userBptOut =\n node.parent != undefined\n ? '0'\n : BigNumber.from(expectedOut).mul(-1).toString(); // needs to be negative because it's handled by the vault model as an amount going out of the vault\n\n const assets = [node.address, tokenIn];\n const amounts = [userBptOut, userTokenIn];\n\n return { modelRequest, encodedCall, assets, amounts };\n };\n\n private createJoinPool = (\n node: Node,\n joinPathIndex: number,\n minAmountOut: string,\n sender: string,\n recipient: string,\n isNativeAssetJoin: boolean,\n isSimulation: boolean\n ): {\n modelRequest: JoinPoolModelRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n minBptOut: string;\n } => {\n const inputTokens: string[] = [];\n const inputAmts: string[] = [];\n\n // inputTokens needs to include each asset even if it has 0 amount\n node.children.forEach((child) => {\n inputTokens.push(child.address);\n // non-leaf joins should set input amounts only for children that are in their joinPath\n if (this.shouldBeConsidered(child)) {\n inputAmts.push(this.getOutputRefValue(joinPathIndex, child).value);\n } else {\n inputAmts.push('0');\n }\n });\n\n if (node.type === PoolType.ComposableStable) {\n // assets need to include the phantomPoolToken\n inputTokens.push(node.address);\n // need to add a placeholder so sorting works\n inputAmts.push('0');\n }\n\n // sort inputs\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [sortedTokens, sortedAmounts] = assetHelpers.sortTokens(\n inputTokens,\n inputAmts\n ) as [string[], string[]];\n\n // userData amounts should not include the BPT of the pool being joined\n let userDataAmounts = [];\n const bptIndex = sortedTokens\n .map((t) => t.toLowerCase())\n .indexOf(node.address.toLowerCase());\n if (bptIndex === -1) {\n userDataAmounts = sortedAmounts;\n } else {\n userDataAmounts = [\n ...sortedAmounts.slice(0, bptIndex),\n ...sortedAmounts.slice(bptIndex + 1),\n ];\n }\n\n let userData: string;\n if (node.type === PoolType.Weighted) {\n userData = WeightedPoolEncoder.joinExactTokensInForBPTOut(\n userDataAmounts,\n minAmountOut\n );\n } else {\n userData = StablePoolEncoder.joinExactTokensInForBPTOut(\n userDataAmounts,\n minAmountOut\n );\n }\n\n const value =\n isNativeAssetJoin && !isSimulation\n ? getEthValue(\n this.replaceWrappedNativeAsset(sortedTokens),\n sortedAmounts\n )\n : Zero;\n\n const fromInternalBalance = this.allImmediateChildrenSendToInternal(node);\n\n const call: EncodeJoinPoolInput = Relayer.formatJoinPoolInput({\n poolId: node.id,\n kind: 0,\n sender,\n recipient,\n value,\n outputReference: this.getOutputRefValue(joinPathIndex, node).value,\n joinPoolRequest: {} as JoinPoolRequest,\n assets:\n isNativeAssetJoin && !isSimulation\n ? this.replaceWrappedNativeAsset(sortedTokens)\n : sortedTokens, // Must include BPT token\n maxAmountsIn: sortedAmounts,\n userData,\n fromInternalBalance,\n });\n const encodedCall = Relayer.encodeJoinPool(call);\n\n debugLog(`\\nJoin:`);\n debugLog(JSON.stringify(call));\n debugLog(`Partial value: ${JSON.stringify(call.value?.toString())}`);\n const modelRequest = VaultModel.mapJoinPoolRequest(call);\n\n const userAmountsTokenIn = sortedAmounts.map((a) =>\n Relayer.isChainedReference(a) ? '0' : a\n );\n const userAmountOut = Relayer.isChainedReference(minAmountOut)\n ? '0'\n : minAmountOut;\n\n const hasChildInput = node.children\n .filter((c) => this.shouldBeConsidered(c))\n .some((c) => c.joinAction === 'input');\n // If node has no child input the join is part of a chain and amounts in shouldn't be considered for user deltas\n const assets = !hasChildInput ? [] : sortedTokens;\n const amounts = !hasChildInput ? [] : userAmountsTokenIn;\n // If node has parent the join is part of a chain and shouldn't be considered for user deltas\n const minBptOut =\n node.parent != undefined\n ? Zero.toString()\n : Zero.sub(userAmountOut).toString(); // -ve because coming from Vault\n\n return { modelRequest, encodedCall, assets, amounts, minBptOut };\n };\n\n private getOutputRefValue = (\n joinPathIndex: number,\n node: Node\n ): { value: string; isRef: boolean } => {\n if (node.joinAction === 'input') {\n // Input nodes have their indexes set as the actual input amount, instead of a chained reference\n return { value: node.index, isRef: false };\n } else if (node.index !== '0' || !node.parent) {\n // Root node (parent === undefined) has index zero, but should still pass chained reference as outputRef value\n return {\n value: Relayer.toChainedReference(\n BigNumber.from(node.index).add(joinPathIndex * 100)\n ).toString(),\n isRef: true,\n };\n } else {\n return {\n value: '0',\n isRef: true,\n };\n }\n };\n\n // Nodes with index 0 won't affect transactions so they shouldn't be considered\n private shouldBeConsidered = (node: Node): boolean => {\n return node.index !== '0';\n };\n\n // joinPool transaction always sends to non-internal balance\n // input always behave as sending to non-internal balance\n private sendsToInternalBalance = (node: Node): boolean => {\n return node.joinAction !== 'input' && node.joinAction !== 'joinPool';\n };\n\n private allImmediateChildrenSendToInternal = (node: Node): boolean => {\n const children = node.children.filter((c) => this.shouldBeConsidered(c));\n if (children.length === 0) return false;\n return (\n children.filter((c) => this.sendsToInternalBalance(c)).length ===\n children.length\n );\n };\n\n private allSiblingsSendToInternal = (node: Node): boolean => {\n if (!node.parent) return false;\n const siblings = node.parent.children.filter((s) =>\n this.shouldBeConsidered(s)\n );\n return (\n siblings.filter((s) => this.sendsToInternalBalance(s)).length ===\n siblings.length\n );\n };\n\n private replaceWrappedNativeAsset = (tokens: string[]): string[] => {\n const wrappedNativeAssetIndex = tokens.findIndex(\n (t) => t.toLowerCase() === this.wrappedNativeAsset.toLowerCase()\n );\n return replace(tokens, wrappedNativeAssetIndex, AddressZero);\n };\n}\n","import axios from 'axios';\nimport { AddressZero, MaxInt256 } from '@ethersproject/constants';\nimport { parseFixed } from '@ethersproject/bignumber';\n\nimport { networkAddresses } from '@/lib/constants/config';\nimport { BalancerTenderlyConfig } from '@/types';\n\ntype StateOverrides = {\n [address: string]: { value: { [key: string]: string } };\n};\n\nexport default class TenderlyHelper {\n private vaultAddress;\n private tenderlyUrl;\n private opts?;\n private blockNumber: number | undefined;\n\n constructor(private chainId: number, tenderlyConfig: BalancerTenderlyConfig) {\n const { contracts } = networkAddresses(this.chainId);\n this.vaultAddress = contracts.vault as string;\n this.tenderlyUrl = `https://api.tenderly.co/api/v1/account/${tenderlyConfig.user}/project/${tenderlyConfig.project}/`;\n this.opts = {\n headers: {\n 'X-Access-Key': tenderlyConfig.accessKey,\n },\n };\n\n this.blockNumber = tenderlyConfig.blockNumber;\n }\n\n simulateMulticall = async (\n to: string,\n data: string,\n userAddress: string,\n tokens: string[],\n value = '0'\n ): Promise => {\n const tokensOverrides = await this.encodeBalanceAndAllowanceOverrides(\n userAddress,\n tokens\n );\n const relayerApprovalOverride = await this.encodeRelayerApprovalOverride(\n userAddress,\n to\n );\n const encodedStateOverrides = {\n ...tokensOverrides,\n ...relayerApprovalOverride,\n };\n return this.simulateTransaction(\n to,\n data,\n userAddress,\n encodedStateOverrides,\n value\n );\n };\n\n simulateTransaction = async (\n to: string,\n data: string,\n userAddress: string,\n encodedStateOverrides: StateOverrides,\n value: string\n ): Promise => {\n // Map encoded-state response into simulate request body by replacing property names\n const stateOverrides = Object.fromEntries(\n Object.keys(encodedStateOverrides).map((address) => {\n // Object.fromEntries require format [key, value] instead of {key: value}\n return [address, { storage: encodedStateOverrides[address].value }];\n })\n );\n\n // Set user balance to 1000 ETH to make sure the simulation doesn't fail due to insufficient balance\n const state_objects = {\n ...stateOverrides,\n [userAddress]: {\n balance: parseFixed('100', 18).toHexString(),\n },\n };\n\n const body = {\n // -- Standard TX fields --\n network_id: this.chainId.toString(),\n block_number: this.blockNumber,\n from: userAddress,\n to,\n input: data,\n // gas: 8000000,\n // gas_price: '0',\n value,\n // -- Simulation config (tenderly specific) --\n save_if_fails: true,\n // save: true,\n simulation_type: 'quick', // remove this while developing/debugging\n state_objects,\n };\n\n const SIMULATE_URL = this.tenderlyUrl + 'simulate';\n\n const resp = await axios.post(SIMULATE_URL, body, this.opts);\n\n const simulatedTransactionOutput =\n resp.data.transaction.transaction_info.call_trace.output;\n\n return simulatedTransactionOutput;\n };\n\n // Encode relayer approval state override\n encodeRelayerApprovalOverride = async (\n userAddress: string,\n relayerAddress: string\n ): Promise => {\n const stateOverrides: StateOverrides = {\n [`${this.vaultAddress}`]: {\n value: {\n [`_approvedRelayers[${userAddress}][${relayerAddress}]`]:\n true.toString(),\n },\n },\n };\n\n const encodedStateOverrides = await this.requestStateOverrides(\n stateOverrides\n );\n\n return encodedStateOverrides;\n };\n\n // Encode token balances and allowances overrides to max value\n encodeBalanceAndAllowanceOverrides = async (\n userAddress: string,\n tokens: string[]\n ): Promise => {\n const tokensWithoutNativeAsset = tokens.filter(\n (token) => token !== AddressZero\n );\n\n if (tokensWithoutNativeAsset.length === 0) return {};\n\n // Create balances and allowances overrides for each token address provided\n let stateOverrides: StateOverrides = {};\n tokensWithoutNativeAsset.forEach(\n (token) =>\n (stateOverrides = {\n ...stateOverrides,\n [`${token}`]: {\n value: {\n [`_balances[${userAddress}]`]: MaxInt256.toString(),\n [`_allowances[${userAddress}][${this.vaultAddress}]`]:\n MaxInt256.toString(),\n [`balanceOf[${userAddress}]`]: MaxInt256.toString(),\n [`allowance[${userAddress}][${this.vaultAddress}]`]:\n MaxInt256.toString(),\n [`balances[${userAddress}]`]: MaxInt256.toString(),\n [`allowed[${userAddress}][${this.vaultAddress}]`]:\n MaxInt256.toString(),\n },\n },\n })\n );\n\n const encodedStateOverrides = await this.requestStateOverrides(\n stateOverrides\n );\n\n if (\n Object.keys(encodedStateOverrides).some((k) => {\n return Object.keys(encodedStateOverrides[k].value).length !== 2;\n })\n )\n throw new Error(\n \"Couldn't encode state overrides - states should match the ones in the contracts\"\n );\n\n return encodedStateOverrides;\n };\n\n private requestStateOverrides = async (\n stateOverrides: StateOverrides\n ): Promise => {\n const ENCODE_STATES_URL = this.tenderlyUrl + 'contracts/encode-states';\n const body = {\n networkID: this.chainId.toString(),\n stateOverrides,\n };\n\n const encodedStatesResponse = await axios.post(\n ENCODE_STATES_URL,\n body,\n this.opts\n );\n const encodedStateOverrides = encodedStatesResponse.data\n .stateOverrides as StateOverrides;\n\n if (\n !encodedStateOverrides ||\n Object.keys(encodedStateOverrides).length !==\n Object.keys(stateOverrides).length\n )\n throw new Error(\n \"Couldn't encode state overrides - contracts should be verified and whitelisted on Tenderly\"\n );\n\n return encodedStateOverrides;\n };\n}\n","import { PoolDataService } from '@balancer-labs/sor';\nimport { defaultAbiCoder } from '@ethersproject/abi';\nimport { JsonRpcSigner } from '@ethersproject/providers';\n\nimport TenderlyHelper from '@/lib/utils/tenderlyHelper';\nimport { BalancerNetworkConfig } from '@/types';\n\nimport { VaultModel, Requests } from '../vaultModel/vaultModel.module';\n\nexport enum SimulationType {\n Tenderly,\n VaultModel,\n Static,\n}\n\n/**\n * Simulation module is responsible for simulating the results of a generalised\n * join or exit using different types of simulation, such as:\n * - Tenderly: uses Tenderly Simulation API (third party service)\n * - VaultModel: uses TS math, which may be less accurate (min. 99% accuracy)\n * - Static: uses staticCall, which is 100% accurate but requires vault approval\n *\n * This module allows a user to perform a simulation and check for expected\n * amounts out in order to make an informed decision on whether to proceed with\n * the transaction. These expected amounts out can be used as limits to prevent\n * frontrunning and ensure that the transaction will return minimum amounts out.\n */\n\nexport class Simulation {\n private tenderlyHelper?: TenderlyHelper;\n private vaultModel: VaultModel | undefined;\n constructor(\n networkConfig: BalancerNetworkConfig,\n poolDataService?: PoolDataService\n ) {\n if (networkConfig.tenderly) {\n this.tenderlyHelper = new TenderlyHelper(\n networkConfig.chainId,\n networkConfig.tenderly\n );\n }\n if (!poolDataService) {\n this.vaultModel = undefined;\n } else {\n this.vaultModel = new VaultModel(\n poolDataService,\n networkConfig.addresses.tokens.wrappedNativeAsset\n );\n }\n }\n\n simulateGeneralisedJoin = async (\n to: string,\n multiRequests: Requests[][],\n encodedCall: string,\n outputIndexes: number[],\n userAddress: string,\n tokensIn: string[],\n signer: JsonRpcSigner,\n simulationType: SimulationType,\n value: string\n ): Promise => {\n const amountsOut: string[] = [];\n switch (simulationType) {\n case SimulationType.Tenderly: {\n if (!this.tenderlyHelper) {\n throw new Error('Missing Tenderly config');\n }\n const simulationResult = await this.tenderlyHelper.simulateMulticall(\n to,\n encodedCall,\n userAddress,\n tokensIn,\n value\n );\n amountsOut.push(...this.decodeResult(simulationResult, outputIndexes));\n break;\n }\n\n case SimulationType.VaultModel: {\n const requestResult = await this.simulateRequests(multiRequests);\n amountsOut.push(...requestResult);\n break;\n }\n case SimulationType.Static: {\n const staticResult = await signer.call({\n to,\n data: encodedCall,\n value,\n });\n\n try {\n amountsOut.push(...this.decodeResult(staticResult, outputIndexes));\n } catch (_) {\n // decoding output failed, so we assume the response contains an error message and try to decode it instead\n const decodedResponse = Buffer.from(\n staticResult.split('x')[1],\n 'hex'\n ).toString('utf8');\n throw new Error(\n `Transaction reverted with error: ${decodedResponse}`\n );\n }\n break;\n }\n default:\n throw new Error('Simulation type not supported');\n }\n return amountsOut;\n };\n\n simulateGeneralisedExit = async (\n to: string,\n multiRequests: Requests[][],\n encodedCall: string,\n outputIndexes: number[],\n userAddress: string,\n tokenIn: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType\n ): Promise => {\n const amountsOut: string[] = [];\n switch (simulationType) {\n case SimulationType.Tenderly: {\n if (!this.tenderlyHelper) {\n throw new Error('Missing Tenderly config');\n }\n const simulationResult = await this.tenderlyHelper.simulateMulticall(\n to,\n encodedCall,\n userAddress,\n [tokenIn]\n );\n amountsOut.push(...this.decodeResult(simulationResult, outputIndexes));\n break;\n }\n\n case SimulationType.VaultModel: {\n const requestResult = await this.simulateRequests(multiRequests);\n amountsOut.push(...requestResult);\n break;\n }\n case SimulationType.Static: {\n const staticResult = await signer.call({\n to,\n data: encodedCall,\n });\n try {\n amountsOut.push(...this.decodeResult(staticResult, outputIndexes));\n } catch (_) {\n // decoding output failed, so we assume the response contains an error message and try to decode it instead\n const decodedResponse = Buffer.from(\n staticResult.split('x')[1],\n 'hex'\n ).toString('utf8');\n throw new Error(\n `Transaction reverted with error: ${decodedResponse}`\n );\n }\n break;\n }\n default:\n throw new Error('Simulation type not supported');\n }\n return amountsOut;\n };\n\n private decodeResult = (result: string, outputIndexes: number[]) => {\n const multicallResult = defaultAbiCoder.decode(\n ['bytes[]'],\n result\n )[0] as string[];\n\n // Decode each root output\n const amountsOut = outputIndexes.map((outputIndex) => {\n const result = defaultAbiCoder.decode(\n ['uint256'],\n multicallResult[outputIndex]\n );\n return result.toString();\n });\n\n return amountsOut;\n };\n\n private simulateRequests = async (multiRequests: Requests[][]) => {\n if (this.vaultModel === undefined)\n throw new Error('Missing Vault Model Config.');\n // make one multicall for each exitPath\n // take only bptOut/tokenOut delta into account\n const amountsOut: string[] = [];\n for (const [i, requests] of multiRequests.entries()) {\n const deltas = await this.vaultModel.multicall(requests, i === 0);\n const tokenOutDeltas = Object.values(deltas).filter((d) => d.lt(0));\n if (tokenOutDeltas.length === 0)\n throw new Error('No delta found for token out.');\n amountsOut.push(...tokenOutDeltas.map((d) => d.mul(-1).toString()));\n }\n return amountsOut;\n };\n}\n","import { cloneDeep } from 'lodash';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { WeiPerEther, Zero } from '@ethersproject/constants';\nimport { JsonRpcSigner } from '@ethersproject/providers';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { BalancerRelayer__factory } from '@/contracts/factories/BalancerRelayer__factory';\nimport { networkAddresses } from '@/lib/constants/config';\nimport { AssetHelpers, subSlippage } from '@/lib/utils';\nimport { PoolGraph, Node } from '@/modules/graph/graph';\nimport { Join } from '@/modules/joins/joins.module';\nimport { calcPriceImpact } from '@/modules/pricing/priceImpact';\nimport {\n EncodeUnwrapInput,\n OutputReference,\n Relayer,\n EncodeBatchSwapInput,\n} from '@/modules/relayer/relayer.module';\nimport {\n Simulation,\n SimulationType,\n} from '@/modules/simulation/simulation.module';\nimport {\n FundManagement,\n SingleSwap,\n Swap,\n SwapType,\n BatchSwapStep,\n} from '@/modules/swaps/types';\nimport { ExitPoolRequest as ExitPoolModelRequest } from '@/modules/vaultModel/poolModel/exit';\nimport {\n BatchSwapRequest,\n SwapRequest,\n} from '@/modules/vaultModel/poolModel/swap';\nimport { UnwrapRequest } from '@/modules/vaultModel/poolModel/unwrap';\nimport { Requests, VaultModel } from '@/modules/vaultModel/vaultModel.module';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport { getPoolAddress } from '@/pool-utils';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { BalancerNetworkConfig, ExitPoolRequest, PoolType } from '@/types';\nimport { Logger } from '@/lib/utils/logger';\n\nconst balancerRelayerInterface = BalancerRelayer__factory.createInterface();\n\nexport interface GeneralisedExitOutput {\n to: string;\n encodedCall: string;\n tokensOut: string[];\n expectedAmountsOut: string[];\n minAmountsOut: string[];\n priceImpact: string;\n}\n\nexport interface ExitInfo {\n tokensOut: string[];\n estimatedAmountsOut: string[];\n priceImpact: string;\n tokensToUnwrap: string[];\n}\n\n// Quickly switch useful debug logs on/off\nconst DEBUG = false;\n\nfunction debugLog(log: string) {\n const logger = Logger.getInstance();\n if (DEBUG) logger.info(log);\n}\n\nexport class Exit {\n private wrappedNativeAsset: string;\n private relayer: string;\n\n constructor(\n private poolGraph: PoolGraph,\n networkConfig: BalancerNetworkConfig,\n private simulationService: Simulation\n ) {\n const { tokens, contracts } = networkAddresses(networkConfig.chainId);\n this.wrappedNativeAsset = tokens.wrappedNativeAsset;\n this.relayer = contracts.balancerRelayer;\n }\n\n async getExitInfo(\n poolId: string,\n amountBptIn: string,\n userAddress: string,\n signer: JsonRpcSigner\n ): Promise<{\n tokensOut: string[];\n estimatedAmountsOut: string[];\n priceImpact: string;\n tokensToUnwrap: string[];\n }> {\n debugLog(`\\n--- getExitInfo()`);\n /*\n Overall exit flow description:\n - Create calls with 0 expected min amount for each token out\n - static call (or V4 special call) to get actual amounts for each token out\n - Apply slippage to amountsOut\n - Recreate calls with minAmounts === actualAmountsWithSlippage\n - Return minAmoutsOut, UI would use this to display to user\n - Return updatedCalls, UI would use this to execute tx\n */\n const exit = await this.getExit(\n poolId,\n amountBptIn,\n userAddress,\n signer,\n [],\n SimulationType.VaultModel\n );\n\n return {\n tokensOut: exit.tokensOut,\n estimatedAmountsOut: exit.expectedAmountsOut,\n priceImpact: exit.priceImpact,\n tokensToUnwrap: exit.tokensToUnwrap,\n };\n }\n\n async buildExitCall(\n poolId: string,\n amountBptIn: string,\n userAddress: string,\n slippage: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType.Static | SimulationType.Tenderly,\n authorisation?: string,\n tokensToUnwrap?: string[]\n ): Promise<{\n to: string;\n encodedCall: string;\n tokensOut: string[];\n expectedAmountsOut: string[];\n minAmountsOut: string[];\n priceImpact: string;\n }> {\n debugLog(\n `\\n--- exitPool(): simulationType: ${simulationType} - tokensToUnwrap: ${tokensToUnwrap}`\n );\n /*\n Overall exit flow description:\n - Create calls with 0 expected min amount for each token out\n - static call (or V4 special call) to get actual amounts for each token out\n - Apply slippage to amountsOut\n - Recreate calls with minAmounts === actualAmountsWithSlippage\n - Return minAmoutsOut, UI would use this to display to user\n - Return updatedCalls, UI would use this to execute tx\n */\n\n const exit = await this.getExit(\n poolId,\n amountBptIn,\n userAddress,\n signer,\n tokensToUnwrap ?? [],\n simulationType,\n authorisation\n );\n\n const { minAmountsOutByExitPath, minAmountsOutByTokenOut } =\n this.minAmountsOut(\n exit.expectedAmountsOutByExitPath,\n exit.expectedAmountsOut,\n slippage\n );\n\n debugLog(`------------ Updating limits...`);\n // Create calls with minimum expected amount out for each exit path\n const { encodedCall, deltas } = await this.createCalls(\n exit.exitPaths,\n userAddress,\n exit.isProportional,\n minAmountsOutByExitPath,\n authorisation\n );\n\n this.assertDeltas(\n poolId,\n deltas,\n amountBptIn,\n exit.tokensOut,\n minAmountsOutByTokenOut\n );\n\n return {\n to: this.relayer,\n encodedCall,\n tokensOut: exit.tokensOut,\n expectedAmountsOut: exit.expectedAmountsOut,\n minAmountsOut: minAmountsOutByTokenOut,\n priceImpact: exit.priceImpact,\n };\n }\n\n private async getExit(\n poolId: string,\n amountBptIn: string,\n userAddress: string,\n signer: JsonRpcSigner,\n tokensToUnwrap: string[],\n simulationType: SimulationType,\n authorisation?: string\n ): Promise<{\n tokensToUnwrap: string[];\n tokensOut: string[];\n exitPaths: Node[][];\n isProportional: boolean;\n expectedAmountsOut: string[];\n expectedAmountsOutByExitPath: string[];\n priceImpact: string;\n }> {\n // Create nodes and order by breadth first - initially trys with no unwrapping\n const orderedNodes = await this.poolGraph.getGraphNodes(\n false,\n poolId,\n tokensToUnwrap\n );\n\n const isProportional = PoolGraph.isProportionalPools(orderedNodes);\n debugLog(`\\nisProportional = ${isProportional}`);\n\n let exitPaths: Node[][] = [];\n let tokensOutByExitPath: string[] = [];\n let tokensOut: string[] = [];\n\n const outputNodes = orderedNodes.filter((n) => n.exitAction === 'output');\n tokensOutByExitPath = outputNodes.map((n) => n.address.toLowerCase());\n\n tokensOut = [...new Set(tokensOutByExitPath)].sort();\n\n if (isProportional) {\n // All proportional will have single path from root node, exiting proportionally by ref all the way to leafs\n const path = orderedNodes.map((node, i) => {\n // First node should exit with full BPT amount in\n if (i === 0) node.index = amountBptIn;\n return node;\n });\n exitPaths[0] = path;\n } else {\n // Create exit paths for each output node and splits amount in proportionally between them\n exitPaths = this.getExitPaths(outputNodes, amountBptIn);\n }\n\n // Create calls with minimum expected amount out for each exit path\n const {\n multiRequests,\n encodedCall: queryData,\n outputIndexes,\n } = await this.createCalls(\n exitPaths,\n userAddress,\n isProportional,\n undefined,\n authorisation\n );\n\n const expectedAmountsOutByExitPath = await this.amountsOutByExitPath(\n userAddress,\n multiRequests,\n queryData,\n orderedNodes[0].address,\n outputIndexes,\n signer,\n simulationType\n );\n\n const tokensWithInsufficientBalance = outputNodes\n .filter((outputNode, i) =>\n BigNumber.from(expectedAmountsOutByExitPath[i]).gt(outputNode.balance)\n )\n .map((node) => node.address.toLowerCase());\n\n if (\n tokensToUnwrap.some((t) =>\n tokensWithInsufficientBalance.includes(t.toLowerCase())\n )\n ) {\n /**\n * This means there is not enough balance to exit to main or wrapped tokens only\n */\n throw new Error(\n 'Insufficient pool balance to perform generalised exit - try exitting with smaller amounts'\n );\n } else if (tokensWithInsufficientBalance.length > 0) {\n return await this.getExit(\n poolId,\n amountBptIn,\n userAddress,\n signer,\n [...new Set(tokensWithInsufficientBalance)].sort(),\n simulationType,\n authorisation\n );\n } else {\n const expectedAmountsOut = this.amountsOutByTokenOut(\n tokensOut,\n tokensOutByExitPath,\n expectedAmountsOutByExitPath\n );\n\n const priceImpact = await this.calculatePriceImpact(\n poolId,\n this.poolGraph,\n tokensOut,\n expectedAmountsOut,\n amountBptIn\n );\n\n return {\n tokensToUnwrap,\n tokensOut,\n exitPaths,\n isProportional,\n expectedAmountsOut,\n expectedAmountsOutByExitPath,\n priceImpact,\n };\n }\n }\n\n /*\n (From Fernando)\n 1. Given a bpt amount in find the expect token amounts out (proportionally)\n 2. Uses bptZeroPi = _bptForTokensZeroPriceImpact (the same is used for joins too)\n 3. PI = bptAmountIn / bptZeroPi - 1\n */\n private async calculatePriceImpact(\n poolId: string,\n poolGraph: PoolGraph,\n tokensOut: string[],\n amountsOut: string[],\n amountBptIn: string\n ): Promise {\n // Create nodes for each pool/token interaction and order by breadth first\n const orderedNodesForJoin = await poolGraph.getGraphNodes(true, poolId, []);\n const joinPaths = Join.getJoinPaths(\n orderedNodesForJoin,\n tokensOut,\n amountsOut\n );\n const totalBptZeroPi = Join.totalBptZeroPriceImpact(joinPaths);\n const priceImpact = calcPriceImpact(\n BigInt(amountBptIn),\n totalBptZeroPi.toBigInt(),\n false\n ).toString();\n return priceImpact;\n }\n\n private assertDeltas(\n poolId: string,\n deltas: Record,\n bptIn: string,\n tokensOut: string[],\n amountsOut: string[]\n ): void {\n const poolAddress = getPoolAddress(poolId);\n const outDiff = deltas[poolAddress.toLowerCase()].sub(bptIn);\n\n if (outDiff.abs().gt(3)) {\n console.error(\n `exit assertDeltas, bptIn: `,\n poolAddress,\n bptIn,\n deltas[poolAddress.toLowerCase()]?.toString()\n );\n throw new BalancerError(BalancerErrorCode.EXIT_DELTA_AMOUNTS);\n }\n delete deltas[poolAddress.toLowerCase()];\n\n tokensOut.forEach((token, i) => {\n const diff = deltas[token.toLowerCase()].add(amountsOut[i]);\n if (diff.abs().gt(1)) {\n console.error(\n `exit assertDeltas, tokenOut: `,\n token,\n amountsOut[i],\n deltas[token.toLowerCase()]?.toString()\n );\n throw new BalancerError(BalancerErrorCode.EXIT_DELTA_AMOUNTS);\n }\n delete deltas[token.toLowerCase()];\n });\n\n for (const token in deltas) {\n if (deltas[token].toString() !== '0') {\n console.error(\n `exit assertDeltas, non-input token should be 0: `,\n token,\n deltas[token].toString()\n );\n throw new BalancerError(BalancerErrorCode.EXIT_DELTA_AMOUNTS);\n }\n }\n }\n\n // Query amounts out through static call and return decoded result\n private amountsOutByExitPath = async (\n userAddress: string,\n multiRequests: Requests[][],\n callData: string,\n tokenIn: string,\n outputIndexes: number[],\n signer: JsonRpcSigner,\n simulationType: SimulationType\n ): Promise => {\n const amountsOutByExitPath =\n await this.simulationService.simulateGeneralisedExit(\n this.relayer,\n multiRequests,\n callData,\n outputIndexes,\n userAddress,\n tokenIn,\n signer,\n simulationType\n );\n\n return amountsOutByExitPath;\n };\n\n // Aggregate amounts out by exit path into amounts out by token out\n private amountsOutByTokenOut = (\n tokensOut: string[],\n tokensOutByExitPath: string[],\n expectedAmountsOutByExitPath: string[]\n ) => {\n // Aggregate amountsOutByExitPath into expectedAmountsOut\n const expectedAmountsOutMap: Record = {};\n tokensOutByExitPath.forEach(\n (tokenOut, i) =>\n (expectedAmountsOutMap[tokenOut] = (\n expectedAmountsOutMap[tokenOut] ?? Zero\n ).add(expectedAmountsOutByExitPath[i]))\n );\n const expectedAmountsOut = tokensOut.map((tokenOut) =>\n expectedAmountsOutMap[tokenOut].toString()\n );\n\n return expectedAmountsOut;\n };\n\n // Apply slippage tolerance to expected amounts out\n private minAmountsOut = (\n expectedAmountsOutByExitPath: string[],\n expectedAmountsOutByTokenOut: string[],\n slippage: string\n ) => {\n // Apply slippage tolerance on expected amount out for each exit path\n const minAmountsOutByExitPath = expectedAmountsOutByExitPath.map(\n (expectedAmountOut) =>\n subSlippage(\n BigNumber.from(expectedAmountOut),\n BigNumber.from(slippage)\n ).toString()\n );\n\n // Apply slippage tolerance on expected amount out for each token out\n const minAmountsOutByTokenOut = expectedAmountsOutByTokenOut.map(\n (expectedAmountOut) =>\n subSlippage(\n BigNumber.from(expectedAmountOut),\n BigNumber.from(slippage)\n ).toString()\n );\n\n return { minAmountsOutByExitPath, minAmountsOutByTokenOut };\n };\n\n // Create one exit path for each output node\n private getExitPaths = (outputNodes: Node[], amountIn: string): Node[][] => {\n const exitPaths = outputNodes.map((outputNode) => {\n const exitPath = [outputNode];\n while (exitPath[0].parent) {\n exitPath.unshift(cloneDeep(exitPath[0].parent));\n }\n /*\n The input/root node requires a real amount (not a reference/index) as it is first node in chain.\n This amount will be used when chaining to children.\n */\n exitPath[0].index = exitPath[exitPath.length - 1].proportionOfParent\n .mul(amountIn)\n .div(WeiPerEther)\n .toString();\n return exitPath;\n });\n\n /*\n Amounts in for exit paths should be adjusted after caculated to fix eventual rounding issues\n */\n // Sum amountIn for each exit path\n const amountsInSum = exitPaths.reduce((accumulator, currentExitPath) => {\n const amountInForCurrentExitPath = currentExitPath[0].index;\n return BigNumber.from(amountInForCurrentExitPath).add(accumulator);\n }, Zero);\n // Compare total amountIn with sum of calculated amountIn for each exit path\n const amountsInDiff = BigNumber.from(amountIn).sub(amountsInSum);\n // Add diff to last exit path amountIn\n exitPaths[exitPaths.length - 1][0].index = amountsInDiff\n .add(exitPaths[exitPaths.length - 1][0].index)\n .toString();\n\n return exitPaths;\n };\n\n private async createCalls(\n exitPaths: Node[][],\n userAddress: string,\n isProportional: boolean,\n minAmountsOut?: string[],\n authorisation?: string\n ): Promise<{\n multiRequests: Requests[][];\n encodedCall: string;\n outputIndexes: number[];\n deltas: Record;\n }> {\n const { multiRequests, calls, outputIndexes, deltas } =\n this.createActionCalls(\n cloneDeep(exitPaths),\n userAddress,\n isProportional,\n minAmountsOut\n );\n\n if (authorisation) {\n calls.unshift(\n Relayer.encodeSetRelayerApproval(this.relayer, true, authorisation)\n );\n }\n\n const encodedCall = balancerRelayerInterface.encodeFunctionData(\n 'multicall',\n [calls]\n );\n\n return {\n multiRequests,\n encodedCall,\n outputIndexes: authorisation\n ? outputIndexes.map((i) => i + 1)\n : outputIndexes,\n deltas,\n };\n }\n\n private updateDeltas(\n deltas: Record,\n assets: string[],\n amounts: string[]\n ): Record {\n assets.forEach((t, i) => {\n const asset = t.toLowerCase();\n if (!deltas[asset]) deltas[asset] = Zero;\n deltas[asset] = deltas[asset].add(amounts[i]);\n });\n return deltas;\n }\n\n private createActionCalls(\n exitPaths: Node[][],\n userAddress: string,\n isProportional: boolean,\n minAmountsOut?: string[]\n ): {\n multiRequests: Requests[][];\n calls: string[];\n outputIndexes: number[];\n deltas: Record;\n } {\n const multiRequests: Requests[][] = [];\n const calls: string[] = [];\n const outputIndexes: number[] = [];\n const isPeek = !minAmountsOut;\n const deltas: Record = {};\n\n const getSenderAddress = (exitPath: Node[], node: Node) => {\n // Calls from root node are sent by the user\n if (!node.parent) return userAddress;\n // Otherwise sent by the parent's recipient\n return getRecipientAddress(exitPath, node.parent);\n };\n\n const getRecipientAddress = (exitPath: Node[], node: Node) => {\n // Always send to user on calls that contain outputs, otherwise send to relayer\n const exitChildren = node.children.filter((child) =>\n exitPath.map((n) => n.index).includes(child.index)\n );\n const hasOutputChild = exitChildren.some(\n (c) => c.exitAction === 'output'\n );\n return hasOutputChild ? userAddress : this.relayer;\n };\n\n // Create actions for each Node and return in multicall array\n\n exitPaths.forEach((exitPath, i) => {\n const modelRequests: Requests[] = [];\n const outputNodes = exitPath.filter(\n (node) => node.exitAction === 'output'\n );\n exitPath.forEach((node) => {\n // Find the exit child node\n const exitChild = node.children.find((child) =>\n exitPath.map((n) => n.index).includes(child.index)\n );\n\n const sender = getSenderAddress(exitPath, node);\n const recipient = getRecipientAddress(exitPath, node);\n\n const exitChildren = node.children.filter((child) =>\n exitPath.map((n) => n.index).includes(child.index)\n );\n // An action that has either outputs or unwraps as child actions is the last action where we're able to set limits on expected output amounts\n const isLastActionWithLimits = exitChildren.some(\n (c) => c.exitAction === 'output' || c.exitAction === 'unwrap'\n );\n\n // Last calls will use minAmountsOut to protect user. Middle calls can safely have 0 minimum as tx will revert if last fails.\n let minAmountOut = '0';\n const minAmountsOutProportional = Array(node.children.length).fill('0');\n if (minAmountsOut && isLastActionWithLimits) {\n if (isProportional) {\n // Proportional exits have a minAmountOut for each output node within a single exit path\n\n /**\n * minAmountsOut is related to the whole multicall transaction, while\n * minAmountsOutProportional is related only to the current node/transaction\n * This section is responsible for mapping each minAmountOut to their\n * respective position on the minAmountsOutProportional array\n * TODO: extract to a function so it's easier to understand\n */\n node.children.forEach((child, i) => {\n let outputChildIndex: number;\n if (child.exitAction === 'unwrap') {\n outputChildIndex = outputNodes.indexOf(child.children[0]);\n minAmountOut = WeiPerEther.mul(minAmountsOut[outputChildIndex])\n .div(child.priceRate)\n .toString();\n } else if (child.exitAction === 'output') {\n outputChildIndex = outputNodes.indexOf(child);\n minAmountOut = minAmountsOut[outputChildIndex];\n } else {\n minAmountOut = '0'; // clears minAmountOut if it's not an output or unwrap\n }\n minAmountsOutProportional[i] = minAmountOut;\n });\n } else {\n // Non-proportional exits have a minAmountOut for each exit path\n if (exitChild?.exitAction === 'unwrap') {\n minAmountOut = WeiPerEther.mul(minAmountsOut[i])\n .div(exitChild.priceRate)\n .toString();\n } else {\n minAmountOut = minAmountsOut[i];\n }\n }\n }\n\n switch (node.exitAction) {\n case 'unwrap': {\n const { modelRequest, encodedCall, assets, amounts } =\n this.createUnwrap(\n node,\n exitChild as Node,\n i,\n minAmountOut,\n sender,\n recipient\n );\n modelRequests.push(modelRequest);\n calls.push(encodedCall);\n this.updateDeltas(deltas, assets, amounts);\n break;\n }\n case 'batchSwap': {\n const { modelRequest, encodedCall, assets, amounts } =\n this.createSwap(\n node,\n exitChild as Node,\n i,\n minAmountOut,\n sender,\n recipient\n );\n modelRequests.push(modelRequest);\n calls.push(encodedCall);\n this.updateDeltas(deltas, assets, amounts);\n break;\n }\n case 'exitPool': {\n let exit;\n if (isProportional) {\n exit = this.createExitPoolProportional(\n node,\n minAmountsOutProportional,\n sender,\n recipient\n );\n } else {\n exit = this.createExitPool(\n node,\n exitChild as Node,\n i,\n minAmountOut,\n sender,\n recipient\n );\n }\n const { modelRequest, encodedCall, bptIn, tokensOut, amountsOut } =\n exit;\n modelRequests.push(modelRequest);\n calls.push(encodedCall);\n this.updateDeltas(\n deltas,\n [node.address, ...tokensOut],\n [bptIn, ...amountsOut]\n );\n break;\n }\n case 'output':\n if (isPeek) {\n calls.push(\n Relayer.encodePeekChainedReferenceValue(\n Relayer.toChainedReference(\n this.getOutputRef(i, node.index),\n false\n )\n )\n );\n outputIndexes.push(calls.length - 1);\n }\n break;\n default:\n return;\n }\n });\n multiRequests.push(modelRequests);\n });\n\n return { multiRequests, calls, outputIndexes, deltas };\n }\n\n private createUnwrap = (\n node: Node,\n exitChild: Node,\n exitPathIndex: number,\n minAmountOut: string,\n sender: string,\n recipient: string\n ): {\n modelRequest: UnwrapRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n } => {\n const amount = Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, node.index)\n ).toString();\n const outputReference = Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, exitChild.index)\n );\n\n const linearPoolType = node.parent?.type as string;\n\n const call: EncodeUnwrapInput = {\n wrappedToken: node.address,\n sender,\n recipient,\n amount,\n outputReference,\n };\n\n const encodedCall = Relayer.encodeUnwrap(call, linearPoolType);\n\n debugLog(`linear type: , ${linearPoolType}`);\n debugLog('\\nUwrap:');\n debugLog(JSON.stringify(call));\n\n const modelRequest = VaultModel.mapUnwrapRequest(\n amount,\n outputReference,\n node.parent?.id as string // linear pool id\n );\n\n const assets = [exitChild.address];\n const amounts = [Zero.sub(minAmountOut).toString()]; // needs to be negative because it's handled by the vault model as an amount going out of the vault\n return { modelRequest, encodedCall, assets, amounts };\n };\n\n private createSwap(\n node: Node,\n exitChild: Node,\n exitPathIndex: number,\n minAmountOut: string,\n sender: string,\n recipient: string\n ): {\n modelRequest: SwapRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n } {\n const isRootNode = !node.parent;\n const amountIn = isRootNode\n ? node.index\n : Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, node.index)\n ).toString();\n\n const tokenOut = exitChild.address;\n const assets = [tokenOut, node.address];\n\n // Single swap limits are always positive\n // Swap within generalisedExit is always exactIn, so use minAmountOut to set limit\n const limit: string = minAmountOut;\n\n const request: SingleSwap = {\n poolId: node.id,\n kind: SwapType.SwapExactIn,\n assetIn: node.address,\n assetOut: tokenOut,\n amount: amountIn,\n userData: '0x',\n };\n\n const fromInternalBalance = this.receivesFromInternal(node);\n const toInternalBalance = this.receivesFromInternal(exitChild);\n\n const funds: FundManagement = {\n sender,\n recipient,\n fromInternalBalance,\n toInternalBalance,\n };\n\n const outputReference = Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, exitChild.index)\n );\n\n const call: Swap = {\n request,\n funds,\n limit,\n deadline: BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value: '0', // TODO: check if swap with ETH is possible in this case and handle it\n outputReference,\n };\n debugLog('\\nSwap:');\n debugLog(JSON.stringify(call));\n\n const encodedCall = Relayer.encodeSwap(call);\n\n const modelRequest = VaultModel.mapSwapRequest(call);\n\n // If node isn't rootNode, the swap is part of a chain and shouldn't be considered for user deltas\n const bptIn = !isRootNode ? '0' : amountIn;\n // If child exit action is not output, the swap is part of a chain and shouldn't be considered for user deltas\n const userTokenOutAmount =\n exitChild.exitAction !== 'output'\n ? '0'\n : BigNumber.from(minAmountOut).mul(-1).toString(); // needs to be negative because it's handled by the vault model as an amount going out of the vault\n const amounts = [userTokenOutAmount, bptIn];\n\n return { modelRequest, encodedCall, assets, amounts };\n }\n\n private createBatchSwap(\n node: Node,\n exitChildren: Node[],\n exitPathIndex: number,\n minAmountsOut: string[],\n sender: string,\n recipient: string\n ): {\n modelRequest: BatchSwapRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n } {\n const isRootNode = !node.parent;\n const amountIn = isRootNode\n ? node.index\n : Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, node.index)\n ).toString();\n\n const tokensOut = exitChildren.map((n) => n.address);\n const assets = [...tokensOut, node.address];\n // TODO - setting these right?\n const limits = [...minAmountsOut];\n limits.push(amountIn);\n const batchSwapSteps: BatchSwapStep[] = [];\n const outputReferences: OutputReference[] = [];\n exitChildren.forEach((child, i) => {\n // TODO - Is this correct?\n const amount = child.proportionOfParent\n .mul(amountIn)\n .div(WeiPerEther)\n .toString();\n const swapStep: BatchSwapStep = {\n poolId: node.id,\n assetInIndex: assets.length - 1,\n assetOutIndex: i,\n amount,\n userData: '0x',\n };\n batchSwapSteps.push(swapStep);\n // TODO - Is this right?\n outputReferences.push({\n index: i,\n key: Relayer.toChainedReference(this.getOutputRef(0, child.index)),\n });\n });\n\n const total = batchSwapSteps.reduce((acc, swap) => {\n return acc.add(swap.amount);\n }, BigNumber.from(0));\n const dust = BigNumber.from(amountIn).sub(total);\n batchSwapSteps[0].amount = dust.add(batchSwapSteps[0].amount).toString();\n\n const fromInternalBalance = this.receivesFromInternal(node);\n // TODO - This is assuming that all exit to same, is this right?\n const toInternalBalance = this.receivesFromInternal(exitChildren[0]);\n\n const funds: FundManagement = {\n sender,\n recipient,\n fromInternalBalance,\n toInternalBalance,\n };\n\n const call: EncodeBatchSwapInput = {\n swapType: SwapType.SwapExactIn,\n swaps: batchSwapSteps,\n assets,\n funds,\n limits,\n deadline: BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value: '0', // TODO: check if swap with ETH is possible in this case and handle it\n outputReferences,\n };\n debugLog('\\nBatchSwap:');\n debugLog(JSON.stringify(call));\n\n const encodedCall = Relayer.encodeBatchSwap(call);\n\n const modelRequest = VaultModel.mapBatchSwapRequest(call);\n\n // If node isn't rootNode, the swap is part of a chain and shouldn't be considered for user deltas\n const bptIn = !isRootNode ? '0' : amountIn;\n // If child exit action is not output, the swap is part of a chain and shouldn't be considered for user deltas\n const userTokensOut = exitChildren.map((child, i) => {\n const userTokenOutAmount =\n child.exitAction !== 'output'\n ? '0'\n : BigNumber.from(minAmountsOut[i]).mul(-1).toString(); // needs to be negative because it's handled by the vault model as an amount going out of the vault\n return userTokenOutAmount;\n });\n\n const amounts = [...userTokensOut, bptIn];\n\n return { modelRequest, encodedCall, assets, amounts };\n }\n\n private createExitPool(\n node: Node,\n exitChild: Node,\n exitPathIndex: number,\n minAmountOut: string,\n sender: string,\n recipient: string\n ): {\n modelRequest: ExitPoolModelRequest;\n encodedCall: string;\n bptIn: string;\n tokensOut: string[];\n amountsOut: string[];\n } {\n const tokenOut = exitChild.address;\n const isRootNode = !node.parent;\n const amountIn = isRootNode\n ? node.index\n : Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, node.index)\n ).toString();\n\n const tokensOut: string[] = [];\n const amountsOut: string[] = [];\n\n // tokensOut needs to include each asset even if it has 0 amount\n node.children.forEach((child) => {\n tokensOut.push(child.address);\n amountsOut.push(child.address === tokenOut ? minAmountOut : '0');\n });\n\n if (node.type === PoolType.ComposableStable) {\n // assets need to include the phantomPoolToken\n tokensOut.push(node.address);\n // need to add a placeholder so sorting works\n amountsOut.push('0');\n }\n\n // sort inputs\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [sortedTokens, sortedAmounts] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n // userData amounts should not include the BPT of the pool being joined\n let userDataTokens = [];\n const bptIndex = sortedTokens\n .map((t) => t.toLowerCase())\n .indexOf(node.address.toLowerCase());\n if (bptIndex === -1) {\n userDataTokens = sortedTokens;\n } else {\n userDataTokens = [\n ...sortedTokens.slice(0, bptIndex),\n ...sortedTokens.slice(bptIndex + 1),\n ];\n }\n\n let userData: string;\n if (node.type === PoolType.Weighted) {\n userData = WeightedPoolEncoder.exitExactBPTInForOneTokenOut(\n amountIn,\n userDataTokens.indexOf(tokenOut)\n );\n } else {\n userData = StablePoolEncoder.exitExactBPTInForOneTokenOut(\n amountIn,\n userDataTokens.indexOf(tokenOut)\n );\n }\n\n const outputReferences = [\n {\n index: sortedTokens\n .map((t) => t.toLowerCase())\n .indexOf(tokenOut.toLowerCase()),\n key: Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, exitChild.index)\n ),\n },\n ];\n\n const toInternalBalance = this.receivesFromInternal(exitChild);\n\n const call = Relayer.formatExitPoolInput({\n poolId: node.id,\n poolKind: 0,\n sender,\n recipient,\n outputReferences,\n exitPoolRequest: {} as ExitPoolRequest,\n assets: sortedTokens,\n minAmountsOut: sortedAmounts,\n userData,\n toInternalBalance,\n });\n debugLog('\\nExit:');\n debugLog(JSON.stringify(call));\n\n const encodedCall = Relayer.encodeExitPool(call);\n const modelRequest = VaultModel.mapExitPoolRequest(call);\n\n const userAmountTokensOut = sortedAmounts.map((a) =>\n Relayer.isChainedReference(a) ? '0' : Zero.sub(a).toString()\n );\n const userBptIn = Relayer.isChainedReference(amountIn) ? '0' : amountIn;\n // If node isn't rootNode, the exit is part of a chain and shouldn't be considered for user deltas\n const deltaBptIn = !isRootNode ? Zero.toString() : userBptIn;\n // // If child exit action is not output, the exit is part of a chain and shouldn't be considered for user deltas\n const deltaTokensOut =\n exitChild.exitAction !== 'output' ? [] : sortedTokens;\n const deltaAmountsOut =\n exitChild.exitAction !== 'output' ? [] : userAmountTokensOut;\n\n return {\n modelRequest,\n encodedCall,\n bptIn: deltaBptIn,\n tokensOut: deltaTokensOut,\n amountsOut: deltaAmountsOut,\n };\n }\n\n private createExitPoolProportional(\n node: Node,\n minAmountsOut: string[],\n sender: string,\n recipient: string\n ): {\n modelRequest: ExitPoolModelRequest;\n encodedCall: string;\n bptIn: string;\n tokensOut: string[];\n amountsOut: string[];\n } {\n const isRootNode = !node.parent;\n const amountIn = isRootNode\n ? node.index\n : Relayer.toChainedReference(this.getOutputRef(0, node.index)).toString();\n\n const tokensOut = node.children.map((child) => child.address);\n const amountsOut = [...minAmountsOut];\n\n if (node.type === PoolType.ComposableStable) {\n // assets need to include the phantomPoolToken\n tokensOut.push(node.address);\n // need to add a placeholder so sorting works\n amountsOut.push('0');\n }\n\n // TODO: we shoule consider let the graph handle sorting instead of manipulating\n // token order within actions - specially now that we have different sorting\n // cases and that the subgraph is already handling them properly\n\n // sort inputs\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [sortedTokens, sortedAmounts] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n let userData: string;\n if (node.type === PoolType.Weighted) {\n userData = WeightedPoolEncoder.exitExactBPTInForTokensOut(amountIn);\n } else if (node.type === PoolType.ComposableStable) {\n userData =\n ComposableStablePoolEncoder.exitExactBPTInForAllTokensOut(amountIn);\n } else {\n // TODO: double check if it's ok to set the Stable Pool Encoder as the default/else case\n userData = StablePoolEncoder.exitExactBPTInForTokensOut(amountIn);\n }\n\n const outputReferences = node.children.map((child) => {\n return {\n index: sortedTokens\n .map((t) => t.toLowerCase())\n .indexOf(child.address.toLowerCase()),\n key: Relayer.toChainedReference(this.getOutputRef(0, child.index)),\n };\n });\n // We have to use correct pool type based off following from Relayer:\n // enum PoolKind { WEIGHTED, LEGACY_STABLE, COMPOSABLE_STABLE, COMPOSABLE_STABLE_V2 }\n // (note only Weighted and COMPOSABLE_STABLE_V2 will support proportional exits)\n let kind = 0;\n if (node.type === PoolType.ComposableStable) {\n kind = 3;\n }\n\n const allChildrenReceiveFromInternal = node.children.every((child) =>\n this.receivesFromInternal(child)\n );\n\n const call = Relayer.formatExitPoolInput({\n poolId: node.id,\n poolKind: kind,\n sender,\n recipient,\n outputReferences,\n exitPoolRequest: {} as ExitPoolRequest,\n assets: sortedTokens,\n minAmountsOut: sortedAmounts,\n userData,\n toInternalBalance: allChildrenReceiveFromInternal,\n });\n debugLog('\\nExitProportional:');\n debugLog(JSON.stringify(call));\n const encodedCall = Relayer.encodeExitPool(call);\n const modelRequest = VaultModel.mapExitPoolRequest(call);\n\n const userAmountTokensOut = sortedAmounts.map((a) =>\n Relayer.isChainedReference(a) ? '0' : Zero.sub(a).toString()\n );\n const userBptIn = Relayer.isChainedReference(amountIn) ? '0' : amountIn;\n // If current node is the root node the exit the delta BPT in should be considered for user deltas\n const deltaBptIn = isRootNode ? userBptIn : Zero.toString();\n // If the respective child node is an output, it should be considered for user deltas\n const deltaTokensOut = sortedTokens.filter((t) =>\n node.children\n .filter((c) => c.exitAction === 'output')\n .map((c) => c.address)\n .includes(t)\n );\n const deltaAmountsOut = userAmountTokensOut.filter((_, i) =>\n deltaTokensOut.includes(sortedTokens[i])\n );\n\n return {\n modelRequest,\n encodedCall,\n bptIn: deltaBptIn,\n tokensOut: deltaTokensOut,\n amountsOut: deltaAmountsOut,\n };\n }\n\n private getOutputRef = (exitPathIndex: number, nodeIndex: string): number => {\n return exitPathIndex * 100 + parseInt(nodeIndex);\n };\n\n // node without parent is the root node and it receives from non-internal balance\n // exitPool always expects amounts from non-internal balance\n // output always behave as receiving from non-internal balance\n // others should always receive from internal balance\n private receivesFromInternal = (node: Node): boolean => {\n if (!node.parent) return false;\n return (\n node.exitAction !== 'output' &&\n node.exitAction !== 'unwrap' &&\n node.exitAction !== 'exitPool'\n );\n };\n}\n","/**\n * Calculates pool fees\n *\n * 1. Pool fees in last 24hrs\n */\nimport { isLessThan24Hours } from '@/lib/utils/time';\nimport { Pool, Findable, PoolAttribute } from '@/types';\n\nexport class PoolVolume {\n constructor(\n private yesterdaysPools: Findable | undefined\n ) {}\n\n // 🚨 this is adding 1 call to get yesterday's block height and 2nd call to fetch yesterday's pools data from subgraph\n // TODO: find a better data source for that eg. add blocks to graph, replace with a database, or dune\n async last24h(pool: Pool): Promise {\n let yesterdaysPool;\n if (this.yesterdaysPools) {\n yesterdaysPool = await this.yesterdaysPools.find(pool.id);\n }\n\n if (!pool.totalSwapVolume) {\n return 0;\n }\n\n if (!yesterdaysPool?.totalSwapVolume) {\n // Process edge case when pool creation time is less that 24h\n if (pool.createTime && isLessThan24Hours(pool.createTime)) {\n return parseFloat(pool.totalSwapVolume);\n }\n return 0;\n }\n\n return (\n parseFloat(pool.totalSwapVolume) -\n parseFloat(yesterdaysPool.totalSwapVolume)\n );\n }\n}\n","import { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport {\n ComposableStableCreatePoolParameters,\n InitJoinPoolAttributes,\n InitJoinPoolParameters,\n JoinPoolDecodedAttributes,\n JoinPoolRequestDecodedAttributes,\n} from '@/modules/pools/factory/types';\nimport { balancerVault, networkAddresses } from '@/lib/constants/config';\nimport { AssetHelpers, getRandomBytes32 } from '@/lib/utils';\nimport { PoolFactory } from '@/modules/pools/factory/pool-factory';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { BalancerNetworkConfig } from '@/types';\nimport {\n ComposableStablePool__factory,\n ComposableStablePoolFactory__factory,\n} from '@/contracts';\nimport { JsonRpcProvider, TransactionReceipt } from '@ethersproject/providers';\nimport { LogDescription } from '@ethersproject/abi';\nimport { findEventInReceiptLogs } from '@/lib/utils';\nimport { Contract } from '@ethersproject/contracts';\nimport { ContractInstances } from '@/modules/contracts/contracts.module';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { ComposableStablePoolInterface } from '@/contracts/ComposableStablePool';\n\nexport class ComposableStableFactory implements PoolFactory {\n private wrappedNativeAsset: string;\n private contracts: ContractInstances;\n\n constructor(\n networkConfig: BalancerNetworkConfig,\n contracts: ContractInstances\n ) {\n const { tokens } = networkAddresses(networkConfig.chainId);\n this.wrappedNativeAsset = tokens.wrappedNativeAsset;\n this.contracts = contracts;\n }\n\n /**\n * Builds a transaction for a composable pool create operation.\n * @param name The name of the pool\n * @param symbol The symbol of the pool\n * @param tokenAddresses The token's addresses\n * @param amplificationParameter The amplification parameter(must be greater than 1)\n * @param rateProviders The addresses of the rate providers for each token, ordered\n * @param tokenRateCacheDurations the Token Rate Cache Duration of each token\n * @param exemptFromYieldProtocolFeeFlags Array containing boolean for each token exemption from yield protocol fee flags\n * @param swapFeeEvm The swapFee for the owner of the pool in string format parsed to evm(100% is 1e18, 10% is 1e17, 1% is 1e16)\n * @param owner The address of the owner of the pool\n * @returns A TransactionRequest object, which can be directly inserted in the transaction to create a composable stable pool\n */\n create({\n name,\n symbol,\n tokenAddresses,\n amplificationParameter,\n rateProviders,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n swapFeeEvm,\n owner,\n salt,\n }: ComposableStableCreatePoolParameters): { to?: string; data: BytesLike } {\n this.checkCreateInputs({\n rateProviders,\n tokenAddresses,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n swapFeeEvm,\n });\n const params = this.parseCreateParamsForEncoding({\n name,\n symbol,\n tokenAddresses,\n amplificationParameter,\n rateProviders,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n swapFeeEvm,\n owner,\n salt,\n });\n const encodedFunctionData = this.encodeCreateFunctionData(params);\n return {\n to: this.contracts.composableStablePoolFactory?.address,\n data: encodedFunctionData,\n };\n }\n\n checkCreateInputs = ({\n tokenAddresses,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n rateProviders,\n swapFeeEvm,\n }: Pick<\n ComposableStableCreatePoolParameters,\n | 'rateProviders'\n | 'tokenRateCacheDurations'\n | 'tokenAddresses'\n | 'exemptFromYieldProtocolFeeFlags'\n | 'swapFeeEvm'\n >): void => {\n if (\n tokenAddresses.length !== tokenRateCacheDurations.length ||\n tokenRateCacheDurations.length !==\n exemptFromYieldProtocolFeeFlags.length ||\n exemptFromYieldProtocolFeeFlags.length !== rateProviders.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n if (BigInt(swapFeeEvm) <= BigInt(0) || BigInt(swapFeeEvm) > BigInt(1e17)) {\n throw new BalancerError(BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE);\n }\n };\n parseCreateParamsForEncoding = ({\n name,\n symbol,\n tokenAddresses,\n amplificationParameter,\n rateProviders,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n swapFeeEvm,\n owner,\n salt,\n }: ComposableStableCreatePoolParameters): [\n string,\n string,\n string[],\n string,\n string[],\n string[],\n boolean[],\n string,\n string,\n BytesLike\n ] => {\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [\n sortedTokens,\n sortedRateProviders,\n sortedTokenRateCacheDurations,\n sortedExemptFromYieldProtocols,\n ] = assetHelpers.sortTokens(\n tokenAddresses,\n rateProviders,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags\n ) as [string[], string[], string[], boolean[]];\n const params = [\n name,\n symbol,\n sortedTokens,\n amplificationParameter,\n sortedRateProviders,\n sortedTokenRateCacheDurations,\n sortedExemptFromYieldProtocols,\n swapFeeEvm.toString(),\n owner,\n salt || getRandomBytes32(),\n ] as [\n string,\n string,\n string[],\n string,\n string[],\n string[],\n boolean[],\n string,\n string,\n BytesLike\n ];\n return params;\n };\n\n encodeCreateFunctionData = (\n params: [\n string,\n string,\n string[],\n string,\n string[],\n string[],\n boolean[],\n string,\n string,\n BytesLike\n ]\n ): string => {\n const composablePoolFactoryInterface =\n ComposableStablePoolFactory__factory.createInterface();\n return composablePoolFactoryInterface.encodeFunctionData('create', params);\n };\n\n /**\n * Builds a transaction for a composable pool init join operation.\n * @param joiner The address of the joiner of the pool\n * @param poolId The id of the pool\n * @param poolAddress The address of the pool\n * @param tokensIn Array with the address of the tokens\n * @param amountsIn Array with the amount of each token\n * @returns A InitJoinPoolAttributes object, which can be directly inserted in the transaction to init join a composable stable pool\n */\n buildInitJoin({\n joiner,\n poolId,\n poolAddress,\n tokensIn,\n amountsIn,\n }: InitJoinPoolParameters): InitJoinPoolAttributes {\n this.checkInitJoinInputs({\n tokensIn,\n amountsIn,\n poolId,\n poolAddress,\n });\n const { attributes, params } = this.parseParamsForInitJoin({\n joiner,\n poolId,\n poolAddress,\n tokensIn,\n amountsIn,\n });\n const { functionName, data } = this.encodeInitJoinFunctionData(params);\n\n return {\n to: balancerVault,\n functionName,\n data,\n attributes,\n };\n }\n\n checkInitJoinInputs = ({\n poolId,\n poolAddress,\n tokensIn,\n amountsIn,\n }: Pick<\n InitJoinPoolParameters,\n 'tokensIn' | 'amountsIn' | 'poolId' | 'poolAddress'\n >): void => {\n if (!poolId || !poolAddress) {\n throw new BalancerError(BalancerErrorCode.NO_POOL_DATA);\n }\n if (tokensIn.length !== amountsIn.length) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n };\n\n parseParamsForInitJoin = ({\n joiner,\n poolId,\n poolAddress,\n tokensIn,\n amountsIn,\n }: InitJoinPoolParameters): {\n attributes: JoinPoolDecodedAttributes;\n params: [string, string, string, JoinPoolRequestDecodedAttributes];\n } => {\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n // sort inputs\n const tokensWithBpt = [...tokensIn, poolAddress];\n const amountsWithBpt = [...amountsIn, '0'];\n const maxAmountsWithBpt = [\n ...amountsIn,\n // this max amount needs to be >= PREMINT - bptAmountOut,\n // The vault returns BAL#506 if it's not,\n // PREMINT is around 2^111, but here we set the max amount of BPT as MAX_UINT_256-1 for safety\n BigInt.asUintN(256, BigInt(-1)).toString(),\n ];\n const [sortedTokens, sortedAmounts, sortedMaxAmounts] =\n assetHelpers.sortTokens(\n tokensWithBpt,\n amountsWithBpt,\n maxAmountsWithBpt\n ) as [string[], string[], string[]];\n\n const userData = ComposableStablePoolEncoder.joinInit(sortedAmounts);\n\n const attributes: JoinPoolDecodedAttributes = {\n poolId: poolId,\n sender: joiner,\n recipient: joiner,\n joinPoolRequest: {\n assets: sortedTokens,\n maxAmountsIn: sortedMaxAmounts,\n userData,\n fromInternalBalance: false,\n },\n };\n return {\n attributes,\n params: [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ],\n };\n };\n encodeInitJoinFunctionData = (\n params: [string, string, string, JoinPoolRequestDecodedAttributes]\n ): {\n functionName: string;\n data: string;\n } => {\n const functionName = 'joinPool';\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, params);\n\n return { functionName, data };\n };\n\n getPoolAddressAndIdWithReceipt = async (\n provider: JsonRpcProvider,\n receipt: TransactionReceipt\n ): Promise<{\n poolId: string;\n poolAddress: string;\n }> => {\n const poolCreationEvent: LogDescription = findEventInReceiptLogs({\n receipt,\n to: this.contracts.composableStablePoolFactory?.address || '',\n contractInterface: ComposableStablePoolFactory__factory.createInterface(),\n logName: 'PoolCreated',\n });\n\n const poolAddress = poolCreationEvent.args.pool;\n const composableStablePoolInterface = this.getPoolInterface();\n const pool = new Contract(\n poolAddress,\n composableStablePoolInterface,\n provider\n );\n const poolId = await pool.getPoolId();\n return {\n poolAddress,\n poolId,\n };\n };\n\n getPoolInterface(): ComposableStablePoolInterface {\n return ComposableStablePool__factory.createInterface();\n }\n}\n","import { LogDescription } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\nimport { Contract } from '@ethersproject/contracts';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { JsonRpcProvider, TransactionReceipt } from '@ethersproject/providers';\n\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { WeightedPoolFactory__factory } from '@/contracts/factories/WeightedPoolFactory__factory';\nimport { balancerVault, networkAddresses } from '@/lib/constants/config';\nimport {\n AssetHelpers,\n findEventInReceiptLogs,\n getRandomBytes32,\n} from '@/lib/utils';\nimport { ContractInstances } from '@/modules/contracts/contracts.module';\nimport { PoolFactory } from '@/modules/pools/factory/pool-factory';\nimport {\n InitJoinPoolAttributes,\n InitJoinPoolParameters,\n JoinPoolDecodedAttributes,\n JoinPoolRequestDecodedAttributes,\n WeightedCreatePoolParameters,\n} from '@/modules/pools/factory/types';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { BalancerNetworkConfig } from '@/types';\nimport { WeightedPool__factory } from '@/contracts';\nimport { SolidityMaths } from '@/lib/utils/solidityMaths';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { WeightedPoolInterface } from '@/contracts/WeightedPool';\n\nexport class WeightedFactory implements PoolFactory {\n private wrappedNativeAsset: string;\n private contracts: ContractInstances;\n\n constructor(\n networkConfig: BalancerNetworkConfig,\n contracts: ContractInstances\n ) {\n const { tokens } = networkAddresses(networkConfig.chainId);\n this.wrappedNativeAsset = tokens.wrappedNativeAsset;\n this.contracts = contracts;\n }\n\n /**\n * Builds a transaction for a weighted pool create operation.\n * @param factoryAddress The address of the factory for weighted pool (contract address)\n * @param name The name of the pool\n * @param symbol The symbol of the pool\n * @param tokenAddresses The token's addresses\n * @param normalizedWeights The weights for each token, ordered\n * @param rateProviders The rate providers for each token, ordered\n * @param swapFeeEvm The swapFee for the owner of the pool in string or bigint formatted to evm(100% is 1e18, 10% is 1e17, 1% is 1e16)\n * @param owner The address of the owner of the pool\n * @param salt The salt of the pool (bytes32)\n * @returns TransactionRequest object, which can be directly inserted in the transaction to create a weighted pool\n */\n create({\n name,\n symbol,\n tokenAddresses,\n normalizedWeights,\n rateProviders,\n swapFeeEvm,\n owner,\n salt,\n }: WeightedCreatePoolParameters): {\n to?: string;\n data: BytesLike;\n } {\n this.checkCreateInputs({\n tokenAddresses,\n normalizedWeights,\n swapFeeEvm,\n rateProviders,\n });\n const params = this.parseCreateParamsForEncoding({\n name,\n symbol,\n tokenAddresses,\n normalizedWeights,\n rateProviders,\n swapFeeEvm,\n owner,\n salt,\n });\n const encodedFunctionData = this.encodeCreateFunctionData(params);\n return {\n to: this.contracts.weightedPoolFactory?.address,\n data: encodedFunctionData,\n };\n }\n\n checkCreateInputs({\n tokenAddresses,\n normalizedWeights,\n swapFeeEvm,\n rateProviders,\n }: Pick<\n WeightedCreatePoolParameters,\n 'tokenAddresses' | 'normalizedWeights' | 'swapFeeEvm' | 'rateProviders'\n >): void {\n if (\n tokenAddresses.length !== normalizedWeights.length ||\n normalizedWeights.length !== rateProviders.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n if (tokenAddresses.length < 2) {\n throw new BalancerError(BalancerErrorCode.BELOW_MIN_TOKENS);\n }\n if (tokenAddresses.length > 8) {\n throw new BalancerError(BalancerErrorCode.ABOVE_MAX_TOKENS);\n }\n if (BigInt(swapFeeEvm) <= BigInt(0) || BigInt(swapFeeEvm) > BigInt(1e17)) {\n throw new BalancerError(BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE);\n }\n const normalizedWeightsSum = (normalizedWeights as string[]).reduce(\n (acc, cur) => SolidityMaths.add(acc, BigInt(cur)),\n BigInt(0)\n );\n if (normalizedWeightsSum !== BigInt(1e18)) {\n throw new BalancerError(BalancerErrorCode.INVALID_WEIGHTS);\n }\n }\n\n parseCreateParamsForEncoding = ({\n name,\n symbol,\n tokenAddresses,\n normalizedWeights,\n rateProviders,\n swapFeeEvm,\n owner,\n salt,\n }: WeightedCreatePoolParameters): [\n string,\n string,\n string[],\n BigNumberish[],\n string[],\n string,\n string,\n BytesLike\n ] => {\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [sortedTokens, sortedNormalizedWeights, sortedRateProviders] =\n assetHelpers.sortTokens(\n tokenAddresses,\n normalizedWeights,\n rateProviders\n ) as [string[], BigNumberish[], string[]];\n return [\n name,\n symbol,\n sortedTokens,\n sortedNormalizedWeights,\n sortedRateProviders,\n swapFeeEvm.toString(),\n owner,\n salt || getRandomBytes32(),\n ];\n };\n\n encodeCreateFunctionData = (\n params: [\n string,\n string,\n string[],\n BigNumberish[],\n string[],\n string,\n string,\n BytesLike\n ]\n ): string => {\n const weightedPoolInterface =\n WeightedPoolFactory__factory.createInterface();\n\n return weightedPoolInterface.encodeFunctionData('create', params);\n };\n\n /**\n * Returns a InitJoinPoolAttributes to make a init join transaction\n * @param joiner The address of the joiner of the pool\n * @param poolId The id of the pool\n * @param tokensIn Array with the address of the tokens\n * @param amountsIn Array with the amount of each token\n * @returns InitJoinPoolAttributes object, which can be directly inserted in the transaction to init join a weighted pool\n */\n buildInitJoin({\n joiner,\n poolId,\n tokensIn,\n amountsIn,\n }: InitJoinPoolParameters): InitJoinPoolAttributes {\n this.checkInitJoinInputs({\n poolId,\n tokensIn,\n amountsIn,\n });\n const { attributes, params } = this.parseParamsForInitJoin({\n joiner,\n poolId,\n tokensIn,\n amountsIn,\n });\n const { functionName, data } = this.encodeInitJoinFunctionData(params);\n\n return {\n to: balancerVault,\n functionName,\n data,\n attributes,\n };\n }\n\n parseParamsForInitJoin = ({\n joiner,\n poolId,\n tokensIn,\n amountsIn,\n }: Omit): {\n attributes: JoinPoolDecodedAttributes;\n params: [string, string, string, JoinPoolRequestDecodedAttributes];\n } => {\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n\n const [sortedTokens, sortedAmounts] = assetHelpers.sortTokens(\n tokensIn,\n amountsIn\n ) as [string[], string[]];\n\n const userData = WeightedPoolEncoder.joinInit(sortedAmounts);\n\n const attributes = {\n poolId: poolId,\n sender: joiner,\n recipient: joiner,\n joinPoolRequest: {\n assets: sortedTokens,\n maxAmountsIn: sortedAmounts,\n userData,\n fromInternalBalance: false,\n },\n };\n\n return {\n attributes,\n params: [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ],\n };\n };\n\n encodeInitJoinFunctionData = (\n params: [string, string, string, JoinPoolRequestDecodedAttributes]\n ): {\n functionName: string;\n data: string;\n } => {\n const functionName = 'joinPool';\n\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, params);\n return { functionName, data };\n };\n checkInitJoinInputs = ({\n poolId,\n tokensIn,\n amountsIn,\n }: Pick<\n InitJoinPoolParameters,\n 'tokensIn' | 'amountsIn' | 'poolId'\n >): void => {\n if (!poolId) {\n throw new BalancerError(BalancerErrorCode.NO_POOL_DATA);\n }\n if (tokensIn.length !== amountsIn.length) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n };\n\n async getPoolAddressAndIdWithReceipt(\n provider: JsonRpcProvider,\n receipt: TransactionReceipt\n ): Promise<{ poolId: string; poolAddress: string }> {\n const poolCreationEvent: LogDescription = findEventInReceiptLogs({\n receipt,\n to: this.contracts.weightedPoolFactory?.address || '',\n contractInterface: WeightedPoolFactory__factory.createInterface(),\n logName: 'PoolCreated',\n });\n\n const poolAddress = poolCreationEvent.args.pool;\n const weightedPoolInterface = this.getPoolInterface();\n const pool = new Contract(poolAddress, weightedPoolInterface, provider);\n const poolId = await pool.getPoolId();\n return {\n poolAddress,\n poolId,\n };\n }\n\n getPoolInterface(): WeightedPoolInterface {\n return WeightedPool__factory.createInterface();\n }\n}\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { JoinPool } from '@/modules/pools/pool-types/concerns/types';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { ERC4626LinearPoolInterface } from '@/contracts/ERC4626LinearPool';\nimport { GearboxLinearPoolInterface } from '@/contracts/GearboxLinearPool';\nimport { EulerLinearPoolInterface } from '@/contracts/EulerLinearPool';\nimport { AaveLinearPoolInterface } from '@/contracts/AaveLinearPool';\nimport { YearnLinearPoolInterface } from '@/contracts/YearnLinearPool';\nimport { AaveLinearPoolFactoryInterface } from '@/contracts/AaveLinearPoolFactory';\nimport { ERC4626LinearPoolFactoryInterface } from '@/contracts/ERC4626LinearPoolFactory';\nimport { EulerLinearPoolFactoryInterface } from '@/contracts/EulerLinearPoolFactory';\nimport { GearboxLinearPoolFactoryInterface } from '@/contracts/GearboxLinearPoolFactory';\nimport { YearnLinearPoolFactoryInterface } from '@/contracts/YearnLinearPoolFactory';\n\nexport type CreatePoolParameters = {\n name: string;\n symbol: string;\n tokenAddresses: string[];\n swapFeeEvm: string;\n owner: string;\n salt?: BytesLike;\n};\n\nexport interface ComposableStableCreatePoolParameters\n extends CreatePoolParameters {\n amplificationParameter: string;\n rateProviders: string[];\n tokenRateCacheDurations: string[];\n exemptFromYieldProtocolFeeFlags: boolean[];\n\n salt?: BytesLike;\n}\n\nexport interface WeightedCreatePoolParameters extends CreatePoolParameters {\n rateProviders: string[];\n normalizedWeights: BigNumberish[];\n}\n\nexport type LinearCreatePoolParameters = Pick<\n CreatePoolParameters,\n 'name' | 'symbol' | 'swapFeeEvm' | 'owner' | 'salt'\n> & {\n mainToken: string;\n wrappedToken: string;\n upperTargetEvm: string;\n protocolId: ProtocolId;\n};\n\nexport interface InitJoinPoolParameters {\n joiner: string;\n poolId: string;\n poolAddress: string;\n tokensIn: string[];\n amountsIn: string[];\n}\n\nexport interface InitJoinPoolAttributes {\n to: string;\n functionName: string;\n attributes: JoinPool;\n data: string;\n value?: BigNumber;\n}\n\n// Source of the protocolId's: https://github.com/balancer/balancer-v2-monorepo/blob/647320a4a375c724276af8e1ae26948de8fa411b/pkg/interfaces/contracts/standalone-utils/IProtocolIdRegistry.sol#L54-L72\nexport enum ProtocolId {\n AAVE_V1 = 0,\n AAVE_V2 = 1,\n AAVE_V3 = 2,\n AMPLEFORTH = 3,\n BEEFY = 4,\n EULER = 5,\n GEARBOX = 6,\n IDLE = 7,\n MORPHO = 8,\n RADIANT = 9,\n REAPER = 10,\n SILO = 11,\n STARGATE = 12,\n STURDY = 13,\n TESSERA = 14,\n TETU = 15,\n YEARN = 16,\n MIDAS = 17,\n AGAVE = 18,\n}\n\nexport type JoinPoolDecodedAttributes = {\n poolId: string;\n sender: string;\n recipient: string;\n joinPoolRequest: JoinPoolRequestDecodedAttributes;\n};\n\nexport type JoinPoolRequestDecodedAttributes = {\n assets: string[];\n maxAmountsIn: string[];\n userData: string;\n fromInternalBalance: boolean;\n};\n\nexport type LinearPoolInterface =\n | ERC4626LinearPoolInterface\n | EulerLinearPoolInterface\n | AaveLinearPoolInterface\n | YearnLinearPoolInterface\n | GearboxLinearPoolInterface;\n\nexport type LinearPoolFactoryInterface =\n | AaveLinearPoolFactoryInterface\n | ERC4626LinearPoolFactoryInterface\n | EulerLinearPoolFactoryInterface\n | GearboxLinearPoolFactoryInterface\n | YearnLinearPoolFactoryInterface;\n","import { LogDescription } from '@ethersproject/abi';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { Contract } from '@ethersproject/contracts';\nimport { JsonRpcProvider, TransactionReceipt } from '@ethersproject/providers';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport {\n AaveLinearPool__factory,\n AaveLinearPoolFactory__factory,\n ERC4626LinearPool__factory,\n ERC4626LinearPoolFactory__factory,\n EulerLinearPool__factory,\n EulerLinearPoolFactory__factory,\n GearboxLinearPool__factory,\n GearboxLinearPoolFactory__factory,\n YearnLinearPool__factory,\n YearnLinearPoolFactory__factory,\n} from '@/contracts';\nimport { AaveLinearPoolInterface } from '@/contracts/AaveLinearPool';\nimport { ERC4626LinearPoolInterface } from '@/contracts/ERC4626LinearPool';\nimport { EulerLinearPoolInterface } from '@/contracts/EulerLinearPool';\nimport { EulerLinearPoolFactoryInterface } from '@/contracts/EulerLinearPoolFactory';\nimport { GearboxLinearPoolInterface } from '@/contracts/GearboxLinearPool';\nimport { YearnLinearPoolInterface } from '@/contracts/YearnLinearPool';\nimport { ContractInstances } from '@/modules/contracts/contracts.module';\nimport { PoolFactory } from '@/modules/pools/factory/pool-factory';\nimport {\n InitJoinPoolAttributes,\n LinearCreatePoolParameters,\n LinearPoolFactoryInterface,\n ProtocolId,\n} from '@/modules/pools/factory/types';\nimport { PoolType } from '@/types';\nimport { findEventInReceiptLogs, getRandomBytes32 } from '@/lib/utils';\n\ntype LinearPoolParamsToEncode = [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n BytesLike\n];\n\ntype EulerLinearPoolParamsToEncode = [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string\n];\n\nexport class LinearFactory implements PoolFactory {\n private contracts: ContractInstances;\n private readonly poolType: PoolType;\n\n constructor(contracts: ContractInstances, poolType: PoolType) {\n this.contracts = contracts;\n this.poolType = poolType;\n }\n\n getPoolFactoryInterface = (): LinearPoolFactoryInterface => {\n switch (this.poolType) {\n case PoolType.AaveLinear:\n return AaveLinearPoolFactory__factory.createInterface();\n case PoolType.Linear:\n case PoolType.ERC4626Linear:\n return ERC4626LinearPoolFactory__factory.createInterface();\n case PoolType.EulerLinear:\n return EulerLinearPoolFactory__factory.createInterface();\n case PoolType.GearboxLinear:\n return GearboxLinearPoolFactory__factory.createInterface();\n case PoolType.YearnLinear:\n return YearnLinearPoolFactory__factory.createInterface();\n default:\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n };\n\n getPoolInterface = ():\n | AaveLinearPoolInterface\n | ERC4626LinearPoolInterface\n | EulerLinearPoolInterface\n | GearboxLinearPoolInterface\n | YearnLinearPoolInterface => {\n switch (this.poolType) {\n case PoolType.AaveLinear:\n return AaveLinearPool__factory.createInterface();\n case PoolType.Linear:\n case PoolType.ERC4626Linear:\n return ERC4626LinearPool__factory.createInterface();\n case PoolType.EulerLinear:\n return EulerLinearPool__factory.createInterface();\n case PoolType.GearboxLinear:\n return GearboxLinearPool__factory.createInterface();\n case PoolType.YearnLinear:\n return YearnLinearPool__factory.createInterface();\n default:\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n };\n\n buildInitJoin(): InitJoinPoolAttributes {\n // Linear Pools doesn't need to be initialized, they are initialized on deploy\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n\n /**\n *\n * @param name The name of the pool\n * @param symbol The symbol of the pool (BPT name)\n * @param mainToken The main token\n * @param wrappedToken The wrapped token\n * @param upperTargetEvm The maximum balance of the main token\n * @param swapFeeEvm The swap fee of the pool\n * @param owner The address of the owner of the pool\n * @param protocolId The protocolId, to check the available value\n */\n create({\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId,\n salt,\n }: LinearCreatePoolParameters): {\n to?: string;\n data: BytesLike;\n } {\n this.checkCreateInputs({ swapFeeEvm, protocolId });\n const params = this.parseCreateParamsForEncoding({\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId,\n salt,\n });\n const data = this.encodeCreateFunctionData(params);\n return {\n to: this.getFactoryAddress(),\n data,\n };\n }\n\n checkCreateInputs = ({\n swapFeeEvm,\n protocolId,\n }: {\n swapFeeEvm: string;\n protocolId: ProtocolId;\n }): void => {\n if (!ProtocolId[protocolId]) {\n throw new BalancerError(BalancerErrorCode.INVALID_PROTOCOL_ID);\n }\n if (BigInt(swapFeeEvm) <= BigInt(0) || BigInt(swapFeeEvm) > BigInt(1e17)) {\n throw new BalancerError(BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE);\n }\n this.getFactoryAddress();\n };\n\n parseCreateParamsForEncoding = ({\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId,\n salt,\n }: Omit):\n | LinearPoolParamsToEncode\n | EulerLinearPoolParamsToEncode => {\n if (this.poolType === PoolType.EulerLinear) {\n return [\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId.toString(),\n ] as [string, string, string, string, string, string, string, string];\n }\n return [\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId.toString(),\n salt || getRandomBytes32(),\n ] as [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n BytesLike\n ];\n };\n\n encodeCreateFunctionData = (\n params: LinearPoolParamsToEncode | EulerLinearPoolParamsToEncode\n ): string => {\n const linearPoolInterface: LinearPoolFactoryInterface =\n this.getPoolFactoryInterface();\n const encodedData =\n // YearnLinearPools doesn't have protocolId, the encoding of the params is different\n this.poolType === PoolType.EulerLinear\n ? (\n linearPoolInterface as EulerLinearPoolFactoryInterface\n ).encodeFunctionData(\n 'create',\n params as EulerLinearPoolParamsToEncode\n )\n : (\n linearPoolInterface as Exclude<\n LinearPoolFactoryInterface,\n EulerLinearPoolFactoryInterface\n >\n ).encodeFunctionData('create', params as LinearPoolParamsToEncode);\n return encodedData;\n };\n\n getFactoryAddress = (): string => {\n switch (this.poolType) {\n case PoolType.AaveLinear:\n if (this.contracts.aaveLinearPoolFactory) {\n return this.contracts.aaveLinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n case PoolType.Linear:\n case PoolType.ERC4626Linear:\n if (this.contracts.erc4626LinearPoolFactory) {\n return this.contracts.erc4626LinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n case PoolType.EulerLinear:\n if (this.contracts.eulerLinearPoolFactory) {\n return this.contracts.eulerLinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n case PoolType.GearboxLinear:\n if (this.contracts.gearboxLinearPoolFactory) {\n return this.contracts.gearboxLinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n case PoolType.YearnLinear:\n if (this.contracts.yearnLinearPoolFactory) {\n return this.contracts.yearnLinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n default:\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n };\n\n getPoolAddressAndIdWithReceipt = async (\n provider: JsonRpcProvider,\n receipt: TransactionReceipt\n ): Promise<{ poolId: string; poolAddress: string }> => {\n const poolCreationEvent: LogDescription = findEventInReceiptLogs({\n receipt,\n to: this.getFactoryAddress() || '',\n contractInterface: this.getPoolFactoryInterface(),\n logName: 'PoolCreated',\n });\n\n const poolAddress = poolCreationEvent.args.pool;\n const linearPoolInterface = this.getPoolInterface();\n const pool = new Contract(poolAddress, linearPoolInterface, provider);\n const poolId = await pool.getPoolId();\n return {\n poolAddress,\n poolId,\n };\n };\n}\n","import { BalancerNetworkConfig, PoolType } from '@/types';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { PoolFactory } from '@/modules/pools/factory/pool-factory';\nimport { ComposableStableFactory } from '@/modules/pools/factory/composable-stable/composable-stable.factory';\nimport { WeightedFactory } from '@/modules/pools/factory/weighted/weighted.factory';\nimport {\n ContractInstances,\n Contracts,\n} from '@/modules/contracts/contracts.module';\nimport { LinearFactory } from '@/modules/pools/factory/linear/linear.factory';\n\n/**\n * Wrapper around pool type specific methods.\n *\n * Returns a class instance of a type specific factory.\n */\nexport class PoolFactory__factory {\n networkConfig: BalancerNetworkConfig;\n contracts: ContractInstances;\n\n constructor(\n networkConfig: BalancerNetworkConfig,\n balancerContracts: Contracts\n ) {\n this.networkConfig = networkConfig;\n this.contracts = balancerContracts.contracts;\n }\n\n of(poolType: PoolType): PoolFactory {\n switch (poolType) {\n case 'Weighted':\n return new WeightedFactory(this.networkConfig, this.contracts);\n case 'Investment':\n case 'LiquidityBootstrapping': {\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n case 'Stable': {\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n case 'ComposableStable': {\n return new ComposableStableFactory(this.networkConfig, this.contracts);\n }\n case 'MetaStable': {\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n case 'StablePhantom': {\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n case 'Linear':\n case 'AaveLinear':\n case 'ERC4626Linear':\n case 'EulerLinear':\n case 'GearboxLinear':\n case 'YearnLinear': {\n return new LinearFactory(this.contracts, poolType);\n }\n default:\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n }\n}\n","import * as PoolQueries from './types';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero, Zero, MaxUint256 } from '@ethersproject/constants';\nimport { getEncoder } from './get_encoder';\nimport { removeItem } from '@/lib/utils';\n\n/**\n * Builds parameters quering join / exit liquidity functions in the Balancer Helpers contract.\n */\nexport class ParamsBuilder implements PoolQueries.ParamsBuilder {\n private encoder: PoolQueries.Encoder;\n\n constructor(private pool: PoolQueries.Pool) {\n const encoder = getEncoder(pool.poolType);\n if (encoder) {\n this.encoder = encoder;\n } else {\n throw 'Pool type not supported';\n }\n }\n\n /**\n * Encodes the query to get expected amount of BPT when joining a Pool with exact token inputs\n * @param maxAmountsInByToken - The amounts each of token, mapped by token address, to deposit in the pool as liquidity,\n * doesn't need to have all tokens, only the ones that will be deposited\n * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens (optional)\n */\n buildQueryJoinExactIn({\n maxAmountsInByToken,\n minimumBPT = Zero,\n }: PoolQueries.JoinExactInParams): PoolQueries.queryJoinParams {\n const bptIndex = this.pool.tokensList.findIndex((token) =>\n this.pool.id.includes(token)\n );\n\n const assets = [...this.pool.tokensList];\n\n const maxAmountsIn = this.pool.tokensList.map(\n (tokenAddress) =>\n maxAmountsInByToken.get(tokenAddress) ?? BigNumber.from('0')\n );\n\n let maxInWithoutBpt;\n\n // Remove BPT token from amounts for user data\n if (bptIndex > -1) {\n maxInWithoutBpt = removeItem(maxAmountsIn, bptIndex);\n } else {\n maxInWithoutBpt = maxAmountsIn;\n }\n\n const userData = this.encoder.joinExactTokensInForBPTOut(\n maxInWithoutBpt,\n minimumBPT\n );\n\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets,\n maxAmountsIn,\n userData,\n fromInternalBalance: false, // from internal balance is ignored on query join, can be just false\n },\n ] as PoolQueries.queryJoinParams;\n\n return params;\n }\n\n /**\n * Encodes the query to get expected token amount when joining a Pool specifying fixed BPT out.\n *\n * @param maxAmountIn - The max expected amount for tokenIn (optional)\n * @param bptOut - the expected BPT for providing liquidity\n * @param tokenIn - address of a token joining the pool\n */\n buildQueryJoinExactOut({\n maxAmountIn,\n bptOut,\n tokenIn,\n }: PoolQueries.JoinExactOutParams): PoolQueries.queryJoinParams {\n const bptIndex = this.pool.tokensList.findIndex((token) =>\n this.pool.id.includes(token)\n );\n let tokensWithoutBpt = [...this.pool.tokensList];\n if (bptIndex > -1) {\n tokensWithoutBpt = removeItem(this.pool.tokensList, bptIndex);\n }\n const tokenIndex = tokensWithoutBpt.indexOf(tokenIn);\n\n const userData = this.encoder.joinTokenInForExactBPTOut(bptOut, tokenIndex);\n const maxAmountsIn = maxAmountIn\n ? this.pool.tokensList.map((tokenAddress) =>\n tokenAddress === tokenIn ? maxAmountIn : '0'\n )\n : [];\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets: this.pool.tokensList,\n maxAmountsIn,\n userData,\n fromInternalBalance: false, // from internal balance is ignored on query join, can be just false\n },\n ] as PoolQueries.queryJoinParams;\n\n return params;\n }\n\n /**\n * Encodes the query for exiting the pool to a single token\n *\n * @param minAmountOut - minimum expected amount for token out\n * @param bptIn - BPT, shares of the pool liquidity\n * @param tokenOut - address of an exit liquidity token\n */\n buildQueryExitToSingleToken({\n minAmountOut,\n bptIn,\n tokenOut,\n }: PoolQueries.ExitToSingleTokenParams): PoolQueries.queryExitParams {\n const bptIndex = this.pool.tokensList.findIndex((token) =>\n this.pool.id.includes(token)\n );\n let tokensWithoutBpt = [...this.pool.tokensList];\n if (bptIndex > -1) {\n tokensWithoutBpt = removeItem(this.pool.tokensList, bptIndex);\n }\n const tokenIndex = tokensWithoutBpt.indexOf(tokenOut);\n\n const userData = this.encoder.exitExactBPTInForOneTokenOut(\n bptIn,\n tokenIndex\n );\n const minAmountsOut = minAmountOut\n ? this.pool.tokensList.map((tokenAddress) =>\n tokenAddress === tokenOut ? minAmountOut : '0'\n )\n : [];\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets: this.pool.tokensList,\n minAmountsOut,\n userData,\n toInternalBalance: false, // to internal balance is ignored on query join, can be just false\n },\n ] as PoolQueries.queryExitParams;\n\n return params;\n }\n\n /**\n * Encodes the query for exiting the pool with all underlying tokens proportionally.\n * Not supported by ComposableStable\n *\n * @param minAmountsOut - minimum expected amounts, can be set to zero for a query, ordered same as pool.tokensList\n * @param bptIn - BPT, shares of the pool liquidity\n */\n buildQueryExitProportionally({\n minAmountsOut = [],\n bptIn,\n }: PoolQueries.ExitProportionallyParams): PoolQueries.queryExitParams {\n if (!this.encoder.exitExactBPTInForTokensOut) {\n throw 'Proportional exit not implemented';\n }\n\n const userData = this.encoder.exitExactBPTInForTokensOut(bptIn);\n\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets: this.pool.tokensList,\n minAmountsOut,\n userData,\n toInternalBalance: false,\n },\n ] as PoolQueries.queryExitParams;\n\n return params;\n }\n\n /**\n * Encodes calldata to query expected BPT for known amounts out.\n *\n * @param minAmountsOut - minimum expected amounts, ordered same as pool.tokensList\n * @param maxBptIn - BPT, shares of the pool liquidity, can be set to zero for a query\n */\n buildQueryExitExactOut({\n minAmountsOut,\n maxBptIn = MaxUint256,\n }: PoolQueries.ExitExactOutParams): PoolQueries.queryExitParams {\n const bptIndex = this.pool.tokensList.findIndex((token) =>\n this.pool.id.includes(token)\n );\n\n let minAmountsOutWithoutBpt = [...minAmountsOut];\n // Remove BPT token from amounts\n if (bptIndex > -1) {\n minAmountsOutWithoutBpt = removeItem(minAmountsOut, bptIndex);\n }\n\n const userData = this.encoder.exitBPTInForExactTokensOut(\n minAmountsOutWithoutBpt,\n maxBptIn\n );\n\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets: this.pool.tokensList,\n minAmountsOut,\n userData,\n toInternalBalance: false, // to internal balance is ignored on query join, can be just false\n },\n ] as PoolQueries.queryExitParams;\n\n return params;\n }\n}\n","import { WeightedPoolEncoder } from '@/pool-weighted/encoder';\nimport { StablePoolEncoder } from '@/pool-stable/encoder';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { PoolType } from '@/types';\nimport { isLinearish } from '@/lib/utils';\n\nexport const getEncoder = (\n poolType: PoolType\n):\n | typeof WeightedPoolEncoder\n | typeof StablePoolEncoder\n | typeof ComposableStablePoolEncoder\n | undefined => {\n switch (poolType) {\n case PoolType.Weighted:\n return WeightedPoolEncoder;\n\n case PoolType.Stable:\n case PoolType.MetaStable:\n case PoolType.StablePhantom:\n case PoolType.Element:\n case PoolType.Gyro2:\n case PoolType.Gyro3:\n return StablePoolEncoder;\n\n case PoolType.ComposableStable:\n return ComposableStablePoolEncoder;\n\n default: {\n if (isLinearish(poolType)) return StablePoolEncoder;\n break;\n }\n }\n};\n","import * as emissions from '@/modules/data/bal/emissions';\nimport { Findable, LiquidityGauge } from '@/types';\n\n/**\n * Returns BAL emissions per pool\n */\nexport class EmissionsService {\n constructor(private liquidityGaugesRepository: Findable) {}\n\n async relativeWeight(poolId: string): Promise {\n const gauge = await this.liquidityGaugesRepository.findBy('poolId', poolId);\n\n if (gauge) {\n return gauge.relativeWeight;\n }\n\n return 0;\n }\n\n async weekly(poolId: string): Promise {\n const perWeek = emissions.weekly();\n const relativeWeight = await this.relativeWeight(poolId);\n\n return perWeek * relativeWeight;\n }\n}\n","import { parseUnits } from '@ethersproject/units';\nimport { BigNumber } from '@ethersproject/bignumber';\n\n/**\n * Calculates the proportional amounts of tokens in relation to a given token and amount.\n * Useful for calculating the amounts of tokens to be sent to a pool when joining or swapping.\n * When using proportional amounts to join a pool the price impact will be minimal.\n *\n * @param pool - Pool object\n * @param token - Token address in relation to which the amounts are calculated\n * @param amount - Amount of token\n * @returns Object with tokens and amounts\n * @example\n * const pool = {\n * id: '0x0000',\n * tokens: [\n * { address: '0x1234', balance: '10' },\n * { address: '0x5678', balance: '20' }\n * ]\n * }\n *\n * const { tokens, amounts } = proportionalAmounts(pool, '0x1234', '1000000000000000000')\n */\nexport const proportionalAmounts = (\n pool: {\n id: string;\n tokens: { address: string; balance: string; decimals?: number }[];\n },\n token: string,\n amount: string\n): {\n tokens: string[];\n amounts: string[];\n} => {\n const tokensWithoutBpt = pool.tokens.filter(\n (t) => !pool.id.toLowerCase().includes(t.address.toLowerCase())\n );\n const referenceTokenIndex = tokensWithoutBpt.findIndex(\n (t) => t.address.toLowerCase() === token.toLowerCase()\n );\n\n if (referenceTokenIndex == -1) {\n throw new Error('Token not found in pool');\n }\n\n const balances = tokensWithoutBpt.map((t) =>\n parseUnits(t.balance, t.decimals)\n );\n const amountBn = BigNumber.from(amount);\n const proportionalAmounts = balances.map((b) =>\n b.mul(amountBn).div(balances[referenceTokenIndex])\n );\n\n return {\n tokens: tokensWithoutBpt.map((t) => t.address),\n amounts: proportionalAmounts.map((a) => a.toString()),\n };\n};\n","import { BigNumberish } from '@ethersproject/bignumber';\nimport { JsonRpcSigner } from '@ethersproject/providers';\n\nimport { BalancerError } from '@/balancerErrors';\nimport { Contracts } from '@/modules/contracts/contracts.module';\nimport { ImpermanentLossService } from '@/modules/pools/impermanentLoss/impermanentLossService';\nimport type {\n BalancerNetworkConfig,\n BalancerDataRepositories,\n Findable,\n Searchable,\n Pool,\n PoolWithMethods,\n AprBreakdown,\n PoolAttribute,\n} from '@/types';\nimport { Logger } from '@/lib/utils/logger';\n\nimport {\n ExitExactBPTInAttributes,\n JoinPoolAttributes,\n} from './pool-types/concerns/types';\nimport { PoolTypeConcerns } from './pool-type-concerns';\nimport { PoolApr } from './apr/apr';\nimport { Liquidity } from '../liquidity/liquidity.module';\nimport { Join } from '../joins/joins.module';\nimport { Exit, GeneralisedExitOutput, ExitInfo } from '../exits/exits.module';\nimport { PoolVolume } from './volume/volume';\nimport { PoolFees } from './fees/fees';\nimport { Simulation, SimulationType } from '../simulation/simulation.module';\nimport { PoolGraph } from '../graph/graph';\nimport { PoolFactory__factory } from './pool-factory__factory';\nimport * as Queries from './queries';\nimport { EmissionsService } from './emissions';\nimport { proportionalAmounts } from './proportional-amounts';\n\nconst notImplemented = (poolType: string, name: string) => () => {\n throw `${name} for poolType ${poolType} not implemented`;\n};\n\n/**\n * Controller / use-case layer for interacting with pools data.\n */\nexport class Pools implements Findable {\n aprService;\n liquidityService;\n joinService;\n exitService;\n feesService;\n volumeService;\n simulationService;\n poolFactory;\n impermanentLossService;\n graphService;\n emissionsService;\n proportionalAmounts;\n\n constructor(\n private networkConfig: BalancerNetworkConfig,\n private repositories: BalancerDataRepositories,\n private balancerContracts: Contracts\n ) {\n this.aprService = new PoolApr(\n this.repositories.pools,\n this.repositories.tokenPrices,\n this.repositories.tokenMeta,\n this.repositories.tokenYields,\n this.repositories.feeCollector,\n this.repositories.yesterdaysPools,\n this.repositories.liquidityGauges,\n this.repositories.feeDistributor,\n this.repositories.gyroConfigRepository\n );\n this.liquidityService = new Liquidity(\n repositories.pools,\n repositories.tokenPrices\n );\n this.simulationService = new Simulation(\n networkConfig,\n this.repositories.poolsForSimulations\n );\n this.graphService = new PoolGraph(this.repositories.poolsOnChain);\n this.joinService = new Join(\n this.graphService,\n networkConfig,\n this.simulationService\n );\n this.exitService = new Exit(\n this.graphService,\n networkConfig,\n this.simulationService\n );\n this.feesService = new PoolFees(repositories.yesterdaysPools);\n this.volumeService = new PoolVolume(repositories.yesterdaysPools);\n this.poolFactory = new PoolFactory__factory(\n networkConfig,\n balancerContracts\n );\n this.impermanentLossService = new ImpermanentLossService(\n repositories.tokenPrices,\n repositories.tokenHistoricalPrices\n );\n if (repositories.liquidityGauges) {\n this.emissionsService = new EmissionsService(\n repositories.liquidityGauges\n );\n }\n this.proportionalAmounts = proportionalAmounts;\n }\n\n static wrap(\n pool: Pool,\n networkConfig: BalancerNetworkConfig\n ): PoolWithMethods {\n let concerns: ReturnType;\n let queries: Queries.ParamsBuilder;\n let methods;\n try {\n concerns = PoolTypeConcerns.from(pool.poolType);\n methods = {\n buildJoin: (\n joiner: string,\n tokensIn: string[],\n amountsIn: string[],\n slippage: string\n ): JoinPoolAttributes => {\n return concerns.join.buildJoin({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n });\n },\n calcPriceImpact: async (\n tokenAmounts: string[],\n bptAmount: string,\n isJoin: boolean\n ) =>\n concerns.priceImpactCalculator.calcPriceImpact(\n pool,\n tokenAmounts.map(BigInt),\n BigInt(bptAmount),\n isJoin\n ),\n buildExitExactBPTIn: (\n exiter: string,\n bptIn: string,\n slippage: string,\n shouldUnwrapNativeAsset = false,\n singleTokenOut?: string,\n toInternalBalance = false\n ) => {\n if (concerns.exit.buildExitExactBPTIn) {\n return concerns.exit.buildExitExactBPTIn({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n });\n } else {\n throw 'ExitExactBPTIn not supported';\n }\n },\n buildExitExactTokensOut: (\n exiter: string,\n tokensOut: string[],\n amountsOut: string[],\n slippage: string,\n toInternalBalance = false\n ) =>\n concerns.exit.buildExitExactTokensOut({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }),\n buildRecoveryExit: (\n exiter: string,\n bptIn: string,\n slippage: string,\n toInternalBalance = false\n ) =>\n concerns.exit.buildRecoveryExit({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }),\n\n // TODO: spotPrice fails, because it needs a subgraphType,\n // either we refetch or it needs a type transformation from SDK internal to SOR (subgraph)\n // spotPrice: async (tokenIn: string, tokenOut: string) =>\n // methods.spotPriceCalculator.calcPoolSpotPrice(tokenIn, tokenOut, data),\n calcSpotPrice: (tokenIn: string, tokenOut: string) =>\n concerns.spotPriceCalculator.calcPoolSpotPrice(\n tokenIn,\n tokenOut,\n pool\n ),\n calcProportionalAmounts: (token: string, amount: string) => {\n return proportionalAmounts(pool, token, amount);\n },\n };\n } catch (error) {\n if ((error as BalancerError).code != 'UNSUPPORTED_POOL_TYPE') {\n const logger = Logger.getInstance();\n logger.warn(error as string);\n }\n\n methods = {\n buildJoin: notImplemented(pool.poolType, 'buildJoin'),\n calcPriceImpact: notImplemented(pool.poolType, 'calcPriceImpact'),\n buildExitExactBPTIn: notImplemented(\n pool.poolType,\n 'buildExitExactBPTIn'\n ),\n buildExitExactTokensOut: notImplemented(\n pool.poolType,\n 'buildExitExactTokensOut'\n ),\n calcSpotPrice: notImplemented(pool.poolType, 'calcSpotPrice'),\n buildRecoveryExit: notImplemented(pool.poolType, 'buildRecoveryExit'),\n };\n }\n\n try {\n queries = new Queries.ParamsBuilder(pool);\n methods = {\n ...methods,\n buildQueryJoinExactIn: queries.buildQueryJoinExactIn.bind(queries),\n buildQueryJoinExactOut: queries.buildQueryJoinExactOut.bind(queries),\n buildQueryExitExactOut: queries.buildQueryExitExactOut.bind(queries),\n buildQueryExitToSingleToken:\n queries.buildQueryExitToSingleToken.bind(queries),\n buildQueryExitProportionally:\n queries.buildQueryExitProportionally.bind(queries),\n };\n } catch (error) {\n methods = {\n ...methods,\n buildQueryJoinExactIn: notImplemented(\n pool.poolType,\n 'buildQueryJoinExactIn'\n ),\n buildQueryJoinExactOut: notImplemented(\n pool.poolType,\n 'buildQueryJoinExactOut'\n ),\n buildQueryExitExactOut: notImplemented(\n pool.poolType,\n 'buildQueryExitExactOut'\n ),\n buildQueryExitToSingleToken: notImplemented(\n pool.poolType,\n 'buildQueryExitToSingleToken'\n ),\n buildQueryExitProportionally: notImplemented(\n pool.poolType,\n 'buildQueryExitProportionally'\n ),\n };\n }\n const wrappedNativeAsset =\n networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase();\n const bptIndex = pool.tokensList.indexOf(pool.address);\n return {\n ...pool,\n ...methods,\n bptIndex,\n };\n }\n\n dataSource(): Findable & Searchable {\n // TODO: Add API data repository to data and use liveModelProvider as fallback\n return this.repositories.pools;\n }\n\n /**\n * Calculates APR on any pool data\n *\n * @param pool\n * @returns\n */\n async apr(pool: Pool): Promise {\n return this.aprService.apr(pool);\n }\n\n /**\n * Calculates Impermanent Loss on any pool data\n *\n * @param timestamp\n * @param pool\n * @returns\n */\n async impermanentLoss(timestamp: number, pool: Pool): Promise {\n return this.impermanentLossService.calcImpLoss(timestamp, pool);\n }\n\n /**\n * Calculates total pool liquidity in USD\n *\n * @param pool\n * @returns total pool liquidity in USD\n */\n async liquidity(pool: Pool): Promise {\n return this.liquidityService.getLiquidity(pool);\n }\n\n /**\n * Calculates pool's BPT price in USD\n *\n * @param pool\n * @returns pool's BPT price in USD\n */\n async bptPrice(pool: Pool): Promise {\n return this.liquidityService.getBptPrice(pool);\n }\n\n /**\n * Builds join transaction\n *\n * @param pool Pool\n * @param tokensIn Token addresses\n * @param amountsIn Token amounts in EVM scale\n * @param userAddress User address\n * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%.\n * @returns Transaction object\n * @throws Error if pool type is not implemented\n */\n buildJoin({\n pool,\n tokensIn,\n amountsIn,\n userAddress,\n slippage,\n }: {\n pool: Pool;\n tokensIn: string[];\n amountsIn: string[];\n userAddress: string;\n slippage: string;\n }): JoinPoolAttributes {\n const concerns = PoolTypeConcerns.from(pool.poolType);\n\n if (!concerns)\n throw `buildJoin for poolType ${pool.poolType} not implemented`;\n\n return concerns.join.buildJoin({\n joiner: userAddress,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset:\n this.networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase(),\n });\n }\n\n buildExitExactBPTIn({\n pool,\n bptAmount,\n userAddress,\n slippage,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n }: {\n pool: Pool;\n bptAmount: string;\n userAddress: string;\n slippage: string;\n shouldUnwrapNativeAsset?: boolean;\n singleTokenOut?: string;\n }): ExitExactBPTInAttributes {\n const concerns = PoolTypeConcerns.from(pool.poolType);\n if (!concerns || !concerns.exit.buildExitExactBPTIn)\n throw `buildExit for poolType ${pool.poolType} not implemented`;\n\n return concerns.exit.buildExitExactBPTIn({\n pool,\n exiter: userAddress,\n bptIn: bptAmount,\n slippage,\n wrappedNativeAsset:\n this.networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase(),\n shouldUnwrapNativeAsset: shouldUnwrapNativeAsset ?? false,\n singleTokenOut: singleTokenOut ?? undefined,\n toInternalBalance: false,\n });\n }\n\n buildRecoveryExit({\n pool,\n bptAmount,\n userAddress,\n slippage,\n toInternalBalance,\n }: {\n pool: Pool;\n bptAmount: string;\n userAddress: string;\n slippage: string;\n toInternalBalance?: boolean;\n }): ExitExactBPTInAttributes {\n const concerns = PoolTypeConcerns.from(pool.poolType);\n if (!concerns || !concerns.exit.buildRecoveryExit)\n throw `buildRecoveryExit for poolType ${pool.poolType} not implemented`;\n\n return concerns.exit.buildRecoveryExit({\n exiter: userAddress,\n pool,\n bptIn: bptAmount,\n slippage,\n toInternalBalance: !!toInternalBalance,\n });\n }\n\n /**\n * Builds generalised join transaction\n *\n * @param poolId Pool id\n * @param tokens Token addresses\n * @param amounts Token amounts in EVM scale\n * @param userAddress User address\n * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%.\n * @param signer JsonRpcSigner that will sign the staticCall transaction if Static simulation chosen\n * @param simulationType Simulation type (VaultModel, Tenderly or Static)\n * @param authorisation Optional auhtorisation call to be added to the chained transaction\n * @returns transaction data ready to be sent to the network along with min and expected BPT amounts out.\n */\n async generalisedJoin(\n poolId: string,\n tokens: string[],\n amounts: string[],\n userAddress: string,\n slippage: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType,\n authorisation?: string\n ): Promise<{\n to: string;\n encodedCall: string;\n minOut: string;\n expectedOut: string;\n priceImpact: string;\n value: BigNumberish;\n }> {\n return this.joinService.joinPool(\n poolId,\n tokens,\n amounts,\n userAddress,\n slippage,\n signer,\n simulationType,\n authorisation\n );\n }\n\n /**\n * Builds generalised exit transaction\n *\n * @param poolId Pool id\n * @param amount Token amount in EVM scale\n * @param userAddress User address\n * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%.\n * @param signer JsonRpcSigner that will sign the staticCall transaction if Static simulation chosen\n * @param simulationType Simulation type (Tenderly or Static) - VaultModel should not be used to build exit transaction\n * @param authorisation Optional auhtorisation call to be added to the chained transaction\n * @param tokensToUnwrap List all tokens that requires exit by unwrapping - info provided by getExitInfo\n * @returns transaction data ready to be sent to the network along with tokens, min and expected amounts out.\n */\n async generalisedExit(\n poolId: string,\n amount: string,\n userAddress: string,\n slippage: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType.Static | SimulationType.Tenderly,\n authorisation?: string,\n tokensToUnwrap?: string[]\n ): Promise {\n return this.exitService.buildExitCall(\n poolId,\n amount,\n userAddress,\n slippage,\n signer,\n simulationType,\n authorisation,\n tokensToUnwrap\n );\n }\n\n /**\n * Calculates price impact for an action on a pool\n *\n * @param pool\n * @returns percentage as a string in EVM scale\n */\n calcPriceImpact({\n pool,\n tokenAmounts,\n bptAmount,\n isJoin,\n }: {\n pool: Pool;\n tokenAmounts: string[];\n bptAmount: string;\n isJoin: boolean;\n }): string {\n const concerns = PoolTypeConcerns.from(pool.poolType);\n return concerns.priceImpactCalculator.calcPriceImpact(\n pool,\n tokenAmounts.map(BigInt),\n BigInt(bptAmount),\n isJoin\n );\n }\n\n /**\n * Gets info required to build generalised exit transaction\n *\n * @param poolId Pool id\n * @param amountBptIn BPT amount in EVM scale\n * @param userAddress User address\n * @param signer JsonRpcSigner that will sign the staticCall transaction if Static simulation chosen\n * @returns info required to build a generalised exit transaction including whether tokens need to be unwrapped\n */\n async getExitInfo(\n poolId: string,\n amountBptIn: string,\n userAddress: string,\n signer: JsonRpcSigner\n ): Promise {\n return this.exitService.getExitInfo(\n poolId,\n amountBptIn,\n userAddress,\n signer\n );\n }\n\n /**\n * Calculates total fees for the pool in the last 24 hours\n *\n * @param pool\n * @returns\n */\n async fees(pool: Pool): Promise {\n return this.feesService.last24h(pool);\n }\n\n /**\n * Calculates total volume of the pool in the last 24 hours\n *\n * @param pool\n * @returns\n */\n async volume(pool: Pool): Promise {\n return this.volumeService.last24h(pool);\n }\n\n async find(id: string): Promise {\n const data = await this.dataSource().find(id);\n if (!data) return;\n\n return Pools.wrap(data, this.networkConfig);\n }\n\n async findBy(\n param: string,\n value: string\n ): Promise {\n if (param == 'id') {\n return this.find(value);\n } else if (param == 'address') {\n const data = await this.dataSource().findBy('address', value);\n if (!data) return;\n\n return Pools.wrap(data, this.networkConfig);\n } else {\n throw `search by ${param} not implemented`;\n }\n }\n\n async all(): Promise {\n const list = await this.dataSource().all();\n if (!list) return [];\n\n return list\n .map((data: Pool) => Pools.wrap(data, this.networkConfig))\n .filter((p) => p) as PoolWithMethods[];\n }\n\n async where(filter: (pool: Pool) => boolean): Promise {\n const list = await this.dataSource().where(filter);\n if (!list) return [];\n\n const wrapped = list.map((data: Pool) =>\n Pools.wrap(data, this.networkConfig)\n );\n\n return wrapped.filter((p) => p) as PoolWithMethods[];\n }\n}\n","export const version = \"strings/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n///////////////////////////////\nexport var UnicodeNormalizationForm;\n(function (UnicodeNormalizationForm) {\n UnicodeNormalizationForm[\"current\"] = \"\";\n UnicodeNormalizationForm[\"NFC\"] = \"NFC\";\n UnicodeNormalizationForm[\"NFD\"] = \"NFD\";\n UnicodeNormalizationForm[\"NFKC\"] = \"NFKC\";\n UnicodeNormalizationForm[\"NFKD\"] = \"NFKD\";\n})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {}));\n;\nexport var Utf8ErrorReason;\n(function (Utf8ErrorReason) {\n // A continuation byte was present where there was nothing to continue\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"UNEXPECTED_CONTINUE\"] = \"unexpected continuation byte\";\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"BAD_PREFIX\"] = \"bad codepoint prefix\";\n // The string is too short to process the expected codepoint\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"OVERRUN\"] = \"string overrun\";\n // A missing continuation byte was expected but not found\n // - offset = the index the continuation byte was expected at\n Utf8ErrorReason[\"MISSING_CONTINUE\"] = \"missing continuation byte\";\n // The computed code point is outside the range for UTF-8\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\n Utf8ErrorReason[\"OUT_OF_RANGE\"] = \"out of UTF-8 range\";\n // UTF-8 strings may not contain UTF-16 surrogate pairs\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\n Utf8ErrorReason[\"UTF16_SURROGATE\"] = \"UTF-16 surrogate\";\n // The string is an overlong representation\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; already bounds checked\n Utf8ErrorReason[\"OVERLONG\"] = \"overlong representation\";\n})(Utf8ErrorReason || (Utf8ErrorReason = {}));\n;\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n return logger.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === Utf8ErrorReason.OVERRUN) {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === Utf8ErrorReason.OVERLONG) {\n output.push(badCodepoint);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n// Common error handing strategies\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n bytes = arrayify(bytes);\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\n }\n else {\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nexport function toUtf8Bytes(str, form = UnicodeNormalizationForm.current) {\n if (form != UnicodeNormalizationForm.current) {\n logger.checkNormalize();\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new Error(\"invalid utf-8 string\");\n }\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return arrayify(result);\n}\n;\nfunction escapeChar(value) {\n const hex = (\"0000\" + value.toString(16));\n return \"\\\\u\" + hex.substring(hex.length - 4);\n}\nexport function _toEscapedUtf8String(bytes, onError) {\n return '\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\n if (codePoint < 256) {\n switch (codePoint) {\n case 8: return \"\\\\b\";\n case 9: return \"\\\\t\";\n case 10: return \"\\\\n\";\n case 13: return \"\\\\r\";\n case 34: return \"\\\\\\\"\";\n case 92: return \"\\\\\\\\\";\n }\n if (codePoint >= 32 && codePoint < 127) {\n return String.fromCharCode(codePoint);\n }\n }\n if (codePoint <= 0xffff) {\n return escapeChar(codePoint);\n }\n codePoint -= 0x10000;\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\n }).join(\"\") + '\"';\n}\nexport function _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\nexport function toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","\"use strict\";\nimport { HashZero } from \"@ethersproject/constants\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes, toUtf8String } from \"./utf8\";\nexport function formatBytes32String(text) {\n // Get the bytes\n const bytes = toUtf8Bytes(text);\n // Check we have room for null-termination\n if (bytes.length > 31) {\n throw new Error(\"bytes32 string must be less than 32 bytes\");\n }\n // Zero-pad (implicitly null-terminates)\n return hexlify(concat([bytes, HashZero]).slice(0, 32));\n}\nexport function parseBytes32String(bytes) {\n const data = arrayify(bytes);\n // Must be 32 bytes with a null-termination\n if (data.length !== 32) {\n throw new Error(\"invalid bytes32 - not 32 bytes long\");\n }\n if (data[31] !== 0) {\n throw new Error(\"invalid bytes32 string - no null terminator\");\n }\n // Find the null termination\n let length = 31;\n while (data[length - 1] === 0) {\n length--;\n }\n // Determine the string value\n return toUtf8String(data.slice(0, length));\n}\n//# sourceMappingURL=bytes32.js.map","/**\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\n *\n * @version 0.8.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2015-2018\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n 'use strict';\n\n var INPUT_ERROR = 'input is invalid type';\n var FINALIZE_ERROR = 'finalize already called';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_SHA3_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\n var PADDING = [6, 1536, 393216, 100663296];\n var SHIFT = [0, 8, 16, 24];\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\n var BITS = [224, 256, 384, 512];\n var SHAKE_BITS = [128, 256];\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\n var CSHAKE_BYTEPAD = {\n '128': 168,\n '256': 136\n };\n\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n var createOutputMethod = function (bits, padding, outputType) {\n return function (message) {\n return new Keccak(bits, padding, bits).update(message)[outputType]();\n };\n };\n\n var createShakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits) {\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\n };\n };\n\n var createCshakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits, n, s) {\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\n };\n };\n\n var createKmacOutputMethod = function (bits, padding, outputType) {\n return function (key, message, outputBits, s) {\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\n };\n };\n\n var createOutputMethods = function (method, createMethod, bits, padding) {\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createMethod(bits, padding, type);\n }\n return method;\n };\n\n var createMethod = function (bits, padding) {\n var method = createOutputMethod(bits, padding, 'hex');\n method.create = function () {\n return new Keccak(bits, padding, bits);\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n return createOutputMethods(method, createOutputMethod, bits, padding);\n };\n\n var createShakeMethod = function (bits, padding) {\n var method = createShakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits) {\n return new Keccak(bits, padding, outputBits);\n };\n method.update = function (message, outputBits) {\n return method.create(outputBits).update(message);\n };\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\n };\n\n var createCshakeMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createCshakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits, n, s) {\n if (!n && !s) {\n return methods['shake' + bits].create(outputBits);\n } else {\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\n }\n };\n method.update = function (message, outputBits, n, s) {\n return method.create(outputBits, n, s).update(message);\n };\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\n };\n\n var createKmacMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createKmacOutputMethod(bits, padding, 'hex');\n method.create = function (key, outputBits, s) {\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\n };\n method.update = function (key, message, outputBits, s) {\n return method.create(key, outputBits, s).update(message);\n };\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\n };\n\n var algorithms = [\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\n ];\n\n var methods = {}, methodNames = [];\n\n for (var i = 0; i < algorithms.length; ++i) {\n var algorithm = algorithms[i];\n var bits = algorithm.bits;\n for (var j = 0; j < bits.length; ++j) {\n var methodName = algorithm.name + '_' + bits[j];\n methodNames.push(methodName);\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\n if (algorithm.name !== 'sha3') {\n var newMethodName = algorithm.name + bits[j];\n methodNames.push(newMethodName);\n methods[newMethodName] = methods[methodName];\n }\n }\n }\n\n function Keccak(bits, padding, outputBits) {\n this.blocks = [];\n this.s = [];\n this.padding = padding;\n this.outputBits = outputBits;\n this.reset = true;\n this.finalized = false;\n this.block = 0;\n this.start = 0;\n this.blockCount = (1600 - (bits << 1)) >> 5;\n this.byteCount = this.blockCount << 2;\n this.outputBlocks = outputBits >> 5;\n this.extraBytes = (outputBits & 31) >> 3;\n\n for (var i = 0; i < 50; ++i) {\n this.s[i] = 0;\n }\n }\n\n Keccak.prototype.update = function (message) {\n if (this.finalized) {\n throw new Error(FINALIZE_ERROR);\n }\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\n\n while (index < length) {\n if (this.reset) {\n this.reset = false;\n blocks[0] = this.block;\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n if (notString) {\n for (i = this.start; index < length && i < byteCount; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < byteCount; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n this.lastByteIndex = i;\n if (i >= byteCount) {\n this.start = i - byteCount;\n this.block = blocks[blockCount];\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n this.reset = true;\n } else {\n this.start = i;\n }\n }\n return this;\n };\n\n Keccak.prototype.encode = function (x, right) {\n var o = x & 255, n = 1;\n var bytes = [o];\n x = x >> 8;\n o = x & 255;\n while (o > 0) {\n bytes.unshift(o);\n x = x >> 8;\n o = x & 255;\n ++n;\n }\n if (right) {\n bytes.push(n);\n } else {\n bytes.unshift(n);\n }\n this.update(bytes);\n return bytes.length;\n };\n\n Keccak.prototype.encodeString = function (str) {\n var notString, type = typeof str;\n if (type !== 'string') {\n if (type === 'object') {\n if (str === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\n str = new Uint8Array(str);\n } else if (!Array.isArray(str)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var bytes = 0, length = str.length;\n if (notString) {\n bytes = length;\n } else {\n for (var i = 0; i < str.length; ++i) {\n var code = str.charCodeAt(i);\n if (code < 0x80) {\n bytes += 1;\n } else if (code < 0x800) {\n bytes += 2;\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes += 3;\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\n bytes += 4;\n }\n }\n }\n bytes += this.encode(bytes * 8);\n this.update(str);\n return bytes;\n };\n\n Keccak.prototype.bytepad = function (strs, w) {\n var bytes = this.encode(w);\n for (var i = 0; i < strs.length; ++i) {\n bytes += this.encodeString(strs[i]);\n }\n var paddingBytes = w - bytes % w;\n var zeros = [];\n zeros.length = paddingBytes;\n this.update(zeros);\n return this;\n };\n\n Keccak.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\n blocks[i >> 2] |= this.padding[i & 3];\n if (this.lastByteIndex === this.byteCount) {\n blocks[0] = blocks[blockCount];\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n blocks[blockCount - 1] |= 0x80000000;\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n };\n\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var hex = '', block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\n }\n if (j % blockCount === 0) {\n f(s);\n i = 0;\n }\n }\n if (extraBytes) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\n if (extraBytes > 1) {\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\n }\n if (extraBytes > 2) {\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\n }\n }\n return hex;\n };\n\n Keccak.prototype.arrayBuffer = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var bytes = this.outputBits >> 3;\n var buffer;\n if (extraBytes) {\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\n } else {\n buffer = new ArrayBuffer(bytes);\n }\n var array = new Uint32Array(buffer);\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n array[j] = s[i];\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n array[i] = s[i];\n buffer = buffer.slice(0, bytes);\n }\n return buffer;\n };\n\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\n\n Keccak.prototype.digest = Keccak.prototype.array = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var array = [], offset, block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n array[offset + 1] = (block >> 8) & 0xFF;\n array[offset + 2] = (block >> 16) & 0xFF;\n array[offset + 3] = (block >> 24) & 0xFF;\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n if (extraBytes > 1) {\n array[offset + 1] = (block >> 8) & 0xFF;\n }\n if (extraBytes > 2) {\n array[offset + 2] = (block >> 16) & 0xFF;\n }\n }\n return array;\n };\n\n function Kmac(bits, padding, outputBits) {\n Keccak.call(this, bits, padding, outputBits);\n }\n\n Kmac.prototype = new Keccak();\n\n Kmac.prototype.finalize = function () {\n this.encode(this.outputBits, true);\n return Keccak.prototype.finalize.call(this);\n };\n\n var f = function (s) {\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\n for (n = 0; n < 48; n += 2) {\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\n\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\n s[0] ^= h;\n s[1] ^= l;\n s[10] ^= h;\n s[11] ^= l;\n s[20] ^= h;\n s[21] ^= l;\n s[30] ^= h;\n s[31] ^= l;\n s[40] ^= h;\n s[41] ^= l;\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\n s[2] ^= h;\n s[3] ^= l;\n s[12] ^= h;\n s[13] ^= l;\n s[22] ^= h;\n s[23] ^= l;\n s[32] ^= h;\n s[33] ^= l;\n s[42] ^= h;\n s[43] ^= l;\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\n s[4] ^= h;\n s[5] ^= l;\n s[14] ^= h;\n s[15] ^= l;\n s[24] ^= h;\n s[25] ^= l;\n s[34] ^= h;\n s[35] ^= l;\n s[44] ^= h;\n s[45] ^= l;\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\n s[6] ^= h;\n s[7] ^= l;\n s[16] ^= h;\n s[17] ^= l;\n s[26] ^= h;\n s[27] ^= l;\n s[36] ^= h;\n s[37] ^= l;\n s[46] ^= h;\n s[47] ^= l;\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\n s[8] ^= h;\n s[9] ^= l;\n s[18] ^= h;\n s[19] ^= l;\n s[28] ^= h;\n s[29] ^= l;\n s[38] ^= h;\n s[39] ^= l;\n s[48] ^= h;\n s[49] ^= l;\n\n b0 = s[0];\n b1 = s[1];\n b32 = (s[11] << 4) | (s[10] >>> 28);\n b33 = (s[10] << 4) | (s[11] >>> 28);\n b14 = (s[20] << 3) | (s[21] >>> 29);\n b15 = (s[21] << 3) | (s[20] >>> 29);\n b46 = (s[31] << 9) | (s[30] >>> 23);\n b47 = (s[30] << 9) | (s[31] >>> 23);\n b28 = (s[40] << 18) | (s[41] >>> 14);\n b29 = (s[41] << 18) | (s[40] >>> 14);\n b20 = (s[2] << 1) | (s[3] >>> 31);\n b21 = (s[3] << 1) | (s[2] >>> 31);\n b2 = (s[13] << 12) | (s[12] >>> 20);\n b3 = (s[12] << 12) | (s[13] >>> 20);\n b34 = (s[22] << 10) | (s[23] >>> 22);\n b35 = (s[23] << 10) | (s[22] >>> 22);\n b16 = (s[33] << 13) | (s[32] >>> 19);\n b17 = (s[32] << 13) | (s[33] >>> 19);\n b48 = (s[42] << 2) | (s[43] >>> 30);\n b49 = (s[43] << 2) | (s[42] >>> 30);\n b40 = (s[5] << 30) | (s[4] >>> 2);\n b41 = (s[4] << 30) | (s[5] >>> 2);\n b22 = (s[14] << 6) | (s[15] >>> 26);\n b23 = (s[15] << 6) | (s[14] >>> 26);\n b4 = (s[25] << 11) | (s[24] >>> 21);\n b5 = (s[24] << 11) | (s[25] >>> 21);\n b36 = (s[34] << 15) | (s[35] >>> 17);\n b37 = (s[35] << 15) | (s[34] >>> 17);\n b18 = (s[45] << 29) | (s[44] >>> 3);\n b19 = (s[44] << 29) | (s[45] >>> 3);\n b10 = (s[6] << 28) | (s[7] >>> 4);\n b11 = (s[7] << 28) | (s[6] >>> 4);\n b42 = (s[17] << 23) | (s[16] >>> 9);\n b43 = (s[16] << 23) | (s[17] >>> 9);\n b24 = (s[26] << 25) | (s[27] >>> 7);\n b25 = (s[27] << 25) | (s[26] >>> 7);\n b6 = (s[36] << 21) | (s[37] >>> 11);\n b7 = (s[37] << 21) | (s[36] >>> 11);\n b38 = (s[47] << 24) | (s[46] >>> 8);\n b39 = (s[46] << 24) | (s[47] >>> 8);\n b30 = (s[8] << 27) | (s[9] >>> 5);\n b31 = (s[9] << 27) | (s[8] >>> 5);\n b12 = (s[18] << 20) | (s[19] >>> 12);\n b13 = (s[19] << 20) | (s[18] >>> 12);\n b44 = (s[29] << 7) | (s[28] >>> 25);\n b45 = (s[28] << 7) | (s[29] >>> 25);\n b26 = (s[38] << 8) | (s[39] >>> 24);\n b27 = (s[39] << 8) | (s[38] >>> 24);\n b8 = (s[48] << 14) | (s[49] >>> 18);\n b9 = (s[49] << 14) | (s[48] >>> 18);\n\n s[0] = b0 ^ (~b2 & b4);\n s[1] = b1 ^ (~b3 & b5);\n s[10] = b10 ^ (~b12 & b14);\n s[11] = b11 ^ (~b13 & b15);\n s[20] = b20 ^ (~b22 & b24);\n s[21] = b21 ^ (~b23 & b25);\n s[30] = b30 ^ (~b32 & b34);\n s[31] = b31 ^ (~b33 & b35);\n s[40] = b40 ^ (~b42 & b44);\n s[41] = b41 ^ (~b43 & b45);\n s[2] = b2 ^ (~b4 & b6);\n s[3] = b3 ^ (~b5 & b7);\n s[12] = b12 ^ (~b14 & b16);\n s[13] = b13 ^ (~b15 & b17);\n s[22] = b22 ^ (~b24 & b26);\n s[23] = b23 ^ (~b25 & b27);\n s[32] = b32 ^ (~b34 & b36);\n s[33] = b33 ^ (~b35 & b37);\n s[42] = b42 ^ (~b44 & b46);\n s[43] = b43 ^ (~b45 & b47);\n s[4] = b4 ^ (~b6 & b8);\n s[5] = b5 ^ (~b7 & b9);\n s[14] = b14 ^ (~b16 & b18);\n s[15] = b15 ^ (~b17 & b19);\n s[24] = b24 ^ (~b26 & b28);\n s[25] = b25 ^ (~b27 & b29);\n s[34] = b34 ^ (~b36 & b38);\n s[35] = b35 ^ (~b37 & b39);\n s[44] = b44 ^ (~b46 & b48);\n s[45] = b45 ^ (~b47 & b49);\n s[6] = b6 ^ (~b8 & b0);\n s[7] = b7 ^ (~b9 & b1);\n s[16] = b16 ^ (~b18 & b10);\n s[17] = b17 ^ (~b19 & b11);\n s[26] = b26 ^ (~b28 & b20);\n s[27] = b27 ^ (~b29 & b21);\n s[36] = b36 ^ (~b38 & b30);\n s[37] = b37 ^ (~b39 & b31);\n s[46] = b46 ^ (~b48 & b40);\n s[47] = b47 ^ (~b49 & b41);\n s[8] = b8 ^ (~b0 & b2);\n s[9] = b9 ^ (~b1 & b3);\n s[18] = b18 ^ (~b10 & b12);\n s[19] = b19 ^ (~b11 & b13);\n s[28] = b28 ^ (~b20 & b22);\n s[29] = b29 ^ (~b21 & b23);\n s[38] = b38 ^ (~b30 & b32);\n s[39] = b39 ^ (~b31 & b33);\n s[48] = b48 ^ (~b40 & b42);\n s[49] = b49 ^ (~b41 & b43);\n\n s[0] ^= RC[n];\n s[1] ^= RC[n + 1];\n }\n };\n\n if (COMMON_JS) {\n module.exports = methods;\n } else {\n for (i = 0; i < methodNames.length; ++i) {\n root[methodNames[i]] = methods[methodNames[i]];\n }\n if (AMD) {\n define(function () {\n return methods;\n });\n }\n }\n})();\n","export const version = \"solidity/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { arrayify, concat, hexlify, zeroPad } from \"@ethersproject/bytes\";\nimport { keccak256 as hashKeccak256 } from \"@ethersproject/keccak256\";\nimport { sha256 as hashSha256 } from \"@ethersproject/sha2\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nconst regexBytes = new RegExp(\"^bytes([0-9]+)$\");\nconst regexNumber = new RegExp(\"^(u?int)([0-9]*)$\");\nconst regexArray = new RegExp(\"^(.*)\\\\[([0-9]*)\\\\]$\");\nconst Zeros = \"0000000000000000000000000000000000000000000000000000000000000000\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nfunction _pack(type, value, isArray) {\n switch (type) {\n case \"address\":\n if (isArray) {\n return zeroPad(value, 32);\n }\n return arrayify(value);\n case \"string\":\n return toUtf8Bytes(value);\n case \"bytes\":\n return arrayify(value);\n case \"bool\":\n value = (value ? \"0x01\" : \"0x00\");\n if (isArray) {\n return zeroPad(value, 32);\n }\n return arrayify(value);\n }\n let match = type.match(regexNumber);\n if (match) {\n //let signed = (match[1] === \"int\")\n let size = parseInt(match[2] || \"256\");\n if ((match[2] && String(size) !== match[2]) || (size % 8 !== 0) || size === 0 || size > 256) {\n logger.throwArgumentError(\"invalid number type\", \"type\", type);\n }\n if (isArray) {\n size = 256;\n }\n value = BigNumber.from(value).toTwos(size);\n return zeroPad(value, size / 8);\n }\n match = type.match(regexBytes);\n if (match) {\n const size = parseInt(match[1]);\n if (String(size) !== match[1] || size === 0 || size > 32) {\n logger.throwArgumentError(\"invalid bytes type\", \"type\", type);\n }\n if (arrayify(value).byteLength !== size) {\n logger.throwArgumentError(`invalid value for ${type}`, \"value\", value);\n }\n if (isArray) {\n return arrayify((value + Zeros).substring(0, 66));\n }\n return value;\n }\n match = type.match(regexArray);\n if (match && Array.isArray(value)) {\n const baseType = match[1];\n const count = parseInt(match[2] || String(value.length));\n if (count != value.length) {\n logger.throwArgumentError(`invalid array length for ${type}`, \"value\", value);\n }\n const result = [];\n value.forEach(function (value) {\n result.push(_pack(baseType, value, true));\n });\n return concat(result);\n }\n return logger.throwArgumentError(\"invalid type\", \"type\", type);\n}\n// @TODO: Array Enum\nexport function pack(types, values) {\n if (types.length != values.length) {\n logger.throwArgumentError(\"wrong number of values; expected ${ types.length }\", \"values\", values);\n }\n const tight = [];\n types.forEach(function (type, index) {\n tight.push(_pack(type, values[index]));\n });\n return hexlify(concat(tight));\n}\nexport function keccak256(types, values) {\n return hashKeccak256(pack(types, values));\n}\nexport function sha256(types, values) {\n return hashSha256(pack(types, values));\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nimport sha3 from \"js-sha3\";\nimport { arrayify } from \"@ethersproject/bytes\";\nexport function keccak256(data) {\n return '0x' + sha3.keccak_256(arrayify(data));\n}\n//# sourceMappingURL=index.js.map","import { formatBytes32String } from '@ethersproject/strings';\nimport { keccak256 } from '@ethersproject/solidity';\nimport { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { Provider } from '@ethersproject/providers';\nimport { GyroConfig, GyroConfig__factory, Multicall } from '@/contracts';\nimport { GyroConfigInterface } from '@/contracts/GyroConfig';\n\nexport interface GyroConfigRepository {\n getGyroProtocolFee(poolAddress: string): Promise;\n}\n\nconst protocolFeePercKey = formatBytes32String('PROTOCOL_SWAP_FEE_PERC');\nconst gyroPoolTypeKey = formatBytes32String('E-CLP');\nconst encodedPoolTypeKey = keccak256(\n ['bytes'],\n [\n defaultAbiCoder.encode(\n ['bytes32', 'bytes32'],\n [protocolFeePercKey, gyroPoolTypeKey]\n ),\n ]\n);\n\nexport class GyroConfigRepositoryImpl implements GyroConfigRepository {\n gyroConfigInterface: GyroConfigInterface;\n gyroConfig: GyroConfig;\n\n constructor(\n private gyroConfigAddress: string,\n private multicall: Multicall,\n provider: Provider\n ) {\n this.gyroConfigInterface = GyroConfig__factory.createInterface();\n this.gyroConfig = GyroConfig__factory.connect(gyroConfigAddress, provider);\n }\n\n async getGyroProtocolFee(poolAddress: string): Promise {\n let fee;\n const encodedPoolSpecificKey = keccak256(\n ['bytes'],\n [\n defaultAbiCoder.encode(\n ['bytes32', 'uint256'],\n [protocolFeePercKey, poolAddress]\n ),\n ]\n );\n const payload = [\n {\n target: this.gyroConfigAddress,\n callData: this.gyroConfigInterface.encodeFunctionData('hasKey', [\n encodedPoolSpecificKey,\n ]),\n },\n {\n target: this.gyroConfigAddress,\n callData: this.gyroConfigInterface.encodeFunctionData('hasKey', [\n encodedPoolTypeKey,\n ]),\n },\n {\n target: this.gyroConfigAddress,\n callData: this.gyroConfigInterface.encodeFunctionData('hasKey', [\n protocolFeePercKey,\n ]),\n },\n ];\n const [, [hasSpecificKeyHex, hasPoolTypeKeyHex, hasDefaultKeyHex]] =\n await this.multicall.callStatic.aggregate(payload);\n const hasSpecificKey = BigNumber.from(hasSpecificKeyHex).eq(1);\n const hasPoolTypeKey = BigNumber.from(hasPoolTypeKeyHex).eq(1);\n const hasDefaultKey = BigNumber.from(hasDefaultKeyHex).eq(1);\n if (hasSpecificKey) {\n fee = parseFloat(\n formatFixed(await this.gyroConfig.getUint(encodedPoolSpecificKey), 18)\n );\n } else if (hasPoolTypeKey) {\n fee = parseFloat(\n formatFixed(await this.gyroConfig.getUint(encodedPoolTypeKey), 18)\n );\n } else if (hasDefaultKey) {\n fee = parseFloat(\n formatFixed(await this.gyroConfig.getUint(protocolFeePercKey), 18)\n );\n } else {\n fee = 0;\n }\n return fee;\n }\n}\n","import { Interface } from '@ethersproject/abi';\nimport { getAddress } from '@ethersproject/address';\nimport { formatUnits } from '@ethersproject/units';\nimport { Multicall } from '@/contracts';\n\nconst gaugeControllerInterface = new Interface([\n 'function gauge_relative_weight(address gauge, uint timestamp) view returns (uint)',\n]);\n\nconst gaugeControllerCheckpointerInterface = new Interface([\n 'function gauge_relative_weight(address gauge) view returns (uint)',\n]);\n\nexport class GaugeControllerMulticallRepository {\n constructor(\n private multicall: Multicall,\n private gaugeControllerAddress: string,\n private gaugeControllerCheckpointerAddress?: string\n ) {}\n\n async getRelativeWeights(\n gaugeAddresses: string[],\n timestamp?: number\n ): Promise<{ [gaugeAddress: string]: number }> {\n const payload = gaugeAddresses.map((gaugeAddress) => {\n // The checkpointer only exists for mainnet, if the network is a testnet, it'll use the regular gauge controller\n if (this.gaugeControllerCheckpointerAddress && !timestamp) {\n return {\n target: this.gaugeControllerCheckpointerAddress,\n callData: gaugeControllerCheckpointerInterface.encodeFunctionData(\n 'gauge_relative_weight',\n [getAddress(gaugeAddress)]\n ),\n };\n }\n return {\n target: this.gaugeControllerAddress,\n callData: gaugeControllerInterface.encodeFunctionData(\n 'gauge_relative_weight',\n [getAddress(gaugeAddress), timestamp || Math.floor(Date.now() / 1000)]\n ),\n };\n });\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const weights = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseFloat(formatUnits(res[i], 18));\n return p;\n },\n {}\n );\n\n return weights;\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { Findable } from '@/types';\n\nexport abstract class AbstractSubgraphRepository\n implements Findable\n{\n protected abstract mapType(subgraphFragment: any): T;\n\n abstract query(args: any): Promise;\n\n async get(args: any): Promise {\n const result = await this.query(args);\n return result?.length > 0 ? result[0] : undefined;\n }\n\n async find(id: string): Promise {\n return this.get({ where: { id: id } });\n }\n\n async findBy(attribute: A, value: string): Promise {\n return this.get({ where: { [String(attribute)]: value } });\n }\n\n async findAllBy(\n attribute: A,\n value: string,\n first = 1000,\n skip = 0\n ): Promise {\n const args = {\n where: { [String(attribute)]: value },\n first: first,\n skip: skip,\n };\n return this.query(args);\n }\n}\n","import { Network } from '@/lib/constants/network';\nimport { AbstractSubgraphRepository } from './abstract-subgraph-repository';\nimport { createSubgraphClient, SubgraphClient } from '../subgraph';\n\nexport abstract class BalancerSubgraphRepository<\n T,\n A\n> extends AbstractSubgraphRepository {\n protected client: SubgraphClient;\n\n constructor(\n url: string,\n protected chainId: Network,\n protected blockHeight?: () => Promise\n ) {\n super();\n this.client = createSubgraphClient(url);\n }\n}\n","import { Network } from '@/lib/constants/network';\nimport { AbstractSubgraphRepository } from './abstract-subgraph-repository';\nimport { createGaugesClient, GaugesClient } from '../subgraph';\n\nexport abstract class GaugesSubgraphRepository<\n T,\n A\n> extends AbstractSubgraphRepository {\n protected client: GaugesClient;\n\n constructor(\n url: string,\n protected chainId: Network,\n protected blockHeight?: () => Promise\n ) {\n super();\n this.client = createGaugesClient(url);\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { GaugeShare, GaugeShareAttributes } from './types';\nimport { GaugesSubgraphRepository } from '@/modules/subgraph/repository';\nimport {\n SubgraphGaugeShareFragment,\n GaugeShare_OrderBy,\n OrderDirection,\n} from '@/modules/subgraph/generated/balancer-gauges';\n\nexport class GaugeSharesRepository extends GaugesSubgraphRepository<\n GaugeShare,\n GaugeShareAttributes\n> {\n async query(args: any): Promise {\n if (!args.orderBy) args.orderBy = GaugeShare_OrderBy.balance;\n if (!args.orderDirection) args.orderDirection = OrderDirection.desc;\n if (!args.block && this.blockHeight)\n args.block = { number: await this.blockHeight() };\n\n const { gaugeShares } = await this.client.GaugeShares(args);\n return gaugeShares.map(this.mapType);\n }\n\n mapType(subgraphGaugeShare: SubgraphGaugeShareFragment): GaugeShare {\n return {\n id: subgraphGaugeShare.id,\n balance: subgraphGaugeShare.balance,\n userAddress: subgraphGaugeShare.user?.id,\n gauge: {\n id: subgraphGaugeShare.gauge.id,\n poolId: subgraphGaugeShare.gauge.poolId || undefined,\n isKilled: subgraphGaugeShare.gauge.isKilled,\n totalSupply: subgraphGaugeShare.gauge.totalSupply,\n },\n };\n }\n\n async findByUser(\n userAddress: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(\n GaugeShareAttributes.UserAddress,\n userAddress,\n first,\n skip\n );\n }\n\n async findByGauge(\n gaugeId: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(GaugeShareAttributes.GaugeId, gaugeId, first, skip);\n }\n}\n","import { Multicall } from '@/contracts';\nimport { Interface } from '@ethersproject/abi';\nimport { formatUnits } from '@ethersproject/units';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport type { Network } from '@/types';\n\nconst liquidityGaugeV5Interface = new Interface([\n 'function totalSupply() view returns (uint)',\n 'function working_supply() view returns (uint)',\n 'function reward_count() view returns (uint)',\n 'function reward_tokens(uint rewardIndex) view returns (address)',\n 'function reward_data(address rewardToken) view returns (tuple(address token, address distributor, uint period_finish, uint rate, uint last_update, uint integral) data)',\n]);\n\nconst childLiquidityGaugeInterface = new Interface([\n 'function inflation_rate(uint currentWeekTimestamp) view returns (uint)',\n]);\n\nexport interface RewardData {\n token: string; // Always 0x0\n distributor: string;\n period_finish: BigNumber;\n rate: BigNumber; // per second\n last_update: BigNumber;\n integral: BigNumber; // sum accrued to date\n decimals?: number; // Provided by subgraph\n}\n\n/**\n * A lot of code to get liquidity gauge state via RPC multicall.\n * TODO: reseach helper contracts or extend subgraph\n */\nexport class LiquidityGaugesMulticallRepository {\n constructor(private multicall: Multicall, private chainId: Network) {}\n\n async getTotalSupplies(\n gaugeAddresses: string[]\n ): Promise<{ [gaugeAddress: string]: number }> {\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData('totalSupply', []),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n // Handle 0x\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n\n const totalSupplies = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseFloat(formatUnits(res0x[i], 18));\n return p;\n },\n {}\n );\n\n return totalSupplies;\n }\n\n async getWorkingSupplies(\n gaugeAddresses: string[]\n ): Promise<{ [gaugeAddress: string]: number }> {\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'working_supply',\n []\n ),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n // Handle 0x\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n\n const workingSupplies = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseFloat(formatUnits(res0x[i], 18));\n return p;\n },\n {}\n );\n\n return workingSupplies;\n }\n\n async getInflationRates(\n gaugeAddresses: string[]\n ): Promise<{ [gaugeAddress: string]: number }> {\n const currentWeek = Math.floor(Date.now() / 1000 / 604800);\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: childLiquidityGaugeInterface.encodeFunctionData(\n 'inflation_rate',\n [currentWeek]\n ),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n // Handle 0x\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n\n const inflationRates = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseFloat(formatUnits(res0x[i], 18));\n return p;\n },\n {}\n );\n\n return inflationRates;\n }\n\n async getRewardCounts(\n gaugeAddresses: string[]\n ): Promise<{ [gaugeAddress: string]: number }> {\n let rewardCounts;\n if (this.chainId == 1) {\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'reward_count',\n []\n ),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n // Handle 0x return values\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n\n rewardCounts = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseInt(res0x[i]);\n return p;\n },\n {}\n );\n } else {\n rewardCounts = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a) => {\n p[a] ||= 1;\n return p;\n },\n {}\n );\n }\n\n return rewardCounts;\n }\n\n async getRewardTokens(\n gaugeAddresses: string[],\n passingRewardCounts?: { [gaugeAddress: string]: number }\n ): Promise<{ [gaugeAddress: string]: string[] }> {\n const rewardCounts =\n passingRewardCounts || (await this.getRewardCounts(gaugeAddresses));\n const gaugesWithRewards = gaugeAddresses.filter(\n (gaugeAddress) => rewardCounts[gaugeAddress] > 0\n );\n const startIndexes = [0];\n const payload = gaugesWithRewards\n .map((gaugeAddress, gaugeIndex) => {\n const calls = [];\n for (let i = 0; i < rewardCounts[gaugeAddress]; i++) {\n calls.push({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'reward_tokens',\n [i]\n ),\n });\n }\n startIndexes[gaugeIndex + 1] =\n startIndexes[gaugeIndex] + rewardCounts[gaugeAddress];\n return calls;\n })\n .flat();\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const rewardTokens = gaugesWithRewards.reduce(\n (p: { [key: string]: string[] }, a, i) => {\n const start = startIndexes[i];\n const end = startIndexes[i + 1];\n const tokens: string[] = [];\n for (let i = start; i < end; i++) {\n tokens.push(\n liquidityGaugeV5Interface.decodeFunctionResult(\n 'reward_tokens',\n res[i]\n )[0]\n );\n }\n p[a] ||= tokens;\n return p;\n },\n {}\n );\n\n return rewardTokens;\n }\n\n async getRewardData(\n gaugeAddresses: string[],\n passingRewardTokens?: { [gaugeAddress: string]: string[] }\n ): Promise<{\n [gaugeAddress: string]: { [rewardTokenAddress: string]: RewardData };\n }> {\n const rewardTokens =\n passingRewardTokens || (await this.getRewardTokens(gaugeAddresses));\n\n const startIndexes = [0];\n const payload = Object.keys(rewardTokens)\n .map((gaugeAddress, gaugeIndex) => {\n const calls = [];\n for (let i = 0; i < rewardTokens[gaugeAddress].length; i++) {\n calls.push({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'reward_data',\n [rewardTokens[gaugeAddress][i]]\n ),\n });\n }\n startIndexes[gaugeIndex + 1] =\n startIndexes[gaugeIndex] + rewardTokens[gaugeAddress].length;\n return calls;\n })\n .flat();\n const [, res] = (await this.multicall.callStatic.aggregate(payload)) as [\n unknown,\n string[]\n ];\n const decoded = res.map(\n (r) => liquidityGaugeV5Interface.decodeFunctionResult('reward_data', r)[0]\n );\n\n const rewardData = Object.keys(rewardTokens).reduce(\n (p: { [key: string]: { [key: string]: RewardData } }, a, i) => {\n const start = startIndexes[i];\n const data = rewardTokens[a].reduce(\n (d: { [key: string]: RewardData }, t, x) => {\n d[t] ||= decoded[start + x] as RewardData;\n return d;\n },\n {}\n );\n p[a] ||= data;\n return p;\n },\n {}\n );\n\n return rewardData;\n }\n}\n","import { Findable } from '../types';\nimport {\n createGaugesClient,\n GaugesClient,\n SubgraphLiquidityGauge,\n} from '@/modules/subgraph/subgraph';\n\n/**\n * Access liquidity gauges indexed by subgraph.\n * Because we have ~100 gauges to save on repeated http calls we cache all results as `gauges` on an instance.\n * Balancer's subgraph URL: https://thegraph.com/hosted-service/subgraph/balancer-labs/balancer-gauges\n */\nexport class LiquidityGaugesSubgraphRepository\n implements Findable\n{\n private client: GaugesClient;\n public gauges: SubgraphLiquidityGauge[] = [];\n\n constructor(url: string) {\n this.client = createGaugesClient(url);\n }\n\n async fetch(): Promise {\n console.time('fetching liquidity gauges');\n const queryResult = await this.client.Pools({\n first: 1000,\n where: {\n preferentialGauge_not: null,\n },\n });\n const qauges = queryResult.pools.map((pool) => pool.preferentialGauge);\n // TODO: optionally convert subgraph type to sdk internal type\n this.gauges = qauges as SubgraphLiquidityGauge[];\n\n console.timeEnd('fetching liquidity gauges');\n return this.gauges;\n }\n\n async find(id: string): Promise {\n if (this.gauges.length == 0) {\n await this.fetch();\n }\n\n return this.gauges.find((gauge) => gauge.id == id);\n }\n\n async findBy(\n param: string,\n value: string\n ): Promise {\n if (this.gauges.length == 0) {\n await this.fetch();\n }\n\n if (param == 'id') {\n return this.find(value);\n } else if (param == 'poolId') {\n return this.gauges.find((gauge) => gauge.poolId == value);\n } else if (param == 'poolAddress') {\n return this.gauges.find((gauge) => gauge.poolAddress == value);\n } else {\n throw `search by ${param} not implemented`;\n }\n }\n}\n","import { GaugeControllerMulticallRepository } from '../gauge-controller/multicall';\nimport { LiquidityGaugesMulticallRepository, RewardData } from './multicall';\nimport { LiquidityGaugesSubgraphRepository } from './subgraph';\nimport { parseUnits } from '@ethersproject/units';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport type {\n Maybe,\n SubgraphLiquidityGauge,\n} from '@/modules/subgraph/subgraph';\nimport type { Findable } from '../types';\nimport type { Network } from '@/types';\nimport { Multicall } from '@/contracts';\n\nexport interface LiquidityGauge {\n id: string;\n address: string;\n name: string;\n poolId?: Maybe;\n poolAddress: string;\n totalSupply: number;\n workingSupply: number;\n relativeWeight: number;\n rewardTokens?: { [tokenAddress: string]: RewardData };\n claimableTokens?: { [tokenAddress: string]: BigNumber };\n balInflationRate?: number;\n}\n\nexport class LiquidityGaugeSubgraphRPCProvider\n implements Findable\n{\n gaugeController?: GaugeControllerMulticallRepository;\n multicall: LiquidityGaugesMulticallRepository;\n subgraph: LiquidityGaugesSubgraphRepository;\n workingSupplies: { [gaugeAddress: string]: number } = {};\n relativeWeights: { [gaugeAddress: string]: number } = {};\n inflationRates: { [gaugeAddress: string]: number } = {};\n rewardData: {\n [gaugeAddress: string]: { [tokenAddress: string]: RewardData };\n } = {};\n gauges?: Promise;\n\n constructor(\n subgraphUrl: string,\n multicall: Multicall,\n gaugeControllerAddress: string,\n private chainId: Network,\n gaugeControllerCheckpointerAddress?: string\n ) {\n if (gaugeControllerAddress) {\n this.gaugeController = new GaugeControllerMulticallRepository(\n multicall,\n gaugeControllerAddress,\n gaugeControllerCheckpointerAddress\n );\n }\n this.multicall = new LiquidityGaugesMulticallRepository(multicall, chainId);\n this.subgraph = new LiquidityGaugesSubgraphRepository(subgraphUrl);\n }\n\n async fetch(): Promise {\n const gauges: SubgraphLiquidityGauge[] = await this.subgraph.fetch();\n const gaugeAddresses = gauges.map((g) => g.id);\n if (this.chainId == 1) {\n console.time('Fetching multicall.getWorkingSupplies');\n this.workingSupplies = await this.multicall.getWorkingSupplies(\n gaugeAddresses\n );\n console.timeEnd('Fetching multicall.getWorkingSupplies');\n } else {\n // Filter out gauges that are not from the factory supporting inflation rate\n // Safe to remove this once all gauges are migrated to the new factory\n const oldFactories = [\n '0x3b8ca519122cdd8efb272b0d3085453404b25bd0', // Polygon\n '0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2', // Arbitrum\n '0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647', // Optimism\n '0x809b79b53f18e9bc08a961ed4678b901ac93213a', // Gnosis\n ];\n\n const childGaugeAddresses = gauges\n .filter((g) => !oldFactories.includes(g.factory.id.toLowerCase()))\n .map((g) => g.id);\n\n if (childGaugeAddresses.length > 0) {\n console.time('Fetching multicall.inflationRates');\n this.inflationRates = await this.multicall.getInflationRates(\n childGaugeAddresses\n );\n console.timeEnd('Fetching multicall.inflationRates');\n console.time('Fetching multicall.getWorkingSupplies');\n this.workingSupplies = await this.multicall.getWorkingSupplies(\n childGaugeAddresses\n );\n console.timeEnd('Fetching multicall.getWorkingSupplies');\n }\n }\n if (this.gaugeController) {\n console.time('Fetching gaugeController.getRelativeWeights');\n this.relativeWeights = await this.gaugeController.getRelativeWeights(\n gaugeAddresses\n );\n console.timeEnd('Fetching gaugeController.getRelativeWeights');\n }\n\n // Kept as a potential fallback for getting rewardData from RPC\n // this.rewardData = await this.multicall.getRewardData(\n // gaugeAddresses //,\n // // rewardTokens\n // );\n\n // Reward data was made available from subgraph, keeping it separate for potential RPC fallback\n this.rewardData = gauges.reduce(\n (r: { [key: string]: { [key: string]: RewardData } }, g) => {\n r[g.id] ||= g.tokens\n ? Object.fromEntries(\n g.tokens.map((t) => [\n t.id.split('-')[0],\n {\n distributor: '',\n last_update: BigNumber.from(0),\n integral: BigNumber.from(0),\n token: t.id.split('-')[0],\n decimals: t.decimals,\n rate: parseUnits(t.rate || '0', t.decimals),\n period_finish: BigNumber.from(\n (t.periodFinish as unknown as string) || '0'\n ),\n },\n ])\n )\n : {};\n\n return r;\n },\n {}\n );\n\n return gauges.map(this.compose.bind(this));\n }\n\n async find(id: string): Promise {\n if (!this.gauges) {\n this.gauges = this.fetch();\n }\n\n return (await this.gauges).find((g) => g.id == id);\n }\n\n async findBy(\n attribute: string,\n value: string\n ): Promise {\n if (!this.gauges) {\n this.gauges = this.fetch();\n }\n\n let gauge: LiquidityGauge | undefined;\n if (attribute == 'id') {\n return this.find(value);\n } else if (attribute == 'address') {\n return this.find(value);\n } else if (attribute == 'poolId') {\n gauge = (await this.gauges).find((g) => g.poolId == value);\n } else if (attribute == 'poolAddress') {\n gauge = (await this.gauges).find((g) => g.poolAddress == value);\n } else {\n throw `search by ${attribute} not implemented`;\n }\n\n return gauge;\n }\n\n private compose(subgraphGauge: SubgraphLiquidityGauge) {\n return {\n id: subgraphGauge.id,\n address: subgraphGauge.id,\n name: subgraphGauge.symbol,\n poolId: subgraphGauge.poolId,\n poolAddress: subgraphGauge.poolAddress,\n totalSupply: parseFloat(subgraphGauge.totalSupply),\n workingSupply: this.workingSupplies[subgraphGauge.id],\n relativeWeight: this.relativeWeights[subgraphGauge.id],\n rewardTokens: this.rewardData[subgraphGauge.id],\n balInflationRate: this.inflationRates[subgraphGauge.id],\n };\n }\n}\n","import axios from 'axios';\nimport { jsonToGraphQLQuery } from 'json-to-graphql-query';\n\nexport default class BalancerAPIClient {\n constructor(private readonly url: string, private readonly apiKey: string) {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public async get(query: unknown): Promise {\n try {\n const payload = this.toPayload(query);\n const { data } = await axios.post(this.url, payload, {\n headers: {\n 'x-api-key': this.apiKey,\n },\n });\n if (data.errors) {\n throw new Error(\n data.errors.map((error: Error) => error.message).join(',')\n );\n }\n return data.data;\n } catch (error) {\n console.error(error);\n throw error;\n }\n\n return [];\n }\n\n public toPayload(query: unknown): unknown {\n return JSON.stringify({ query: jsonToGraphQLQuery({ query }) });\n }\n}\n","import { Findable } from '../types';\nimport { PoolAttribute, PoolsRepositoryFetchOptions } from './types';\nimport { GraphQLQuery, Pool } from '@/types';\nimport BalancerAPIClient from '@/modules/api/balancer-api.client';\nimport {\n GraphQLArgsBuilder,\n BalancerAPIArgsFormatter,\n} from '@/lib/graphql/args-builder';\nimport { GraphQLArgs } from '@/lib/graphql/types';\n\ninterface PoolsBalancerAPIOptions {\n url: string;\n apiKey: string;\n query?: GraphQLQuery;\n}\n\nconst MAX_POOLS_PER_REQUEST = 1000;\nconst DEFAULT_SKIP = 0;\nconst DEFAULT_FIRST = 10;\nconst CHECK_TIMEOUT_SECONDS = 10;\nconst CHECK_INTERVAL_MS = 10;\nconst MAX_CHECKS = (CHECK_TIMEOUT_SECONDS * 1000) / CHECK_INTERVAL_MS;\n\nfunction timeout(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Access pools using the Balancer GraphQL Api.\n *\n * Balancer's API URL: https://api.balancer.fi/query/\n */\nexport class PoolsBalancerAPIRepository\n implements Findable\n{\n private client: BalancerAPIClient;\n public pools: Pool[] = [];\n public skip = 0; // Keep track of how many pools to skip on next fetch, so this functions similar to subgraph repository.\n public nextToken: string | undefined | null; // A token to pass to the next query to retrieve the next page of results. Undefined initially, null when there are no more results.\n private query: GraphQLQuery;\n private hasFetched = false;\n private isFetching = false;\n\n constructor(options: PoolsBalancerAPIOptions) {\n this.client = new BalancerAPIClient(options.url, options.apiKey);\n\n const defaultArgs: GraphQLArgs = {\n chainId: 1,\n orderBy: 'totalLiquidity',\n orderDirection: 'desc',\n where: {\n swapEnabled: {\n eq: true,\n },\n totalShares: {\n gt: 0.05,\n },\n },\n };\n\n const defaultAttributes = {\n id: true,\n address: true,\n };\n\n this.query = {\n args: Object.assign({}, options.query?.args || defaultArgs),\n attrs: Object.assign({}, options.query?.attrs || defaultAttributes),\n };\n\n // skip is not a valid argument for the Balancer API, it uses nextToken\n delete this.query.args.skip;\n }\n\n private fetchFromCache(first: number, skip: number): Pool[] {\n const pools = this.pools.slice(skip, first + skip);\n return pools;\n }\n\n async fetch(options?: PoolsRepositoryFetchOptions): Promise {\n const first = options?.first || DEFAULT_FIRST;\n const skip = options?.skip || DEFAULT_SKIP;\n\n if (!this.hasFetched) {\n this.fetchAll(options);\n }\n await this.awaitEnoughPoolsFetched(first, skip);\n return this.fetchFromCache(first, skip);\n }\n\n // Fetches all pools from the API in a loop and saves them to the cache.\n async fetchAll(options?: PoolsRepositoryFetchOptions): Promise {\n this.isFetching = true;\n this.hasFetched = true;\n\n if (this.nextToken) {\n this.query.args.nextToken = this.nextToken;\n }\n\n this.query.args.first = MAX_POOLS_PER_REQUEST;\n const formattedArgs = new GraphQLArgsBuilder(this.query.args).format(\n new BalancerAPIArgsFormatter()\n );\n\n const attrs = this.query.attrs;\n attrs.nextToken = true;\n\n const formattedQuery = {\n pools: {\n __args: formattedArgs,\n ...attrs,\n },\n };\n\n const apiResponse = await this.client.get(formattedQuery);\n const apiResponseData = apiResponse.pools;\n\n this.nextToken = apiResponseData.nextToken;\n this.pools = this.pools.concat(apiResponseData.pools.map(this.format));\n\n if (this.nextToken) return await this.fetchAll(options);\n\n this.isFetching = false;\n }\n\n // A function that waits until enough pools have been loaded into the cache\n // or fetching has finished. Used so that all pools can be fetched in the\n // background, while fetch returns the first results to the user quickly.\n async awaitEnoughPoolsFetched(first: number, skip: number): Promise {\n for (let totalChecks = 0; totalChecks < MAX_CHECKS; totalChecks++) {\n if (this.pools.length > first + skip) {\n return;\n }\n if (!this.isFetching) {\n return;\n }\n await timeout(CHECK_INTERVAL_MS);\n }\n\n return;\n }\n\n async find(id: string): Promise {\n if (this.pools.length == 0) {\n await this.fetch();\n }\n\n return this.findBy('id', id);\n }\n\n async findBy(param: PoolAttribute, value: string): Promise {\n if (this.pools.length == 0) {\n await this.fetch();\n }\n\n const pool = this.pools.find((pool) => pool[param] == value);\n if (pool) {\n return this.format(pool);\n }\n }\n\n /** Fixes any formatting issues from the subgraph\n * - GraphQL can't store a map so pool.apr.[rewardAprs/tokenAprs].breakdown\n * is JSON data that needs to be parsed so they match the Pool type correctly.\n */\n private format(pool: Pool): Pool {\n if (pool.apr?.rewardAprs.breakdown) {\n // GraphQL can't store this as a map so it's JSON that we must parse\n const rewardsBreakdown = JSON.parse(\n pool.apr?.rewardAprs.breakdown as unknown as string\n );\n pool.apr.rewardAprs.breakdown = rewardsBreakdown;\n }\n if (pool.apr?.tokenAprs.breakdown) {\n // GraphQL can't store this as a map so it's JSON that we must parse\n const tokenAprsBreakdown = JSON.parse(\n pool.apr?.tokenAprs.breakdown as unknown as string\n );\n pool.apr.tokenAprs.breakdown = tokenAprsBreakdown;\n }\n\n return pool;\n }\n}\n","import { Findable } from '../types';\nimport { Pool } from '@/types';\nimport {\n PoolAttribute,\n PoolRepository,\n PoolsFallbackRepositoryOptions,\n PoolsRepositoryFetchOptions,\n} from './types';\nimport { Logger } from '@/lib/utils/logger';\n\n/**\n * The fallback provider takes multiple PoolRepository's in an array and uses them in order\n * falling back to the next one if a request times out.\n *\n * This is useful for using the Balancer API while being able to fall back to the graph if it is down\n * to ensure Balancer is maximally decentralized.\n **/\nexport class PoolsFallbackRepository implements Findable {\n currentProviderIdx: number;\n timeout: number;\n\n constructor(\n private readonly providers: PoolRepository[],\n options: PoolsFallbackRepositoryOptions = {}\n ) {\n this.currentProviderIdx = 0;\n this.timeout = options.timeout || 10000;\n }\n\n async fetch(options?: PoolsRepositoryFetchOptions): Promise {\n return this.fallbackQuery('fetch', [options]);\n }\n\n get currentProvider(): PoolRepository | undefined {\n if (\n !this.providers.length ||\n this.currentProviderIdx >= this.providers.length\n ) {\n return;\n }\n\n return this.providers[this.currentProviderIdx];\n }\n\n async find(id: string): Promise {\n return this.fallbackQuery('find', [id]);\n }\n\n async findBy(\n attribute: PoolAttribute,\n value: string\n ): Promise {\n return this.fallbackQuery('findBy', [attribute, value]);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async fallbackQuery(func: string, args: unknown[]): Promise {\n if (this.currentProviderIdx >= this.providers.length) {\n throw new Error('No working providers found');\n }\n\n let result;\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const currentProvider = this.providers[this.currentProviderIdx] as any;\n result = await Promise.race([\n // eslint-disable-next-line prefer-spread\n currentProvider[func].apply(currentProvider, args),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error('timeout')), this.timeout)\n ),\n ]);\n } catch (e: unknown) {\n const message = (e as Error).message;\n if (message === 'timeout') {\n const logger = Logger.getInstance();\n logger.warn(\n 'Provider ' +\n this.currentProviderIdx +\n ' timed out, falling back to next provider'\n );\n } else {\n const logger = Logger.getInstance();\n logger.warn(\n `Provider ${this.currentProviderIdx} failed with error, falling back to next provider.`\n );\n logger.warn(message);\n }\n this.currentProviderIdx++;\n result = await this.fallbackQuery.call(this, func, args);\n }\n\n return result;\n }\n}\n","import { Findable, Pool, Searchable } from '@/types';\nimport { PoolAttribute } from './types';\n\nexport class PoolsStaticRepository\n implements Findable, Searchable\n{\n constructor(private pools: Pool[]) {}\n\n async find(id: string): Promise {\n return this.pools.find((pool) => {\n return pool.id.toLowerCase() === id.toLowerCase();\n });\n }\n\n async findBy(\n attribute: PoolAttribute,\n value: string\n ): Promise {\n return this.pools.find((pool) => {\n return pool[attribute] === value;\n });\n }\n\n async all(): Promise {\n return this.pools;\n }\n\n async where(filter: (pool: Pool) => boolean): Promise {\n return (await this.all()).filter(filter);\n }\n}\n","import { Pool, PoolType, PoolToken, SubPool } from '@/.';\nimport {\n SubgraphPool,\n SubgraphPoolTokenFragment,\n SubgraphSubPoolFragment,\n SubgraphSubPoolTokenFragment,\n} from '@/modules/subgraph/subgraph';\n\ninterface SubgraphSubPoolToken extends SubgraphSubPoolTokenFragment {\n token?: SubgraphSubPoolMeta | null;\n}\n\ninterface SubgraphSubPoolMeta {\n latestUSDPrice?: string | null;\n pool?: SubgraphSubPool | null;\n}\n\ninterface SubgraphSubPool extends SubgraphSubPoolFragment {\n tokens: SubgraphSubPoolToken[];\n}\n\nexport const mapType = (subgraphPool: SubgraphPool, chainId: number): Pool => {\n return {\n id: subgraphPool.id,\n name: subgraphPool.name || '',\n address: subgraphPool.address,\n chainId: chainId,\n poolType: subgraphPool.poolType as PoolType,\n poolTypeVersion: subgraphPool.poolTypeVersion || 1,\n swapFee: subgraphPool.swapFee,\n swapEnabled: subgraphPool.swapEnabled,\n protocolYieldFeeCache: subgraphPool.protocolYieldFeeCache || '0.5', // Default protocol yield fee\n protocolSwapFeeCache: subgraphPool.protocolSwapFeeCache || '0.5', // Default protocol swap fee\n amp: subgraphPool.amp ?? undefined,\n owner: subgraphPool.owner ?? undefined,\n factory: subgraphPool.factory ?? undefined,\n symbol: subgraphPool.symbol ?? undefined,\n tokens: (subgraphPool.tokens || []).map(mapToken),\n tokensList: subgraphPool.tokensList,\n tokenAddresses: (subgraphPool.tokens || []).map((t) => t.address),\n totalLiquidity: subgraphPool.totalLiquidity,\n totalShares: subgraphPool.totalShares,\n totalSwapFee: subgraphPool.totalSwapFee,\n totalSwapVolume: subgraphPool.totalSwapVolume,\n priceRateProviders: subgraphPool.priceRateProviders ?? undefined,\n // onchain: subgraphPool.onchain,\n createTime: subgraphPool.createTime,\n mainIndex: subgraphPool.mainIndex ?? undefined,\n wrappedIndex: subgraphPool.wrappedIndex ?? undefined,\n // mainTokens: subgraphPool.mainTokens,\n // wrappedTokens: subgraphPool.wrappedTokens,\n // unwrappedTokens: subgraphPool.unwrappedTokens,\n // isNew: subgraphPool.isNew,\n // volumeSnapshot: subgraphPool.volumeSnapshot,\n // feesSnapshot: subgraphPool.???, // Approximated last 24h fees\n // boost: subgraphPool.boost,\n totalWeight: subgraphPool.totalWeight || '1',\n lowerTarget: subgraphPool.lowerTarget ?? '0',\n upperTarget: subgraphPool.upperTarget ?? '0',\n isInRecoveryMode: subgraphPool.isInRecoveryMode ?? false,\n isPaused: subgraphPool.isPaused ?? false,\n };\n};\n\nconst mapToken = (subgraphToken: SubgraphPoolTokenFragment): PoolToken => {\n const subPoolInfo = mapSubPools(\n // need to typecast as the fragment is 3 layers deep while the type is infinite levels deep\n subgraphToken.token as SubgraphSubPoolMeta\n );\n return {\n ...subgraphToken,\n isExemptFromYieldProtocolFee:\n subgraphToken.isExemptFromYieldProtocolFee || false,\n token: subPoolInfo,\n };\n};\n\nconst mapSubPools = (metadata: SubgraphSubPoolMeta) => {\n let subPool: SubPool | null = null;\n\n if (metadata.pool) {\n subPool = {\n id: metadata.pool.id,\n address: metadata.pool.address,\n totalShares: metadata.pool.totalShares,\n poolType: metadata.pool.poolType as PoolType,\n mainIndex: metadata.pool.mainIndex || 0,\n };\n\n if (metadata?.pool.tokens) {\n subPool.tokens = metadata.pool.tokens.map(mapSubPoolToken);\n }\n }\n\n return {\n pool: subPool,\n latestUSDPrice: metadata.latestUSDPrice || undefined,\n };\n};\n\nconst mapSubPoolToken = (token: SubgraphSubPoolToken) => {\n return {\n address: token.address,\n decimals: token.decimals,\n symbol: token.symbol,\n balance: token.balance,\n priceRate: token.priceRate,\n weight: token.weight,\n isExemptFromYieldProtocolFee:\n token.isExemptFromYieldProtocolFee || undefined,\n token: token.token ? mapSubPools(token.token) : undefined,\n };\n};\n","import { Findable, Searchable } from '../types';\nimport {\n createSubgraphClient,\n SubgraphClient,\n Pool_OrderBy,\n OrderDirection,\n} from '@/modules/subgraph/subgraph';\nimport {\n GraphQLArgsBuilder,\n SubgraphArgsFormatter,\n} from '@/lib/graphql/args-builder';\nimport { GraphQLArgs } from '@/lib/graphql/types';\nimport { PoolAttribute, PoolsRepositoryFetchOptions } from './types';\nimport { GraphQLQuery, Pool } from '@/types';\nimport { Network } from '@/lib/constants/network';\nimport { PoolsQueryVariables } from '../../subgraph/subgraph';\nimport { mapType } from './subgraph-helpers';\nimport { Logger } from '@/lib/utils/logger';\n\ninterface PoolsSubgraphRepositoryOptions {\n url: string;\n chainId: Network;\n blockHeight?: () => Promise;\n query?: GraphQLQuery;\n}\n\n/**\n * Access pools using generated subgraph client.\n *\n * Balancer's subgraph URL: https://thegraph.com/hosted-service/subgraph/balancer-labs/balancer-v2\n */\nexport class PoolsSubgraphRepository\n implements Findable, Searchable\n{\n private client: SubgraphClient;\n private chainId: Network;\n private pools?: Promise;\n public skip = 0;\n private blockHeight: undefined | (() => Promise);\n private query: GraphQLQuery;\n\n /**\n * Repository with optional lazy loaded blockHeight\n *\n * @param url subgraph URL\n * @param chainId current network, needed for L2s logic\n * @param blockHeight lazy loading blockHeigh resolver\n */\n constructor(options: PoolsSubgraphRepositoryOptions) {\n this.client = createSubgraphClient(options.url);\n this.blockHeight = options.blockHeight;\n this.chainId = options.chainId;\n\n const defaultArgs: GraphQLArgs = {\n orderBy: Pool_OrderBy.TotalLiquidity,\n orderDirection: OrderDirection.Desc,\n where: {\n totalShares: {\n gt: 0.000000000001,\n },\n },\n };\n\n const args = Object.assign({}, options.query?.args || defaultArgs);\n const attrs = Object.assign({}, options.query?.attrs || {});\n\n this.query = {\n args,\n attrs,\n };\n }\n\n /**\n * We need a list of all the pools, for calculating APRs (nested pools), and for SOR (path finding).\n * All the pools are fetched on page load and cachced for speedy lookups.\n *\n * @returns Promise resolving to pools list\n */\n private async fetchAllPools(): Promise {\n const logger = Logger.getInstance();\n logger.time('fetching pools');\n\n if (this.blockHeight) {\n this.query.args.block = { number: await this.blockHeight() };\n }\n const formattedQuery = new GraphQLArgsBuilder(this.query.args).format(\n new SubgraphArgsFormatter()\n ) as PoolsQueryVariables;\n\n const { pool0, pool1000, pool2000 } = await this.client.AllPools(\n formattedQuery\n );\n logger.timeEnd('fetching pools');\n\n return [...pool0, ...pool1000, ...pool2000].map((pool) =>\n mapType(pool, this.chainId)\n );\n }\n\n async fetch(options?: PoolsRepositoryFetchOptions): Promise {\n const logger = Logger.getInstance();\n logger.time('fetching pools');\n if (options?.skip) {\n this.query.args.skip = options.skip;\n }\n if (this.blockHeight) {\n this.query.args.block = { number: await this.blockHeight() };\n }\n\n this.query.args.first = options?.first || this.query.args.first || 1000;\n\n const formattedQuery = new GraphQLArgsBuilder(this.query.args).format(\n new SubgraphArgsFormatter()\n ) as PoolsQueryVariables;\n\n const { pools } = await this.client.Pools(formattedQuery);\n\n this.skip = (options?.skip || 0) + pools.length;\n logger.timeEnd('fetching pools');\n\n return pools.map((pool) => mapType(pool, this.chainId));\n }\n\n async find(id: string): Promise {\n return await this.findBy('id', id);\n }\n\n async findBy(param: PoolAttribute, value: string): Promise {\n if (!this.pools) {\n this.pools = this.fetchAllPools();\n }\n\n return (await this.pools).find((pool) => pool[param] == value);\n\n // TODO: @Nma - Fetching pools outside of default query is causing a lot of requests\n // on a frontend, because results aren't cached anywhere.\n // For fetching pools directly from subgraph with custom queries please use the client not this repository.\n // Code below kept for reference, to be removed later.\n //\n // if (this.pools) {\n // return (await this.pools).find((p) => p[param] === value);\n // }\n // const { pools } = await this.client.Pools({\n // where: {\n // [param]: value,\n // swapEnabled: true,\n // totalShares_gt: '0.000000000001',\n // },\n // block: await this.block(),\n // });\n // const poolsTab: Pool[] = pools.map(this.mapType.bind(this));\n // return poolsTab.length > 0 ? poolsTab[0] : undefined;\n }\n\n async all(): Promise {\n if (!this.pools) {\n this.pools = this.fetchAllPools();\n }\n return this.pools;\n }\n\n async block(): Promise<{ number: number | undefined } | undefined> {\n return this.blockHeight ? { number: await this.blockHeight() } : undefined;\n }\n\n async where(filter: (pool: Pool) => boolean): Promise {\n if (!this.pools) {\n this.pools = this.fetchAllPools();\n }\n\n return (await this.pools).filter(filter);\n }\n}\n","import { Cacheable, Findable, Searchable } from '../types';\nimport { Provider } from '@ethersproject/providers';\nimport { PoolAttribute, PoolsRepositoryFetchOptions } from './types';\nimport { Pool } from '@/types';\nimport { getOnChainBalances } from '../../../modules/sor/pool-data/onChainData3';\nimport { PoolsSubgraphRepository } from './subgraph';\nimport { Logger } from '@/lib/utils/logger';\n\ninterface PoolsSubgraphOnChainRepositoryOptions {\n provider: Provider;\n multicall: string;\n vault: string;\n}\n\n/**\n * Access pools using generated subgraph client and multicall.\n */\nexport class PoolsSubgraphOnChainRepository\n implements Findable, Searchable, Cacheable\n{\n private provider: Provider;\n private pools?: Promise;\n private multicall: string;\n private vault: string;\n public skip = 0;\n\n /**\n * Repository using multicall to get onchain data.\n *\n * @param poolsSubgraph subgraph repository\n * @param options options containing provider, multicall and vault addresses\n */\n constructor(\n private poolsSubgraph: PoolsSubgraphRepository,\n options: PoolsSubgraphOnChainRepositoryOptions,\n private readonly poolsToIgnore: string[] | undefined,\n private batchSize?: number\n ) {\n this.provider = options.provider;\n this.multicall = options.multicall;\n this.vault = options.vault;\n }\n\n private filterPools(pools: Pool[]): Pool[] {\n const filteredPools = pools.filter((p) => {\n if (p.swapEnabled === false) return false;\n if (!this.poolsToIgnore) return true;\n const index = this.poolsToIgnore.findIndex(\n (id) => id.toLowerCase() === p.id.toLowerCase()\n );\n return index === -1;\n });\n return filteredPools;\n }\n\n /**\n * We need a list of all the pools, for calculating APRs (nested pools), and for SOR (path finding).\n * All the pools are fetched on page load and cachced for speedy lookups.\n *\n * @returns Promise resolving to pools list\n */\n private async fetchDefault(): Promise {\n const pools = await this.poolsSubgraph.all();\n const filteredPools = this.filterPools(pools);\n\n const logger = Logger.getInstance();\n logger.time(`fetching onchain ${filteredPools.length} pools`);\n\n const onchainPools = await getOnChainBalances(\n filteredPools,\n this.multicall,\n this.vault,\n this.provider,\n this.batchSize\n );\n\n logger.timeEnd(`fetching onchain ${filteredPools.length} pools`);\n\n return onchainPools;\n }\n\n async fetch(options?: PoolsRepositoryFetchOptions): Promise {\n const pools = await this.poolsSubgraph.fetch(options);\n const filteredPools = this.filterPools(pools);\n\n const logger = Logger.getInstance();\n logger.time(`fetching onchain ${filteredPools.length} pools`);\n\n const onchainPools = await getOnChainBalances(\n filteredPools,\n this.multicall,\n this.vault,\n this.provider,\n this.batchSize\n );\n\n logger.timeEnd(`fetching onchain ${filteredPools.length} pools`);\n\n return onchainPools;\n }\n\n async find(id: string, forceRefresh = false): Promise {\n return await this.findBy('id', id, forceRefresh);\n }\n\n async findBy(\n param: PoolAttribute,\n value: string,\n forceRefresh = false\n ): Promise {\n if (!this.pools || forceRefresh) {\n this.pools = this.fetchDefault();\n }\n\n return (await this.pools).find((pool) => pool[param] == value);\n }\n\n async all(): Promise {\n if (!this.pools) {\n this.pools = this.fetchDefault();\n }\n return this.pools;\n }\n\n async where(filter: (pool: Pool) => boolean): Promise {\n if (!this.pools) {\n this.pools = this.fetchDefault();\n }\n\n return (await this.pools).filter(filter);\n }\n\n async refresh(pool: Pool): Promise {\n const onchainPool = await getOnChainBalances(\n [pool],\n this.multicall,\n this.vault,\n this.provider\n );\n\n // If the pool is already cached, replace it with the new one\n if (this.pools) {\n const index = (await this.pools).findIndex(\n (p) => p.address === pool.address\n );\n if (index !== -1) {\n this.pools = Promise.resolve([\n ...(await this.pools).splice(index, 1),\n onchainPool[0],\n ]);\n }\n }\n\n return onchainPool[0];\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { GaugesSubgraphRepository } from '@/modules/subgraph/repository';\nimport { PoolGauges, PoolGaugesAttributes } from './types';\n\nexport class PoolGaugesRepository extends GaugesSubgraphRepository<\n PoolGauges,\n PoolGaugesAttributes\n> {\n async query(args: any): Promise {\n if (!args.block && this.blockHeight)\n args.block = { number: await this.blockHeight() };\n\n const { pools } = await this.client.PoolGauges(args);\n return pools.map(this.mapType);\n }\n\n mapType(fragment: any): PoolGauges {\n return fragment as PoolGauges;\n }\n}\n","export enum PoolJoinExitAttributes {\n Pool = 'pool',\n Sender = 'sender',\n}\n\nexport interface PoolJoinExit {\n id: string;\n userAddress: string;\n poolId: string;\n timestamp: number;\n type: string;\n amounts: string[];\n tokens: string[];\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { PoolJoinExit, PoolJoinExitAttributes } from './types';\nimport { BalancerSubgraphRepository } from '@/modules/subgraph/repository';\nimport {\n JoinExit_OrderBy,\n OrderDirection,\n SubgraphJoinExitFragment,\n} from '@/modules/subgraph/generated/balancer-subgraph-types';\n\nexport class PoolJoinExitRepository extends BalancerSubgraphRepository<\n PoolJoinExit,\n PoolJoinExitAttributes\n> {\n async query(args: any): Promise {\n if (!args.orderBy) args.orderBy = JoinExit_OrderBy.Timestamp;\n if (!args.orderDirection) args.orderDirection = OrderDirection.Asc;\n if (!args.block && this.blockHeight)\n args.block = { number: await this.blockHeight() };\n\n const { joinExits } = await this.client.JoinExits(args);\n return joinExits.map(this.mapType);\n }\n\n mapType(item: SubgraphJoinExitFragment): PoolJoinExit {\n return {\n id: item.id,\n userAddress: item.user.id,\n poolId: item.pool.id,\n timestamp: item.timestamp,\n type: item.type,\n amounts: item.amounts,\n tokens: item.pool.tokensList,\n };\n }\n\n async findByUser(\n sender: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(PoolJoinExitAttributes.Sender, sender, first, skip);\n }\n\n async findJoins(sender: string, pool: string): Promise {\n return this.query({ where: { sender, pool, type: 'Join' } });\n }\n\n async findExits(sender: string, pool: string): Promise {\n return this.query({ where: { sender, pool, type: 'Exit' } });\n }\n\n async findByPool(\n poolId: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(PoolJoinExitAttributes.Pool, poolId, first, skip);\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { PoolShare, PoolShareAttributes } from './types';\nimport { BalancerSubgraphRepository } from '@/modules/subgraph/repository';\nimport {\n SubgraphPoolShareFragment,\n PoolShare_OrderBy,\n OrderDirection,\n} from '@/modules/subgraph/generated/balancer-subgraph-types';\n\nexport class PoolSharesRepository extends BalancerSubgraphRepository<\n PoolShare,\n PoolShareAttributes\n> {\n async query(args: any): Promise {\n if (!args.orderBy) args.orderBy = PoolShare_OrderBy.Balance;\n if (!args.orderDirection) args.orderDirection = OrderDirection.Desc;\n if (!args.block && this.blockHeight)\n args.block = { number: await this.blockHeight() };\n\n const { poolShares } = await this.client.PoolShares(args);\n return poolShares.map(this.mapType);\n }\n\n mapType(subgraphPoolShare: SubgraphPoolShareFragment): PoolShare {\n return {\n id: subgraphPoolShare.id,\n userAddress: subgraphPoolShare.userAddress.id,\n poolId: subgraphPoolShare.poolId.id,\n balance: subgraphPoolShare.balance,\n };\n }\n\n async findByUser(\n userAddress: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(\n PoolShareAttributes.UserAddress,\n userAddress,\n first,\n skip\n );\n }\n\n async findByPool(\n poolId: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(PoolShareAttributes.PoolId, poolId, first, skip);\n }\n}\n","import type { Findable, Token } from '@/types';\nimport type { TokenAttribute } from './types';\n\nexport class StaticTokenProvider implements Findable {\n constructor(private tokens: Token[]) {}\n\n async find(address: string): Promise {\n return this.tokens.find((token) => {\n return token.address.toLowerCase() === address.toLowerCase();\n });\n }\n\n async findBy(\n attribute: TokenAttribute,\n value: string\n ): Promise {\n return this.tokens.find((token) => {\n return token[attribute] === value;\n });\n }\n}\n","import { Findable, Price, TokenPrices } from '@/types';\n\nexport class StaticTokenPriceProvider implements Findable {\n tokenPrices: TokenPrices;\n constructor(tokenPrices: TokenPrices) {\n this.tokenPrices = Object.fromEntries(\n Object.entries(tokenPrices).map(([address, price]) => {\n return [address.toLowerCase(), price];\n })\n );\n }\n\n async find(address: string): Promise {\n const lowercaseAddress = address.toLowerCase();\n const price = this.tokenPrices[lowercaseAddress];\n if (!price) return;\n return price;\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute != 'address') {\n return undefined;\n }\n\n return this.find(value);\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport {\n CoingeckoConfig,\n Findable,\n Network,\n Price,\n TokenPrices,\n} from '@/types';\nimport axios, { AxiosError } from 'axios';\nimport { TOKENS } from '@/lib/constants/tokens';\nimport { Debouncer, tokenAddressForPricing } from '@/lib/utils';\nimport {\n getCoingeckoApiBaseUrl,\n getCoingeckoApiKeyHeaderName,\n} from '@/lib/utils/coingecko-api';\n\n/**\n * Simple coingecko price source implementation. Configurable by network and token addresses.\n */\nexport class CoingeckoPriceRepository implements Findable {\n prices: { [key: string]: Promise } = {};\n nativePrice?: Promise;\n private readonly url: string;\n private readonly urlNative: string;\n private readonly coingeckoApiKeyHeaderName: string;\n baseTokenAddresses: string[];\n debouncer: Debouncer;\n apiKey?: string;\n\n constructor(\n tokenAddresses: string[],\n private chainId: Network = 1,\n coingecko?: CoingeckoConfig\n ) {\n this.baseTokenAddresses = tokenAddresses.map(tokenAddressForPricing);\n this.url = `${getCoingeckoApiBaseUrl(\n coingecko?.isDemoApiKey\n )}simple/token_price/${this.platform(chainId)}?vs_currencies=usd,eth`;\n this.urlNative = `${getCoingeckoApiBaseUrl(\n coingecko?.isDemoApiKey\n )}simple/price/?vs_currencies=eth,usd&ids=`;\n this.coingeckoApiKeyHeaderName = getCoingeckoApiKeyHeaderName(\n coingecko?.isDemoApiKey\n );\n this.apiKey = coingecko?.coingeckoApiKey;\n this.debouncer = new Debouncer(\n this.fetch.bind(this),\n 200,\n coingecko?.tokensPerPriceRequest ?? 10\n );\n }\n\n private async fetch(\n addresses: string[],\n { signal }: { signal?: AbortSignal } = {}\n ): Promise {\n try {\n const { data } = await axios.get(\n `${this.url}&contract_addresses=${addresses.join(',')}`,\n {\n signal,\n headers: {\n [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '',\n },\n }\n );\n return data;\n } catch (error) {\n const message = ['Error fetching token prices from coingecko'];\n if ((error as AxiosError).isAxiosError) {\n if ((error as AxiosError).response?.status !== undefined) {\n message.push(`with status ${(error as AxiosError).response?.status}`);\n }\n } else {\n message.push(error as string);\n }\n return Promise.reject(message.join(' '));\n }\n }\n\n private fetchNative({\n signal,\n }: { signal?: AbortSignal } = {}): Promise {\n console.time(`fetching coingecko for native token`);\n enum Assets {\n ETH = 'ethereum',\n MATIC = 'matic-network',\n XDAI = 'xdai',\n }\n let assetId: Assets = Assets.ETH;\n if (this.chainId === 137) assetId = Assets.MATIC;\n if (this.chainId === 100) assetId = Assets.XDAI;\n return axios\n .get<{ [key in Assets]: Price }>(`${this.urlNative}${assetId}`, {\n signal,\n headers: {\n [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '',\n },\n })\n .then(({ data }) => {\n return data[assetId];\n })\n .catch((error) => {\n const message = ['Error fetching native token from coingecko'];\n if (error.isAxiosError) {\n if (error.response?.status) {\n message.push(`with status ${error.response.status}`);\n }\n } else {\n message.push(error);\n }\n return Promise.reject(message.join(' '));\n })\n .finally(() => {\n console.timeEnd(`fetching coingecko for native token`);\n });\n }\n\n find(inputAddress: string): Promise {\n const address = tokenAddressForPricing(inputAddress, this.chainId);\n if (!this.prices[address]) {\n // Make initial call with all the tokens we want to preload\n if (Object.keys(this.prices).length === 0) {\n for (const baseAddress of this.baseTokenAddresses) {\n this.prices[baseAddress] = this.debouncer\n .fetch(baseAddress)\n .then((prices) => prices[baseAddress]);\n }\n }\n\n // Handle native asset special case\n if (\n address === TOKENS(this.chainId).Addresses.nativeAsset.toLowerCase()\n ) {\n if (!this.nativePrice) {\n this.prices[address] = this.fetchNative();\n }\n\n return this.prices[address];\n }\n\n this.prices[address] = this.debouncer\n .fetch(address)\n .then((prices) => prices[address]);\n }\n\n return this.prices[address];\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute != 'address') {\n return undefined;\n }\n\n return this.find(value);\n }\n\n private platform(chainId: number): string {\n switch (chainId) {\n case 1:\n case 5:\n case 42:\n case 31337:\n return 'ethereum';\n case 100:\n return 'xdai';\n case 137:\n return 'polygon-pos';\n case 250:\n return 'fantom';\n case 1101:\n return 'polygon-zkevm';\n case 8453:\n return 'base';\n case 42161:\n return 'arbitrum-one';\n case 43114:\n return 'avalanche';\n }\n\n return '2';\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport {\n Price,\n Findable,\n TokenPrices,\n Network,\n HistoricalPrices,\n CoingeckoConfig,\n} from '@/types';\nimport axios, { AxiosError } from 'axios';\nimport { tokenAddressForPricing } from '@/lib/utils';\nimport {\n getCoingeckoApiBaseUrl,\n getCoingeckoApiKeyHeaderName,\n} from '@/lib/utils/coingecko-api';\n\nconst HOUR = 60 * 60;\n\n/**\n * Simple coingecko price source implementation. Configurable by network and token addresses.\n */\nexport class CoingeckoHistoricalPriceRepository implements Findable {\n prices: TokenPrices = {};\n nativePrice?: Promise;\n private readonly urlBase: string;\n private readonly apiKey?: string;\n private readonly coingeckoApiKeyHeaderName: string;\n constructor(private chainId: Network = 1, coingecko?: CoingeckoConfig) {\n this.urlBase = `${getCoingeckoApiBaseUrl(\n coingecko?.isDemoApiKey\n )}coins/${this.platform(\n chainId\n )}/contract/%TOKEN_ADDRESS%/market_chart/range?vs_currency=usd`;\n this.apiKey = coingecko?.coingeckoApiKey;\n this.coingeckoApiKeyHeaderName = getCoingeckoApiKeyHeaderName(\n coingecko?.isDemoApiKey\n );\n }\n\n private async fetch(\n address: string,\n timestamp: number,\n { signal }: { signal?: AbortSignal } = {}\n ): Promise {\n const url = this.urlRange(address, timestamp);\n console.time(`fetching coingecko historical for ${address}`);\n try {\n const { data } = await axios.get(url, {\n signal,\n headers: { [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '' },\n });\n console.timeEnd(`fetching coingecko historical for ${address}`);\n console.log(data);\n return data;\n } catch (error) {\n console.timeEnd(`fetching coingecko historical for ${address}`);\n if ((error as AxiosError).isAxiosError) {\n throw new Error(\n 'Error fetching historical token prices from coingecko - ' +\n (error as AxiosError).message +\n ' - ' +\n (error as AxiosError).response?.statusText\n );\n }\n throw new Error('Unknown Error: ' + error);\n }\n }\n\n /* eslint-disable @typescript-eslint/no-unused-vars */\n async find(address: string): Promise {\n throw `Historic price requires point-in-time timestamp, please use findBy(address, timestamp)`;\n }\n\n async findBy(\n inputAddress: string,\n timestamp: number\n ): Promise {\n const address = tokenAddressForPricing(inputAddress, this.chainId);\n const response = await this.fetch(address, timestamp);\n\n return {\n usd: `${response.prices[0][1]}`,\n };\n }\n\n private platform(chainId: number): string {\n switch (chainId) {\n case 1:\n case 5:\n case 42:\n case 31337:\n return 'ethereum';\n case 137:\n return 'polygon-pos';\n case 42161:\n return 'arbitrum-one';\n case 100:\n return 'xdai';\n }\n\n return '2';\n }\n\n private urlRange(address: string, timestamp: number): string {\n const range: { from: number; to: number } = {\n from: timestamp - HOUR,\n to: timestamp + HOUR,\n };\n return `${this.urlBase.replace('%TOKEN_ADDRESS%', address)}&from=${\n range.from\n }&to=${range.to}`;\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { Price, Findable, TokenPrices, Network } from '@/types';\nimport axios from 'axios';\nimport { Debouncer, tokenAddressForPricing } from '@/lib/utils';\n\ninterface SubgraphPricesResponse {\n data: {\n tokens: [\n {\n address: string;\n latestUSDPrice?: string;\n }\n ];\n };\n}\n\nexport class SubgraphPriceRepository implements Findable {\n prices: { [key: string]: Promise } = {};\n debouncer: Debouncer;\n\n constructor(private subgraphUrl: string, private chainId: Network = 1) {\n this.debouncer = new Debouncer(\n this.fetch.bind(this),\n 200\n );\n }\n\n private async fetch(\n addresses: string[],\n { signal }: { signal?: AbortSignal } = {}\n ): Promise {\n console.time(`fetching subgraph prices for ${addresses.length} tokens`);\n return axios\n .post(\n this.subgraphUrl,\n {\n variables: { addresses },\n query: `query($addresses: [String!]) {\n tokens(\n where: {\n id_in: $addresses\n }\n ) {\n address\n latestUSDPrice\n }\n }`,\n },\n { signal }\n )\n .then((response) => response.data.data)\n .then(({ tokens }) =>\n Object.fromEntries(\n tokens.map((token) => [\n token.address,\n { usd: token.latestUSDPrice || undefined },\n ])\n )\n )\n .finally(() => {\n console.timeEnd(\n `fetching subgraph prices for ${addresses.length} tokens`\n );\n });\n }\n\n async find(inputAddress: string): Promise {\n const address = tokenAddressForPricing(inputAddress, this.chainId);\n if (!this.prices[address]) {\n this.prices[address] = this.debouncer\n .fetch(address)\n .then((prices) => prices[address]);\n }\n\n return this.prices[address];\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute != 'address') {\n return undefined;\n }\n\n return this.find(value);\n }\n}\n","import type { Findable, Price } from '@/types';\nimport { IAaveRates } from './aave-rates';\nimport { Logger } from '@/lib/utils/logger';\n\nexport class TokenPriceProvider implements Findable {\n constructor(\n private coingeckoRepository: Findable,\n private subgraphRepository: Findable,\n private aaveRates: IAaveRates\n ) {}\n\n async find(address: string): Promise {\n let price;\n try {\n price = await this.coingeckoRepository.find(address);\n if (!price?.usd) {\n throw new Error('Price not found');\n }\n } catch (err) {\n const logger = Logger.getInstance();\n logger.warn(err as string);\n price = await this.subgraphRepository.find(address);\n }\n const rate = (await this.aaveRates.getRate(address)) || 1;\n if (price && price.usd) {\n return {\n ...price,\n usd: (parseFloat(price.usd) * rate).toString(),\n };\n } else {\n return price;\n }\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute === 'address') {\n return this.find(value);\n }\n throw `Token price search by ${attribute} not implemented`;\n }\n}\n","import type { Findable, Price } from '@/types';\nimport { IAaveRates } from './aave-rates';\n\nexport class HistoricalPriceProvider implements Findable {\n constructor(\n private coingeckoRepository: Findable,\n private aaveRates: IAaveRates\n ) {}\n\n /**\n * get the historical price at time of call\n *\n * @param address the token address\n */\n async find(address: string): Promise {\n return this.findBy(address, Math.floor(Date.now() / 1000));\n }\n\n /**\n * get the historical price at the given timestamp.\n *\n * @param address the token address\n * @param timestamp the UNIX timestamp\n * @private\n */\n async findBy(address: string, timestamp: number): Promise {\n const price = await this.coingeckoRepository.findBy(address, timestamp);\n const rate = (await this.aaveRates.getRate(address)) || 1;\n if (price && price.usd) {\n return {\n ...price,\n usd: (parseFloat(price.usd) * rate).toString(),\n };\n } else {\n return price;\n }\n }\n}\n","import { Contract } from '@ethersproject/contracts';\nimport { Provider } from '@ethersproject/providers';\n\nconst FeeDistributorAbi = [\n 'function claimTokens(address user, address[] tokens) returns (uint256[])',\n 'function claimToken(address user, address token) returns (uint256)',\n];\n\nexport const FeeDistributor = (address: string, provider: Provider): Contract =>\n new Contract(address, FeeDistributorAbi, provider);\n","import { TokenBalance } from '@/modules/claims/ClaimService';\nimport { FeeDistributor } from '@/modules/contracts/implementations/feeDistributor';\nimport { Multicall } from '@/contracts';\nimport { Interface } from '@ethersproject/abi';\nimport { getAddress } from '@ethersproject/address';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { Contract } from '@ethersproject/contracts';\nimport { Provider } from '@ethersproject/providers';\nimport { formatUnits } from '@ethersproject/units';\n\nexport interface FeeDistributorData {\n balAmount: number;\n bbAUsdAmount: number;\n veBalSupply: number;\n bbAUsdPrice: number;\n balAddress: string;\n}\n\nexport interface BaseFeeDistributor {\n multicallData: (ts: number) => Promise;\n getClaimableBalances(\n userAddress: string,\n claimableTokens: string[]\n ): Promise;\n claimBalances(userAddress: string, claimableTokens: string[]): string;\n}\n\nconst feeDistributorInterface = new Interface([\n 'function getTokensDistributedInWeek(address token, uint timestamp) view returns (uint)',\n 'function claimTokens(address user, address[] tokens) returns (uint256[])',\n 'function claimToken(address user, address token) returns (uint256)',\n]);\n\nconst veBalInterface = new Interface([\n 'function totalSupply() view returns (uint)',\n]);\n\n// const bbAUsdInterface = new Interface([\n// 'function getRate() view returns (uint)',\n// ]);\n\nexport class FeeDistributorRepository implements BaseFeeDistributor {\n feeDistributor: Contract;\n data?: FeeDistributorData;\n\n constructor(\n private multicall: Multicall,\n private feeDistributorAddress: string,\n private balAddress: string,\n private veBalAddress: string,\n private bbAUsdAddress: string,\n provider: Provider\n ) {\n this.feeDistributor = FeeDistributor(feeDistributorAddress, provider);\n }\n\n async fetch(timestamp: number): Promise {\n const previousWeek = this.getPreviousWeek(timestamp);\n const payload = [\n {\n target: this.feeDistributorAddress,\n callData: feeDistributorInterface.encodeFunctionData(\n 'getTokensDistributedInWeek',\n [getAddress(this.balAddress), previousWeek]\n ),\n },\n {\n target: this.feeDistributorAddress,\n callData: feeDistributorInterface.encodeFunctionData(\n 'getTokensDistributedInWeek',\n [getAddress(this.bbAUsdAddress), previousWeek]\n ),\n },\n {\n target: this.veBalAddress,\n callData: veBalInterface.encodeFunctionData('totalSupply', []),\n },\n // Removed while wrappers are broken\n // {\n // target: this.bbAUsdAddress,\n // callData: bbAUsdInterface.encodeFunctionData('getRate', []),\n // },\n ];\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const data = {\n balAmount: parseFloat(formatUnits(res[0], 18)),\n bbAUsdAmount: parseFloat(formatUnits(res[1], 18)),\n veBalSupply: parseFloat(formatUnits(res[2], 18)),\n // bbAUsdPrice: parseFloat(formatUnits(res[3], 18)),\n bbAUsdPrice: parseFloat('1.0'),\n balAddress: this.balAddress,\n };\n\n return data;\n }\n\n async multicallData(timestamp: number): Promise {\n if (!this.data) {\n this.data = await this.fetch(timestamp);\n }\n\n return this.data;\n }\n\n getPreviousWeek(fromTimestamp: number): number {\n const weeksToGoBack = 1;\n const midnight = new Date(fromTimestamp);\n midnight.setUTCHours(0);\n midnight.setUTCMinutes(0);\n midnight.setUTCSeconds(0);\n midnight.setUTCMilliseconds(0);\n\n let daysSinceThursday = midnight.getUTCDay() - 4;\n if (daysSinceThursday < 0) daysSinceThursday += 7;\n\n daysSinceThursday = daysSinceThursday + weeksToGoBack * 7;\n\n return Math.floor(midnight.getTime() / 1000) - daysSinceThursday * 86400;\n }\n\n async getClaimableBalances(\n userAddress: string,\n claimableTokens: string[]\n ): Promise {\n try {\n const amounts: BigNumber[] =\n await this.feeDistributor.callStatic.claimTokens(\n userAddress,\n claimableTokens\n );\n return this.extractTokenBalance(claimableTokens, amounts);\n } catch (e) {\n return {};\n }\n }\n\n claimBalances(userAddress: string, claimableTokens: string[]): string {\n return feeDistributorInterface.encodeFunctionData('claimTokens', [\n userAddress,\n claimableTokens,\n ]);\n }\n\n extractTokenBalance(\n claimableTokens: string[],\n amounts: (BigNumber | undefined | null)[]\n ): TokenBalance {\n return claimableTokens.reduce((tokens: TokenBalance, token, index) => {\n tokens[token] = (amounts[index] as BigNumber) ?? BigNumber.from(0);\n return tokens;\n }, {});\n }\n}\n","import { Interface } from '@ethersproject/abi';\nimport { Provider } from '@ethersproject/providers';\nimport { Contract } from '@ethersproject/contracts';\nimport { formatUnits } from '@ethersproject/units';\nimport { Findable } from '../types';\n\nconst vaultInterface = new Interface([\n 'function getProtocolFeesCollector() view returns (address)',\n]);\n\nconst protocolFeesCollectorInterface = new Interface([\n 'function getSwapFeePercentage() view returns (uint)',\n]);\n\n// Using singleton here, so subsequent calls will return the same promise\nlet swapFeePercentagePromise: Promise;\n\nexport class FeeCollectorRepository implements Findable {\n vault: Contract;\n swapFeePercentage?: number;\n\n constructor(vaultAddress: string, private provider: Provider) {\n this.vault = new Contract(vaultAddress, vaultInterface, this.provider);\n }\n\n async fetch(): Promise {\n const address = (await this.vault.getProtocolFeesCollector()) as string;\n\n const collector = new Contract(\n address,\n protocolFeesCollectorInterface,\n this.provider\n );\n const fees = (await collector.getSwapFeePercentage()) as string;\n\n return parseFloat(formatUnits(fees, 18));\n }\n\n async find(): Promise {\n if (!swapFeePercentagePromise) {\n swapFeePercentagePromise = this.fetch();\n }\n this.swapFeePercentage = await swapFeePercentagePromise;\n\n return this.swapFeePercentage;\n }\n\n async findBy(): Promise {\n return this.find();\n }\n}\n","// 0x97207B095e4D5C9a6e4cfbfcd2C3358E03B90c4A\n\nimport { Interface } from '@ethersproject/abi';\nimport { formatUnits } from '@ethersproject/units';\nimport { Multicall } from '@/contracts';\n\nconst iProtocolFeePercentagesProvider = new Interface([\n 'function getSwapFeePercentage() view returns (uint)',\n]);\n\nexport interface ProtocolFees {\n swapFee: number;\n yieldFee: number;\n}\n\n// Using singleton here, so subsequent calls will return the same promise\nlet feesPromise: Promise;\n\nexport class ProtocolFeesProvider {\n protocolFees?: ProtocolFees;\n\n constructor(\n private multicall: Multicall,\n private protocolFeePercentagesProviderAddress: string\n ) {}\n\n private async fetch(): Promise {\n const payload = [\n {\n target: this.protocolFeePercentagesProviderAddress,\n callData: iProtocolFeePercentagesProvider.encodeFunctionData(\n 'getFeeTypePercentage',\n [0]\n ),\n },\n {\n target: this.protocolFeePercentagesProviderAddress,\n callData: iProtocolFeePercentagesProvider.encodeFunctionData(\n 'getFeeTypePercentage',\n [2]\n ),\n },\n ];\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const fees = {\n swapFee: parseFloat(formatUnits(res[0], 18)),\n yieldFee: parseFloat(formatUnits(res[2], 18)),\n };\n\n return fees;\n }\n\n async getFees(): Promise {\n if (!feesPromise) {\n feesPromise = this.fetch();\n }\n this.protocolFees = await feesPromise;\n\n return this.protocolFees;\n }\n}\n","import axios from 'axios';\nimport { Findable } from '@/types';\nimport { Logger } from '@/lib/utils/logger';\n\nexport class TokenYieldsRepository implements Findable {\n private yields?: Promise<{ [address: string]: number }>;\n\n constructor(private url = 'https://yield-tokens.balancer.workers.dev/') {}\n\n async fetch(): Promise<{ [address: string]: number }> {\n let aprs = {};\n\n try {\n console.time(`fetching token yields`);\n const response = await axios.get(this.url);\n console.timeEnd(`fetching token yields`);\n\n aprs = response.data as {\n [key: string]: number;\n };\n } catch (error) {\n const logger = Logger.getInstance();\n logger.warn(`Failed to fetch yield tokens: ${error}`);\n }\n\n return aprs;\n }\n\n async find(address: string): Promise {\n const lc = address.toLocaleLowerCase();\n if (!this.yields) {\n this.yields = this.fetch();\n }\n\n return this.yields.then((r) => (r[lc] && r[lc] > 0 ? r[lc] : 0));\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute != 'address') {\n return 0;\n }\n\n return this.find(value);\n }\n}\n","import { Findable } from '../types';\nimport axios from 'axios';\n\nconst query = (timestamp: string) => `{\n blocks(first: 1, orderBy: timestamp, orderDirection: asc, where: { timestamp_gt: ${timestamp} }) {\n number\n }\n}`;\n\ninterface BlockNumberResponse {\n data: {\n blocks: [\n {\n number: string;\n }\n ];\n };\n}\n\nconst fetchBlockByTime = async (\n endpoint: string,\n timestamp: string\n): Promise => {\n const payload = {\n query: query(timestamp),\n };\n\n const response = await axios.post(endpoint, payload);\n\n const {\n data: { blocks },\n } = response.data as BlockNumberResponse;\n\n return parseInt(blocks[0].number);\n};\n\nexport class BlockNumberRepository implements Findable {\n blocks: { [ts: string]: Promise } = {};\n\n constructor(private endpoint: string) {}\n\n async find(from: string): Promise {\n if (from == 'dayAgo') {\n const dayAgo = `${Math.floor(Date.now() / 1000) - 86400}`;\n if (!this.blocks[dayAgo]) {\n this.blocks = {\n ...this.blocks,\n [dayAgo]: fetchBlockByTime(this.endpoint, dayAgo),\n };\n }\n return this.blocks[dayAgo];\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async findBy(attribute = '', value = ''): Promise {\n return;\n }\n}\n","import { GyroConfigRepositoryImpl } from '@/modules/data/gyro-config/repository';\n\nexport * as balEmissions from './bal/emissions';\nexport * from './gauge-controller/multicall';\nexport * from './gauge-shares';\nexport * from './liquidity-gauges';\nexport * from './pool';\nexport * from './pool-gauges';\nexport * from './pool-joinExit';\nexport * from './pool-shares';\nexport * from './token';\nexport * from './token-prices';\nexport * from './fee-distributor/repository';\nexport * from './fee-collector/repository';\nexport * from './protocol-fees/provider';\nexport * from './token-yields/repository';\nexport * from './block-number';\n\nimport {\n BalancerNetworkConfig,\n BalancerDataRepositories,\n GraphQLQuery,\n CoingeckoConfig,\n} from '@/types';\nimport { PoolsSubgraphRepository } from './pool/subgraph';\nimport { SubgraphPoolDataService } from '../sor/pool-data/subgraphPoolDataService';\nimport { PoolsSubgraphOnChainRepository } from './pool/subgraphOnChain';\nimport { PoolSharesRepository } from './pool-shares/repository';\nimport { PoolJoinExitRepository } from './pool-joinExit/repository';\nimport { PoolGaugesRepository } from './pool-gauges/repository';\nimport { GaugeSharesRepository } from './gauge-shares/repository';\nimport { BlockNumberRepository } from './block-number';\nimport {\n CoingeckoPriceRepository,\n AaveRates,\n TokenPriceProvider,\n HistoricalPriceProvider,\n CoingeckoHistoricalPriceRepository,\n} from './token-prices';\nimport { StaticTokenProvider } from './token/static';\nimport { LiquidityGaugeSubgraphRPCProvider } from './liquidity-gauges/provider';\nimport { FeeDistributorRepository } from './fee-distributor/repository';\nimport { FeeCollectorRepository } from './fee-collector/repository';\nimport { TokenYieldsRepository } from './token-yields/repository';\nimport { ProtocolFeesProvider } from './protocol-fees/provider';\nimport { Provider } from '@ethersproject/providers';\n\n// initialCoingeckoList are used to get the initial token list for coingecko\n// TODO: we might want to replace that with what frontend is using\nimport initialCoingeckoList from '@/modules/data/token-prices/initial-list.json';\nimport { SubgraphPriceRepository } from './token-prices/subgraph';\nimport { createSubgraphClient } from '../subgraph/subgraph';\nimport { Contracts } from '../contracts/contracts.module';\n\nexport class Data implements BalancerDataRepositories {\n pools;\n poolsForSimulations;\n poolsOnChain;\n yesterdaysPools;\n poolShares;\n poolGauges;\n gaugeShares;\n tokenPrices;\n tokenHistoricalPrices;\n tokenMeta;\n liquidityGauges;\n feeDistributor;\n feeCollector;\n protocolFees;\n tokenYields;\n blockNumbers;\n poolJoinExits;\n gyroConfigRepository;\n\n constructor(\n networkConfig: BalancerNetworkConfig,\n provider: Provider,\n contracts: Contracts,\n subgraphQuery?: GraphQLQuery,\n coingecko?: CoingeckoConfig\n ) {\n this.pools = new PoolsSubgraphRepository({\n url: networkConfig.urls.subgraph,\n chainId: networkConfig.chainId,\n query: subgraphQuery,\n });\n\n // Used for VaultModel and Simulations\n this.poolsForSimulations = new SubgraphPoolDataService(\n createSubgraphClient(networkConfig.urls.subgraph),\n provider,\n networkConfig,\n undefined,\n subgraphQuery\n );\n\n this.poolsOnChain = new PoolsSubgraphOnChainRepository(\n this.pools,\n {\n provider: provider,\n multicall: networkConfig.addresses.contracts.multicall,\n vault: networkConfig.addresses.contracts.vault,\n },\n networkConfig.poolsToIgnore,\n networkConfig.multicallBatchSize\n );\n\n this.poolShares = new PoolSharesRepository(\n networkConfig.urls.subgraph,\n networkConfig.chainId\n );\n\n this.poolJoinExits = new PoolJoinExitRepository(\n networkConfig.urls.subgraph,\n networkConfig.chainId\n );\n\n if (networkConfig.urls.gaugesSubgraph) {\n this.poolGauges = new PoolGaugesRepository(\n networkConfig.urls.gaugesSubgraph,\n networkConfig.chainId\n );\n\n this.gaugeShares = new GaugeSharesRepository(\n networkConfig.urls.gaugesSubgraph,\n networkConfig.chainId\n );\n }\n\n // 🚨 yesterdaysPools is used to calculate swapFees accumulated over last 24 hours\n // TODO: find a better data source for that, eg: maybe DUNE once API is available\n if (networkConfig.urls.blockNumberSubgraph) {\n this.blockNumbers = new BlockNumberRepository(\n networkConfig.urls.blockNumberSubgraph\n );\n\n const blockDayAgo = async () => {\n if (this.blockNumbers) {\n return await this.blockNumbers.find('dayAgo');\n }\n };\n\n this.yesterdaysPools = new PoolsSubgraphRepository({\n url: networkConfig.urls.subgraph,\n chainId: networkConfig.chainId,\n blockHeight: blockDayAgo,\n query: subgraphQuery,\n });\n } else if (networkConfig.averageBlockTime) {\n const blockDayAgo = async () => {\n const blockNumber = await provider.getBlockNumber();\n const blocksPerDay = Math.round(\n 86400 / (networkConfig.averageBlockTime || 2)\n );\n return blockNumber - blocksPerDay;\n };\n\n this.yesterdaysPools = new PoolsSubgraphRepository({\n url: networkConfig.urls.subgraph,\n chainId: networkConfig.chainId,\n blockHeight: blockDayAgo,\n query: subgraphQuery,\n });\n }\n\n const tokenAddresses = initialCoingeckoList\n .filter((t) => t.chainId == networkConfig.chainId)\n .map((t) => t.address);\n\n const coingeckoRepository = new CoingeckoPriceRepository(\n tokenAddresses,\n networkConfig.chainId,\n coingecko\n );\n\n const subgraphPriceRepository = new SubgraphPriceRepository(\n networkConfig.urls.subgraph,\n networkConfig.chainId\n );\n\n const aaveRates = new AaveRates(\n contracts.contracts.multicall,\n networkConfig.chainId\n );\n\n this.tokenPrices = new TokenPriceProvider(\n coingeckoRepository,\n subgraphPriceRepository,\n aaveRates\n );\n\n const coingeckoHistoricalRepository =\n new CoingeckoHistoricalPriceRepository(networkConfig.chainId, coingecko);\n\n this.tokenHistoricalPrices = new HistoricalPriceProvider(\n coingeckoHistoricalRepository,\n aaveRates\n );\n\n this.tokenMeta = new StaticTokenProvider([]);\n\n if (networkConfig.urls.gaugesSubgraph) {\n this.liquidityGauges = new LiquidityGaugeSubgraphRPCProvider(\n networkConfig.urls.gaugesSubgraph,\n contracts.contracts.multicall,\n networkConfig.addresses.contracts.gaugeController || '',\n networkConfig.chainId,\n networkConfig.addresses.contracts.gaugeControllerCheckpointer\n );\n }\n\n if (\n networkConfig.addresses.contracts.feeDistributor &&\n networkConfig.addresses.tokens.bal &&\n networkConfig.addresses.tokens.veBal &&\n networkConfig.addresses.tokens.bbaUsd\n ) {\n this.feeDistributor = new FeeDistributorRepository(\n contracts.contracts.multicall,\n networkConfig.addresses.contracts.feeDistributor,\n networkConfig.addresses.tokens.bal,\n networkConfig.addresses.tokens.veBal,\n networkConfig.addresses.tokens.bbaUsd,\n provider\n );\n }\n\n this.feeCollector = new FeeCollectorRepository(\n networkConfig.addresses.contracts.vault,\n provider\n );\n\n if (networkConfig.addresses.contracts.protocolFeePercentagesProvider) {\n this.protocolFees = new ProtocolFeesProvider(\n contracts.contracts.multicall,\n networkConfig.addresses.contracts.protocolFeePercentagesProvider\n );\n }\n\n this.tokenYields = new TokenYieldsRepository();\n\n if (networkConfig.addresses.contracts.gyroConfigProxy) {\n this.gyroConfigRepository = new GyroConfigRepositoryImpl(\n networkConfig.addresses.contracts.gyroConfigProxy,\n contracts.contracts.multicall,\n provider\n );\n }\n }\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { MaxInt256 } from '@ethersproject/constants';\nimport { BatchSwapStep, SwapType } from '../swaps/types';\nimport { Relayer } from './relayer.module';\nimport { OutputReference, PoolKind } from './types';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\n\n/**\n * Converts poolType and poolTypeVersion to PoolKind used by Relayer V5 defined in:\n * https://github.com/balancer/balancer-v2-monorepo/blob/9b78879ee3a0dcae57094bdfdae973873e4262cf/pkg/standalone-utils/contracts/relayer/VaultActions.sol#L105\n *\n * @internal\n * @param poolType\n * @param poolTypeVersion\n * @returns PoolKind\n */\nconst poolType2PoolKind = (\n poolType: string,\n poolTypeVersion: number\n): PoolKind => {\n if (poolType === 'Stable') {\n return PoolKind.LEGACY_STABLE;\n } else if (poolType === 'ComposableStable' && poolTypeVersion === 1) {\n return PoolKind.COMPOSABLE_STABLE;\n } else if (poolType === 'ComposableStable') {\n return PoolKind.COMPOSABLE_STABLE_V2;\n } else {\n return PoolKind.WEIGHTED;\n }\n};\n\nexport const setRelayerApproval = Relayer.encodeSetRelayerApproval;\nexport const gaugeWithdrawal = Relayer.encodeGaugeWithdraw;\nexport const gaugeDeposit = Relayer.encodeGaugeDeposit;\nexport const peekChainedReferenceValue =\n Relayer.encodePeekChainedReferenceValue;\n\n/**\n * Encodes exitPool callData.\n * Exit pool to underlying tokens and assigns output references to the exit amounts.\n *\n * @param poolId Pool ID.\n * @param poolType Pool type.\n * @param poolTypeVersion Pool type version.\n * @param assets Ordered pool tokens.\n * @param singleTokenExit When\n * @param outputReferences reference to exit amounts for the next transaction\n * @param amount Amount of BPT to exit with as a number with 18 digits of precision passed as a string.\n * @param sender Sender address.\n * @param recipient Recipient address.\n * @param isComposable Whether the poolType is ComposableStable or not.\n * @param toInternalBalance Use internal balance or not.\n * @returns Encoded exitPool call.\n */\nexport const exit = (\n poolId: string,\n poolType: string,\n poolTypeVersion: number,\n assets: string[],\n exitTokenIndex = -1,\n outputReferences: OutputReference[],\n amount: string,\n sender: string,\n recipient: string,\n toInternalBalance = true\n): string => {\n let userData: string;\n const isComposable = poolType === 'ComposableStable' && poolTypeVersion === 1;\n\n // Exit pool proportionally or to a singleToken\n if (exitTokenIndex > -1) {\n userData = StablePoolEncoder.exitExactBPTInForOneTokenOut(\n amount,\n exitTokenIndex\n );\n } else {\n const encoder = isComposable\n ? ComposableStablePoolEncoder.exitExactBPTInForAllTokensOut\n : StablePoolEncoder.exitExactBPTInForTokensOut;\n userData = encoder(amount);\n }\n\n // Relayer V5 introduces PoolKind\n const poolKind = poolType2PoolKind(poolType, poolTypeVersion);\n\n // Encode exit pool data\n const callData = Relayer.encodeExitPool({\n poolId,\n poolKind,\n sender,\n recipient,\n outputReferences,\n exitPoolRequest: {\n assets,\n minAmountsOut: new Array(assets.length).fill('0'),\n userData,\n toInternalBalance,\n },\n });\n\n return callData;\n};\n\n/**\n * Encodes joinPool callData.\n * Joins pool with underlying tokens and assigns output reference to the BPT amount.\n *\n * @param poolId Pool ID.\n * @param poolType Pool type.\n * @param poolTypeVersion Pool type version.\n * @param assets Ordered pool tokens.\n * @param amountsIn Amounts of tokens to join with as a number with 18 digits of precision passed as a string.\n * @param minimumBPT Minimum BPT amount to receive as a number with 18 digits of precision passed as a string.\n * @param outputReference reference to BPT amount for the next transaction\n * @param sender Sender address.\n * @param recipient Recipient address.\n * @param fromInternalBalance Use internal balance or not.\n * @returns Encoded joinPool call.\n */\nexport const join = (\n poolId: string,\n poolType: string,\n poolTypeVersion: number,\n assets: string[],\n amountsIn: string[],\n minimumBPT: string,\n outputReference: string,\n sender: string,\n recipient: string,\n fromInternalBalance = true\n): string => {\n const maxAmountsIn = assets.map(() => MaxInt256);\n\n // Encoding join pool data with the type exactTokensIn (1)\n // StablePoolEncoder.joinExactTokensInForBPTOut is the same for all pool types\n const userData = StablePoolEncoder.joinExactTokensInForBPTOut(\n amountsIn,\n minimumBPT\n );\n\n const kind = poolType2PoolKind(poolType, poolTypeVersion);\n\n const callData = Relayer.encodeJoinPool({\n poolId,\n kind,\n sender,\n recipient,\n joinPoolRequest: {\n assets,\n maxAmountsIn,\n userData,\n fromInternalBalance,\n },\n value: '0',\n outputReference,\n });\n\n return callData;\n};\n\n/**\n * Creates encoded batchSwap callData\n * outputReferences contain the output amount for swap's last token\n *\n * @param sender Sender address.\n * @param recipient Recipient address.\n * @param swaps List of swaps to execute.\n * @param deadline Deadline for the transaction.\n * @param toInternalBalance Use internal balance or not.\n * @returns Encoded batchSwap call\n */\nexport const swaps = (\n sender: string,\n recipient: string,\n swaps: {\n path: {\n poolId: string;\n assetIn: string;\n assetOut: string;\n }[];\n inputAmount: string;\n outputReference: BigNumber;\n }[],\n deadline?: string,\n toInternalBalance = true\n): string => {\n const assets: string[] = [];\n const limits: string[] = [];\n const outputReferences: { index: number; key: BigNumber }[] = [];\n const batchSwaps: BatchSwapStep[] = [];\n\n // Convert paths into batchSwap steps\n swaps.forEach((swap) => {\n const { path, inputAmount, outputReference } = swap;\n\n for (let i = 0; i < path.length; i++) {\n const { poolId, assetIn, assetOut } = path[i];\n\n assets.push(assetIn);\n assets.push(assetOut);\n\n limits.push(MaxInt256.toString());\n limits.push('0');\n\n const assetInIndex = i * 2;\n const assetOutIndex = i * 2 + 1;\n\n const swap: BatchSwapStep = {\n poolId,\n assetInIndex,\n assetOutIndex,\n amount: i === 0 ? inputAmount : '0',\n userData: '0x',\n };\n\n batchSwaps.push(swap);\n }\n\n // Add output reference for the last swap\n outputReferences.push({ index: path.length * 2 - 1, key: outputReference });\n });\n\n const funds = {\n sender,\n recipient,\n fromInternalBalance: true,\n toInternalBalance,\n };\n\n const encodedBatchSwap = Relayer.encodeBatchSwap({\n swapType: SwapType.SwapExactIn,\n swaps: batchSwaps,\n assets,\n funds,\n limits,\n deadline: deadline || BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value: '0',\n outputReferences,\n });\n\n return encodedBatchSwap;\n};\n","import { Findable, Pool, PoolAttribute } from '@/types';\nimport { BalancerRelayer__factory } from '@/contracts';\n\nexport const balancerRelayerInterface =\n BalancerRelayer__factory.createInterface();\n\n/**\n * Using array of objects to preserve the tokens order\n */\nexport interface MigrationPool {\n address: string;\n id?: string;\n poolType?: string;\n poolTypeVersion?: number;\n tokens?: MigrationPool[];\n mainIndex?: number;\n}\n\n/**\n * Foreach AaveLinear: AaveLinear > mainTokens > newAaveLinear\n *\n * @param fromTokens\n * @param toTokens\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const buildPaths = (\n fromTokens: MigrationPool[],\n toTokens: MigrationPool[],\n exitTokenIndex: number\n) => {\n // Get the main token address for each pool\n const getMainToken = ({ tokens, mainIndex }: MigrationPool) =>\n (tokens && mainIndex && tokens[mainIndex].address) || '';\n const mainFromTokens = fromTokens.flatMap(getMainToken);\n const mainToTokens = toTokens.flatMap(getMainToken);\n\n // Find the index of the main token in both from and to pools\n const pathIndexes = mainFromTokens.map(\n (token, idx) => (token && [idx, mainToTokens.indexOf(token)]) || [-1, -1]\n );\n\n // Build the paths from the indexes\n const exitSwaps = pathIndexes.map(([fromIdx, toIdx]) => {\n if (fromIdx === -1 || toIdx === -1) {\n return [];\n }\n const fromPool = fromTokens[fromIdx];\n const toPool = toTokens[toIdx];\n return buildPath(fromPool, toPool);\n });\n\n // If we want to exit a specific token, return only that path\n if (exitTokenIndex > -1) {\n return [exitSwaps[exitTokenIndex]];\n }\n\n return exitSwaps;\n};\n\nconst buildPath = (from: MigrationPool, to: MigrationPool) => {\n if (from.poolType?.match(/.*Linear.*/)) {\n return buildLinearPath(from, to);\n }\n\n return [];\n};\n\nconst buildLinearPath = (from: MigrationPool, to: MigrationPool) => {\n if (\n !from.id ||\n !to.id ||\n !from.tokens ||\n !to.tokens ||\n !from.mainIndex ||\n !to.mainIndex\n ) {\n throw 'Missing tokens';\n }\n const mainToken = from.tokens[from.mainIndex];\n\n const path = [\n {\n poolId: from.id,\n assetIn: from.address,\n assetOut: mainToken.address,\n },\n {\n poolId: to.id,\n assetIn: mainToken.address,\n assetOut: to.address,\n },\n ];\n\n return path;\n};\n\n/**\n * Converts Subgraph Pool to MigrationPool\n * Recursively builds tokens\n *\n * @param id\n * @param repository\n * @returns\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const buildMigrationPool = async (\n id: string,\n repository: Findable\n) => {\n const pool = await repository.find(id);\n if (!pool) throw `Pool ${id} not found`;\n\n const findTokens = async (token: string, parentPool: string) => {\n let tokens: Array = [{ address: token }];\n const pool = await repository.findBy('address', token);\n if (pool && token != parentPool) {\n const sortedTokens = pool.tokens.sort(cmpTokens);\n const nestedTokens = await Promise.all(\n sortedTokens.map(({ address }) => findTokens(address, pool.address))\n );\n tokens = [\n {\n address: token,\n id: pool.id,\n poolType: pool.poolType,\n poolTypeVersion: pool.poolTypeVersion,\n mainIndex: pool.mainIndex,\n tokens: nestedTokens.flat(),\n },\n ];\n }\n return tokens;\n };\n\n // Sorts amounts out into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const sortedTokens = pool.tokens.sort(cmpTokens);\n\n return {\n id,\n address: pool.address,\n tokens: (\n await Promise.all(\n sortedTokens.map(({ address }) => findTokens(address, pool.address))\n )\n ).flat(),\n poolType: pool.poolType,\n poolTypeVersion: pool.poolTypeVersion,\n mainIndex: pool.mainIndex,\n };\n};\n\nconst cmpTokens = (tokenA: MigrationPool, tokenB: MigrationPool): number =>\n tokenA.address.toLowerCase() > tokenB.address.toLowerCase() ? 1 : -1;\n","import { OutputReference, Relayer } from '@/modules/relayer/relayer.module';\nimport * as actions from '@/modules/relayer/actions';\nimport { buildPaths, MigrationPool, balancerRelayerInterface } from './helpers';\nimport { BigNumber } from '@ethersproject/bignumber';\n\n/**\n * Builds migration call data.\n *\n * @param account Address of the migrating account\n * @param relayer Address of the relayer\n * @param bptAmount Amount of BPT to migrate\n * @param minBptOut Minimal amount of BPT to receive\n * @param from Pool to migrate from\n * @param to Pool to migrate to\n * @param peek Add a peek call for the expected BPT amount, decodable by the `decodePeak` function\n * @param fromGauge Unstake from gauge before migrating\n * @param toGauge Restake to gauge after migrating\n * @param authorisation User's authorisation to approve relayer in the vault\n * @returns call data\n */\nexport const migrationBuilder = (\n account: string,\n relayer: string,\n bptAmount: string,\n minBptOut: string,\n from: MigrationPool,\n to: MigrationPool,\n peek = false,\n fromGauge?: string,\n toGauge?: string,\n authorisation?: string\n): string => {\n if (\n !from.id ||\n !to.id ||\n !from.tokens ||\n !to.tokens ||\n !from.poolType ||\n !to.poolType\n ) {\n throw 'Pool data is missing';\n }\n\n // Define tokens\n const fromTokens = from.tokens.flatMap(({ address }) => address);\n const toTokens = to.tokens.flatMap(({ address }) => address);\n\n // Prefer proportional exit, except for ComposableStableV1\n // Choose 0 as the exit token index\n // TODO: make default exit token dynamic\n const exitTokenIndex =\n from.poolType == 'ComposableStable' && from.poolTypeVersion == 1 ? 0 : -1;\n\n // Define output references\n let exitOutputReferences: OutputReference[];\n let swapOutputReferences: BigNumber[] = [];\n if (exitTokenIndex > -1) {\n exitOutputReferences = [\n {\n index: exitTokenIndex,\n key: Relayer.toChainedReference(`10${exitTokenIndex}`),\n },\n ];\n swapOutputReferences = [Relayer.toChainedReference(`20${exitTokenIndex}`)];\n } else {\n exitOutputReferences = fromTokens.map((_, idx) => ({\n index: idx,\n key: Relayer.toChainedReference(`10${idx}`),\n }));\n swapOutputReferences = fromTokens.map((_, idx) =>\n Relayer.toChainedReference(`20${idx}`)\n );\n }\n\n const joinAmount = Relayer.toChainedReference('999');\n\n // Configure migration steps\n const migrationSteps = [];\n let needsSwap = false; // only if from is ComposableStable\n\n if (from.poolType === 'ComposableStable') {\n needsSwap = true;\n }\n\n // 0. Set relayer approval\n if (authorisation) {\n migrationSteps.push(\n actions.setRelayerApproval(relayer, true, authorisation)\n );\n }\n\n // 1. Withdraw from old gauge\n if (fromGauge) {\n migrationSteps.push(\n actions.gaugeWithdrawal(fromGauge, account, relayer, bptAmount)\n );\n }\n\n // 2. Exit old pool\n migrationSteps.push(\n actions.exit(\n from.id,\n from.poolType,\n from.poolTypeVersion || 1,\n fromTokens,\n exitTokenIndex,\n exitOutputReferences,\n bptAmount,\n fromGauge ? relayer : account,\n relayer\n )\n );\n\n // 3. Swap\n const swapPaths = buildPaths(from.tokens, to.tokens, exitTokenIndex);\n if (swapPaths.flat().length > 0) {\n // Match exit to swap amounts\n const swaps = swapPaths\n .map((path, idx) => ({\n path,\n inputAmount: String(exitOutputReferences[idx].key),\n outputReference: swapOutputReferences[idx],\n }))\n .filter(({ path }) => path.length > 0);\n\n migrationSteps.push(actions.swaps(relayer, relayer, swaps));\n }\n\n // 3. Join\n // Match swap or exit references to the positions of join tokens\n // In case no reference is defined, the default is 0\n const references = toTokens\n .filter((address) => to.address != address)\n .map((to) => {\n const fromIdx = fromTokens.indexOf(to);\n return String(\n (needsSwap && swapOutputReferences[fromIdx]) ||\n exitOutputReferences[fromIdx]?.key ||\n 0\n );\n });\n\n migrationSteps.push(\n actions.join(\n to.id,\n to.poolType,\n to.poolTypeVersion || 1,\n toTokens,\n references,\n minBptOut,\n String(joinAmount),\n relayer,\n toGauge ? relayer : account,\n true\n )\n );\n\n // Peek the last join amount\n if (peek === true) {\n migrationSteps.push(actions.peekChainedReferenceValue(String(joinAmount)));\n }\n\n // 4. Deposit to the new gauge\n if (toGauge) {\n migrationSteps.push(\n actions.gaugeDeposit(toGauge, relayer, account, String(joinAmount))\n );\n }\n\n const callData = balancerRelayerInterface.encodeFunctionData('multicall', [\n migrationSteps,\n ]);\n\n return callData;\n};\n","import { Findable, Pool, PoolAttribute } from '@/types';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { SubgraphLiquidityGauge } from '../subgraph/subgraph';\nimport { migrationBuilder } from './migrations/builder';\nimport {\n balancerRelayerInterface,\n buildMigrationPool,\n} from './migrations/helpers';\nimport * as actions from '@/modules/relayer/actions';\n\n/**\n * @param user - user address\n * @param from - pool ID\n * @param to - pool ID\n * @param balance - amount of liquidity to migrate in WAL (wei-ether)\n * @param minBptOut - minimum amount of BPT to receive, when 0 it will include a peek for the amount\n * @param authorisation - signed user's authorisation to approve relayer in the vault\n */\ninterface MigrationParams {\n user: string;\n from: string;\n to: string;\n balance: string;\n minBptOut?: string;\n authorisation?: string;\n}\n\n/**\n * Class responsible for building liquidity migration transactions.\n */\nexport class Migrations {\n public relayerAddress: string;\n public poolsRepository: Findable;\n public gaugesRepository: Findable;\n public provider: JsonRpcProvider;\n\n /**\n * Instance of a class responsible for building liquidity migration transactions.\n *\n * @param relayerAddress Address of the relayer contract.\n * @param poolsRepository Repository of pools.\n * @param liquidityGaugesRepository Repository of liquidity gauges.\n * @param provider Provider to use for RPC data fetching.\n *\n * Available methods:\n * - `pool2pool` - Migrates liquidity from one pool to another.\n * - `pool2poolWithGauges` - Migrates liquidity from a pool's gauge to another gauge.\n * - `gauge2gauge` - Migrates liquidity from one gauge to another of the same pool.\n *\n * @example\n * ```typescript\n * const sdk = new BalancerSDK({\n * network: 1,\n * rpcUrl: 'https://rpc.ankr.com/eth',\n * })\n *\n * const migrations = new Migrations({\n * relayerAddress: sdk.networkConfig.addresses.contracts.relayerV4 as string,\n * poolsRepository: sdk.data.pools,\n * gaugesRepository: sdk.data.liquidityGauges.subgraph,\n * provider: sdk.provider\n * })\n *\n * const user = '0xfacec29Ae158B26e234B1a81Db2431F6Bd8F8cE8'\n * const from = '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080'\n * const to = '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080'\n * const balance = '1000000000000000000'\n * const { to, data } = await migrations.pool2pool({ user, from, to, balance })\n *\n * const tx = await sdk.provider.sendTransaction({ to, data })\n * ```\n */\n constructor({\n relayerAddress,\n poolsRepository,\n gaugesRepository,\n provider,\n }: {\n relayerAddress: string;\n poolsRepository: Findable;\n gaugesRepository: Findable;\n provider: JsonRpcProvider;\n }) {\n this.relayerAddress = relayerAddress;\n this.poolsRepository = poolsRepository;\n this.gaugesRepository = gaugesRepository;\n this.provider = provider;\n }\n\n /**\n * Takes user, from and to pool IDs as strings and returns the transaction data\n *\n * @returns transaction data\n */\n async pool2pool({\n user,\n from,\n to,\n balance,\n minBptOut = '0',\n authorisation,\n }: MigrationParams): Promise<{ to: string; data: string }> {\n const fromPool = await buildMigrationPool(from, this.poolsRepository);\n const toPool = await buildMigrationPool(to, this.poolsRepository);\n\n const data = migrationBuilder(\n user,\n this.relayerAddress,\n String(balance),\n minBptOut,\n fromPool,\n toPool,\n minBptOut == '0', // if minBptOut is 0, we peek for the join amount\n undefined,\n undefined,\n authorisation\n );\n\n return {\n to: this.relayerAddress,\n data,\n };\n }\n\n /**\n * Takes user, from and to pool IDs as strings and returns the transaction data\n * for a migration including unstaking and restaking\n *\n * @returns transaction data\n */\n async pool2poolWithGauges({\n user,\n from,\n to,\n balance,\n minBptOut = '0',\n authorisation,\n }: MigrationParams): Promise<{ to: string; data: string }> {\n const fromGauge = await this.gaugesRepository.findBy('poolId', from);\n const toGauge = await this.gaugesRepository.findBy('poolId', to);\n if (!fromGauge || !fromGauge.poolId || !toGauge || !toGauge.poolId) {\n throw new Error('Gauge not found');\n }\n const fromPool = await buildMigrationPool(\n fromGauge.poolId,\n this.poolsRepository\n );\n const toPool = await buildMigrationPool(\n toGauge.poolId,\n this.poolsRepository\n );\n\n const data = migrationBuilder(\n user,\n this.relayerAddress,\n String(balance),\n minBptOut,\n fromPool,\n toPool,\n minBptOut == '0', // if minBptOut is 0, we peek for the join amount\n fromGauge.id,\n toGauge.id,\n authorisation\n );\n\n return {\n to: this.relayerAddress,\n data,\n };\n }\n\n /**\n * Migrates staked liquidity for the same pool from one gauge to another.\n *\n * @returns transaction data\n */\n async gauge2gauge({\n user,\n from,\n to,\n balance,\n authorisation,\n }: MigrationParams): Promise<{ to: string; data: string }> {\n const steps = [\n actions.gaugeWithdrawal(from, user, this.relayerAddress, balance),\n actions.gaugeDeposit(to, this.relayerAddress, user, balance),\n ];\n\n if (authorisation) {\n steps.unshift(\n actions.setRelayerApproval(this.relayerAddress, true, authorisation)\n );\n }\n\n const data = balancerRelayerInterface.encodeFunctionData('multicall', [\n steps,\n ]);\n\n return {\n to: this.relayerAddress,\n data,\n };\n }\n\n /**\n * Decodes the relayer return value to get the expected BPT out.\n *\n * @param relayerReturnValue\n * @returns\n */\n static getExpectedBptOut = (relayerReturnValue: string): string => {\n // Get last two positions of the return value, bptOut is the last one or the second to last one in case there is a gauge deposit\n // join and gauge deposit are always 0x, so any other value means that's the bptOut\n const multicallResult = balancerRelayerInterface.decodeFunctionResult(\n 'multicall',\n relayerReturnValue\n );\n\n const expectedBptOut = multicallResult[0]\n .slice(-2)\n .filter((v: string) => v !== '0x');\n\n return String(BigInt(expectedBptOut));\n };\n\n getExpectedBptOut = Migrations.getExpectedBptOut;\n}\n","import { ClaimService, IClaimService } from '@/modules/claims/ClaimService';\nimport { BalancerSdkConfig, BalancerNetworkConfig } from '@/types';\nimport { Swaps } from './swaps/swaps.module';\nimport { Relayer } from './relayer/relayer.module';\nimport { Subgraph } from './subgraph/subgraph.module';\nimport { Sor } from './sor/sor.module';\nimport { getNetworkConfig } from './sdk.helpers';\nimport { Pricing } from './pricing/pricing.module';\nimport { ContractInstances, Contracts } from './contracts/contracts.module';\nimport { Pools } from './pools';\nimport { Data } from './data';\nimport { VaultModel } from './vaultModel/vaultModel.module';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { Migrations } from './liquidity-managment/migrations';\nimport { Logger } from '@/lib/utils/logger';\n\nexport interface BalancerSDKRoot {\n config: BalancerSdkConfig;\n sor: Sor;\n subgraph: Subgraph;\n pools: Pools;\n data: Data;\n swaps: Swaps;\n relayer: Relayer;\n networkConfig: BalancerNetworkConfig;\n provider: JsonRpcProvider;\n claimService?: IClaimService;\n}\n\nexport class BalancerSDK implements BalancerSDKRoot {\n readonly swaps: Swaps;\n readonly relayer: Relayer;\n readonly pricing: Pricing;\n readonly pools: Pools;\n readonly data: Data;\n balancerContracts: Contracts;\n vaultModel: VaultModel;\n readonly networkConfig: BalancerNetworkConfig;\n readonly provider: JsonRpcProvider;\n readonly claimService?: IClaimService;\n readonly migrationService?: Migrations;\n\n constructor(\n public config: BalancerSdkConfig,\n public sor = new Sor(config),\n public subgraph = new Subgraph(config)\n ) {\n const logger = Logger.getInstance();\n logger.setLoggingEnabled(!!config.enableLogging);\n this.networkConfig = getNetworkConfig(config);\n this.provider = sor.provider as JsonRpcProvider;\n\n this.balancerContracts = new Contracts(\n this.networkConfig.addresses.contracts,\n sor.provider\n );\n\n this.data = new Data(\n this.networkConfig,\n sor.provider,\n this.balancerContracts,\n config.subgraphQuery,\n config.coingecko\n );\n\n this.swaps = new Swaps(this.config);\n this.relayer = new Relayer();\n this.pricing = new Pricing(config, this.swaps);\n\n this.pools = new Pools(\n this.networkConfig,\n this.data,\n this.balancerContracts\n );\n\n if (this.data.liquidityGauges) {\n this.claimService = new ClaimService(\n this.data.liquidityGauges,\n this.data.feeDistributor,\n this.networkConfig.chainId,\n this.contracts.multicall,\n this.networkConfig.addresses.contracts.gaugeClaimHelper,\n this.networkConfig.addresses.contracts.balancerMinter\n );\n this.migrationService = new Migrations({\n relayerAddress: this.networkConfig.addresses.contracts.balancerRelayer,\n poolsRepository: this.data.pools,\n gaugesRepository: this.data.liquidityGauges.subgraph,\n provider: this.provider,\n });\n }\n this.vaultModel = new VaultModel(\n this.data.poolsForSimulations,\n this.networkConfig.addresses.tokens.wrappedNativeAsset\n );\n }\n\n /**\n * Expose balancer contracts, e.g. Vault, LidoRelayer.\n */\n get contracts(): ContractInstances {\n return this.balancerContracts.contracts;\n }\n}\n","import { SubgraphPoolBase } from '@balancer-labs/sor';\nimport {\n EncodeJoinPoolInput,\n ExitPoolData,\n EncodeBatchSwapInput,\n} from '@/modules/relayer/relayer.module';\nimport { Join } from './join';\nimport { Exit } from './exit';\nimport { Swap } from './swap';\n\nexport enum ActionStep {\n Direct,\n TokenIn,\n TokenOut,\n Middle,\n}\n\nexport enum ActionType {\n BatchSwap,\n Join,\n Exit,\n}\n\nexport type Actions = Exit | Swap | Join;\n\nexport interface Action {\n type: ActionType.Join | ActionType.Exit | ActionType.BatchSwap;\n callData(pool: SubgraphPoolBase, wrappedNativeAsset: string): CallData;\n getAmountIn(): string;\n getAmountOut(): string;\n}\n\nexport interface CallData {\n params: EncodeJoinPoolInput | ExitPoolData | EncodeBatchSwapInput;\n encoded: string | string[];\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { ActionStep, ActionType } from './types';\nimport { Relayer, OutputReference } from '@/modules/relayer/relayer.module';\n\nexport class BaseAction {\n nextOpRefKey;\n hasTokenOut;\n hasTokenIn;\n sender;\n receiver;\n opRefStart;\n minOut;\n amountIn;\n\n constructor(\n mainTokenInIndex: number,\n mainTokenOutIndex: number,\n swapAssetInIndex: number,\n swapAssetOutIndex: number,\n swapAmount: string,\n swapReturn: string,\n opRefKey: number,\n slippage: string,\n user: string,\n relayer: string\n ) {\n const actionStep = this.getActionStep(\n mainTokenInIndex,\n mainTokenOutIndex,\n swapAssetInIndex,\n swapAssetOutIndex\n );\n // Will get actual amount if input or chain amount if part of chain\n this.amountIn = this.getActionAmount(\n swapAmount,\n ActionType.BatchSwap,\n actionStep,\n opRefKey\n );\n this.hasTokenIn = this.actionHasTokenIn(actionStep);\n this.hasTokenOut = this.actionHasTokenOut(actionStep);\n // This will be 0 if not a mainTokenOut action otherwise amount using slippage\n const amountOut = this.hasTokenOut ? swapReturn : '0';\n this.minOut = this.getActionMinOut(amountOut, slippage);\n // This will set opRef for next chained action if required\n const [opRef, nextOpRefKey] = this.getActionOutputRef(\n actionStep,\n swapAssetOutIndex,\n opRefKey\n );\n this.nextOpRefKey = nextOpRefKey;\n this.opRefStart = opRef;\n this.sender = this.getSender(this.hasTokenIn, user, relayer);\n this.receiver = this.getReceiver(this.hasTokenOut, user, relayer);\n }\n\n /**\n * If its not the first action then the amount will come from the previous output ref\n * @param amount\n * @param actionType\n * @param actionStep\n * @param opRefKey\n * @returns\n */\n getActionAmount(\n amount: string,\n actionType: ActionType,\n actionStep: ActionStep,\n opRefKey: number\n ): string {\n let amountIn = amount;\n if (\n actionStep === ActionStep.TokenOut ||\n (actionStep === ActionStep.Middle && actionType === ActionType.Join) ||\n (actionStep === ActionStep.Middle && actionType === ActionType.Exit)\n ) {\n amountIn = Relayer.toChainedReference(opRefKey - 1).toString();\n }\n return amountIn;\n }\n\n /**\n * If its not the final action then we need an outputReferece to chain to next action as input\n * @param actionStep\n * @param tokenOutIndex\n * @param opRefKey\n * @returns\n */\n getActionOutputRef(\n actionStep: ActionStep,\n tokenOutIndex: number,\n opRefKey: number\n ): [OutputReference, number] {\n let opRef: OutputReference = {} as OutputReference;\n if (actionStep === ActionStep.TokenIn || actionStep === ActionStep.Middle) {\n opRef = this.getOutputRef(opRefKey, tokenOutIndex);\n opRefKey++;\n }\n return [opRef, opRefKey];\n }\n\n /**\n * Use slippage to set min amount out\n * @param amountOut\n * @param slippage\n * @returns\n */\n getActionMinOut(amountOut: string, slippage: string): string {\n // Currently only handle ExactIn swap. ExactOut would add slippage\n // We should apply slippage to each swaps amountOut\n return subSlippage(\n BigNumber.from(amountOut),\n BigNumber.from(slippage)\n ).toString();\n }\n\n /**\n * Find if the Action is:\n * Direct: tokenIn > tokenOut\n * TokenIn: tokenIn > chain...\n * TokenOut: ...chain > tokenOut\n * Middle: ...chain > action > chain...\n * @param tokenInIndex\n * @param tokenOutIndex\n * @param tokenInIndexAction\n * @param tokenOutIndexAction\n * @returns\n */\n getActionStep(\n tokenInIndex: number,\n tokenOutIndex: number,\n tokenInIndexAction: number,\n tokenOutIndexAction: number\n ): ActionStep {\n let actionStep: ActionStep;\n if (\n tokenInIndexAction === tokenInIndex &&\n tokenOutIndexAction === tokenOutIndex\n ) {\n actionStep = ActionStep.Direct;\n } else if (tokenInIndexAction === tokenInIndex) {\n actionStep = ActionStep.TokenIn;\n } else if (tokenOutIndexAction === tokenOutIndex) {\n actionStep = ActionStep.TokenOut;\n } else {\n actionStep = ActionStep.Middle;\n }\n return actionStep;\n }\n\n getOutputRef(key: number, index: number): OutputReference {\n const keyRef = Relayer.toChainedReference(key);\n return { index: index, key: keyRef };\n }\n\n getFromInternal(hasTokenIn: boolean, isBptIn?: boolean): boolean {\n if (hasTokenIn || isBptIn) return false;\n else return true;\n }\n\n getToInternal(hasTokenOut: boolean, isBptOut?: boolean): boolean {\n // exits - can't exit using BPT from internal balances\n // Because of ^ we can assume that any tokenOut BPT is going to external (either to user or exit)\n if (hasTokenOut || isBptOut) return false;\n else return true;\n }\n\n actionHasTokenIn(actionStep: ActionStep): boolean {\n return actionStep === ActionStep.Direct || actionStep === ActionStep.TokenIn\n ? true\n : false;\n }\n\n actionHasTokenOut(actionStep: ActionStep): boolean {\n return actionStep === ActionStep.Direct ||\n actionStep === ActionStep.TokenOut\n ? true\n : false;\n }\n\n getSender(hasTokenIn: boolean, user: string, relayer: string): string {\n // tokenIn/Out will come from/go to the user. Any other tokens are intermediate and will be from/to Relayer\n if (hasTokenIn) return user;\n else return relayer;\n }\n\n getReceiver(hasTokenOut: boolean, user: string, relayer: string): string {\n // tokenIn/Out will come from/go to the user. Any other tokens are intermediate and will be from/to Relayer\n if (hasTokenOut) return user;\n else return relayer;\n }\n\n getPoolKind(poolType: string): number {\n // We have to use correct pool type based off following from Relayer:\n // enum PoolKind { WEIGHTED, LEGACY_STABLE, COMPOSABLE_STABLE, COMPOSABLE_STABLE_V2 }\n // (note only Weighted and COMPOSABLE_STABLE_V2 will support proportional exits)\n let kind = 0;\n if ([`MetaStable`, `Stable`, `StablePhantom`].includes(poolType)) {\n kind = 1;\n } else if (poolType === `ComposableStable`) {\n // In this case we are only doing BPT <> singleToken, not BPT <> tokens, so encoding matches and avoids need to check version so default to 3\n kind = 3;\n }\n return kind;\n }\n}\n","import { SubgraphPoolBase, SwapV2 } from '@balancer-labs/sor';\nimport {\n Relayer,\n ExitPoolData,\n OutputReference,\n} from '@/modules/relayer/relayer.module';\nimport { ExitPoolRequest } from '@/types';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { AssetHelpers } from '@/lib/utils';\nimport { ActionType, Action, CallData } from './types';\nimport { BaseAction } from './baseAction';\n\nexport class Exit extends BaseAction implements Action {\n type: ActionType.Exit;\n poolId: string;\n tokenOut: string;\n toInternalBalance: boolean;\n opRef: OutputReference;\n\n constructor(\n swap: SwapV2,\n mainTokenInIndex: number,\n mainTokenOutIndex: number,\n public opRefKey: number,\n assets: string[],\n slippage: string,\n user: string,\n relayerAddress: string\n ) {\n super(\n mainTokenInIndex,\n mainTokenOutIndex,\n swap.assetInIndex,\n swap.assetOutIndex,\n swap.amount,\n swap.returnAmount ?? '0',\n opRefKey,\n slippage,\n user,\n relayerAddress\n );\n this.type = ActionType.Exit;\n this.poolId = swap.poolId;\n this.tokenOut = assets[swap.assetOutIndex];\n this.toInternalBalance = this.getToInternal(this.hasTokenOut);\n this.opRef = this.opRefStart;\n }\n\n public callData(\n pool: SubgraphPoolBase,\n wrappedNativeAsset: string\n ): CallData {\n const assets = pool.tokensList;\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // tokens must have same order as pool getTokens\n const [sortedTokens] = assetHelpers.sortTokens(assets) as [string[]];\n const exitToken = this.tokenOut;\n const exitTokenIndex = sortedTokens.findIndex(\n (t) => t.toLowerCase() === exitToken.toLowerCase()\n );\n const minAmountsOut = Array(assets.length).fill('0');\n // Variable amount of token out (this has slippage applied)\n minAmountsOut[exitTokenIndex] = this.minOut;\n // Uses exact amount in\n const bptAmtIn = this.amountIn;\n const userData = WeightedPoolEncoder.exitExactBPTInForOneTokenOut(\n bptAmtIn,\n exitTokenIndex\n );\n const params: ExitPoolData = {\n assets: sortedTokens,\n minAmountsOut,\n userData,\n toInternalBalance: this.toInternalBalance,\n poolId: this.poolId,\n poolKind: this.getPoolKind(pool.poolType),\n sender: this.sender,\n recipient: this.receiver,\n outputReferences: this.opRef.key ? [this.opRef] : [],\n exitPoolRequest: {} as ExitPoolRequest,\n };\n const exitPoolInput = Relayer.formatExitPoolInput(params);\n const callData = Relayer.encodeExitPool(exitPoolInput);\n return {\n params,\n encoded: callData,\n };\n }\n\n public getAmountIn(): string {\n return this.hasTokenIn ? this.amountIn : '0';\n }\n\n public getAmountOut(): string {\n return this.hasTokenOut ? this.minOut : '0';\n }\n}\n","import { SubgraphPoolBase, SwapV2 } from '@balancer-labs/sor';\nimport {\n Relayer,\n EncodeJoinPoolInput,\n OutputReference,\n} from '@/modules/relayer/relayer.module';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { AssetHelpers } from '@/lib/utils';\nimport { ActionType, Action, CallData } from './types';\nimport { BaseAction } from './baseAction';\n\nexport class Join extends BaseAction implements Action {\n type: ActionType.Join;\n poolId: string;\n tokenIn: string;\n opRef: OutputReference;\n fromInternal;\n\n constructor(\n swap: SwapV2,\n mainTokenInIndex: number,\n mainTokenOutIndex: number,\n public opRefKey: number,\n assets: string[],\n slippage: string,\n user: string,\n relayerAddress: string\n ) {\n super(\n mainTokenInIndex,\n mainTokenOutIndex,\n swap.assetInIndex,\n swap.assetOutIndex,\n swap.amount,\n swap.returnAmount ?? '0',\n opRefKey,\n slippage,\n user,\n relayerAddress\n );\n this.type = ActionType.Join;\n this.poolId = swap.poolId;\n this.tokenIn = assets[swap.assetInIndex];\n this.fromInternal = this.getFromInternal(this.hasTokenIn);\n this.opRef = this.opRefStart;\n }\n\n public callData(\n pool: SubgraphPoolBase,\n wrappedNativeAsset: string\n ): CallData {\n const assets = pool.tokensList;\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // tokens must have same order as pool getTokens\n const [sortedTokens] = assetHelpers.sortTokens(assets) as [string[]];\n const joinToken = this.tokenIn;\n const joinTokenIndex = sortedTokens.findIndex(\n (t) => t.toLowerCase() === joinToken.toLowerCase()\n );\n const maxAmountsIn = Array(assets.length).fill('0');\n // Uses exact amounts of tokens in\n maxAmountsIn[joinTokenIndex] = this.amountIn;\n // Variable amount of BPT out (this has slippage applied)\n const bptAmountOut = this.minOut;\n const userData = WeightedPoolEncoder.joinExactTokensInForBPTOut(\n maxAmountsIn,\n bptAmountOut\n );\n const params: EncodeJoinPoolInput = {\n poolId: this.poolId,\n sender: this.sender,\n recipient: this.receiver,\n kind: this.getPoolKind(pool.poolType),\n joinPoolRequest: {\n assets: sortedTokens,\n maxAmountsIn,\n userData,\n fromInternalBalance: this.fromInternal,\n },\n value: '0',\n outputReference: this.opRef.key ? this.opRef.key.toString() : '0',\n };\n const callData = Relayer.encodeJoinPool(params);\n\n return {\n params,\n encoded: callData,\n };\n }\n\n public getAmountIn(): string {\n return this.hasTokenIn ? this.amountIn : '0';\n }\n\n public getAmountOut(): string {\n return this.hasTokenOut ? this.minOut : '0';\n }\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { MaxUint256, MaxInt256 } from '@ethersproject/constants';\nimport { SubgraphPoolBase, SwapV2 } from '@balancer-labs/sor';\nimport {\n Relayer,\n EncodeBatchSwapInput,\n OutputReference,\n} from '@/modules/relayer/relayer.module';\nimport { FundManagement, SwapType } from '../../types';\nimport { ActionType, Action, CallData } from './types';\nimport { BaseAction } from './baseAction';\n\nexport class Swap extends BaseAction implements Action {\n type: ActionType.BatchSwap;\n swaps: SwapV2[];\n limits: BigNumber[];\n private approveTokens: string[] = [];\n opRef: OutputReference[] = [];\n fromInternal;\n toInternal;\n\n constructor(\n swap: SwapV2,\n private mainTokenInIndex: number,\n private mainTokenOutIndex: number,\n public opRefKey: number,\n private assets: string[],\n private slippage: string,\n private pools: SubgraphPoolBase[],\n private user: string,\n private relayer: string\n ) {\n super(\n mainTokenInIndex,\n mainTokenOutIndex,\n swap.assetInIndex,\n swap.assetOutIndex,\n swap.amount,\n swap.returnAmount ?? '0',\n opRefKey,\n slippage,\n user,\n relayer\n );\n this.type = ActionType.BatchSwap;\n // Updates swap data to use chainedRef if required\n this.swaps = [{ ...swap, amount: this.amountIn }];\n const isBptIn = this.isBpt(pools, assets[swap.assetInIndex]);\n if (isBptIn) {\n // Older pools don't have pre-approval so need to add this as a step\n this.approveTokens.push(assets[swap.assetInIndex]);\n }\n this.fromInternal = this.getFromInternal(this.hasTokenIn, isBptIn);\n const isBptOut = this.isBpt(pools, assets[swap.assetOutIndex]);\n this.toInternal = this.getToInternal(this.hasTokenOut, isBptOut);\n this.limits = this.getLimits(\n assets,\n swap.assetInIndex,\n swap.assetOutIndex,\n swap.amount,\n this.hasTokenIn,\n this.hasTokenOut,\n this.minOut\n );\n if (this.opRefStart.index) {\n this.opRef.push(this.opRefStart);\n }\n }\n\n private getLimits(\n assets: string[],\n assetInIndex: number,\n assetOutIndex: number,\n swapAmount: string,\n hasTokenIn: boolean,\n hasTokenOut: boolean,\n minOut: string\n ): BigNumber[] {\n const limits = assets.map(() => BigNumber.from(0));\n // tokenIn/Out will come from/go to the user. Any other tokens are intermediate and will be from/to Relayer\n if (hasTokenIn) {\n limits[assetInIndex] = BigNumber.from(swapAmount);\n } else {\n // This will be a chained swap/input amount\n limits[assetInIndex] = MaxInt256;\n }\n if (hasTokenOut) {\n limits[assetOutIndex] = BigNumber.from(minOut).mul(-1);\n }\n return limits;\n }\n\n private updateLimits(limits: BigNumber[], newSwap: Swap): void {\n if (newSwap.hasTokenIn) {\n // We need to add amount for each swap that uses tokenIn to get correct total\n limits[newSwap.swaps[0].assetInIndex] = limits[\n newSwap.swaps[0].assetInIndex\n ].add(newSwap.amountIn);\n }\n if (newSwap.hasTokenOut) {\n // We need to add amount for each swap that uses tokenOut to get correct total (should be negative)\n limits[newSwap.swaps[0].assetOutIndex] = limits[\n newSwap.swaps[0].assetOutIndex\n ].sub(newSwap.minOut);\n }\n }\n\n isChainedSwap(swap: Swap): boolean {\n return (\n this.opRef[this.swaps.length - 1] &&\n this.toInternal === swap.fromInternal &&\n this.receiver === swap.sender &&\n this.opRef[this.swaps.length - 1].key.toString() === swap.amountIn\n );\n }\n\n // If swap has different send/receive params than previous then it will need to be done separately\n canAddSwap(newSwap: Swap): boolean {\n if (this.isChainedSwap(newSwap)) return true;\n return (\n newSwap.fromInternal === this.fromInternal &&\n newSwap.toInternal === this.toInternal &&\n newSwap.receiver === this.receiver &&\n newSwap.sender === this.sender\n );\n }\n\n callData(): CallData {\n const calls: string[] = [];\n\n for (const token of this.approveTokens) {\n // If swap tokenIn is a BPT then:\n // new pools have automatic infinite vault allowance, but not old ones\n // const key = Relayer.fromChainedReference(action.swaps[0].amount);\n // const readOnlyRef = Relayer.toChainedReference(key, false);\n // const approval = Relayer.encodeApproveVault(token, readOnlyRef.toString());\n // TODO fix approval amount\n // TODO only approve once\n const approval = Relayer.encodeApproveVault(token, MaxUint256.toString());\n calls.push(approval);\n }\n\n const funds: FundManagement = {\n sender: this.sender,\n recipient: this.receiver,\n fromInternalBalance: this.fromInternal,\n toInternalBalance: this.toInternal,\n };\n const batchSwapInput: EncodeBatchSwapInput = {\n swapType: SwapType.SwapExactIn,\n swaps: this.swaps,\n assets: this.assets,\n funds,\n limits: this.limits.map((l) => l.toString()),\n deadline: BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value: '0',\n outputReferences: this.opRef,\n };\n\n const encodedBatchSwap = Relayer.encodeBatchSwap(batchSwapInput);\n calls.push(encodedBatchSwap);\n return {\n params: batchSwapInput,\n encoded: calls,\n };\n }\n getAmountIn(): string {\n return this.limits[this.mainTokenInIndex].toString();\n }\n getAmountOut(): string {\n return this.limits[this.mainTokenOutIndex].abs().toString();\n }\n\n copy(): Swap {\n return new Swap(\n this.swaps[0],\n this.mainTokenInIndex,\n this.mainTokenOutIndex,\n this.opRefKey,\n this.assets,\n this.slippage,\n this.pools,\n this.user,\n this.relayer\n );\n }\n\n addSwap(swap: Swap): void {\n const isChainedSwap = this.isChainedSwap(swap);\n this.swaps.push(swap.swaps[0]);\n // Merge approveTokens without any duplicates\n this.approveTokens = [\n ...new Set([...this.approveTokens, ...swap.approveTokens]),\n ];\n this.toInternal = swap.toInternal;\n this.receiver = swap.receiver;\n this.hasTokenOut = swap.hasTokenOut;\n this.minOut = swap.minOut;\n this.opRef = [...this.opRef, ...swap.opRef];\n if (!isChainedSwap) {\n this.amountIn = BigNumber.from(this.amountIn)\n .add(swap.amountIn)\n .toString();\n }\n this.updateLimits(this.limits, swap);\n }\n\n isBpt(pools: SubgraphPoolBase[], token: string): boolean {\n return pools.some((p) => p.address.toLowerCase() === token.toLowerCase());\n }\n}\n","import { ActionType, Actions } from './types';\nimport { Swap } from './swap';\n\n/**\n * Categorize each action into a Join, Middle or Exit.\n * @param actions\n * @returns\n */\nexport function categorizeActions(actions: Actions[]): Actions[] {\n const enterActions: Actions[] = [];\n const exitActions: Actions[] = [];\n const middleActions: Actions[] = [];\n for (const a of actions) {\n if (a.type === ActionType.Exit || a.type === ActionType.Join) {\n // joins/exits with tokenIn can always be done first\n if (a.hasTokenIn) enterActions.push(a);\n // joins/exits with tokenOut (and not tokenIn) can always be done last\n else if (a.hasTokenOut) exitActions.push(a);\n else middleActions.push(a);\n }\n // All other actions will be chained inbetween\n else middleActions.push(a);\n }\n const allActions: Actions[] = [\n ...enterActions,\n ...middleActions,\n ...exitActions,\n ];\n return allActions;\n}\n\n/**\n * This aims to minimise the number of Actions the Relayer multicall needs to call by batching sequential swaps together.\n * @param actions\n * @param assets\n * @returns\n */\nexport function batchSwapActions(allActions: Actions[]): Actions[] {\n /*\n batchSwaps are a collection of swaps that can all be called in a single batchSwap\n Can batch all swaps with same source\n Any swap without tokenIn && not BPT should be coming from internal balances\n Any swap with tokenIn or BPT should be coming from external balances\n */\n const orderedActions: Actions[] = [];\n let batchedSwaps: Swap | undefined = undefined;\n\n for (const a of allActions) {\n if (a.type === ActionType.BatchSwap) {\n if (!batchedSwaps) {\n batchedSwaps = a.copy();\n } else {\n if (batchedSwaps.canAddSwap(a)) {\n batchedSwaps.addSwap(a);\n } else {\n orderedActions.push(batchedSwaps);\n batchedSwaps = a.copy();\n }\n }\n } else {\n // Non swap action\n if (batchedSwaps) {\n orderedActions.push(batchedSwaps);\n // new batchSwap collection as there is a chained join/exit inbetween\n batchedSwaps = undefined;\n }\n orderedActions.push(a);\n }\n }\n if (batchedSwaps) orderedActions.push(batchedSwaps);\n\n return orderedActions;\n}\n\n/**\n * Organise Actions into order with least amount of calls.\n * @param actions\n * @param assets\n * @returns\n */\nexport function orderActions(actions: Actions[]): Actions[] {\n const categorizedActions = categorizeActions(actions);\n const orderedActions = batchSwapActions(categorizedActions);\n return orderedActions;\n}\n","import { Interface } from '@ethersproject/abi';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport {\n SubgraphPoolBase,\n SwapInfo,\n SwapTypes,\n SwapV2,\n} from '@balancer-labs/sor';\nimport {\n Relayer,\n EncodeJoinPoolInput,\n EncodeBatchSwapInput,\n ExitPoolData,\n} from '@/modules/relayer/relayer.module';\nimport { getPoolAddress } from '@/pool-utils';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { orderActions, ActionType, Actions } from './actions';\n\nimport balancerRelayerAbi from '@/lib/abi/BalancerRelayer.json';\nimport { Join } from './actions/join';\nimport { Exit } from './actions/exit';\nimport { Swap } from './actions/swap';\nimport { Logger } from '@/lib/utils/logger';\n\nconst balancerRelayerInterface = new Interface(balancerRelayerAbi);\n\n// Quickly switch useful debug logs on/off\nconst DEBUG = false;\n\nfunction debugLog(log: string) {\n const logger = Logger.getInstance();\n if (DEBUG) logger.info(log);\n}\n\nexport function canUseJoinExit(\n swapType: SwapTypes,\n tokenIn: string,\n tokenOut: string\n): boolean {\n if (\n swapType === SwapTypes.SwapExactOut ||\n tokenIn.toLowerCase() === AddressZero.toLowerCase() ||\n tokenOut.toLowerCase() === AddressZero.toLowerCase()\n )\n return false;\n else return true;\n}\n\n/**\n * Currently SOR only supports join/exit paths through Weighted pools.\n * Weighted pools should not have preminted BPT so can assume if a swap token is pool address it is a join or exit.\n * @param pools\n * @param swap\n * @param assets\n * @returns\n */\nexport function hasJoinExit(\n pools: SubgraphPoolBase[],\n swap: SwapV2,\n assets: string[]\n): boolean {\n const pool = pools.find((p) => p.id === swap.poolId);\n if (pool?.poolType !== 'Weighted') return false;\n const tokenIn = assets[swap.assetInIndex];\n const tokenOut = assets[swap.assetOutIndex];\n return [tokenIn, tokenOut].includes(pool.address);\n}\n\n/**\n * Finds if a swap returned by SOR is a join by checking if tokenOut === poolAddress\n * @param swap\n * @param assets\n * @returns\n */\nexport function isJoin(\n swap: SwapV2,\n assets: string[],\n poolType: string | undefined\n): boolean {\n if (poolType !== 'Weighted') return false;\n // token[join]bpt\n const tokenOut = assets[swap.assetOutIndex];\n const poolAddress = getPoolAddress(swap.poolId);\n return tokenOut.toLowerCase() === poolAddress.toLowerCase();\n}\n\n/**\n * Finds if a swap returned by SOR is an exit by checking if tokenIn === poolAddress\n * @param swap\n * @param assets\n * @returns\n */\nexport function isExit(\n swap: SwapV2,\n assets: string[],\n poolType: string | undefined\n): boolean {\n if (poolType !== 'Weighted') return false;\n // bpt[exit]token\n const tokenIn = assets[swap.assetInIndex];\n const poolAddress = getPoolAddress(swap.poolId);\n return tokenIn.toLowerCase() === poolAddress.toLowerCase();\n}\n\n/**\n * Find if any of the swaps are join/exits. If yes these swaps should be routed via Relayer.\n * @param pools\n * @param swaps\n * @param assets\n * @returns\n */\nexport function someJoinExit(\n pools: SubgraphPoolBase[],\n swaps: SwapV2[],\n assets: string[]\n): boolean {\n return swaps.some((swap) => {\n return hasJoinExit(pools, swap, assets);\n });\n}\n\n/**\n * Translate each swap into an Action. An Action is a join/exit/swap with the chained output refs.\n * @param swapType\n * @param tokenIn\n * @param tokenOut\n * @param swaps\n * @param assets\n * @param slippage\n * @param pools\n * @param user\n * @param relayer\n * @returns\n */\nexport function getActions(\n tokenIn: string,\n tokenOut: string,\n swaps: SwapV2[],\n assets: string[],\n slippage: string,\n pools: SubgraphPoolBase[],\n user: string,\n relayer: string\n): Actions[] {\n const tokenInIndex = assets.findIndex(\n (t) => t.toLowerCase() === tokenIn.toLowerCase()\n );\n const tokenOutIndex = assets.findIndex(\n (t) => t.toLowerCase() === tokenOut.toLowerCase()\n );\n const actions: Actions[] = [];\n let opRefKey = 0;\n for (const swap of swaps) {\n const poolType = pools.find((p) => p.id === swap.poolId)?.poolType;\n if (isJoin(swap, assets, poolType)) {\n const newJoin = new Join(\n swap,\n tokenInIndex,\n tokenOutIndex,\n opRefKey,\n assets,\n slippage,\n user,\n relayer\n );\n opRefKey = newJoin.nextOpRefKey;\n actions.push(newJoin);\n continue;\n } else if (isExit(swap, assets, poolType)) {\n const newExit = new Exit(\n swap,\n tokenInIndex,\n tokenOutIndex,\n opRefKey,\n assets,\n slippage,\n user,\n relayer\n );\n opRefKey = newExit.nextOpRefKey;\n actions.push(newExit);\n continue;\n } else {\n const newSwap = new Swap(\n swap,\n tokenInIndex,\n tokenOutIndex,\n opRefKey,\n assets,\n slippage,\n pools,\n user,\n relayer\n );\n opRefKey = newSwap.nextOpRefKey;\n actions.push(newSwap);\n continue;\n }\n }\n return actions;\n}\n\n/**\n * Given swapInfo from the SOR construct the Relayer multicall to execture swaps/joins/exits.\n * @param swapInfo Returned from SOR\n * @param swapType Only supports ExactIn\n * @param pools Pool info from SOR\n * @param user Address of user\n * @param relayerAddress Address of Relayer (>=V4)\n * @param wrappedNativeAsset Address of Native asset\n * @param slippage [bps], eg: 1 === 0.01%, 100 === 1%\n * @param authorisation Encoded authorisation call.\n * @returns\n */\nexport function buildRelayerCalls(\n swapInfo: SwapInfo,\n pools: SubgraphPoolBase[],\n user: string,\n relayerAddress: string,\n wrappedNativeAsset: string,\n slippage: string,\n authorisation: string | undefined\n): {\n to: string;\n data: string;\n rawCalls: string[];\n inputs: (EncodeBatchSwapInput | ExitPoolData | EncodeJoinPoolInput)[];\n} {\n // For each 'swap' create a swap/join/exit action\n const actions = getActions(\n swapInfo.tokenIn,\n swapInfo.tokenOut,\n swapInfo.swaps,\n swapInfo.tokenAddresses,\n slippage,\n pools,\n user,\n relayerAddress\n );\n // Arrange action into order that will create minimal amount of calls\n const orderedActions = orderActions(actions);\n\n const calls: string[] = [];\n const inputs: (EncodeBatchSwapInput | ExitPoolData | EncodeJoinPoolInput)[] =\n [];\n if (authorisation)\n // Uses relayer to approve itself to act in behalf of the user\n calls.push(\n Relayer.encodeSetRelayerApproval(relayerAddress, true, authorisation)\n );\n\n // Create encoded call for each action\n for (const action of orderedActions) {\n if (action.type === ActionType.Exit || action.type === ActionType.Join) {\n const pool = pools.find((p) => p.id === action.poolId);\n if (pool === undefined)\n throw new BalancerError(BalancerErrorCode.NO_POOL_DATA);\n const { params, encoded } = action.callData(pool, wrappedNativeAsset);\n calls.push(encoded as string);\n inputs.push(params);\n }\n if (action.type === ActionType.BatchSwap) {\n const { params, encoded } = action.callData();\n calls.push(...encoded);\n inputs.push(params);\n }\n }\n\n // Safety check to make sure amounts/limits from calls match expected\n checkAmounts(\n orderedActions.map((a) => BigNumber.from(a.getAmountIn())),\n orderedActions.map((a) => BigNumber.from(a.getAmountOut())),\n swapInfo,\n slippage\n );\n // encode relayer multicall\n const callData = balancerRelayerInterface.encodeFunctionData('multicall', [\n calls,\n ]);\n\n return {\n to: relayerAddress,\n data: callData,\n rawCalls: calls,\n inputs,\n };\n}\n\nfunction checkAmounts(\n amountsIn: BigNumber[],\n amountsOut: BigNumber[],\n swapInfo: SwapInfo,\n slippage: string\n): void {\n const totalIn = amountsIn.reduce(\n (total = BigNumber.from(0), amount) => (total = total.add(amount))\n );\n const totalOut = amountsOut.reduce(\n (total = BigNumber.from(0), amount) => (total = total.add(amount))\n );\n // totalIn should equal the original input swap amount\n // totalOut should equal the return amount from SOR minus any slippage allowance\n debugLog(`${totalIn.toString()} totalIn`);\n debugLog(`${swapInfo.swapAmount.toString()} swapInfo.swapAmount`);\n debugLog(`${totalOut.toString()} totalOut`);\n debugLog(\n `${subSlippage(\n swapInfo.returnAmount,\n BigNumber.from(slippage)\n ).toString()} slippage`\n );\n debugLog(`${swapInfo.returnAmount.toString()} swapInfo.returnAmount`);\n const diffOut = totalOut.sub(\n subSlippage(swapInfo.returnAmount, BigNumber.from(slippage))\n );\n if (!totalIn.eq(swapInfo.swapAmount) || !diffOut.lt(`3`))\n throw new BalancerError(BalancerErrorCode.RELAY_SWAP_AMOUNTS);\n /* ExactOut case\n // totalIn should equal the return amount from SOR (this is the amount in) plus any slippage allowance\n // totalOut should equal the original input swap amount (the exact amount out)\n if (\n !totalIn.eq(\n addSlippage(swapInfo.returnAmount, BigNumber.from(slippage))\n ) ||\n !totalOut.eq(swapInfo.swapAmount)\n )\n throw new BalancerError(BalancerErrorCode.RELAY_SWAP_AMOUNTS);\n */\n}\n"],"names":["BasePoolExitKind","StablePoolJoinKind","StablePhantomPoolJoinKind","StablePoolExitKind","WeightedPoolJoinKind","WeightedPoolExitKind","BasePoolEncoder","recoveryModeExit","bptAmountIn","defaultAbiCoder","encode","RECOVERY_MODE","StablePoolEncoder","constructor","joinInit","amountsIn","INIT","joinCollectProtocolFees","COLLECT_PROTOCOL_FEES","joinExactTokensInForBPTOut","minimumBPT","EXACT_TOKENS_IN_FOR_BPT_OUT","joinTokenInForExactBPTOut","bptAmountOut","enterTokenIndex","TOKEN_IN_FOR_EXACT_BPT_OUT","exitExactBPTInForOneTokenOut","exitTokenIndex","EXACT_BPT_IN_FOR_ONE_TOKEN_OUT","exitExactBPTInForTokensOut","EXACT_BPT_IN_FOR_TOKENS_OUT","exitBPTInForExactTokensOut","amountsOut","maxBPTAmountIn","BPT_IN_FOR_EXACT_TOKENS_OUT","WeightedPoolEncoder","joinAllTokensInForExactBPTOut","ALL_TOKENS_IN_FOR_EXACT_BPT_OUT","ManagedPoolEncoder","exitForManagementFees","MANAGEMENT_FEE_TOKENS_OUT","toNormalizedWeights","weights","length","Array","fill","ONE","div","sum","reduce","total","weight","add","Zero","eq","normalizedWeights","normalizedSum","index","mul","sub","isNormalizedWeights","totalWeight","ComposableStablePoolJoinKind","ComposableStablePoolExitKind","ComposableStablePoolEncoder","exitExactBPTInForAllTokensOut","EXACT_BPT_IN_FOR_ALL_TOKENS_OUT","isProduction","process","env","NODE_ENV","prefix","invariant","condition","message","Error","provided","value","concat","splitPoolId","poolId","address","getPoolAddress","specialization","getPoolSpecialization","nonce","getPoolNonce","slice","specializationCode","parseInt","BigNumber","from","Network","APR_THRESHOLD","SHALLOW_COMPOSABLE_STABLE_BUFFER","POOLS_GENERIC","IdsMap","Pagination","PerPage","PerPool","PerPoolInitial","DelegateOwner","ZeroAddress","DynamicFees","Gauntlet","BlockList","ExcludedPoolTypes","Stable","AllowList","Investment","Factories","Stakable","Metadata","name","hasIcon","POOLS_MAP","GOERLI","staBAL","bbAaveUSD","v1","v2","veBAL","MAINNET","POLYGON","xMatic","stMatic","mai4","maiBbaUsd","ARBITRUM","GNOSIS","POOLS","networkId","PoolGaugesAttributes","PoolShareAttributes","GaugeShareAttributes","PoolSpecialization","UserBalanceOpKind","PoolBalanceOpKind","PoolType","Logger","this","enableLogging","static","instance","setLoggingEnabled","enabled","info","warn","console","error","time","timeEnd","transposeMatrix","matrix","map","_","columnIndex","row","AssetHelpers","wethAddress","ETH","AddressZero","isETH","token","isEqual","isWETH","WETH","translateToERC20","getAddress","sortTokens","tokens","others","forEach","array","erc20Tokens","sortedTranspose","sort","tokenA","tokenB","toLowerCase","cmpTokens","sortedErc20s","sortedOthers","includes","addressA","addressB","balancerErrorCodes","BalancerErrors","async","accountToAddress","account","Signer","isSigner","RelayerAction","isErrorCode","errorCode","replace","Object","keys","parseErrorCode","actualError","tryParseErrorCode","isBalancerError","values","encodeError","encodedError","entries","find","RelayerAuthorization","encodeCalldataAuthorization","calldata","deadline","signature","encodedDeadline","hexZeroPad","hexValue","v","r","s","splitSignature","signJoinAuthorization","validator","user","allowedSender","allowedCalldata","signAuthorizationFor","JoinPool","signExitAuthorization","ExitPool","signSwapAuthorization","Swap","signBatchSwapAuthorization","BatchSwap","signSetRelayerApprovalAuthorization","SetRelayerApproval","type","MAX_DEADLINE","chainId","provider","getNetwork","userAddress","getNextNonce","domain","version","verifyingContract","types","sender","toString","_signTypedData","BalancerMinterAuthorization","signSetMinterApproval","minterContract","minter","approval","SetMinterApproval","signPermit","owner","spender","amount","ownerAddress","nonces","Permit","BZERO","BigInt","BONE","_require","b","_computeScalingFactor","tokenDecimals","decimalsDifference","_upscale","scalingFactor","SolidityMaths","mulDownFixed","_upscaleArray","amounts","scalingFactors","upscaledAmounts","i","_downscaleDown","divDownFixed","_downscaleDownArray","downscaledAmounts","a","c","args","previous","current","roundUp","divUp","divDown","product","aInflated","x","y","raw","LogExpMath","pow","maxError","mulUpFixed","MAX_POW_RELATIVE_ERROR","ONE_18","x_int256","MILD_EXPONENT_BOUND","y_int256","logx_times_y","LN_36_LOWER_BOUND","LN_36_UPPER_BOUND","ln_36_x","_ln_36","_ln","MIN_NATURAL_EXPONENT","MAX_NATURAL_EXPONENT","exp","firstAN","x0","a0","x1","a1","ONE_20","x2","a2","x3","a3","x4","a4","x5","a5","x6","a6","x7","a7","x8","a8","x9","a9","term","seriesSum","z","ONE_36","z_squared","num","a10","x10","a11","x11","AMP_PRECISION","parsePoolInfo","pool","wrappedNativeAsset","unwrapNativeAsset","poolTokens","decimals","_a","balancesEvm","parseFixed","balance","toBigInt","priceRates","priceRate","scalingFactorsRaw","d","sf","upScaledBalances","assetHelpers","ampWithPrecision","amp","higherBalanceTokenIndex","indexOf","max","scalingFactorsWithoutBpt","scalingFactorsRawWithoutBpt","poolTokensWithoutBpt","balancesEvmWithoutBpt","priceRatesWithoutBpt","upScaledBalancesWithoutBpt","bptIndex","splice","swapFeeEvm","swapFee","totalSharesEvm","totalShares","TOKENS_GENERIC","Popular","Symbols","Addresses","nativeAsset","wNativeAsset","BAL","TOKENS_MAP","bbaUSD","PriceChainMap","bbaUSDv2","TOKENS","_permanentCensorErrors","_censorErrors","LogLevels","debug","default","warning","off","_logLevel","_globalLogger","_normalizeError","missing","form","normalize","push","join","String","fromCharCode","_checkNormalize","LogLevel","ErrorCode","HEX","defineProperty","enumerable","writable","_log","logLevel","level","throwArgumentError","log","apply","levels","DEBUG","INFO","WARNING","makeError","code","params","errors","UNKNOWN_ERROR","messageDetails","key","Uint8Array","hex","JSON","stringify","reason","url","NUMERIC_FAULT","fault","CALL_EXCEPTION","INSUFFICIENT_FUNDS","MISSING_NEW","NONCE_EXPIRED","REPLACEMENT_UNDERPRICED","TRANSACTION_REPLACED","UNPREDICTABLE_GAS_LIMIT","throwError","INVALID_ARGUMENT","argument","assert","assertArgument","checkNormalize","UNSUPPORTED_OPERATION","operation","checkSafeUint53","checkArgumentCount","count","expectedCount","MISSING_ARGUMENT","UNEXPECTED_ARGUMENT","checkNew","target","kind","checkAbstract","censorship","permanent","globalLogger","logger","names","formatUnits","unitName","formatFixed","parseUnits","yieldTokens","waUSDT","waUSDC","waDAI","wamDAI","wamUSDC","wamUSDT","wrappedTokensMap","aToken","underlying","wrappedATokenInterface","Interface","AaveRates","multicall","network","addresses","payload","wrappedATokenAddress","callData","encodeFunctionData","res","callStatic","aggregate","p","parseFloat","wrappedAToken","tokensToTokenPrices","tokenPrices","price","tokenAddressForPricing","addressMapIn","unwrapToken","addressMap","wrappedAddress","lowercase","toLocaleLowerCase","aaveChain","undefined","aaveWrappedMap","getEthValue","filter","Debouncer","fn","wait","limit","requestSets","promisedCalls","promisedCount","debounceCancel","fetch","attr","_b","Set","size","execute","promise","timeout","resolve","reject","Promise","rej","makePromise","clearTimeout","call","requestAttrs","then","results","catch","response","data","setTimeout","bind","valueWithTrimmedDecimals","RegExp","result","match","parsedValue","_parseFixed","_formatFixed","parseToBigInt18","formatFromBigInt18","bn","bpsPerOne","mulSlippage","slippage","subSlippage","delta","addSlippage","isSameAddress","address1","address2","insert","arr","newItem","removeItem","newArray","reorderArrays","reference","original","some","indexesOfOriginal","othersResorted","indexOfOriginal","arrIndex","isLinearish","poolType","supportedPoolTypes","truncateAddresses","t","findEventInReceiptLogs","receipt","to","contractInterface","logName","event","logs","parseLog","getInstance","parsedLog","getRandomBytes32","Math","random","BalancerAPIArgsFormatter","format","SubgraphArgsFormatter","operatorMap","gt","lt","in","not_in","contains","whereQuery","where","operator","GraphQLArgsBuilder","merge","other","mergedArgs","mergeWith","objValue","srcValue","isArray","formatter","_abi","inputs","components","internalType","stateMutability","anonymous","indexed","outputs","AaveLinearPool__factory","utils","signerOrProvider","Contract","abi","AaveLinearPoolFactory__factory","AaveWrapping__factory","Authoriser__factory","BalancerHelpers__factory","BalancerMinter__factory","BalancerPoolDataQueries__factory","BalancerRelayer__factory","BatchRelayerLibrary__factory","ComposableStablePool__factory","ComposableStablePoolFactory__factory","ConvergentCurvePool__factory","constant","payable","ERC20__factory","ERC4626LinearPool__factory","ERC4626LinearPoolFactory__factory","EulerLinearPool__factory","EulerLinearPoolFactory__factory","FXPool__factory","GaugeClaimHelper__factory","GearboxLinearPool__factory","GearboxLinearPoolFactory__factory","GyroConfig__factory","LidoRelayer__factory","LinearPool__factory","LiquidityGaugeV5__factory","Multicall__factory","Multicall3__factory","StablePool__factory","StaticATokenRateProvider__factory","Vault__factory","WeightedPool__factory","WeightedPoolFactory__factory","YearnLinearPool__factory","YearnLinearPoolFactory__factory","GyroEV2__factory","VeBal__factory","VeDelegationProxy__factory","SwapType","getLimitsForSlippage","tokensIn","tokensOut","swapType","deltas","assets","limits","tokenIn","slippageAmount","WeiPerEther","SwapExactOut","tokenOut","SwapExactIn","balancerVault","BALANCER_NETWORK_CONFIG","contracts","poolDataQueries","lidoRelayer","veBal","gaugeControllerCheckpointer","veBalProxy","gyroConfigProxy","addressesByNetwork","bal","weth","bbaUsd","bb_a_usd","lbpRaisingTokens","stETH","wstETH","urls","subgraph","gaugesSubgraph","blockNumberSubgraph","thirdParty","coingecko","nativeAssetId","platformId","pools","wETHwstETH","id","poolsToIgnore","sorConnectingTokens","symbol","sorTriPathMidPoolIds","gaugeClaimHelper","erc4626LinearPoolFactory","aaveLinearPoolFactory","OPTIMISM","averageBlockTime","FANTOM","vault","balancerRelayer","balancerHelpers","weightedPoolFactory","composableStablePoolFactory","yearnLinearPoolFactory","SEPOLIA","ZKEVM","balancerMinter","multicallBatchSize","AVALANCHE","BASE","networkAddresses","BalancerErrorCode","BalancerError","super","getMessage","ABOVE_MAX_TOKENS","BELOW_MIN_TOKENS","EXIT_DELTA_AMOUNTS","FEE_PROVIDER_NOT_PROVIDED","GAUGES_HELPER_ADDRESS_NOT_PROVIDED","GAUGES_NOT_FOUND","GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED","GAUGES_REWARD_TOKEN_EMPTY","INPUT_LENGTH_MISMATCH","INPUT_OUT_OF_BOUNDS","INPUT_TOKEN_INVALID","INVALID_PROTOCOL_ID","INVALID_SWAP_FEE_PERCENTAGE","INVALID_WEIGHTS","JOIN_DELTA_AMOUNTS","JOIN_WITH_ZERO_AMOUNT","MISSING_AMP","MISSING_DECIMALS","MISSING_PRICE_RATE","MISSING_TOKENS","MISSING_WEIGHT","NO_POOL_DATA","NO_VALUE_PARAMETER","POOL_DOESNT_EXIST","RELAY_SWAP_AMOUNTS","REWARD_TOKEN_ZERO","TIMESTAMP_IN_THE_FUTURE","TOKEN_MISMATCH","UNSUPPORTED_PAIR","UNSUPPORTED_POOL_TYPE","calcPriceImpact","bptAmount","bptZeroPriceImpact","isJoin","pi","calcPriceImpactJoin","calcPriceImpactExit","bptSpotPrice","balances","bptSupply","tokenIndexIn","totalCoins","D","numTokens","prevInvariant","ampTimesTotal","P_D","j","_calculateInvariant","S","D_P","alpha","beta","gamma","partial_x","minus_partial_D","divUpFixed","StablePoolPriceImpact","tokenAmounts","StablePoolExit","buildExitExactBPTIn","exiter","bptIn","shouldUnwrapNativeAsset","singleTokenOut","toInternalBalance","checkInputsExactBPTIn","sortedValues","sortValuesExitExactBptIn","minAmountsOut","expectedAmountsOut","singleTokenOutIndex","calcTokenOutGivenExactBptIn","calcTokensOutGivenExactBptIn","userData","encodedData","encodeExitPool","priceImpact","buildExitExactTokensOut","checkInputsExactTokensOut","sortValuesExitExactTokensOut","expectedBPTIn","maxBPTIn","calcBptInGivenExactTokensOut","downScaledAmountsOut","buildRecoveryExit","isNegative","tokensList","parsedPoolInfo","upScaledAmountsOut","amountOut","SOR","StableMathBigInt","_calcTokenOutGivenExactBptIn","downscaledAmountOut","amountsOutScaledDown","_calcTokensOutGivenExactBptIn","_calcBptInGivenExactTokensOut","functionName","attributes","recipient","exitPoolRequest","createInterface","StablePoolJoin","buildJoin","joiner","checkInputs","sortValues","expectedBPTOut","minBPTOut","calcBptOutGivenExactTokensIn","encodeJoinPool","sortedAmountsIn","upScaledAmountsIn","_calcBptOutGivenExactTokensIn","joinPoolRequest","maxAmountsIn","fromInternalBalance","StablePoolLiquidity","calcTotal","sumBalance","sumValue","usd","avgPrice","SCALING_FACTOR","StablePoolSpotPrice","calcPoolSpotPrice","stablePool","StablePool","fromPool","poolPairData","parsePoolPairData","_spotPriceAfterSwapExactTokenInForTokenOut","ZERO","exit","liquidity","spotPriceCalculator","priceImpactCalculator","PhantomStablePoolSpotPrice","metaStablePool","PhantomStablePool","ComposableStablePoolJoin","sortValuesBasedOnPoolVersion","buildExactTokensInForBPTOut","sortV1","encodeUserDataExactTokensInForBPTOut","assetsWithBpt","encodedUserData","maxAmountsInWithBpt","sortV4","ComposableStablePoolExit","singleTokenOutIndexWithoutBpt","minAmountsOutWithBpt","downscaledAmountsOutWithoutBpt","downscaledAmountsOutWithBpt","checkInputsRecoveryExit","lte","poolTypeVersion","isInRecoveryMode","parsedValues","downscaledAmountsOutWithBptWithRounding","isZero","upScaledAmountsOutWithoutBpt","ComposableStable","WeightedPoolPriceImpact","WeightedPoolExit","WeightedMaths","WeightedPoolJoin","WeightedPoolLiquidity","sumWeight","toFixed","WeightedPoolSpotPrice","isBPTAsToken","bptAsToken","weightedPool","WeightedPool","spotPrice","pop","Weighted","MetaStablePoolLiquidity","MetaStablePoolSpotPrice","MetaStablePool","MetaStable","StablePhantomPoolExit","StablePhantomPoolJoin","StablePhantom","LinearPriceImpact","LinearPoolExit","LinearMaths","LinearPoolJoin","LinearPoolLiquidity","LinearPoolSpotPrice","linearPool","LinearPool","Linear","FXExitConcern","FXLiquidityConcern","FXSpotPriceConcern","FXPriceImpactConcern","FXJoinConcern","FX","GyroExitConcern","GyroLiquidityConcern","GyroSpotPriceConcern","GyroPriceImpactConcern","GyroJoinConcern","Gyro","PoolTypeConcerns","config","weighted","stable","composableStable","metaStable","stablePhantom","linear","Liquidity","parsedTokens","subPoolLiquidity","all","findBy","getLiquidity","totalBPT","bptInParentPool","liquidityInParentPool","totalSubPoolLiquidity","totalLiquidity","subPool","nonPoolTokens","nonPoolTokensWithUpdatedPrice","tokenPrice","latestUSDPrice","parsedTokenLiquidity","filterTokens","obj","populateGauges","gauges","claimableRewards","claimableTokens","gauge","rewards","populateGauge","it","reduceRewardTokens","rewardTokens","liquidityGaugeV5Interface","balancerMinterInterface","gaugeClaimHelperInterface","ClaimService","liquidityGauges","feeDistributor","gaugeClaimHelperAddress","balancerMinterAddress","getGauges","gaugeAddresses","getRewardTokens","retrieveClaimableTokens","retrieveClaimableRewards","getClaimableRewardTokens","flatMap","expectedValues","tokenAddress","every","expectedTokensValue","getClaimableBalances","tokenBalance","claimBalances","paths","getPayload","res0x","path","reduceClaimableRewards","gaugeAddress","getArguments","balAddress","reduceClaimableTokens","queryBatchSwap","vaultContract","swaps","funds","err","__assign","assign","n","arguments","prototype","hasOwnProperty","docCache","Map","fragmentSourceMap","printFragmentWarnings","experimentalFragmentVariables","string","trim","processFragments","ast","seenKeys","definitions","fragmentDefinition","fragmentName","sourceKey","loc","source","body","substring","start","end","sourceKeySet","get","has","set","parseDocument","cacheKey","parsed","parse","allowLegacyFragmentVariables","doc","workSet","node","startToken","endToken","stripLoc","gql","literals","_i","arg","gql_1","extras","clear","resetCaches","disableFragmentWarnings","enableExperimentalFragmentVariables","disableExperimentalFragmentVariables","AmpUpdate_OrderBy","BalancerSnapshot_OrderBy","Balancer_OrderBy","CircuitBreaker_OrderBy","GradualWeightUpdate_OrderBy","InvestType","JoinExit_OrderBy","LatestPrice_OrderBy","ManagementOperation_OrderBy","OperationType","OrderDirection","PoolContract_OrderBy","PoolHistoricalLiquidity_OrderBy","PoolShare_OrderBy","PoolSnapshot_OrderBy","PoolToken_OrderBy","Pool_OrderBy","PriceRateProvider_OrderBy","ProtocolIdData_OrderBy","SwapFeeUpdate_OrderBy","Swap_OrderBy","TokenPrice_OrderBy","TokenSnapshot_OrderBy","Token_OrderBy","TradePairSnapshot_OrderBy","TradePair_OrderBy","UserInternalBalance_OrderBy","User_OrderBy","_SubgraphErrorPolicy_","gql$1","SubgraphPoolShareFragmentDoc","SubgraphPoolFragmentDoc","SubgraphPoolSnapshotFragmentDoc","SubgraphJoinExitFragmentDoc","SubgraphBalancerFragmentDoc","SubgraphTokenPriceFragmentDoc","SubgraphTokenLatestPriceFragmentDoc","SubgraphUserFragmentDoc","PoolShareDocument","PoolSharesDocument","PoolsDocument","AllPoolsDocument","PoolDocument","PoolHistoricalLiquiditiesDocument","PoolSnapshotsDocument","JoinExitsDocument","BalancersDocument","TokenPricesDocument","TokenLatestPricesDocument","TokenLatestPriceDocument","UserDocument","UsersDocument","defaultWrapper","action","_operationName","_operationType","getSdk","client","withWrapper","PoolShare","variables","requestHeaders","wrappedRequestHeaders","request","PoolShares","Pools","AllPools","Pool","PoolHistoricalLiquidities","PoolSnapshots","JoinExits","Balancers","TokenPrices","TokenLatestPrices","TokenLatestPrice","User","Users","Chain","GaugeFactory_OrderBy","GaugeShare_OrderBy","GaugeType_OrderBy","GaugeVote_OrderBy","Gauge_OrderBy","LiquidityGauge_OrderBy","LockSnapshot_OrderBy","OmniVotingEscrowLock_OrderBy","RewardToken_OrderBy","RootGauge_OrderBy","SingleRecipientGauge_OrderBy","VotingEscrowLock_OrderBy","VotingEscrow_OrderBy","SubgraphGaugeShareFragmentDoc","SubgraphLiquidityGaugeFragmentDoc","SubgraphPoolWithPreferentialGaugeFragmentDoc","GaugeShareDocument","GaugeSharesDocument","LiquidityGaugesDocument","PoolGaugesDocument","createSubgraphClient","subgraphUrl","GraphQLClient","createGaugesClient","GaugeShare","GaugeShares","LiquidityGauges","PoolGauges","Gauges.getSdk","Multicaller3","options","calls","interface","connect","batchSize","executeMulticall","numBatches","ceil","batchPromises","batchIndex","batchRequests","allowFailure","aggregate3","offset","callIndex","success","returnData","decodeFunctionResult","e","weightedCalls","multicaller","linearCalls","stableCalls","gyroECalls","fetchOnChainPoolData","vaultAddress","getTotalSupplyFn","getSwapFeeFn","defaultCalls","do_nothing","poolTypeCalls","getOnChainBalances","subgraphPoolsOriginal","_multiAddress","poolsWithOnchainData","onchainData","idx","wrappedToken","wrappedIndex","wrappedTokenRate","lowerTarget","targets","upperTarget","tokenRates","rate","SubgraphPoolDataService","sorConfig","query","defaultArgs","orderBy","TotalLiquidity","orderDirection","Desc","swapEnabled","queryArgs","mapped","expiryTime","unitSeconds","principalToken","baseToken","mapPools","getSubgraphPools","findIndex","fetchOnChainBalances","onChainBalances","formattedQuery","first","pool0","pool1000","pool2000","SubgraphTokenPriceService","ethPerToken","getLatestPriceInEthFromSubgraph","latestPrices","asset_in","pricesKeyedOnId","keyBy","matchingLatestPrices","asset","pricingAssetPricedInEth","pricingAsset","getNetworkConfig","networkConfig","customSubgraphUrl","tenderly","POOLS_TO_IGNORE","ApiTokenPriceService","balancerApiUrl","tokenPriceQuery","chainKey","tokenGetCurrentPrices","tokenPriceUsd","nativeAssetPriceUsd","NativeAssetAddress","tokenPriceInNativeAsset","getCoingeckoApiBaseUrl","isDemoApi","getCoingeckoApiKeyHeaderName","CoingeckoTokenPriceService","urlBase","isDemoApiKey","coingeckoApiKeyHeaderName","apiKey","coingeckoApiKey","getTokenPriceInNativeAsset","endpoint","axios","headers","Accept","Sor","sdkConfig","getSorConfig","sorNetworkConfig","getSorNetworkConfig","JsonRpcProvider","rpcUrl","subgraphClient","getPoolDataService","getTokenPriceService","tokenPriceService","poolDataService","sor","connectingTokens","triPathMidPoolIds","allPoolsToIgnore","coingeckoConfig","checkSimpleFlashSwapParams","poolIds","createSwaps","assetInIndex","assetOutIndex","deltaToExpectedProfit","Number","calcProfit","profits","underlyingToWrappedMap","tokenForSwaps","wrapped","Relayers","relayerResolver","assetIn","assetOut","lido","swapFragment","relayer","f","amountForLimit","maxSlippage","min","decorateSorSwapInfo","swapInfo","amountIn","swapAmount","returnAmount","amountInForLimits","swapAmountForSwaps","returnAmountFromSwaps","amountOutForLimits","tokenInForSwaps","tokenOutFromSwaps","SingleSwapBuilder","setFunds","setDeadline","setLimits","singleSwap","attrs","fragment","outputReference","BatchSwapBuilder","minAmountOut","maxAmountIn","tokenAddresses","split","outputReferences","buildRouteDefaultOptions","maxPools","gasPrice","Swaps","sorOrConfig","l","getSwaps","SwapTypes","buildSwap","builder","opts","findRouteGivenIn","batchSwap","encodeBatchSwap","flashLoanAmount","walletAddress","convertSimpleFlashSwapToBatchSwapParameters","fetchPools","getPools","tokenAddress0","tokenAddress1","isProfitable","querySimpleFlashSwap","swapInput","swapTypeSOR","getSorSwapInfo","swap","assetDeltas","fromEntries","PoolKind","relayerLibrary","Relayer","maxAmount","relayerAdress","approved","authorisation","poolKind","staticToken","fromUnderlying","toUnderlying","linearPoolType","unwrapType","encodeUnwrapAaveStaticToken","isTemporary","CHAINED_REFERENCE_TEMP_PREFIX","CHAINED_REFERENCE_READONLY_PREFIX","paddedPrefix","repeat","ref","amountBn","mask","check","_hex","signRelayerApproval","relayerAddress","signerAddress","signer","MaxUint256","Subgraph","initClient","Pricing","poolsDict","parseToPoolsDict","routeProposer","getCandidatePathsFromDict","getSpotPriceAfterSwapForPath","Multicaller","isLessThan24Hours","incomingDateInSec","round","Date","now","VeBal","veBalAddress","formatLockInfo","lockInfo","lockedAmount","lockedEndDate","locked","hasExistingLock","lockedEndDateNormalised","toNumber","isExpired","totalSupply","epoch","VeBalProxy","adjustedBalanceOf","Contracts","networkOrAddresses","getLiquidityGauge","contractAddresses","eulerLinearPoolFactory","gearboxLinearPoolFactory","gyroConfig","instances","BasePool","getBasePool","ERC20","getErc20","liquidityGauge","ImpermanentLossService","tokenHistoricalPrices","timestamp","prepareData","poolValueDelta","getPoolValueDelta","holdValueDelta","getHoldValueDelta","calculateImpermanentLoss","floor","abs","priceDelta","entryTimestamp","getWeights","entryPrices","getEntryPrices","exitPrices","getExitPrices","getAssets","getDelta","entryPrice","exitPrice","ILLEGAL_PARAMETER","noWeights","uniformWeight","w","prices","tokensWithPrice","INITIAL_RATE","START_EPOCH_TIME","RATE_REDUCTION_TIME","RATE_REDUCTION_COEFFICIENT","weekly","currentTimestamp","getTime","miningEpoch","totalEmissions","startingEpoch","endingEpoch","currentEpoch","secondsInStartingEpoch","secondsInEndingEpoch","ProtocolRevenue","repository","multicallData","balPrice","lastWeekBalRevenue","balAmount","lastWeekBBAUsdRevenue","bbAUsdAmount","bbAUsdPrice","veBalSupply","PoolFees","yesterdaysPools","yesterdaysPool","totalSwapFee","createTime","PoolApr","tokenMeta","tokenYields","feeCollector","gyroConfigRepository","last24hFees","feesDailyBsp","protocolSwapFeePercentage","breakdown","bptFreeTokens","aprs","apr","tokenYield","isExemptFromYieldProtocolFee","protocolYieldFeeCache","subSwapFees","swapFees","subApr","tokenAprs","getWeight","poolToken","bptPrice","_c","_d","_e","weightedAprs","pickBy","zipObject","identity","boost","workingSupply","balInflationRate","bptPriceUsd","gaugeSupplyUsd","reward","balReward","rewardTokenApr","totalSupplyUsd","rewardValue","balPriceUsd","gaugeBalEmissionsUsd","emissions.weekly","relativeWeight","tAddress","rewardTokensBreakdown","rewardValueScaled","revenue","dailyRevenue","stakingApr","rewardAprs","protocolApr","minStakingApr","maxStakingApr","last24h","liquidityService","fee","getGyroProtocolFee","protocolSwapFeeCache","rewardData","period_finish","yearlyReward","meta","joinActions","Element","LiquidityBootstrapping","exitActions","PoolGraph","getGraphNodes","tokensToUnwrap","rootNode","buildGraphFromRootPool","orderByBfs","reverse","rootPool","buildGraphFromPool","getTokenTotal","nodeIndex","parent","proportionOfParent","parentPool","tokenIndex","leafTokenDecimals","createInputTokenNode","joinAction","exitAction","tokenTotal","spotPrices","sp","poolNode","isProportionalExit","children","marked","isLeaf","updateNodeIfProportionalExit","createLinearNodeChildren","proportion","tokenWeight","finalProportion","childNode","linearPoolNode","mainIndex","wrappedNodeInfo","createWrappedTokenNode","mainTokenDecimals","nodeInfo","wrappedTokenNode","unwrappedBalance","inputNode","root","nodes","orderedNodes","currentNode","shift","WeightedPoolDecoder","decode","JoinModel","relayerModel","joinKind","decodeJoinData","allTokensInForExactBPTOut","amountsInWithRef","doChainedRefReplacements","SubgraphType","bptAsPoolToken","bptBalanceEVM","updateTokenBalanceForPool","tokensWithoutBpt","balanceEvm","bptAmountOutWithRef","tokenInIndex","doChainedRefReplacement","pairData","bptAmountOutHuman","amountInHuman","_tokenInForExactTokenOut","bnum","dp","decimalsIn","amountInEvm","balanceIn","balanceOut","bptOut","isChainedReference","setChainedReferenceValue","ExitModel","exitKind","decodeExitData","exactBptInForTokensOut","bptInWithRef","exactBptInForOneTokenOut","amountOutHuman","_exactTokenInForTokenOut","decimalsOut","amountOutEvm","poolBalances","pt","getBalancesForTokens","tokenOutIndex","SwapModel","swapRequest","doSwap","batchSwapRequest","previousAmount","getChainedReferenceValue","isExactIn","UnwrapModel","unwrapRequest","underlyingToken","PoolModel","joinModel","exitModel","swapModel","unwrapModel","doJoinPool","doExitPool","doBatchSwap","doSingleSwap","doUnwrap","RelayerModel","chainedRefs","PoolsSource","poolsArray","dataSource","refresh","list","cloneDeep","BptAsToken","parseNewPool","subgraphPool","ComposableStablePool","ActionType","VaultModel","poolsSource","updateDeltas","rawCalls","poolModel","poolsDictionary","actionType","Join","doJoin","Exit","doExit","Unwrap","balancerRelayerInterface","debugLog","poolGraph","simulationService","createCalls","joinPaths","isNativeAssetJoin","multiRequests","encodedCalls","outputIndexes","createActionCalls","unshift","createSetRelayerApproval","encodedCall","amountsOutByJoinPath","simulationType","simulateGeneralisedJoin","totalAmountOut","minAmountsOutByJoinPath","totalMinAmountOut","isSimulation","joinPath","isLeafJoin","modelRequests","shouldBeConsidered","isLastChainedCall","hasSiblingInput","minOut","modelRequest","createSwap","minBptOut","createJoinPool","outputRef","encodedPeekCall","encodePeekChainedReferenceValue","toChainedReference","encodeSetRelayerApproval","joinPathIndex","expectedOut","getOutputRefValue","replaceWrappedNativeAsset","allImmediateChildrenSendToInternal","allSiblingsSendToInternal","encodeSwap","mapSwapRequest","userTokenIn","userBptOut","inputTokens","inputAmts","child","sortedTokens","sortedAmounts","userDataAmounts","formatJoinPoolInput","mapJoinPoolRequest","userAmountsTokenIn","userAmountOut","hasChildInput","isRef","sendsToInternalBalance","siblings","wrappedNativeAssetIndex","nativeAssetIndex","tokensInWithoutNativeAsset","getJoinPaths","totalBptZeroPi","totalBptZeroPriceImpact","queryData","assertDeltas","poolAddress","inputNodes","nonLeafInputNodes","nonLeafInputNode","nonLeafAmountIn","totalProportions","proportionalNonLeafAmountIn","inputTokenNode","nonLeafJoinPath","currentChild","parentCopy","updateInputAmounts","ajdustAmountInDiff","tokenInInputNodes","amountsInSumforTokenIn","diff","leafJoinPath","updateTotalProportions","updateNodeAmount","nonLeafJoinPaths","leafNode","bptOutZeroPiForInputNode","spProduct","parentNode","childAddress","spPriceScaled","inputAmountScaled","totalProportion","inputAmount","TenderlyHelper","tenderlyConfig","simulateMulticall","encodedStateOverrides","encodeBalanceAndAllowanceOverrides","encodeRelayerApprovalOverride","simulateTransaction","state_objects","storage","toHexString","network_id","block_number","blockNumber","input","save_if_fails","simulation_type","SIMULATE_URL","tenderlyUrl","post","transaction","transaction_info","call_trace","output","stateOverrides","requestStateOverrides","tokensWithoutNativeAsset","MaxInt256","k","ENCODE_STATES_URL","networkID","project","accessKey","SimulationType","Simulation","Tenderly","tenderlyHelper","simulationResult","decodeResult","requestResult","simulateRequests","Static","staticResult","decodedResponse","Buffer","simulateGeneralisedExit","multicallResult","outputIndex","vaultModel","requests","tokenOutDeltas","amountsOutByExitPath","amountsOutByTokenOut","tokensOutByExitPath","expectedAmountsOutByExitPath","expectedAmountsOutMap","expectedAmountsOutByTokenOut","minAmountsOutByExitPath","expectedAmountOut","minAmountsOutByTokenOut","getExitPaths","outputNodes","exitPaths","outputNode","exitPath","amountsInSum","accumulator","currentExitPath","amountInForCurrentExitPath","amountsInDiff","createUnwrap","exitChild","exitPathIndex","getOutputRef","encodeUnwrap","mapUnwrapRequest","receivesFromInternal","amountBptIn","getExit","estimatedAmountsOut","isProportional","isProportionalPools","tokensWithInsufficientBalance","calculatePriceImpact","orderedNodesForJoin","isPeek","getRecipientAddress","getSenderAddress","isLastActionWithLimits","minAmountsOutProportional","outputChildIndex","createExitPoolProportional","createExitPool","isRootNode","createBatchSwap","exitChildren","batchSwapSteps","swapStep","acc","dust","mapBatchSwapRequest","userDataTokens","formatExitPoolInput","mapExitPoolRequest","userAmountTokensOut","userBptIn","allChildrenReceiveFromInternal","deltaBptIn","deltaTokensOut","deltaAmountsOut","PoolVolume","totalSwapVolume","ComposableStableFactory","checkCreateInputs","tokenRateCacheDurations","exemptFromYieldProtocolFeeFlags","rateProviders","parseCreateParamsForEncoding","amplificationParameter","salt","sortedRateProviders","sortedTokenRateCacheDurations","sortedExemptFromYieldProtocols","encodeCreateFunctionData","checkInitJoinInputs","parseParamsForInitJoin","tokensWithBpt","amountsWithBpt","maxAmountsWithBpt","asUintN","sortedMaxAmounts","encodeInitJoinFunctionData","getPoolAddressAndIdWithReceipt","composableStablePoolInterface","getPoolInterface","getPoolId","create","encodedFunctionData","buildInitJoin","WeightedFactory","sortedNormalizedWeights","cur","weightedPoolInterface","ProtocolId","LinearFactory","getPoolFactoryInterface","AaveLinear","ERC4626Linear","EulerLinear","GearboxLinear","YearnLinear","protocolId","getFactoryAddress","mainToken","upperTargetEvm","linearPoolInterface","PoolFactory__factory","balancerContracts","of","ParamsBuilder","encoder","Gyro2","Gyro3","getEncoder","buildQueryJoinExactIn","maxAmountsInByToken","maxInWithoutBpt","buildQueryJoinExactOut","buildQueryExitToSingleToken","buildQueryExitProportionally","buildQueryExitExactOut","maxBptIn","minAmountsOutWithoutBpt","EmissionsService","liquidityGaugesRepository","proportionalAmounts","referenceTokenIndex","notImplemented","repositories","aprService","poolsForSimulations","graphService","poolsOnChain","joinService","exitService","feesService","volumeService","poolFactory","impermanentLossService","emissionsService","concerns","queries","methods","calcSpotPrice","calcProportionalAmounts","Queries.ParamsBuilder","calcImpLoss","getBptPrice","joinPool","buildExitCall","getExitInfo","wrap","param","UnicodeNormalizationForm","Utf8ErrorReason","ignoreFunc","bytes","badCodepoint","BAD_PREFIX","UNEXPECTED_CONTINUE","o","OVERRUN","toUtf8Bytes","str","charCodeAt","c2","pair","arrayify","formatBytes32String","text","hexlify","HashZero","freeze","ignore","OVERLONG","INPUT_ERROR","WINDOW","window","JS_SHA3_NO_WINDOW","WEB_WORKER","self","JS_SHA3_NO_NODE_JS","versions","global","COMMON_JS","JS_SHA3_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_SHA3_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","CSHAKE_PADDING","SHIFT","RC","BITS","SHAKE_BITS","OUTPUT_TYPES","CSHAKE_BYTEPAD","JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW","isView","buffer","createOutputMethod","bits","padding","outputType","Keccak","update","createShakeOutputMethod","outputBits","createCshakeOutputMethod","createKmacOutputMethod","createOutputMethods","method","createMethod","algorithms","bytepad","Kmac","methodNames","algorithm","methodName","newMethodName","blocks","reset","finalized","block","blockCount","byteCount","outputBlocks","extraBytes","notString","lastByteIndex","right","encodeString","strs","paddingBytes","zeros","finalize","arrayBuffer","Uint32Array","digest","h","c0","c1","c3","c4","c5","c6","c7","c8","c9","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","b16","b17","b18","b19","b20","b21","b22","b23","b24","b25","b26","b27","b28","b29","b30","b31","b32","b33","b34","b35","b36","b37","b38","b39","b40","b41","b42","b43","b44","b45","b46","b47","b48","b49","regexBytes","regexNumber","regexArray","_pack","zeroPad","toTwos","byteLength","baseType","pack","tight","keccak256","sha3","keccak_256","protocolFeePercKey","gyroPoolTypeKey","encodedPoolTypeKey","GyroConfigRepositoryImpl","gyroConfigAddress","gyroConfigInterface","encodedPoolSpecificKey","hasSpecificKeyHex","hasPoolTypeKeyHex","hasDefaultKeyHex","hasSpecificKey","hasPoolTypeKey","hasDefaultKey","getUint","gaugeControllerInterface","gaugeControllerCheckpointerInterface","GaugeControllerMulticallRepository","gaugeControllerAddress","gaugeControllerCheckpointerAddress","AbstractSubgraphRepository","attribute","skip","BalancerSubgraphRepository","blockHeight","GaugesSubgraphRepository","GaugeSharesRepository","desc","number","gaugeShares","mapType","subgraphGaugeShare","isKilled","findAllBy","UserAddress","gaugeId","GaugeId","childLiquidityGaugeInterface","LiquidityGaugesMulticallRepository","currentWeek","rewardCounts","passingRewardCounts","getRewardCounts","gaugesWithRewards","startIndexes","gaugeIndex","flat","passingRewardTokens","decoded","LiquidityGaugesSubgraphRepository","qauges","preferentialGauge_not","preferentialGauge","LiquidityGaugeSubgraphRPCProvider","workingSupplies","relativeWeights","inflationRates","gaugeController","g","getWorkingSupplies","oldFactories","childGaugeAddresses","factory","getInflationRates","getRelativeWeights","distributor","last_update","integral","periodFinish","compose","subgraphGauge","BalancerAPIClient","toPayload","jsonToGraphQLQuery","ms","PoolsBalancerAPIRepository","hasFetched","isFetching","fetchFromCache","fetchAll","awaitEnoughPoolsFetched","nextToken","formattedArgs","__args","apiResponseData","totalChecks","rewardsBreakdown","tokenAprsBreakdown","PoolsFallbackRepository","providers","currentProviderIdx","fallbackQuery","currentProvider","func","race","PoolsStaticRepository","mapToken","priceRateProviders","_f","_g","_h","_j","_k","isPaused","_l","subgraphToken","subPoolInfo","mapSubPools","metadata","mapSubPoolToken","PoolsSubgraphRepository","fetchAllPools","PoolsSubgraphOnChainRepository","poolsSubgraph","filterPools","filteredPools","onchainPools","forceRefresh","fetchDefault","onchainPool","PoolGaugesRepository","PoolJoinExitAttributes","PoolJoinExitRepository","Timestamp","Asc","joinExits","item","Sender","PoolSharesRepository","Balance","poolShares","subgraphPoolShare","PoolId","StaticTokenProvider","StaticTokenPriceProvider","lowercaseAddress","CoingeckoPriceRepository","baseTokenAddresses","platform","urlNative","debouncer","tokensPerPriceRequest","signal","isAxiosError","status","fetchNative","Assets","assetId","MATIC","XDAI","finally","inputAddress","baseAddress","nativePrice","CoingeckoHistoricalPriceRepository","urlRange","statusText","range","SubgraphPriceRepository","TokenPriceProvider","coingeckoRepository","subgraphRepository","aaveRates","getRate","HistoricalPriceProvider","FeeDistributorAbi","feeDistributorInterface","veBalInterface","FeeDistributorRepository","feeDistributorAddress","bbAUsdAddress","FeeDistributor","previousWeek","getPreviousWeek","fromTimestamp","midnight","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","daysSinceThursday","getUTCDay","weeksToGoBack","claimTokens","extractTokenBalance","vaultInterface","protocolFeesCollectorInterface","swapFeePercentagePromise","FeeCollectorRepository","getProtocolFeesCollector","collector","fees","getSwapFeePercentage","swapFeePercentage","iProtocolFeePercentagesProvider","feesPromise","ProtocolFeesProvider","protocolFeePercentagesProviderAddress","yieldFee","protocolFees","TokenYieldsRepository","lc","yields","fetchBlockByTime","BlockNumberRepository","dayAgo","Data","subgraphQuery","poolJoinExits","poolGauges","blockNumbers","blockDayAgo","getBlockNumber","initialCoingeckoList","subgraphPriceRepository","coingeckoHistoricalRepository","protocolFeePercentagesProvider","poolType2PoolKind","LEGACY_STABLE","COMPOSABLE_STABLE","COMPOSABLE_STABLE_V2","WEIGHTED","setRelayerApproval","gaugeWithdrawal","encodeGaugeWithdraw","gaugeDeposit","encodeGaugeDeposit","peekChainedReferenceValue","buildPath","buildLinearPath","buildMigrationPool","findTokens","nestedTokens","migrationBuilder","peek","fromGauge","toGauge","fromTokens","toTokens","exitOutputReferences","swapOutputReferences","joinAmount","migrationSteps","needsSwap","actions.setRelayerApproval","actions.gaugeWithdrawal","isComposable","actions.exit","swapPaths","getMainToken","mainFromTokens","mainToTokens","exitSwaps","fromIdx","toIdx","toPool","buildPaths","batchSwaps","actions.swaps","references","actions.join","actions.peekChainedReferenceValue","actions.gaugeDeposit","Migrations","poolsRepository","gaugesRepository","getExpectedBptOut","steps","relayerReturnValue","expectedBptOut","BalancerSDK","pricing","claimService","migrationService","ActionStep","BaseAction","mainTokenInIndex","mainTokenOutIndex","swapAssetInIndex","swapAssetOutIndex","swapReturn","opRefKey","actionStep","getActionStep","getActionAmount","hasTokenIn","actionHasTokenIn","hasTokenOut","actionHasTokenOut","getActionMinOut","opRef","nextOpRefKey","getActionOutputRef","opRefStart","getSender","receiver","getReceiver","TokenOut","Middle","TokenIn","tokenInIndexAction","tokenOutIndexAction","Direct","getFromInternal","isBptIn","getToInternal","isBptOut","getPoolKind","exitToken","bptAmtIn","exitPoolInput","encoded","getAmountIn","getAmountOut","fromInternal","joinToken","joinTokenIndex","approveTokens","isBpt","toInternal","getLimits","updateLimits","newSwap","isChainedSwap","canAddSwap","encodeApproveVault","batchSwapInput","encodedBatchSwap","copy","addSwap","orderActions","actions","categorizedActions","enterActions","middleActions","categorizeActions","allActions","orderedActions","batchedSwaps","batchSwapActions","canUseJoinExit","isExit","someJoinExit","hasJoinExit","buildRelayerCalls","newJoin","newExit","getActions","totalIn","totalOut","diffOut","checkAmounts"],"mappings":"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E,CACpEC,KAAM,4BACNC,SAAS,KAwcb,CAACtB,GAAQ8B,SAnckB,CAC3B1B,OAAQ,CACNqB,OACE,qEACFC,UAAW,CACTC,GAAI,qEACJC,GAAI,sEAENC,MAAO,sEAETxB,WAAY,CACVC,QAAS,GACTC,QAAS,GACTC,eAAgB,GAElBC,cAAe,6CACfC,YAAa,6CACbC,YAAa,CACXC,SAAU,IAEZC,UAAW,CAAC,IACZC,kBAAmB,CACjB,UACA,aACA,SACA,gBACA,QACA,QACA,QACA,MAEFC,OAAQ,CACNC,UAAW,CACT,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,uEAGJC,WAAY,CACVD,UAAW,CACT,qEACA,qEACA,uEAGJE,UAAW,CACT,6CAA8C,qBAC9C,6CAA8C,eAC9C,6CAA8C,aAC9C,6CAA8C,aAC9C,6CAA8C,6BAC9C,6CAA8C,6BAC9C,6CAA8C,cAC9C,6CAA8C,cAC9C,6CAA8C,aAC9C,6CAA8C,uBAC9C,6CAA8C,gBAEhDC,SAAU,CACRH,UAAW,CACT,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,uEAGJI,SAAU,CACR,qEAAsE,CACpEC,KAAM,4BACNC,SAAS,GAEX,qEAAsE,CACpED,KAAM,4BACNC,SAAS,GAEX,qEAAsE,CACpED,KAAM,sBACNC,SAAS,GAEX,qEAAsE,CACpED,KAAM,sBACNC,SAAS,KAkTb,CAACtB,GAAQ+B,SA7SkB,CAC3B3B,OAAQ,CACN4B,OAAQ,CACNL,GAAI,qEACJC,GAAI,sEAEN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AAOzc,QAAQqwB,SAE7B,CC1BO,MAAMC,GAAkB,CAC7B,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,4ECzUWC,GAcXruC,YAA6BgO,GAAAjG,KAAOiG,QAAPA,EAXrBjG,KAAcumC,eAAG,8BAEjBvmC,KAAewmC,gBAAG/M,CAAG;;;;;;;IAU3Bz5B,KAAKymC,SAAWzpC,GAAQiJ,EACzB,CACDjD,iCAAiC4yB,GAC/B,MAAQ8Q,sBAAuB9vB,SAAsBunB,EACnDn+B,KAAKumC,eACLvmC,KAAKwmC,gBACL,CACEC,SAAUzmC,KAAKymC,WAGbE,EACJ/vB,EACAzS,MACA,EAAG9H,aAAcA,EAAQkG,gBAAkBqzB,EAAarzB,gBAE1D,IAAKokC,EACH,MAAM,IAAI5qC,MAAM,oCAElB,MAAM6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"} \ No newline at end of file diff --git a/package/dist/index.js b/package/dist/index.js new file mode 100644 index 000000000..eaddee670 --- /dev/null +++ b/package/dist/index.js @@ -0,0 +1,515 @@ +"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@ethersproject/abi"),t=require("@ethersproject/constants"),a=require("@ethersproject/bignumber"),n=require("@ethersproject/address"),o=require("@ethersproject/bytes"),i=require("@ethersproject/abstract-signer"),s=require("lodash"),r=require("ethers"),p=require("@balancer-labs/sor"),l=require("@ethersproject/providers"),d=require("graphql-request"),u=require("graphql"),c=require("axios"),y=require("@ethersproject/contracts"),b=require("json-to-graphql-query");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function f(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(a){if("default"!==a){var n=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(t,a,n.get?n:{enumerable:!0,get:function(){return e[a]}})}})),t.default=e,Object.freeze(t)}var T,h,I,g,_,x,P=f(p),w=m(c);!function(e){e[e.RECOVERY_MODE=255]="RECOVERY_MODE"}(T||(T={}));class E{}E.recoveryModeExit=t=>e.defaultAbiCoder.encode(["uint256","uint256"],[T.RECOVERY_MODE,t]),exports.StablePoolJoinKind=void 0,(h=exports.StablePoolJoinKind||(exports.StablePoolJoinKind={}))[h.INIT=0]="INIT",h[h.EXACT_TOKENS_IN_FOR_BPT_OUT=1]="EXACT_TOKENS_IN_FOR_BPT_OUT",h[h.TOKEN_IN_FOR_EXACT_BPT_OUT=2]="TOKEN_IN_FOR_EXACT_BPT_OUT",exports.StablePhantomPoolJoinKind=void 0,(I=exports.StablePhantomPoolJoinKind||(exports.StablePhantomPoolJoinKind={}))[I.INIT=0]="INIT",I[I.COLLECT_PROTOCOL_FEES=1]="COLLECT_PROTOCOL_FEES",exports.StablePoolExitKind=void 0,(g=exports.StablePoolExitKind||(exports.StablePoolExitKind={}))[g.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT=0]="EXACT_BPT_IN_FOR_ONE_TOKEN_OUT",g[g.EXACT_BPT_IN_FOR_TOKENS_OUT=1]="EXACT_BPT_IN_FOR_TOKENS_OUT",g[g.BPT_IN_FOR_EXACT_TOKENS_OUT=2]="BPT_IN_FOR_EXACT_TOKENS_OUT";class A{constructor(){}}A.joinInit=t=>e.defaultAbiCoder.encode(["uint256","uint256[]"],[exports.StablePoolJoinKind.INIT,t]),A.joinCollectProtocolFees=()=>e.defaultAbiCoder.encode(["uint256"],[exports.StablePhantomPoolJoinKind.COLLECT_PROTOCOL_FEES]),A.joinExactTokensInForBPTOut=(t,a)=>e.defaultAbiCoder.encode(["uint256","uint256[]","uint256"],[exports.StablePoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT,t,a]),A.joinTokenInForExactBPTOut=(t,a)=>e.defaultAbiCoder.encode(["uint256","uint256","uint256"],[exports.StablePoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,t,a]),A.exitExactBPTInForOneTokenOut=(t,a)=>e.defaultAbiCoder.encode(["uint256","uint256","uint256"],[exports.StablePoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,t,a]),A.exitExactBPTInForTokensOut=t=>e.defaultAbiCoder.encode(["uint256","uint256"],[exports.StablePoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT,t]),A.exitBPTInForExactTokensOut=(t,a)=>e.defaultAbiCoder.encode(["uint256","uint256[]","uint256"],[exports.StablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,t,a]),exports.WeightedPoolJoinKind=void 0,(_=exports.WeightedPoolJoinKind||(exports.WeightedPoolJoinKind={}))[_.INIT=0]="INIT",_[_.EXACT_TOKENS_IN_FOR_BPT_OUT=1]="EXACT_TOKENS_IN_FOR_BPT_OUT",_[_.TOKEN_IN_FOR_EXACT_BPT_OUT=2]="TOKEN_IN_FOR_EXACT_BPT_OUT",_[_.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT=3]="ALL_TOKENS_IN_FOR_EXACT_BPT_OUT",exports.WeightedPoolExitKind=void 0,(x=exports.WeightedPoolExitKind||(exports.WeightedPoolExitKind={}))[x.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT=0]="EXACT_BPT_IN_FOR_ONE_TOKEN_OUT",x[x.EXACT_BPT_IN_FOR_TOKENS_OUT=1]="EXACT_BPT_IN_FOR_TOKENS_OUT",x[x.BPT_IN_FOR_EXACT_TOKENS_OUT=2]="BPT_IN_FOR_EXACT_TOKENS_OUT",x[x.MANAGEMENT_FEE_TOKENS_OUT=3]="MANAGEMENT_FEE_TOKENS_OUT";class S{constructor(){}}S.joinInit=t=>e.defaultAbiCoder.encode(["uint256","uint256[]"],[exports.WeightedPoolJoinKind.INIT,t]),S.joinExactTokensInForBPTOut=(t,a)=>e.defaultAbiCoder.encode(["uint256","uint256[]","uint256"],[exports.WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT,t,a]),S.joinTokenInForExactBPTOut=(t,a)=>e.defaultAbiCoder.encode(["uint256","uint256","uint256"],[exports.WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,t,a]),S.joinAllTokensInForExactBPTOut=t=>e.defaultAbiCoder.encode(["uint256","uint256"],[exports.WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT,t]),S.exitExactBPTInForOneTokenOut=(t,a)=>e.defaultAbiCoder.encode(["uint256","uint256","uint256"],[exports.WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,t,a]),S.exitExactBPTInForTokensOut=t=>e.defaultAbiCoder.encode(["uint256","uint256"],[exports.WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT,t]),S.exitBPTInForExactTokensOut=(t,a)=>e.defaultAbiCoder.encode(["uint256","uint256[]","uint256"],[exports.WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,t,a]);class v{constructor(){}}v.exitForManagementFees=()=>e.defaultAbiCoder.encode(["uint256"],[exports.WeightedPoolExitKind.MANAGEMENT_FEE_TOKENS_OUT]);var k,B;exports.ComposableStablePoolJoinKind=void 0,(k=exports.ComposableStablePoolJoinKind||(exports.ComposableStablePoolJoinKind={}))[k.INIT=0]="INIT",k[k.EXACT_TOKENS_IN_FOR_BPT_OUT=1]="EXACT_TOKENS_IN_FOR_BPT_OUT",k[k.TOKEN_IN_FOR_EXACT_BPT_OUT=2]="TOKEN_IN_FOR_EXACT_BPT_OUT",exports.ComposableStablePoolExitKind=void 0,(B=exports.ComposableStablePoolExitKind||(exports.ComposableStablePoolExitKind={}))[B.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT=0]="EXACT_BPT_IN_FOR_ONE_TOKEN_OUT",B[B.BPT_IN_FOR_EXACT_TOKENS_OUT=1]="BPT_IN_FOR_EXACT_TOKENS_OUT",B[B.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT=2]="EXACT_BPT_IN_FOR_ALL_TOKENS_OUT";class C{constructor(){}}C.joinInit=t=>e.defaultAbiCoder.encode(["uint256","uint256[]"],[exports.ComposableStablePoolJoinKind.INIT,t]),C.joinCollectProtocolFees=()=>e.defaultAbiCoder.encode(["uint256"],[exports.StablePhantomPoolJoinKind.COLLECT_PROTOCOL_FEES]),C.joinExactTokensInForBPTOut=(t,a)=>e.defaultAbiCoder.encode(["uint256","uint256[]","uint256"],[exports.ComposableStablePoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT,t,a]),C.joinTokenInForExactBPTOut=(t,a)=>e.defaultAbiCoder.encode(["uint256","uint256","uint256"],[exports.ComposableStablePoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,t,a]),C.exitExactBPTInForOneTokenOut=(t,a)=>e.defaultAbiCoder.encode(["uint256","uint256","uint256"],[exports.ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,t,a]),C.exitExactBPTInForAllTokensOut=t=>e.defaultAbiCoder.encode(["uint256","uint256"],[exports.ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT,t]),C.exitBPTInForExactTokensOut=(t,a)=>e.defaultAbiCoder.encode(["uint256","uint256[]","uint256"],[exports.ComposableStablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,t,a]);var O="production"===process.env.NODE_ENV,M="Invariant failed";function F(e,t){if(!e){if(O)throw new Error(M);var a="function"==typeof t?t():t,n=a?"".concat(M,": ").concat(a):M;throw new Error(n)}}const R=e=>(F(66===e.length,"Invalid poolId length"),e.slice(0,42)),N=e=>{F(66===e.length,"Invalid poolId length");const t=parseInt(e[45]);return F(t<3,"Invalid pool specialization"),t},L=e=>(F(66===e.length,"Invalid poolId length"),a.BigNumber.from(`0x${e.slice(46)}`));var D;exports.Network=void 0,(D=exports.Network||(exports.Network={}))[D.MAINNET=1]="MAINNET",D[D.GOERLI=5]="GOERLI",D[D["GÖRLI"]=5]="GÖRLI",D[D.OPTIMISM=10]="OPTIMISM",D[D.GNOSIS=100]="GNOSIS",D[D.POLYGON=137]="POLYGON",D[D.FANTOM=250]="FANTOM",D[D.BASE=8453]="BASE",D[D.ZKEVM=1101]="ZKEVM",D[D.ARBITRUM=42161]="ARBITRUM",D[D.AVALANCHE=43114]="AVALANCHE",D[D.SEPOLIA=11155111]="SEPOLIA";const U={IdsMap:{},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","FX"],Stable:{AllowList:["0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066","0x9f19a375709baf0e8e35c2c5c65aca676c4c719100000000000000000000006e","0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080","0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112","0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e","0x9be7de742865d021c0e8fb9d64311b2c040c1ec1000200000000000000000012","0x9f19a375709baf0e8e35c2c5c65aca676c4c7191000200000000000000000022","0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016","0xf38cf113d2d4f60c36cbd95af2f48a9a0167045a00000000000000000000005b","0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068","0x386b5d43ba8b97c43d4afb4cdae7877a1b295e8a000000000000000000000020","0x5028497af0c9a54ea8c6d42a054c0341b9fc616800020000000000000000007b","0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe","0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366"]},Investment:{AllowList:["0xccf5575570fac94cec733a58ff91bb3d073085c70002000000000000000000af","0xe7b1d394f3b40abeaa0b64a545dbcf89da1ecb3f00010000000000000000009a","0x3b40d7d5ae25df2561944dd68b252016c4c7b2800001000000000000000000c2"]},Factories:{"0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0":"oracleWeightedPool","0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9":"weightedPool","0xc66ba2b6595d3613ccab350c886ace23866ede24":"stablePool","0x67d27634e44793fe63c467035e31ea8635117cd4":"stablePool","0x7dfdef5f355096603419239ce743bfaf1120312b":"weightedPool","0xcf0a32bbef8f064969f21f7e02328fb577382018":"weightedPool","0x2433477a10fc5d31b9513c638f19ee85caed53fd":"stablePool","0xebfd5681977e38af65a7487dc70b8221d089ccad":"stablePool","0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de":"liquidityBootstrappingPool","0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e":"liquidityBootstrappingPool","0x142b9666a0a3a30477b052962dda81547e7029ab":"liquidityBootstrappingPool","0x1802953277fd955f9a254b80aa0582f193cf1d77":"liquidityBootstrappingPool","0x48767f9f868a4a7b86a90736632f6e44c2df7fa9":"managedPool","0x0f7bb7ce7b6ed9366f9b6b910adefe72dc538193":"managedPool","0xacd615b3705b9c880e4e7293f1030b34e57b4c1c":"managedPool","0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2":"boostedPool","0xdae7e32adc5d490a43ccba1f0c736033f2b4efca":"boostedPool","0xc128a9954e6c874ea3d62ce62b468ba073093f25":"boostedPool"},Stakable:{AllowList:[]},Metadata:{"0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe":{name:"Balancer Boosted Aave USD",hasIcon:!0},"0x8fd162f338b770f7e879030830cde9173367f3010000000000000000000004d8":{name:"Balancer Boosted Aave USD",hasIcon:!0},"0xd387dfd3a786e7caa06e6cf0c675352c7ffff30400000000000000000000063e":{name:"Balancer Stable USD",hasIcon:!0}}},V={[exports.Network.GOERLI]:{IdsMap:{staBAL:"0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062",bbAaveUSD:{v1:"0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f",v2:"0x3d5981bdd8d3e49eb7bbdc1d2b156a3ee019c18e0000000000000000000001a7"},veBAL:"0xf8a0623ab66f985effc1c69d05f1af4badb01b00000200000000000000000060"},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:["0x22d398c68030ef6b1c55321cca6e0cecc5c93b2f000200000000000000000678"],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","FX"],Stable:{AllowList:["0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f","0xb60e46d90f2de35f7062a27d3a98749414036d5d000200000000000000000061","0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062","0xc957b1acceb21707b782eb8eee2ed8e20088463d000200000000000000000076","0x3d5981bdd8d3e49eb7bbdc1d2b156a3ee019c18e0000000000000000000001a7","0x14f93df8a4e37bfdb49d2cec4789df7a010603d700000000000000000000011d","0x00a62d31b6c776b6813543bc99ff265f7222dbe100000000000000000000011e","0x0c925fce89a22e36ebd9b3c6e0262234e853d2f600000000000000000000019c"]},Investment:{AllowList:[]},Factories:{"0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0":"oracleWeightedPool","0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9":"weightedPool","0x44afeb87c871d8fea9398a026dea2bd3a13f5769":"stablePool","0xa55f73e2281c60206ba43a3590db07b8955832be":"stablePool","0xb48cc42c45d262534e46d5965a9ac496f1b7a830":"liquidityBootstrappingPool","0xb0c726778c3ae4b3454d85557a48e8fa502bdd6a":"liquidityBootstrappingPool","0x41e9036ae350baedcc7107760a020dca3c0731ec":"boostedPool","0xb848f50141f3d4255b37ac288c25c109104f2158":"composableStablePool","0x94f68b54191f62f781fe8298a8a5fa3ed772d227":"weightedPool"},Stakable:{AllowList:["0x16faf9f73748013155b7bc116a3008b57332d1e600020000000000000000005b","0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f","0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062","0x67f8fcb9d3c463da05de1392efdbb2a87f8599ea000200000000000000000059"]},Metadata:{"0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f":{name:"Balancer Boosted Aave USD",hasIcon:!1}}},[exports.Network.MAINNET]:{IdsMap:{staBAL:"0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063",bbAaveUSD:{v1:"0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe",v2:"0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d"},veBAL:"0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014"},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","Gyro2","Gyro3","GyroE","FX"],Stable:{AllowList:["0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066","0x9f19a375709baf0e8e35c2c5c65aca676c4c719100000000000000000000006e","0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080","0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112","0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe","0x851523a36690bf267bbfec389c823072d82921a90002000000000000000001ed","0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249","0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d","0x178e029173417b1f9c8bc16dcec6f697bc32374600000000000000000000025d","0xf93579002dbe8046c43fefe86ec78b1112247bb80000000000000000000002bc","0xf3aeb3abba741f0eece8a1b1d2f11b85899951cb000200000000000000000351","0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d","0x5b3240b6be3e7487d61cd1afdfc7fe4fa1d81e6400000000000000000000037b"]},Investment:{AllowList:["0xccf5575570fac94cec733a58ff91bb3d073085c70002000000000000000000af","0xe7b1d394f3b40abeaa0b64a545dbcf89da1ecb3f00010000000000000000009a","0x3b40d7d5ae25df2561944dd68b252016c4c7b2800001000000000000000000c2"]},Factories:{"0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0":"oracleWeightedPool","0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9":"weightedPool","0xc66ba2b6595d3613ccab350c886ace23866ede24":"stablePool","0x67d27634e44793fe63c467035e31ea8635117cd4":"stablePool","0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de":"liquidityBootstrappingPool","0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e":"liquidityBootstrappingPool","0x48767f9f868a4a7b86a90736632f6e44c2df7fa9":"managedPool","0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2":"boostedPool","0x8df6efec5547e31b0eb7d1291b511ff8a2bf987c":"stablePool","0xf9ac7b9df2b3454e841110cce5550bd5ac6f875f":"composableStablePool","0xcc508a455f5b0073973107db6a878ddbdab957bc":"weightedPool"},Stakable:{AllowList:["0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063","0x072f14b85add63488ddad88f855fda4a99d6ac9b000200000000000000000027","0x0b09dea16768f0799065c475be02919503cb2a3500020000000000000000001a","0x186084ff790c65088ba694df11758fae4943ee9e000200000000000000000013","0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112","0x27c9f71cc31464b906e0006d4fcbc8900f48f15f00020000000000000000010f","0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080","0x350196326aeaa9b98f1903fb5e8fc2686f85318c000200000000000000000084","0x3e5fa9518ea95c3e533eb377c001702a9aacaa32000200000000000000000052","0x51735bdfbfe3fc13dea8dc6502e2e958989429610002000000000000000000a0","0x5d66fff62c17d841935b60df5f07f6cf79bd0f4700020000000000000000014c","0x5f7fa48d765053f8dd85e052843e12d23e3d7bc50002000000000000000000c0","0x702605f43471183158938c1a3e5f5a359d7b31ba00020000000000000000009f","0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe","0x7edde0cb05ed19e03a9a47cd5e53fc57fde1c80c0002000000000000000000c8","0x8f4205e1604133d1875a3e771ae7e4f2b086563900020000000000000000010e","0x90291319f1d4ea3ad4db0dd8fe9e12baf749e84500020000000000000000013c","0x96646936b91d6b9d7d0c47c496afbf3d6ec7b6f8000200000000000000000019","0x96ba9025311e2f47b840a1f68ed57a3df1ea8747000200000000000000000160","0xa02e4b3d18d4e6b8d18ac421fbc3dfff8933c40a00020000000000000000004b","0xa6f548df93de924d73be7d25dc02554c6bd66db500020000000000000000000e","0xbaeec99c90e3420ec6c1e7a769d2a856d2898e4d00020000000000000000008a","0xbf96189eee9357a95c7719f4f5047f76bde804e5000200000000000000000087","0xe2469f47ab58cf9cf59f9822e3c5de4950a41c49000200000000000000000089","0xe99481dc77691d8e2456e5f3f61c1810adfc1503000200000000000000000018","0xec60a5fef79a92c741cb74fdd6bfc340c0279b01000200000000000000000015","0xedf085f65b4f6c155e13155502ef925c9a756003000200000000000000000123","0xefaa1604e82e1b3af8430b90192c1b9e8197e377000200000000000000000021","0xf4c0dd9b82da36c07605df83c8a416f11724d88b000200000000000000000026","0xf5aaf7ee8c39b651cebf5f1f50c10631e78e0ef9000200000000000000000069","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066","0x92762b42a06dcdddc5b7362cfb01e631c4d44b40000200000000000000000182","0xde8c195aa41c11a0c4787372defbbddaa31306d2000200000000000000000181","0x17ddd9646a69c9445cd8a9f921d4cd93bf50d108000200000000000000000159","0xc45d42f801105e861e86658648e3678ad7aa70f900010000000000000000011e","0x2d344a84bac123660b021eebe4eb6f12ba25fe8600020000000000000000018a","0xb460daa847c45f1c4a41cb05bfb3b51c92e41b36000200000000000000000194","0x5122e01d819e58bb2e22528c0d68d310f0aa6fd7000200000000000000000163","0x851523a36690bf267bbfec389c823072d82921a90002000000000000000001ed","0xe8cc7e765647625b95f59c15848379d10b9ab4af0002000000000000000001de","0x85370d9e3bb111391cc89f6de344e801760461830002000000000000000001ef","0xa7ff759dbef9f3efdd1d59beee44b966acafe214000200000000000000000180","0x3f7c10701b14197e2695dec6428a2ca4cf7fc3b800020000000000000000023c","0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d","0x178e029173417b1f9c8bc16dcec6f697bc32374600000000000000000000025d","0xcfca23ca9ca720b6e98e3eb9b6aa0ffc4a5c08b9000200000000000000000274","0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249","0x0578292cb20a443ba1cde459c985ce14ca2bdee5000100000000000000000269","0x8eb6c82c3081bbbd45dcac5afa631aac53478b7c000100000000000000000270","0x1b65fe4881800b91d4277ba738b567cbb200a60d0002000000000000000002cc","0x99a14324cfd525a34bbc93ac7e348929909d57fd00020000000000000000030e","0x9b532ab955417afd0d012eb9f7389457cd0ea712000000000000000000000338","0x48607651416a943bf5ac71c41be1420538e78f87000200000000000000000327","0x6a5ead5433a50472642cd268e584dafa5a394490000200000000000000000366","0x0fd5663d4893ae0d579d580584806aadd2dd0b8b000200000000000000000367","0x441b8a1980f2f2e43a9397099d15cc2fe6d3625000020000000000000000035f","0xf3aeb3abba741f0eece8a1b1d2f11b85899951cb000200000000000000000351","0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d"]},Metadata:{"0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe":{name:"Balancer Boosted Aave USD",hasIcon:!0},"0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d":{name:"Balancer Boosted Aave USD",hasIcon:!0},"0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063":{name:"Balancer Stable USD",hasIcon:!0},"0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249":{name:"AuraBAL Stable Pool",hasIcon:!1}}},[exports.Network.POLYGON]:{IdsMap:{xMatic:{v1:"0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4",v2:"0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c"},stMatic:{v1:"0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366",v2:"0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d"},mai4:{mai4:"0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012",maiBbaUsd:"0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e"}},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","Gyro2","Gyro3","GyroE","FX"],Stable:{AllowList:["0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e","0xf38cf113d2d4f60c36cbd95af2f48a9a0167045a00000000000000000000005b","0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068","0x5028497af0c9a54ea8c6d42a054c0341b9fc616800020000000000000000007b","0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366","0xb4670d1389c758e4380c4211bcbc85342688b9c50002000000000000000003d8","0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455","0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4","0xb4b22bd6cdad0ab828be6f8a4086dfa54e9b373600020000000000000000058f","0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba","0x0b8319061732b34cab22445fa83b81f950e4b7ed000000000000000000000709","0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366","0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d","0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c","0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e","0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b","0xa48d164f6eb0edc68bd03b56fa59e12f24499ad10000000000000000000007c4"]},Investment:{AllowList:[""]},Factories:{"0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0":"oracleWeightedPool","0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9":"weightedPool","0xc66ba2b6595d3613ccab350c886ace23866ede24":"stablePool","0xdae7e32adc5d490a43ccba1f0c736033f2b4efca":"stablePool","0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de":"liquidityBootstrappingPool","0x41b953164995c11c81da73d212ed8af25741b7ac":"liquidityBootstrappingPool","0x0f7bb7ce7b6ed9366f9b6b910adefe72dc538193":"managedPool","0xc128a9954e6c874ea3d62ce62b468ba073093f25":"boostedPool","0xca96c4f198d343e251b1a01f3eba061ef3da73c1":"stablePool","0x136fd06fa01ecf624c7f2b3cb15742c1339dc2c4":"composableStablePool","0x0e39c3d9b2ec765efd9c5c70bb290b1fcd8536e3":"weightedPool"},Stakable:{AllowList:["0x0297e37f1873d2dab4487aa67cd56b58e2f27875000100000000000000000002","0x03cd191f589d12b0582a99808cf19851e468e6b500010000000000000000000a","0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012","0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068","0x10f21c9bd8128a29aa785ab2de0d044dcdd79436000200000000000000000059","0x186084ff790c65088ba694df11758fae4943ee9e000200000000000000000032","0x36128d5436d2d70cab39c9af9cce146c38554ff0000100000000000000000008","0x5a6ae1fd70d04ba4a279fc219dfabc53825cb01d00020000000000000000020e","0x614b5038611729ed49e0ded154d8a5d3af9d1d9e00010000000000000000001d","0x7c9cf12d783821d5c63d8e9427af5c44bad92445000100000000000000000051","0x805ca3ccc61cc231851dee2da6aabff0a7714aa7000200000000000000000361","0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366","0xb204bf10bc3a5435017d3db247f56da601dfe08a0002000000000000000000fe","0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455","0xce66904b68f1f070332cbc631de7ee98b650b499000100000000000000000009","0xcf354603a9aebd2ff9f33e1b04246d8ea204ae9500020000000000000000005a","0xdb1db6e248d7bb4175f6e5a382d0a03fe3dcc813000100000000000000000035","0xea4e073c8ac859f2994c07e627178719c8002dc00002000000000000000003dc","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e","0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4","0x2dbc9ab0160087ae59474fb7bed95b9e808fa6bc0001000000000000000003db","0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba","0x8f9dd2064eb38e8e40f2ab67bde27c0e16ea9b080002000000000000000004ca","0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b","0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e","0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d","0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c"]},Metadata:{}},[exports.Network.ARBITRUM]:{IdsMap:{},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","FX"],Stable:{AllowList:["0x9be7de742865d021c0e8fb9d64311b2c040c1ec1000200000000000000000012","0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016","0x386b5d43ba8b97c43d4afb4cdae7877a1b295e8a000000000000000000000020","0x0510ccf9eb3ab03c1508d3b9769e8ee2cfd6fdcf00000000000000000000005d","0x5a5884fc31948d59df2aeccca143de900d49e1a300000000000000000000006f","0xd89746affa5483627a87e55713ec1905114394950002000000000000000000bf","0x7bceaa9c5e7f4836fec3bce2d5346637c9b13970000000000000000000000102","0xfb5e6d0c1dfed2ba000fbc040ab8df3615ac329c000000000000000000000159"]},Investment:{AllowList:[""]},Factories:{"0x7dfdef5f355096603419239ce743bfaf1120312b":"weightedPool","0xcf0a32bbef8f064969f21f7e02328fb577382018":"weightedPool","0x2433477a10fc5d31b9513c638f19ee85caed53fd":"stablePool","0xebfd5681977e38af65a7487dc70b8221d089ccad":"stablePool","0x142b9666a0a3a30477b052962dda81547e7029ab":"liquidityBootstrappingPool","0x1802953277fd955f9a254b80aa0582f193cf1d77":"liquidityBootstrappingPool","0xacd615b3705b9c880e4e7293f1030b34e57b4c1c":"managedPool","0xdae7e32adc5d490a43ccba1f0c736033f2b4efca":"boostedPool","0xef44d6786b2b4d544b7850fe67ce6381626bf2d6":"stablePool","0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33":"composableStablePool","0x8df6efec5547e31b0eb7d1291b511ff8a2bf987c":"weightedPool"},Stakable:{AllowList:["0x0510ccf9eb3ab03c1508d3b9769e8ee2cfd6fdcf00000000000000000000005d","0x0adeb25cb5920d4f7447af4a0428072edc2cee2200020000000000000000004a","0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016","0x1779900c7707885720d39aa741f4086886307e9e00020000000000000000004b","0x4a3a22a3e7fee0ffbb66f1c28bfac50f75546fc7000200000000000000000008","0x5a5884fc31948d59df2aeccca143de900d49e1a300000000000000000000006f","0x64541216bafffeec8ea535bb71fbc927831d0595000100000000000000000002","0x651e00ffd5ecfa7f3d4f33d62ede0a97cf62ede2000200000000000000000006","0xb28670b3e7ad27bd41fb5938136bf9e9cba90d6500020000000000000000001e","0xb340b6b1a34019853cb05b2de6ee8ffd0b89a008000100000000000000000036","0xb5b77f1ad2b520df01612399258e7787af63025d000200000000000000000010","0xc2f082d33b5b8ef3a7e3de30da54efd3114512ac000200000000000000000017","0xc61ff48f94d801c1ceface0289085197b5ec44f000020000000000000000004d","0xcc65a812ce382ab909a11e434dbf75b34f1cc59d000200000000000000000001","0xe1b40094f1446722c424c598ac412d590e0b3ffb000200000000000000000076","0xb3028ca124b80cfe6e9ca57b70ef2f0ccc41ebd40002000000000000000000ba","0x7bceaa9c5e7f4836fec3bce2d5346637c9b13970000000000000000000000102","0xfb5e6d0c1dfed2ba000fbc040ab8df3615ac329c000000000000000000000159","0x178e029173417b1f9c8bc16dcec6f697bc323746000200000000000000000158"]},Metadata:{}},[exports.Network.GNOSIS]:{IdsMap:{},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","FX","Gyro2","Gyro3","GyroE","HighAmpComposableStable","FX"],Stable:{AllowList:["0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000004","0x707b7d4a1bae449d546dcab869256591bbb3d70b000000000000000000000000"]},Investment:{AllowList:[]},Factories:{},Stakable:{AllowList:[]},Metadata:{}}};var q,G,W,H,K,$,J;exports.PoolGaugesAttributes=void 0,(q=exports.PoolGaugesAttributes||(exports.PoolGaugesAttributes={})).Id="id",q.Address="address",q.PoolId="poolId",exports.PoolShareAttributes=void 0,(G=exports.PoolShareAttributes||(exports.PoolShareAttributes={})).Balance="balance",G.Id="id",G.PoolId="poolId",G.UserAddress="userAddress",exports.GaugeShareAttributes=void 0,(W=exports.GaugeShareAttributes||(exports.GaugeShareAttributes={})).Id="id",W.UserAddress="user",W.GaugeId="gauge",W.Balance="balance",exports.PoolSpecialization=void 0,(H=exports.PoolSpecialization||(exports.PoolSpecialization={}))[H.GeneralPool=0]="GeneralPool",H[H.MinimalSwapInfoPool=1]="MinimalSwapInfoPool",H[H.TwoTokenPool=2]="TwoTokenPool",exports.UserBalanceOpKind=void 0,(K=exports.UserBalanceOpKind||(exports.UserBalanceOpKind={}))[K.DepositInternal=0]="DepositInternal",K[K.WithdrawInternal=1]="WithdrawInternal",K[K.TransferInternal=2]="TransferInternal",K[K.TransferExternal=3]="TransferExternal",exports.PoolBalanceOpKind=void 0,($=exports.PoolBalanceOpKind||(exports.PoolBalanceOpKind={}))[$.Withdraw=0]="Withdraw",$[$.Deposit=1]="Deposit",$[$.Update=2]="Update",exports.PoolType=void 0,(J=exports.PoolType||(exports.PoolType={})).Weighted="Weighted",J.Investment="Investment",J.Stable="Stable",J.ComposableStable="ComposableStable",J.MetaStable="MetaStable",J.StablePhantom="StablePhantom",J.LiquidityBootstrapping="LiquidityBootstrapping",J.Element="Element",J.Gyro2="Gyro2",J.Gyro3="Gyro3",J.GyroE="GyroE",J.Managed="Managed",J.AaveLinear="AaveLinear",J.Linear="Linear",J.EulerLinear="EulerLinear",J.ERC4626Linear="ERC4626Linear",J.BeefyLinear="BeefyLinear",J.GearboxLinear="GearboxLinear",J.MidasLinear="MidasLinear",J.ReaperLinear="ReaperLinear",J.SiloLinear="SiloLinear",J.TetuLinear="TetuLinear",J.YearnLinear="YearnLinear",J.FX="FX";class j{constructor(){this.enableLogging=!0}static getInstance(){return j.instance||(j.instance=new j),j.instance}setLoggingEnabled(e){this.enableLogging=e}info(e){this.enableLogging}warn(e){this.enableLogging&&console.warn(`[WARN] ${e}`)}error(e){this.enableLogging&&console.error(`[ERROR] ${e}`)}time(e){this.enableLogging}timeEnd(e){this.enableLogging}}const X=e=>e[0].map(((t,a)=>e.map((e=>e[a]))));class Y{constructor(e){this.ETH=t.AddressZero,this.isETH=e=>Y.isEqual(e,this.ETH),this.isWETH=e=>Y.isEqual(e,this.WETH),this.translateToERC20=e=>this.isETH(e)?this.WETH:e,this.WETH=n.getAddress(e)}sortTokens(e,...t){t.forEach((t=>F(e.length===t.length,"array length mismatch")));const a=e.map(this.translateToERC20),n=X([a,...t]).sort((([e],[t])=>((e,t)=>e.toLowerCase()>t.toLowerCase()?1:-1)(e,t))),[o,...i]=X(n);return[e.includes(this.ETH)?o.map((e=>this.isWETH(e)?this.ETH:e)):o,...i]}}Y.isEqual=(e,t)=>n.getAddress(e)===n.getAddress(t);const z={"000":"ADD_OVERFLOW","001":"SUB_OVERFLOW","002":"SUB_UNDERFLOW","003":"MUL_OVERFLOW","004":"ZERO_DIVISION","005":"DIV_INTERNAL","006":"X_OUT_OF_BOUNDS","007":"Y_OUT_OF_BOUNDS","008":"PRODUCT_OUT_OF_BOUNDS","009":"INVALID_EXPONENT",100:"OUT_OF_BOUNDS",101:"UNSORTED_ARRAY",102:"UNSORTED_TOKENS",103:"INPUT_LENGTH_MISMATCH",104:"ZERO_TOKEN",200:"MIN_TOKENS",201:"MAX_TOKENS",202:"MAX_SWAP_FEE_PERCENTAGE",203:"MIN_SWAP_FEE_PERCENTAGE",204:"MINIMUM_BPT",205:"CALLER_NOT_VAULT",206:"UNINITIALIZED",207:"BPT_IN_MAX_AMOUNT",208:"BPT_OUT_MIN_AMOUNT",209:"EXPIRED_PERMIT",210:"NOT_TWO_TOKENS",211:"DISABLED",300:"MIN_AMP",301:"MAX_AMP",302:"MIN_WEIGHT",303:"MAX_STABLE_TOKENS",304:"MAX_IN_RATIO",305:"MAX_OUT_RATIO",306:"MIN_BPT_IN_FOR_TOKEN_OUT",307:"MAX_OUT_BPT_FOR_TOKEN_IN",308:"NORMALIZED_WEIGHT_INVARIANT",309:"INVALID_TOKEN",310:"UNHANDLED_JOIN_KIND",311:"ZERO_INVARIANT",312:"ORACLE_INVALID_SECONDS_QUERY",313:"ORACLE_NOT_INITIALIZED",314:"ORACLE_QUERY_TOO_OLD",315:"ORACLE_INVALID_INDEX",316:"ORACLE_BAD_SECS",317:"AMP_END_TIME_TOO_CLOSE",318:"AMP_ONGOING_UPDATE",319:"AMP_RATE_TOO_HIGH",320:"AMP_NO_ONGOING_UPDATE",321:"STABLE_INVARIANT_DIDNT_CONVERGE",322:"STABLE_GET_BALANCE_DIDNT_CONVERGE",323:"RELAYER_NOT_CONTRACT",324:"BASE_POOL_RELAYER_NOT_CALLED",325:"REBALANCING_RELAYER_REENTERED",326:"GRADUAL_UPDATE_TIME_TRAVEL",327:"SWAPS_DISABLED",328:"CALLER_IS_NOT_LBP_OWNER",329:"PRICE_RATE_OVERFLOW",330:"INVALID_JOIN_EXIT_KIND_WHILE_SWAPS_DISABLED",331:"WEIGHT_CHANGE_TOO_FAST",332:"LOWER_GREATER_THAN_UPPER_TARGET",333:"UPPER_TARGET_TOO_HIGH",334:"UNHANDLED_BY_LINEAR_POOL",335:"OUT_OF_TARGET_RANGE",336:"UNHANDLED_EXIT_KIND ",337:"UNAUTHORIZED_EXIT",338:"MAX_MANAGEMENT_SWAP_FEE_PERCENTAGE",339:"UNHANDLED_BY_MANAGED_POOL",340:"UNHANDLED_BY_PHANTOM_POOL",341:"TOKEN_DOES_NOT_HAVE_RATE_PROVIDER",342:"INVALID_INITIALIZATION",343:"OUT_OF_NEW_TARGET_RANGE",344:"UNAUTHORIZED_OPERATION",345:"UNINITIALIZED_POOL_CONTROLLER",400:"REENTRANCY",401:"SENDER_NOT_ALLOWED",402:"PAUSED",403:"PAUSE_WINDOW_EXPIRED",404:"MAX_PAUSE_WINDOW_DURATION",405:"MAX_BUFFER_PERIOD_DURATION",406:"INSUFFICIENT_BALANCE",407:"INSUFFICIENT_ALLOWANCE",408:"ERC20_TRANSFER_FROM_ZERO_ADDRESS",409:"ERC20_TRANSFER_TO_ZERO_ADDRESS",410:"ERC20_MINT_TO_ZERO_ADDRESS",411:"ERC20_BURN_FROM_ZERO_ADDRESS",412:"ERC20_APPROVE_FROM_ZERO_ADDRESS",413:"ERC20_APPROVE_TO_ZERO_ADDRESS",414:"ERC20_TRANSFER_EXCEEDS_ALLOWANCE",415:"ERC20_DECREASED_ALLOWANCE_BELOW_ZERO",416:"ERC20_TRANSFER_EXCEEDS_BALANCE",417:"ERC20_BURN_EXCEEDS_ALLOWANCE",418:"SAFE_ERC20_CALL_FAILED",419:"ADDRESS_INSUFFICIENT_BALANCE",420:"ADDRESS_CANNOT_SEND_VALUE",421:"SAFE_CAST_VALUE_CANT_FIT_INT256",422:"GRANT_SENDER_NOT_ADMIN",423:"REVOKE_SENDER_NOT_ADMIN",424:"RENOUNCE_SENDER_NOT_ALLOWED",425:"BUFFER_PERIOD_EXPIRED",426:"CALLER_IS_NOT_OWNER",427:"NEW_OWNER_IS_ZERO",428:"CODE_DEPLOYMENT_FAILED",429:"CALL_TO_NON_CONTRACT",430:"LOW_LEVEL_CALL_FAILED",431:"NOT_PAUSED",432:"ADDRESS_ALREADY_ALLOWLISTED",433:"ADDRESS_NOT_ALLOWLISTED",434:"ERC20_BURN_EXCEEDS_BALANCE",500:"INVALID_POOL_ID",501:"CALLER_NOT_POOL",502:"SENDER_NOT_ASSET_MANAGER",503:"USER_DOESNT_ALLOW_RELAYER",504:"INVALID_SIGNATURE",505:"EXIT_BELOW_MIN",506:"JOIN_ABOVE_MAX",507:"SWAP_LIMIT",508:"SWAP_DEADLINE",509:"CANNOT_SWAP_SAME_TOKEN",510:"UNKNOWN_AMOUNT_IN_FIRST_SWAP",511:"MALCONSTRUCTED_MULTIHOP_SWAP",512:"INTERNAL_BALANCE_OVERFLOW",513:"INSUFFICIENT_INTERNAL_BALANCE",514:"INVALID_ETH_INTERNAL_BALANCE",515:"INVALID_POST_LOAN_BALANCE",516:"INSUFFICIENT_ETH",517:"UNALLOCATED_ETH",518:"ETH_TRANSFER",519:"CANNOT_USE_ETH_SENTINEL",520:"TOKENS_MISMATCH",521:"TOKEN_NOT_REGISTERED",522:"TOKEN_ALREADY_REGISTERED",523:"TOKENS_ALREADY_SET",524:"TOKENS_LENGTH_MUST_BE_2",525:"NONZERO_TOKEN_BALANCE",526:"BALANCE_TOTAL_OVERFLOW",527:"POOL_NO_TOKENS",528:"INSUFFICIENT_FLASH_LOAN_BALANCE",600:"SWAP_FEE_PERCENTAGE_TOO_HIGH",601:"FLASH_LOAN_FEE_PERCENTAGE_TOO_HIGH",602:"INSUFFICIENT_FLASH_LOAN_FEE_AMOUNT"};class Z{constructor(){}}async function Q(e){if("string"==typeof e)return e;if(i.Signer.isSigner(e))return e.getAddress();if(e.address)return e.address;throw new Error("Could not read account address")}var ee;Z.isErrorCode=e=>{if(!e.includes("BAL#"))return!1;const t=e.replace("BAL#","");return Object.keys(z).includes(t)},Z.parseErrorCode=e=>{if(!e.includes("BAL#"))throw new Error("Error code not found");const t=e.replace("BAL#",""),a=z[t];if(!a)throw new Error("Error code not found");return a},Z.tryParseErrorCode=e=>{try{return Z.parseErrorCode(e)}catch{return e}},Z.isBalancerError=e=>Object.values(z).includes(e),Z.encodeError=e=>{const t=Object.entries(z).find((([,t])=>t===e));if(!t)throw Error("Error message not found");return`BAL#${t[0]}`},exports.RelayerAction=void 0,(ee=exports.RelayerAction||(exports.RelayerAction={})).JoinPool="JoinPool",ee.ExitPool="ExitPool",ee.Swap="Swap",ee.BatchSwap="BatchSwap",ee.SetRelayerApproval="SetRelayerApproval";class te{constructor(){}}te.encodeCalldataAuthorization=(e,t,a)=>{const n=o.hexZeroPad(o.hexValue(t),32).slice(2),{v:i,r:s,s:r}=o.splitSignature(a);return`${e}${n}${o.hexZeroPad(o.hexValue(i),32).slice(2)}${s.slice(2)}${r.slice(2)}`},te.signJoinAuthorization=(e,t,a,n,o,i)=>te.signAuthorizationFor(exports.RelayerAction.JoinPool,e,t,a,n,o,i),te.signExitAuthorization=(e,t,a,n,o,i)=>te.signAuthorizationFor(exports.RelayerAction.ExitPool,e,t,a,n,o,i),te.signSwapAuthorization=(e,t,a,n,o,i)=>te.signAuthorizationFor(exports.RelayerAction.Swap,e,t,a,n,o,i),te.signBatchSwapAuthorization=(e,t,a,n,o,i)=>te.signAuthorizationFor(exports.RelayerAction.BatchSwap,e,t,a,n,o,i),te.signSetRelayerApprovalAuthorization=(e,t,a,n,o,i)=>te.signAuthorizationFor(exports.RelayerAction.SetRelayerApproval,e,t,a,n,o,i),te.signAuthorizationFor=async(e,a,n,o,i,s=t.MaxUint256,r)=>{const{chainId:p}=await a.provider.getNetwork();if(!r){const e=await n.getAddress();r=await a.getNextNonce(e)}const l={name:"Balancer V2 Vault",version:"1",chainId:p,verifyingContract:a.address},d={[e]:[{name:"calldata",type:"bytes"},{name:"sender",type:"address"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]},u={calldata:i,sender:await Q(o),nonce:r.toString(),deadline:s.toString()};return n._signTypedData(l,d,u)};class ae{constructor(){}}ae.signSetMinterApproval=async(e,n,i,s,r=t.MaxUint256,p)=>{const{chainId:l}=await e.provider.getNetwork();if(!p){const t=await s.getAddress();p=await e.getNextNonce(t)}const d={name:"Balancer Minter",version:"1",chainId:l,verifyingContract:e.address},u={minter:await Q(n),approval:i,nonce:p.toString(),deadline:r.toString()},c=await s._signTypedData(d,{SetMinterApproval:[{name:"minter",type:"address"},{name:"approval",type:"bool"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]},u);return{...o.splitSignature(c),deadline:a.BigNumber.from(r)}};const ne=BigInt(0),oe=BigInt(1),ie=BigInt("1000000000000000000"),se=(e,t)=>{if(!e)throw new Error(t)};function re(e){const t=BigInt(18)-e;return ie*BigInt(10)**t}function pe(e,t){return ce.mulDownFixed(e,t)}function le(e,t){const a=new Array(e.length);for(let n=0;n=0&&a>=e||t<0&&at>e?t:e))}static min(e,t){return e=this.MIN_NATURAL_EXPONENT&&e<=this.MAX_NATURAL_EXPONENT,"Errors.INVALID_EXPONENT"),e<0)return this.ONE_18*this.ONE_18/this.exp(BigInt(-1)*e);let t;e>=this.x0?(e-=this.x0,t=this.a0):e>=this.x1?(e-=this.x1,t=this.a1):t=BigInt(1),e*=BigInt(100);let a=this.ONE_20;e>=this.x2&&(e-=this.x2,a=a*this.a2/this.ONE_20),e>=this.x3&&(e-=this.x3,a=a*this.a3/this.ONE_20),e>=this.x4&&(e-=this.x4,a=a*this.a4/this.ONE_20),e>=this.x5&&(e-=this.x5,a=a*this.a5/this.ONE_20),e>=this.x6&&(e-=this.x6,a=a*this.a6/this.ONE_20),e>=this.x7&&(e-=this.x7,a=a*this.a7/this.ONE_20),e>=this.x8&&(e-=this.x8,a=a*this.a8/this.ONE_20),e>=this.x9&&(e-=this.x9,a=a*this.a9/this.ONE_20);let n,o=this.ONE_20;return n=e,o+=n,n=n*e/this.ONE_20/BigInt(2),o+=n,n=n*e/this.ONE_20/BigInt(3),o+=n,n=n*e/this.ONE_20/BigInt(4),o+=n,n=n*e/this.ONE_20/BigInt(5),o+=n,n=n*e/this.ONE_20/BigInt(6),o+=n,n=n*e/this.ONE_20/BigInt(7),o+=n,n=n*e/this.ONE_20/BigInt(8),o+=n,n=n*e/this.ONE_20/BigInt(9),o+=n,n=n*e/this.ONE_20/BigInt(10),o+=n,n=n*e/this.ONE_20/BigInt(11),o+=n,n=n*e/this.ONE_20/BigInt(12),o+=n,a*o/this.ONE_20*t/BigInt(100)}static _ln_36(e){const t=((e*=this.ONE_18)-this.ONE_36)*this.ONE_36/(e+this.ONE_36),a=t*t/this.ONE_36;let n=t,o=n;return n=n*a/this.ONE_36,o+=n/BigInt(3),n=n*a/this.ONE_36,o+=n/BigInt(5),n=n*a/this.ONE_36,o+=n/BigInt(7),n=n*a/this.ONE_36,o+=n/BigInt(9),n=n*a/this.ONE_36,o+=n/BigInt(11),n=n*a/this.ONE_36,o+=n/BigInt(13),n=n*a/this.ONE_36,o+=n/BigInt(15),o*BigInt(2)}static _ln(e){if(e=this.a0*this.ONE_18&&(e/=this.a0,t+=this.x0),e>=this.a1*this.ONE_18&&(e/=this.a1,t+=this.x1),t*=BigInt(100),(e*=BigInt(100))>=this.a2&&(e=e*this.ONE_20/this.a2,t+=this.x2),e>=this.a3&&(e=e*this.ONE_20/this.a3,t+=this.x3),e>=this.a4&&(e=e*this.ONE_20/this.a4,t+=this.x4),e>=this.a5&&(e=e*this.ONE_20/this.a5,t+=this.x5),e>=this.a6&&(e=e*this.ONE_20/this.a6,t+=this.x6),e>=this.a7&&(e=e*this.ONE_20/this.a7,t+=this.x7),e>=this.a8&&(e=e*this.ONE_20/this.a8,t+=this.x8),e>=this.a9&&(e=e*this.ONE_20/this.a9,t+=this.x9),e>=this.a10&&(e=e*this.ONE_20/this.a10,t+=this.x10),e>=this.a11&&(e=e*this.ONE_20/this.a11,t+=this.x11);const a=(e-this.ONE_20)*this.ONE_20/(e+this.ONE_20),n=a*a/this.ONE_20;let o=a,i=o;return o=o*n/this.ONE_20,i+=o/BigInt(3),o=o*n/this.ONE_20,i+=o/BigInt(5),o=o*n/this.ONE_20,i+=o/BigInt(7),o=o*n/this.ONE_20,i+=o/BigInt(9),o=o*n/this.ONE_20,i+=o/BigInt(11),i*=BigInt(2),(t+i)/BigInt(100)}}ye.ONE_18=BigInt("1000000000000000000"),ye.ONE_20=BigInt("100000000000000000000"),ye.ONE_36=BigInt("1000000000000000000000000000000000000"),ye.MAX_NATURAL_EXPONENT=BigInt("130000000000000000000"),ye.MIN_NATURAL_EXPONENT=BigInt("-41000000000000000000"),ye.LN_36_LOWER_BOUND=BigInt(ye.ONE_18)-BigInt("100000000000000000"),ye.LN_36_UPPER_BOUND=BigInt(ye.ONE_18)+BigInt("100000000000000000"),ye.MILD_EXPONENT_BOUND=BigInt(2)**BigInt(254)/ye.ONE_20,ye.x0=BigInt("128000000000000000000"),ye.a0=BigInt("38877084059945950922200000000000000000000000000000000000"),ye.x1=BigInt("64000000000000000000"),ye.a1=BigInt("6235149080811616882910000000"),ye.x2=BigInt("3200000000000000000000"),ye.a2=BigInt("7896296018268069516100000000000000"),ye.x3=BigInt("1600000000000000000000"),ye.a3=BigInt("888611052050787263676000000"),ye.x4=BigInt("800000000000000000000"),ye.a4=BigInt("298095798704172827474000"),ye.x5=BigInt("400000000000000000000"),ye.a5=BigInt("5459815003314423907810"),ye.x6=BigInt("200000000000000000000"),ye.a6=BigInt("738905609893065022723"),ye.x7=BigInt("100000000000000000000"),ye.a7=BigInt("271828182845904523536"),ye.x8=BigInt("50000000000000000000"),ye.a8=BigInt("164872127070012814685"),ye.x9=BigInt("25000000000000000000"),ye.a9=BigInt("128402541668774148407"),ye.x10=BigInt("12500000000000000000"),ye.a10=BigInt("113314845306682631683"),ye.x11=BigInt("6250000000000000000"),ye.a11=BigInt("106449445891785942956");const be=(e,n,o)=>{var i;let s=o?e.tokens.map((e=>e.address===n?t.AddressZero:e.address)):e.tokens.map((e=>e.address)),r=e.tokens.map((e=>{var t;return null!==(t=e.decimals)&&void 0!==t?t:18})),p=e.tokens.map((e=>a.parseFixed(e.balance,e.decimals).toBigInt())),l=e.tokens.map((e=>{var t;return a.parseFixed(null!==(t=e.weight)&&void 0!==t?t:"1",18).toBigInt()})),d=e.tokens.map((e=>{var t;return a.parseFixed(null!==(t=e.priceRate)&&void 0!==t?t:"1",18).toBigInt()})),u=r.map((e=>re(BigInt(e)))),c=u.map(((e,t)=>ce.mulDownFixed(e,d[t]))),y=le(p,c);if(n){const e=new Y(n);[s,r,c,u,p,y,l,d]=e.sortTokens(s,r,c,u,p,y,l,d)}const b=a.parseFixed(null!==(i=e.amp)&&void 0!==i?i:"1",3).toBigInt(),m=y.indexOf(ce.max(y)),f=[...c],T=[...u],h=[...s],I=[...p],g=[...d],_=[...y],x=s.indexOf(e.address);return-1!==x&&(f.splice(x,1),T.splice(x,1),h.splice(x,1),I.splice(x,1),g.splice(x,1),_.splice(x,1)),{bptIndex:x,higherBalanceTokenIndex:m,ampWithPrecision:b,balancesEvm:p,balancesEvmWithoutBpt:I,priceRates:d,priceRatesWithoutBpt:g,swapFeeEvm:a.parseFixed(e.swapFee,18).toBigInt(),poolTokens:s,poolTokensWithoutBpt:h,weights:l,scalingFactors:c,scalingFactorsWithoutBpt:f,scalingFactorsRaw:u,scalingFactorsRawWithoutBpt:T,upScaledBalances:y,upScaledBalancesWithoutBpt:_,totalSharesEvm:a.parseFixed(e.totalShares||"0",18).toBigInt()}},me={Popular:{Symbols:["WBTC","DAI","USDC","BAL","AAVE","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",WETH:"0x0000000000000000000000000000000000000000",BAL:"0x0000000000000000000000000000000000000000"}},fe={[exports.Network.GOERLI]:{Popular:{Symbols:["WBTC","DAI","USDC","BAL","USDT","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1",WETH:"0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1",BAL:"0xfA8449189744799aD2AcE7e0EBAC8BB7575eff47",bbaUSD:"0x13ACD41C585d7EbB4a9460f7C8f50BE60DC080Cd"},PriceChainMap:{"0xdfcea9088c8a88a76ff74892c1457c17dfeef9c1":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2","0x37f03a12241e9fd3658ad6777d289c3fb8512bc9":"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599","0xfa8449189744799ad2ace7e0ebac8bb7575eff47":"0xba100000625a3754423978a60c9317c58a424e3d","0xe0c9275e44ea80ef17579d33c55136b7da269aeb":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","0x8c9e6c40d3402480ace624730524facc5482798c":"0x6b175474e89094c44da98b954eedeac495271d0f","0x1f1f156e0317167c11aa412e3d1435ea29dc3cce":"0xdac17f958d2ee523a2206206994597c13d831ec7","0x4cb1892fddf14f772b2e39e299f44b2e5da90d04":"0x3ed3b47dd13ec9a98b44e6204a523e766b225811","0x811151066392fd641fe74a9b55a712670572d161":"0xbcca60bb61934080951369a648fb03df4f96263c","0x89534a24450081aa267c79b07411e9617d984052":"0x028171bca77440897b824ca71d1c56cac55b68a3","0x829f35cebbcd47d3c120793c12f7a232c903138b":"0x956f47f50a910163d8bf957cf5846d573e7f87ca","0xff386a3d08f80ac38c77930d173fa56c6286dc8b":"0x6810e776880c02933d47db1b9fc05908e5386b96"}},[exports.Network.MAINNET]:{Popular:{Symbols:["WBTC","DAI","USDC","BAL","AAVE","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",WETH:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",BAL:"0xba100000625a3754423978a60c9317c58a424e3d",bbaUSD:"0x7B50775383d3D6f0215A8F290f2C9e2eEBBEceb2",bbaUSDv2:"0xA13a9247ea42D743238089903570127DdA72fE44"}},[exports.Network.POLYGON]:{Popular:{Symbols:["WBTC","DAI","USDC","BAL","AAVE","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",WETH:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",BAL:"0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3"}},[exports.Network.ARBITRUM]:{Popular:{Symbols:["WBTC","DAI","USDC","BAL","AAVE","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",WETH:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",BAL:"0x040d1EdC9569d4Bab2D15287Dc5A4F10F56a56B8"}},[exports.Network.GNOSIS]:{Popular:{Symbols:["xDAI","WXDAI","WETH","BAL"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0xe91d153e0b41518a2ce8dd3d7944fa863463a97d",WETH:"0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1",BAL:"0x7eF541E2a22058048904fE5744f9c7E4C57AF717"}}};function Te(e){return fe[e]?fe[e]:me}let he=!1,Ie=!1;const ge={debug:1,default:2,info:2,warning:3,error:4,off:5};let _e=ge.default,xe=null;const Pe=function(){try{const e=[];if(["NFD","NFC","NFKD","NFKC"].forEach((t=>{try{if("test"!=="test".normalize(t))throw new Error("bad normalize")}catch(a){e.push(t)}})),e.length)throw new Error("missing "+e.join(", "));if(String.fromCharCode(233).normalize("NFD")!==String.fromCharCode(101,769))throw new Error("broken implementation")}catch(e){return e.message}return null}();var we,Ee;!function(e){e.DEBUG="DEBUG",e.INFO="INFO",e.WARNING="WARNING",e.ERROR="ERROR",e.OFF="OFF"}(we||(we={})),function(e){e.UNKNOWN_ERROR="UNKNOWN_ERROR",e.NOT_IMPLEMENTED="NOT_IMPLEMENTED",e.UNSUPPORTED_OPERATION="UNSUPPORTED_OPERATION",e.NETWORK_ERROR="NETWORK_ERROR",e.SERVER_ERROR="SERVER_ERROR",e.TIMEOUT="TIMEOUT",e.BUFFER_OVERRUN="BUFFER_OVERRUN",e.NUMERIC_FAULT="NUMERIC_FAULT",e.MISSING_NEW="MISSING_NEW",e.INVALID_ARGUMENT="INVALID_ARGUMENT",e.MISSING_ARGUMENT="MISSING_ARGUMENT",e.UNEXPECTED_ARGUMENT="UNEXPECTED_ARGUMENT",e.CALL_EXCEPTION="CALL_EXCEPTION",e.INSUFFICIENT_FUNDS="INSUFFICIENT_FUNDS",e.NONCE_EXPIRED="NONCE_EXPIRED",e.REPLACEMENT_UNDERPRICED="REPLACEMENT_UNDERPRICED",e.UNPREDICTABLE_GAS_LIMIT="UNPREDICTABLE_GAS_LIMIT",e.TRANSACTION_REPLACED="TRANSACTION_REPLACED",e.ACTION_REJECTED="ACTION_REJECTED"}(Ee||(Ee={}));const Ae="0123456789abcdef";class Se{constructor(e){Object.defineProperty(this,"version",{enumerable:!0,value:e,writable:!1})}_log(e,t){const a=e.toLowerCase();null==ge[a]&&this.throwArgumentError("invalid log level name","logLevel",e),_e>ge[a]||console.log.apply(console,t)}debug(...e){this._log(Se.levels.DEBUG,e)}info(...e){this._log(Se.levels.INFO,e)}warn(...e){this._log(Se.levels.WARNING,e)}makeError(e,t,a){if(Ie)return this.makeError("censored error",t,{});t||(t=Se.errors.UNKNOWN_ERROR),a||(a={});const n=[];Object.keys(a).forEach((e=>{const t=a[e];try{if(t instanceof Uint8Array){let a="";for(let e=0;e>4],a+=Ae[15&t[e]];n.push(e+"=Uint8Array(0x"+a+")")}else n.push(e+"="+JSON.stringify(t))}catch(t){n.push(e+"="+JSON.stringify(a[e].toString()))}})),n.push(`code=${t}`),n.push(`version=${this.version}`);const o=e;let i="";switch(t){case Ee.NUMERIC_FAULT:{i="NUMERIC_FAULT";const t=e;switch(t){case"overflow":case"underflow":case"division-by-zero":i+="-"+t;break;case"negative-power":case"negative-width":i+="-unsupported";break;case"unbound-bitwise-result":i+="-unbound-result"}break}case Ee.CALL_EXCEPTION:case Ee.INSUFFICIENT_FUNDS:case Ee.MISSING_NEW:case Ee.NONCE_EXPIRED:case Ee.REPLACEMENT_UNDERPRICED:case Ee.TRANSACTION_REPLACED:case Ee.UNPREDICTABLE_GAS_LIMIT:i=t}i&&(e+=" [ See: https://links.ethers.org/v5-errors-"+i+" ]"),n.length&&(e+=" ("+n.join(", ")+")");const s=new Error(e);return s.reason=o,s.code=t,Object.keys(a).forEach((function(e){s[e]=a[e]})),s}throwError(e,t,a){throw this.makeError(e,t,a)}throwArgumentError(e,t,a){return this.throwError(e,Se.errors.INVALID_ARGUMENT,{argument:t,value:a})}assert(e,t,a,n){e||this.throwError(t,a,n)}assertArgument(e,t,a,n){e||this.throwArgumentError(t,a,n)}checkNormalize(e){Pe&&this.throwError("platform missing String.prototype.normalize",Se.errors.UNSUPPORTED_OPERATION,{operation:"String.prototype.normalize",form:Pe})}checkSafeUint53(e,t){"number"==typeof e&&(null==t&&(t="value not safe"),(e<0||e>=9007199254740991)&&this.throwError(t,Se.errors.NUMERIC_FAULT,{operation:"checkSafeInteger",fault:"out-of-safe-range",value:e}),e%1&&this.throwError(t,Se.errors.NUMERIC_FAULT,{operation:"checkSafeInteger",fault:"non-integer",value:e}))}checkArgumentCount(e,t,a){a=a?": "+a:"",et&&this.throwError("too many arguments"+a,Se.errors.UNEXPECTED_ARGUMENT,{count:e,expectedCount:t})}checkNew(e,t){e!==Object&&null!=e||this.throwError("missing new",Se.errors.MISSING_NEW,{name:t.name})}checkAbstract(e,t){e===t?this.throwError("cannot instantiate abstract class "+JSON.stringify(t.name)+" directly; use a sub-class",Se.errors.UNSUPPORTED_OPERATION,{name:e.name,operation:"new"}):e!==Object&&null!=e||this.throwError("missing new",Se.errors.MISSING_NEW,{name:t.name})}static globalLogger(){return xe||(xe=new Se("logger/5.7.0")),xe}static setCensorship(e,t){if(!e&&t&&this.globalLogger().throwError("cannot permanently disable censorship",Se.errors.UNSUPPORTED_OPERATION,{operation:"setCensorship"}),he){if(!e)return;this.globalLogger().throwError("error censorship permanent",Se.errors.UNSUPPORTED_OPERATION,{operation:"setCensorship"})}Ie=!!e,he=!!t}static setLogLevel(e){const t=ge[e.toLowerCase()];null!=t?_e=t:Se.globalLogger().warn("invalid log level - "+e)}static from(e){return new Se(e)}}Se.errors=Ee,Se.levels=we;const ve=new Se("units/5.7.0"),ke=["wei","kwei","mwei","gwei","szabo","finney","ether"];function Be(e,t){if("string"==typeof t){const e=ke.indexOf(t);-1!==e&&(t=3*e)}return a.formatFixed(e,null!=t?t:18)}function Ce(e,t){if("string"!=typeof e&&ve.throwArgumentError("value must be a string","value",e),"string"==typeof t){const e=ke.indexOf(t);-1!==e&&(t=3*e)}return a.parseFixed(e,null!=t?t:18)}const Oe={[exports.Network.MAINNET]:{waUSDT:"0xf8fd466f12e236f4c96f7cce6c79eadb819abf58",waUSDC:"0xd093fa4fb80d09bb30817fdcd442d4d02ed3e5de",waDAI:"0x02d60b84491589974263d922d9cc7a3152618ef6"},[exports.Network.POLYGON]:{wamDAI:"0xee029120c72b0607344f35b17cdd90025e647b00",wamUSDC:"0x221836a597948dce8f3568e044ff123108acc42a",wamUSDT:"0x19c60a251e525fa88cd6f3768416a8024e98fc19"}},Me={[exports.Network.MAINNET]:{[Oe[exports.Network.MAINNET].waUSDT]:{aToken:"0x3ed3b47dd13ec9a98b44e6204a523e766b225811",underlying:"0xdac17f958d2ee523a2206206994597c13d831ec7"},[Oe[exports.Network.MAINNET].waUSDC]:{aToken:"0xbcca60bb61934080951369a648fb03df4f96263c",underlying:"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"},[Oe[exports.Network.MAINNET].waDAI]:{aToken:"0x028171bca77440897b824ca71d1c56cac55b68a3",underlying:"0x6b175474e89094c44da98b954eedeac495271d0f"}},[exports.Network.POLYGON]:{[Oe[exports.Network.POLYGON].wamUSDT]:{aToken:"0x60d55f02a771d515e077c9c2403a1ef324885cec",underlying:"0xc2132d05d31c914a87c6611c10748aeb04b58e8f"},[Oe[exports.Network.POLYGON].wamUSDC]:{aToken:"0x1a13f4ca1d028320a707d99520abfefca3998b7f",underlying:"0x2791bca1f2de4661ed88a30c99a7a9449aa84174"},[Oe[exports.Network.POLYGON].wamDAI]:{aToken:"0x27f8d03b3a2196956ed754badc28d73be8830a6e",underlying:"0x8f3cf7ad23cd3cadbd9735aff958023239c6a063"}}},Fe=new e.Interface(["function rate() view returns (uint256)"]);class Re{constructor(e,t){this.multicall=e,this.network=t}async fetch(e){const t=Object.values(Oe[e]),a=t.map((e=>({target:e,callData:Fe.encodeFunctionData("rate",[])}))),[,n]=await this.multicall.callStatic.aggregate(a);return t.reduce(((e,t,a)=>(e[t]||(e[t]="0x"==n[a]?0:parseFloat(Be(n[a],27))),e)),{})}async getRate(e){return 1}}function Ne(e,t){let a=e.toLowerCase();return a=Le(a,t),a=De(a,t),a}const Le=(e,t)=>{const a=Te(t).PriceChainMap;return a&&a[e.toLowerCase()]||e},De=(e,t)=>{const a=e.toLocaleLowerCase(),n=t;return null!=Me[n]&&null!=Me[n]&&Object.keys(Me[n]).includes(a)?Me[n][a].aToken:a},Ue=(e,n)=>{const o=n.filter(((a,n)=>e[n]===t.AddressZero));return o[0]?a.BigNumber.from(o[0]):a.BigNumber.from(0)};class Ve{constructor(e,t=200,a=100){this.fn=e,this.wait=t,this.limit=a,this.requestSets=[],this.promisedCalls=[],this.promisedCount=0,this.debounceCancel=()=>{}}fetch(e){var t,a;return(t=this.requestSets)[a=this.promisedCount]||(t[a]=new Set),e&&this.requestSets[this.promisedCount].add(e),this.requestSets[this.promisedCount].size>=this.limit?this.execute(0):this.promisedCalls[this.promisedCount]?this.promisedCalls[this.promisedCount].promise:this.execute(this.wait)}execute(e=0){this.promisedCalls[this.promisedCount]||(this.promisedCalls[this.promisedCount]=(()=>{let e=()=>{},t=()=>{};return{promise:new Promise(((a,n)=>{[e,t]=[a,n]})),reject:t,resolve:e}})());const{promise:t,resolve:a,reject:n}=this.promisedCalls[this.promisedCount];this.timeout&&clearTimeout(this.timeout);const o=()=>{const e=[...this.requestSets[this.promisedCount]];this.promisedCount++,this.fn(e).then((e=>{a(e),this.debounceCancel=()=>{}})).catch((e=>{e.response&&e.response.data&&e.response.data.error&&(e=e.response.data.error),n(e)}))};return e>0?this.timeout=setTimeout(o.bind(this),e):o(),this.debounceCancel=()=>{this.timeout&&clearTimeout(this.timeout),n("Cancelled"),delete this.promisedCalls[this.promisedCount]},t}}function qe(e,t){const n=new RegExp(`[0-9]+\\.?[0-9]{0,${t}}`),o=e.match(n);let i=e;return o&&(i=o[0]),a.parseFixed(i,t)}function Ge(e,t){return a.formatFixed(e,t).replace(/(.0$)/,"")}const We=a.BigNumber.from("10000"),He=(e,t)=>e.mul(t).div(We),Ke=(e,t)=>{const a=He(e,t);return e.sub(a)},$e=(e,t)=>{const a=He(e,t);return e.add(a)},Je=(e,t)=>n.getAddress(e)===n.getAddress(t);function je(e,t,a){return t<0||t>e.length?e:[...e.slice(0,t),a,...e.slice(t)]}function Xe(e,t,a){return t<0||t>=e.length?e:[...e.slice(0,t),a,...e.slice(t+1)]}function Ye(e,t){const a=[...e];return t<0||t>=e.length||a.splice(t,1),a}function ze(e,t,...a){if(e.length!==t.length||a.some((e=>e.length!==t.length)))throw new Error("Array length mismatch");const n=e.map((e=>t.indexOf(e)));if(n.indexOf(-1)>=0)throw new Error("Invalid reference or original array");const o=[];return n.forEach(((e,t)=>{a.forEach(((a,n)=>{o[n]||(o[n]=[]),o[n][t]=a[e]}))})),o}function Ze(e){const t=Object.values(exports.PoolType);return!(!e.includes("Linear")||!t.includes(e))}const Qe=({receipt:e,to:t,contractInterface:a,logName:n})=>{const o=e.logs.filter((e=>Je(e.address,t))).map((e=>{try{return a.parseLog(e)}catch(e){return j.getInstance().warn(e),null}})).find((e=>(null==e?void 0:e.name)===n));if(!o)throw new Error("Event not found in logs");return o},et=()=>`0x${Array(8).fill(null).map((()=>Math.random().toString(16).slice(2,10))).join("")}`;class tt{format(e){return e}}class at{constructor(){this.operatorMap={gt:"_gt",lt:"_lt",eq:"",in:"_in",not_in:"_not_in",contains:"_contains"}}format(e){const t={};return e.where&&Object.entries(e.where).forEach((([e,a])=>{Object.entries(a).forEach((([a,n])=>{t[`${e}${this.operatorMap[a]}`]=n}))})),{...e,where:t}}}class nt{constructor(e){this.args=e}merge(e){const t=s.mergeWith(this.args,e.args,((e,t)=>{if(Array.isArray(e))return e.concat(t)}));return new nt(t)}format(e){return e.format(this.args)}}const ot=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct AaveLinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class it{static createInterface(){return new r.utils.Interface(ot)}static connect(e,t){return new r.Contract(e,ot,t)}}it.abi=ot;const st=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"AaveLinearPoolCreated",type:"event"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract AaveLinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class rt{static createInterface(){return new r.utils.Interface(st)}static connect(e,t){return new r.Contract(e,st,t)}}rt.abi=st;const pt=[{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approveVault",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IStaticATokenLM",name:"staticToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"toUnderlying",type:"bool"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapAaveStaticToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStaticATokenLM",name:"staticToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"fromUnderlying",type:"bool"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapAaveDynamicToken",outputs:[],stateMutability:"payable",type:"function"}];class lt{static createInterface(){return new r.utils.Interface(pt)}static connect(e,t){return new r.Contract(e,pt,t)}}lt.abi=pt;const dt=[{inputs:[{internalType:"address",name:"admin",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"previousAdminRole",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"newAdminRole",type:"bytes32"}],name:"RoleAdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleGranted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleRevoked",type:"event"},{inputs:[],name:"DEFAULT_ADMIN_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"actionId",type:"bytes32"},{internalType:"address",name:"account",type:"address"},{internalType:"address",name:"",type:"address"}],name:"canPerform",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"}],name:"getRoleAdmin",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getRoleMember",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"}],name:"getRoleMemberCount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"grantRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32[]",name:"roles",type:"bytes32[]"},{internalType:"address",name:"account",type:"address"}],name:"grantRoles",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32[]",name:"roles",type:"bytes32[]"},{internalType:"address[]",name:"accounts",type:"address[]"}],name:"grantRolesToMany",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"hasRole",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"renounceRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"revokeRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32[]",name:"roles",type:"bytes32[]"},{internalType:"address",name:"account",type:"address"}],name:"revokeRoles",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32[]",name:"roles",type:"bytes32[]"},{internalType:"address[]",name:"accounts",type:"address[]"}],name:"revokeRolesFromMany",outputs:[],stateMutability:"nonpayable",type:"function"}];class ut{static createInterface(){return new r.utils.Interface(dt)}static connect(e,t){return new r.Contract(e,dt,t)}}ut.abi=dt;const ct=[{inputs:[{internalType:"contract IVault",name:"_vault",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"minAmountsOut",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.ExitPoolRequest",name:"request",type:"tuple"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"maxAmountsIn",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"fromInternalBalance",type:"bool"}],internalType:"struct IVault.JoinPoolRequest",name:"request",type:"tuple"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"vault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"}];class yt{static createInterface(){return new r.utils.Interface(ct)}static connect(e,t){return new r.Contract(e,ct,t)}}yt.abi=ct;const bt=[{inputs:[{internalType:"contract IBalancerTokenAdmin",name:"tokenAdmin",type:"address"},{internalType:"contract IGaugeController",name:"gaugeController",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"gauge",type:"address"},{indexed:!1,internalType:"uint256",name:"minted",type:"uint256"}],name:"Minted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!0,internalType:"address",name:"minter",type:"address"},{indexed:!1,internalType:"bool",name:"approval",type:"bool"}],name:"MinterApprovalSet",type:"event"},{inputs:[{internalType:"address",name:"minter",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"allowed_to_mint_for",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBalancerToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBalancerTokenAdmin",outputs:[{internalType:"contract IBalancerTokenAdmin",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getGaugeController",outputs:[{internalType:"contract IGaugeController",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"minter",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"getMinterApproval",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"gauge",type:"address"}],name:"mint",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"gauge",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"mintFor",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[]",name:"gauges",type:"address[]"}],name:"mintMany",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[]",name:"gauges",type:"address[]"},{internalType:"address",name:"user",type:"address"}],name:"mintManyFor",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"gauge",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"mint_for",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[8]",name:"gauges",type:"address[8]"}],name:"mint_many",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"gauge",type:"address"}],name:"minted",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"minter",type:"address"},{internalType:"bool",name:"approval",type:"bool"}],name:"setMinterApproval",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"minter",type:"address"},{internalType:"bool",name:"approval",type:"bool"},{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"setMinterApprovalWithSignature",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"minter",type:"address"}],name:"toggle_approve_mint",outputs:[],stateMutability:"nonpayable",type:"function"}];class mt{static createInterface(){return new r.utils.Interface(bt)}static connect(e,t){return new r.Contract(e,bt,t)}}mt.abi=bt;const ft=[{inputs:[{internalType:"contract IVault",name:"_vault",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getAmpForPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getInRecoveryModeForPools",outputs:[{internalType:"bool[]",name:"",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getIsPausedForPools",outputs:[{internalType:"bool[]",name:"",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getLinearTargetsForPools",outputs:[{internalType:"uint256[][]",name:"",type:"uint256[][]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getNormalizedWeightsForPools",outputs:[{internalType:"uint256[][]",name:"",type:"uint256[][]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"poolIds",type:"bytes32[]"},{components:[{internalType:"bool",name:"loadTokenBalanceUpdatesAfterBlock",type:"bool"},{internalType:"bool",name:"loadTotalSupply",type:"bool"},{internalType:"bool",name:"loadSwapFees",type:"bool"},{internalType:"bool",name:"loadLinearWrappedTokenRates",type:"bool"},{internalType:"bool",name:"loadLinearTargets",type:"bool"},{internalType:"bool",name:"loadNormalizedWeights",type:"bool"},{internalType:"bool",name:"loadScalingFactors",type:"bool"},{internalType:"bool",name:"loadAmps",type:"bool"},{internalType:"bool",name:"loadRates",type:"bool"},{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"enum TotalSupplyType[]",name:"totalSupplyTypes",type:"uint8[]"},{internalType:"enum SwapFeeType[]",name:"swapFeeTypes",type:"uint8[]"},{internalType:"uint256[]",name:"linearPoolIdxs",type:"uint256[]"},{internalType:"uint256[]",name:"weightedPoolIdxs",type:"uint256[]"},{internalType:"uint256[]",name:"scalingFactorPoolIdxs",type:"uint256[]"},{internalType:"uint256[]",name:"ampPoolIdxs",type:"uint256[]"},{internalType:"uint256[]",name:"ratePoolIdxs",type:"uint256[]"}],internalType:"struct PoolDataQueryConfig",name:"config",type:"tuple"}],name:"getPoolData",outputs:[{internalType:"uint256[][]",name:"balances",type:"uint256[][]"},{internalType:"uint256[]",name:"totalSupplies",type:"uint256[]"},{internalType:"uint256[]",name:"swapFees",type:"uint256[]"},{internalType:"uint256[]",name:"linearWrappedTokenRates",type:"uint256[]"},{internalType:"uint256[][]",name:"linearTargets",type:"uint256[][]"},{internalType:"uint256[][]",name:"weights",type:"uint256[][]"},{internalType:"uint256[][]",name:"scalingFactors",type:"uint256[][]"},{internalType:"uint256[]",name:"amps",type:"uint256[]"},{internalType:"uint256[]",name:"rates",type:"uint256[]"},{internalType:"uint256[]",name:"ignoreIdxs",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"poolIds",type:"bytes32[]"},{components:[{internalType:"bool",name:"loadInRecoveryMode",type:"bool"},{internalType:"bool",name:"loadIsPaused",type:"bool"}],internalType:"struct PoolStatusQueryConfig",name:"config",type:"tuple"}],name:"getPoolStatus",outputs:[{internalType:"bool[]",name:"isPaused",type:"bool[]"},{internalType:"bool[]",name:"inRecoveryMode",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"poolIds",type:"bytes32[]"},{internalType:"uint256",name:"blockNumber",type:"uint256"}],name:"getPoolTokenBalancesWithUpdatesAfterBlock",outputs:[{internalType:"uint256[][]",name:"",type:"uint256[][]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getRateForPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getScalingFactorsForPools",outputs:[{internalType:"uint256[][]",name:"",type:"uint256[][]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"},{internalType:"enum SwapFeeType[]",name:"swapFeeTypes",type:"uint8[]"}],name:"getSwapFeePercentageForPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"},{internalType:"enum TotalSupplyType[]",name:"totalSupplyTypes",type:"uint8[]"}],name:"getTotalSupplyForPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getWrappedTokenRateForLinearPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"vault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"}];class Tt{static createInterface(){return new r.utils.Interface(ft)}static connect(e,t){return new r.Contract(e,ft,t)}}Tt.abi=ft;const ht=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"address",name:"libraryAddress",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"getLibrary",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"results",type:"bytes[]"}],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}];class It{static createInterface(){return new r.utils.Interface(ht)}static connect(e,t){return new r.Contract(e,ht,t)}}It.abi=ht;const gt=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IERC20",name:"wstETH",type:"address"},{internalType:"contract IBalancerMinter",name:"minter",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approveVault",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"assetInIndex",type:"uint256"},{internalType:"uint256",name:"assetOutIndex",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.BatchSwapStep[]",name:"swaps",type:"tuple[]"},{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"int256[]",name:"limits",type:"int256[]"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"value",type:"uint256"},{components:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"key",type:"uint256"}],internalType:"struct VaultActions.OutputReference[]",name:"outputReferences",type:"tuple[]"}],name:"batchSwap",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum VaultActions.PoolKind",name:"kind",type:"uint8"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"minAmountsOut",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.ExitPoolRequest",name:"request",type:"tuple"},{components:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"key",type:"uint256"}],internalType:"struct VaultActions.OutputReference[]",name:"outputReferences",type:"tuple[]"}],name:"exitPool",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStakingLiquidityGauge[]",name:"gauges",type:"address[]"}],name:"gaugeClaimRewards",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStakingLiquidityGauge",name:"gauge",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"gaugeDeposit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address[]",name:"gauges",type:"address[]"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"gaugeMint",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bool",name:"approval",type:"bool"},{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"gaugeSetMinterApproval",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStakingLiquidityGauge",name:"gauge",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"gaugeWithdraw",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"getEntrypoint",outputs:[{internalType:"contract IBalancerRelayer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum VaultActions.PoolKind",name:"kind",type:"uint8"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"maxAmountsIn",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"fromInternalBalance",type:"bool"}],internalType:"struct IVault.JoinPoolRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"joinPool",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.UserBalanceOpKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"asset",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"}],internalType:"struct IVault.UserBalanceOp[]",name:"ops",type:"tuple[]"},{internalType:"uint256",name:"value",type:"uint256"}],name:"manageUserBalance",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"ref",type:"uint256"}],name:"peekChainedReferenceValue",outputs:[{internalType:"uint256",name:"value",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"relayer",type:"address"},{internalType:"bool",name:"approved",type:"bool"},{internalType:"bytes",name:"authorisation",type:"bytes"}],name:"setRelayerApproval",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"stakeETH",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"stakeETHAndWrap",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"assetIn",type:"address"},{internalType:"contract IAsset",name:"assetOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.SingleSwap",name:"singleSwap",type:"tuple"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"uint256",name:"limit",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"swap",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStaticATokenLM",name:"staticToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"toUnderlying",type:"bool"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapAaveStaticToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract ICToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapCompoundV2",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC4626",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapERC4626",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IEulerToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapEuler",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IGearboxDieselToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"dieselAmount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapGearbox",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IReaperTokenVault",name:"vaultToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapReaperVaultToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IShareToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapShareToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract ITetuSmartVault",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapTetu",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IUnbuttonToken",name:"wrapperToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapUnbuttonToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapWstETH",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IYearnTokenVault",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapYearn",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC20Permit",name:"token",type:"address"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"vaultPermit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC20PermitDAI",name:"token",type:"address"},{internalType:"address",name:"holder",type:"address"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"expiry",type:"uint256"},{internalType:"bool",name:"allowed",type:"bool"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"vaultPermitDAI",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStaticATokenLM",name:"staticToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"fromUnderlying",type:"bool"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapAaveDynamicToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract ICToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapCompoundV2",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC4626",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapERC4626",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IEulerToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"eulerProtocol",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapEuler",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IGearboxDieselToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"mainAmount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapGearbox",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IReaperTokenVault",name:"vaultToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapReaperVaultToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IShareToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapShareToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapStETH",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract ITetuSmartVault",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapTetu",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IUnbuttonToken",name:"wrapperToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"uAmount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapUnbuttonToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IYearnTokenVault",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapYearn",outputs:[],stateMutability:"payable",type:"function"}];class _t{static createInterface(){return new r.utils.Interface(gt)}static connect(e,t){return new r.Contract(e,gt,t)}}_t.abi=gt;const xt=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"contract IRateProvider[]",name:"rateProviders",type:"address[]"},{internalType:"uint256[]",name:"tokenRateCacheDurations",type:"uint256[]"},{internalType:"bool[]",name:"exemptFromYieldProtocolFeeFlags",type:"bool[]"},{internalType:"uint256",name:"amplificationParameter",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"}],internalType:"struct ComposableStablePool.NewPoolParams",name:"params",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"startValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endTime",type:"uint256"}],name:"AmpUpdateStarted",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"currentValue",type:"uint256"}],name:"AmpUpdateStopped",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"feeType",type:"uint256"},{indexed:!1,internalType:"uint256",name:"protocolFeePercentage",type:"uint256"}],name:"ProtocolFeePercentageCacheUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"tokenIndex",type:"uint256"},{indexed:!1,internalType:"uint256",name:"rate",type:"uint256"}],name:"TokenRateCacheUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"tokenIndex",type:"uint256"},{indexed:!0,internalType:"contract IRateProvider",name:"provider",type:"address"},{indexed:!1,internalType:"uint256",name:"cacheDuration",type:"uint256"}],name:"TokenRateProviderSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getActualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAmplificationParameter",outputs:[{internalType:"uint256",name:"value",type:"uint256"},{internalType:"bool",name:"isUpdating",type:"bool"},{internalType:"uint256",name:"precision",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastJoinExitData",outputs:[{internalType:"uint256",name:"lastJoinExitAmplification",type:"uint256"},{internalType:"uint256",name:"lastPostJoinExitInvariant",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMinimumBpt",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"feeType",type:"uint256"}],name:"getProtocolFeePercentageCache",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolSwapFeeDelegation",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRateProviders",outputs:[{internalType:"contract IRateProvider[]",name:"",type:"address[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"getTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"getTokenRateCache",outputs:[{internalType:"uint256",name:"rate",type:"uint256"},{internalType:"uint256",name:"oldRate",type:"uint256"},{internalType:"uint256",name:"duration",type:"uint256"},{internalType:"uint256",name:"expires",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"isTokenExemptFromYieldProtocolFee",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"swapRequest",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"bytes",name:"poolConfig",type:"bytes"}],name:"setAssetManagerPoolConfig",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"uint256",name:"duration",type:"uint256"}],name:"setTokenRateCacheDuration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"rawEndValue",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"}],name:"startAmplificationParameterUpdate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopAmplificationParameterUpdate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"updateProtocolFeePercentageCache",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"updateTokenRateCache",outputs:[],stateMutability:"nonpayable",type:"function"}];class Pt{static createInterface(){return new r.utils.Interface(xt)}static connect(e,t){return new r.Contract(e,xt,t)}}Pt.abi=xt;const wt=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256",name:"amplificationParameter",type:"uint256"},{internalType:"contract IRateProvider[]",name:"rateProviders",type:"address[]"},{internalType:"uint256[]",name:"tokenRateCacheDurations",type:"uint256[]"},{internalType:"bool[]",name:"exemptFromYieldProtocolFeeFlags",type:"bool[]"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract ComposableStablePool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Et{static createInterface(){return new r.utils.Interface(wt)}static connect(e,t){return new r.Contract(e,wt,t)}}Et.abi=wt;const At=[{inputs:[{internalType:"contract IERC20",name:"_underlying",type:"address"},{internalType:"contract IERC20",name:"_bond",type:"address"},{internalType:"uint256",name:"_expiration",type:"uint256"},{internalType:"uint256",name:"_unitSeconds",type:"uint256"},{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"uint256",name:"_percentFee",type:"uint256"},{internalType:"uint256",name:"_percentFeeGov",type:"uint256"},{internalType:"address",name:"_governance",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"collectedBase",type:"uint256"},{indexed:!1,internalType:"uint256",name:"collectedBond",type:"uint256"},{indexed:!1,internalType:"uint256",name:"remainingBase",type:"uint256"},{indexed:!1,internalType:"uint256",name:"remainingBond",type:"uint256"}],name:"FeeCollection",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"FEE_BOUND",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"bond",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"bondDecimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseApproval",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"expiration",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"feesBond",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"feesUnderlying",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"governance",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"increaseApproval",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"currentBalances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"protocolSwapFee",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"currentBalances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"protocolSwapFee",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"swapRequest",type:"tuple"},{internalType:"uint256",name:"currentBalanceTokenIn",type:"uint256"},{internalType:"uint256",name:"currentBalanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"percentFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"percentFeeGov",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountX",type:"uint256"},{internalType:"uint256",name:"reserveX",type:"uint256"},{internalType:"uint256",name:"reserveY",type:"uint256"},{internalType:"bool",name:"out",type:"bool"}],name:"solveTradeInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"underlying",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"underlyingDecimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"unitSeconds",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"}];class St{static createInterface(){return new r.utils.Interface(At)}static connect(e,t){return new r.Contract(e,At,t)}}St.abi=At;const vt=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];class kt{static createInterface(){return new r.utils.Interface(vt)}static connect(e,t){return new r.Contract(e,vt,t)}}kt.abi=vt;const Bt=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct ERC4626LinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Ct{static createInterface(){return new r.utils.Interface(Bt)}static connect(e,t){return new r.Contract(e,Bt,t)}}Ct.abi=Bt;const Ot=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"Erc4626LinearPoolCreated",type:"event"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract LinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Mt{static createInterface(){return new r.utils.Interface(Ot)}static connect(e,t){return new r.Contract(e,Ot,t)}}Mt.abi=Ot;const Ft=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct EulerLinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Rt{static createInterface(){return new r.utils.Interface(Ft)}static connect(e,t){return new r.Contract(e,Ft,t)}}Rt.abi=Ft;const Nt=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"_eulerProtocol",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"EulerLinearPoolCreated",type:"event"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"}],name:"create",outputs:[{internalType:"contract LinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"eulerProtocol",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Lt{static createInterface(){return new r.utils.Interface(Nt)}static connect(e,t){return new r.Contract(e,Nt,t)}}Lt.abi=Nt;const Dt=[{inputs:[{internalType:"address[]",name:"_assetsToRegister",type:"address[]"},{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"uint256",name:"_protocolPercentFee",type:"uint256"},{internalType:"string",name:"_name",type:"string"},{internalType:"string",name:"_symbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"numeraire",type:"address"},{indexed:!0,internalType:"address",name:"reserve",type:"address"},{indexed:!1,internalType:"uint256",name:"weight",type:"uint256"}],name:"AssetIncluded",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"derivative",type:"address"},{indexed:!0,internalType:"address",name:"numeraire",type:"address"},{indexed:!0,internalType:"address",name:"reserve",type:"address"},{indexed:!1,internalType:"address",name:"assimilator",type:"address"}],name:"AssimilatorIncluded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"newCollector",type:"address"}],name:"ChangeCollectorAddress",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"isEmergency",type:"bool"}],name:"EmergencyAlarm",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"lptAmountBurned",type:"uint256"},{indexed:!1,internalType:"uint256[]",name:"amountsWithdrawn",type:"uint256[]"}],name:"EmergencyWithdraw",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"feesCollected",type:"uint256"}],name:"FeesAccrued",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"feesCollected",type:"uint256"}],name:"FeesCollected",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"lptAmountBurned",type:"uint256"},{indexed:!1,internalType:"uint256[]",name:"amountsWithdrawn",type:"uint256[]"}],name:"OnExitPool",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"lptAmountMinted",type:"uint256"},{indexed:!1,internalType:"uint256[]",name:"amountsDeposited",type:"uint256[]"}],name:"OnJoinPool",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"alpha",type:"uint256"},{indexed:!1,internalType:"uint256",name:"beta",type:"uint256"},{indexed:!1,internalType:"uint256",name:"delta",type:"uint256"},{indexed:!1,internalType:"uint256",name:"epsilon",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lambda",type:"uint256"}],name:"ParametersSet",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"updater",type:"address"},{indexed:!1,internalType:"uint256",name:"newProtocolPercentage",type:"uint256"}],name:"ProtocolFeeShareUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"trader",type:"address"},{indexed:!0,internalType:"address",name:"origin",type:"address"},{indexed:!0,internalType:"address",name:"target",type:"address"},{indexed:!1,internalType:"uint256",name:"originAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"targetAmount",type:"uint256"}],name:"Trade",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_derivative",type:"address"}],name:"assimilator",outputs:[{internalType:"address",name:"assimilator_",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"collectorAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"curve",outputs:[{internalType:"int128",name:"alpha",type:"int128"},{internalType:"int128",name:"beta",type:"int128"},{internalType:"int128",name:"delta",type:"int128"},{internalType:"int128",name:"epsilon",type:"int128"},{internalType:"int128",name:"lambda",type:"int128"},{internalType:"uint256",name:"cap",type:"uint256"},{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"address",name:"fxPoolAddress",type:"address"},{internalType:"bytes32",name:"poolId",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"derivatives",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"emergency",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[]",name:"_assets",type:"address[]"},{internalType:"uint256[]",name:"_assetWeights",type:"uint256[]"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"liquidity",outputs:[{internalType:"uint256",name:"total_",type:"uint256"},{internalType:"uint256[]",name:"individual_",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"numeraires",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"swapRequest",type:"tuple"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"protocolPercentFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"reserves",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_cap",type:"uint256"}],name:"setCap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_collectorAddress",type:"address"}],name:"setCollectorAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"_emergency",type:"bool"}],name:"setEmergency",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_alpha",type:"uint256"},{internalType:"uint256",name:"_beta",type:"uint256"},{internalType:"uint256",name:"_feeAtHalt",type:"uint256"},{internalType:"uint256",name:"_epsilon",type:"uint256"},{internalType:"uint256",name:"_lambda",type:"uint256"}],name:"setParams",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_protocolPercentFee",type:"uint256"}],name:"setProtocolPercentFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalUnclaimedFeesInNumeraire",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"totalDepositNumeraire",type:"uint256"}],name:"viewDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"viewParameters",outputs:[{internalType:"uint256",name:"alpha_",type:"uint256"},{internalType:"uint256",name:"beta_",type:"uint256"},{internalType:"uint256",name:"delta_",type:"uint256"},{internalType:"uint256",name:"epsilon_",type:"uint256"},{internalType:"uint256",name:"lambda_",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_curvesToBurn",type:"uint256"}],name:"viewWithdraw",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"}];class Ut{static createInterface(){return new r.utils.Interface(Dt)}static connect(e,t){return new r.Contract(e,Dt,t)}}Ut.abi=Dt;const Vt=[{inputs:[],name:"CLAIM_FREQUENCY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IRewardsOnlyGauge",name:"gauge",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"claimRewardsFromGauge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IRewardsOnlyGauge[]",name:"gauges",type:"address[]"},{internalType:"address",name:"user",type:"address"}],name:"claimRewardsFromGauges",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IRewardsOnlyGauge",name:"gauge",type:"address"},{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"token",type:"address"}],name:"getPendingRewards",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"}];class qt{static createInterface(){return new r.utils.Interface(Vt)}static connect(e,t){return new r.Contract(e,Vt,t)}}qt.abi=Vt;const Gt=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct GearboxLinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Wt{static createInterface(){return new r.utils.Interface(Gt)}static connect(e,t){return new r.Contract(e,Gt,t)}}Wt.abi=Gt;const Ht=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"GearboxLinearPoolCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract GearboxLinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Kt{static createInterface(){return new r.utils.Interface(Ht)}static connect(e,t){return new r.Contract(e,Ht,t)}}Kt.abi=Ht;const $t=[{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"key",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"previousValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newValue",type:"uint256"}],name:"ConfigChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"key",type:"bytes32"}],name:"ConfigFrozen",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"key",type:"bytes32"}],name:"ConfigUnset",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"newGovernor",type:"address"}],name:"GovernorChangeRequested",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"oldGovernor",type:"address"},{indexed:!1,internalType:"address",name:"newGovernor",type:"address"}],name:"GovernorChanged",type:"event"},{inputs:[],name:"acceptGovernance",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newGovernor",type:"address"}],name:"changeGovernor",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"freeze",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"},{internalType:"address",name:"defaultValue",type:"address"}],name:"getAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"getAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"getConfigMeta",outputs:[{internalType:"uint8",name:"",type:"uint8"},{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"getUint",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"governor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"hasKey",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_governor",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"listKeys",outputs:[{internalType:"bytes32[]",name:"",type:"bytes32[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"pendingGovernor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"},{internalType:"address",name:"newValue",type:"address"}],name:"setAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"},{internalType:"uint256",name:"newValue",type:"uint256"}],name:"setUint",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"unset",outputs:[],stateMutability:"nonpayable",type:"function"}];class Jt{static createInterface(){return new r.utils.Interface($t)}static connect(e,t){return new r.Contract(e,$t,t)}}Jt.abi=$t;const jt=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IwstETH",name:"wstETH",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"assetInIndex",type:"uint256"},{internalType:"uint256",name:"assetOutIndex",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.BatchSwapStep[]",name:"swaps",type:"tuple[]"},{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"int256[]",name:"limits",type:"int256[]"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"batchSwap",outputs:[{internalType:"int256[]",name:"swapAmounts",type:"int256[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"minAmountsOut",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.ExitPoolRequest",name:"request",type:"tuple"}],name:"exitPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getStETH",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWstETH",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"maxAmountsIn",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"fromInternalBalance",type:"bool"}],internalType:"struct IVault.JoinPoolRequest",name:"request",type:"tuple"}],name:"joinPool",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"assetIn",type:"address"},{internalType:"contract IAsset",name:"assetOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.SingleSwap",name:"singleSwap",type:"tuple"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"uint256",name:"limit",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swap",outputs:[{internalType:"uint256",name:"swapAmount",type:"uint256"}],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}];class Xt{static createInterface(){return new r.utils.Interface(jt)}static connect(e,t){return new r.Contract(e,jt,t)}}Xt.abi=jt;const Yt=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"bytes",name:"poolConfig",type:"bytes"}],name:"setAssetManagerPoolConfig",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"paused",type:"bool"}],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];class zt{static createInterface(){return new r.utils.Interface(Yt)}static connect(e,t){return new r.Contract(e,Yt,t)}}zt.abi=Yt;const Zt=[{name:"Deposit",inputs:[{name:"provider",type:"address",indexed:!0},{name:"value",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Withdraw",inputs:[{name:"provider",type:"address",indexed:!0},{name:"value",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"UpdateLiquidityLimit",inputs:[{name:"user",type:"address",indexed:!0},{name:"original_balance",type:"uint256",indexed:!1},{name:"original_supply",type:"uint256",indexed:!1},{name:"working_balance",type:"uint256",indexed:!1},{name:"working_supply",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Transfer",inputs:[{name:"_from",type:"address",indexed:!0},{name:"_to",type:"address",indexed:!0},{name:"_value",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Approval",inputs:[{name:"_owner",type:"address",indexed:!0},{name:"_spender",type:"address",indexed:!0},{name:"_value",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{stateMutability:"nonpayable",type:"constructor",inputs:[{name:"minter",type:"address"},{name:"veBoostProxy",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit",inputs:[{name:"_value",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit",inputs:[{name:"_value",type:"uint256"},{name:"_addr",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit",inputs:[{name:"_value",type:"uint256"},{name:"_addr",type:"address"},{name:"_claim_rewards",type:"bool"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"withdraw",inputs:[{name:"_value",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"withdraw",inputs:[{name:"_value",type:"uint256"},{name:"_claim_rewards",type:"bool"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"claim_rewards",inputs:[],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"claim_rewards",inputs:[{name:"_addr",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"claim_rewards",inputs:[{name:"_addr",type:"address"},{name:"_receiver",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"transferFrom",inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"transfer",inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"approve",inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"permit",inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"},{name:"_value",type:"uint256"},{name:"_deadline",type:"uint256"},{name:"_v",type:"uint8"},{name:"_r",type:"bytes32"},{name:"_s",type:"bytes32"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"increaseAllowance",inputs:[{name:"_spender",type:"address"},{name:"_added_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"decreaseAllowance",inputs:[{name:"_spender",type:"address"},{name:"_subtracted_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"user_checkpoint",inputs:[{name:"addr",type:"address"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"set_rewards_receiver",inputs:[{name:"_receiver",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"kick",inputs:[{name:"addr",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit_reward_token",inputs:[{name:"_reward_token",type:"address"},{name:"_amount",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"add_reward",inputs:[{name:"_reward_token",type:"address"},{name:"_distributor",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"set_reward_distributor",inputs:[{name:"_reward_token",type:"address"},{name:"_distributor",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"set_killed",inputs:[{name:"_is_killed",type:"bool"}],outputs:[]},{stateMutability:"view",type:"function",name:"claimed_reward",inputs:[{name:"_addr",type:"address"},{name:"_token",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"claimable_reward",inputs:[{name:"_user",type:"address"},{name:"_reward_token",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"claimable_reward_write",inputs:[{name:"_addr",type:"address"},{name:"_token",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"claimable_tokens",inputs:[{name:"addr",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_checkpoint",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"future_epoch_time",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"inflation_rate",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"decimals",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"version",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"allowance",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"nonpayable",type:"function",name:"initialize",inputs:[{name:"_lp_token",type:"address"}],outputs:[]},{stateMutability:"view",type:"function",name:"balanceOf",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"totalSupply",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"name",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"symbol",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"DOMAIN_SEPARATOR",inputs:[],outputs:[{name:"",type:"bytes32"}]},{stateMutability:"view",type:"function",name:"nonces",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"factory",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"lp_token",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"is_killed",inputs:[],outputs:[{name:"",type:"bool"}]},{stateMutability:"view",type:"function",name:"reward_count",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"reward_data",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"tuple",components:[{name:"token",type:"address"},{name:"distributor",type:"address"},{name:"period_finish",type:"uint256"},{name:"rate",type:"uint256"},{name:"last_update",type:"uint256"},{name:"integral",type:"uint256"}]}]},{stateMutability:"view",type:"function",name:"rewards_receiver",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"reward_integral_for",inputs:[{name:"arg0",type:"address"},{name:"arg1",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"working_balances",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"working_supply",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_inv_supply_of",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_checkpoint_of",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_fraction",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"period",inputs:[],outputs:[{name:"",type:"int128"}]},{stateMutability:"view",type:"function",name:"reward_tokens",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"period_timestamp",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_inv_supply",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"uint256"}]}];class Qt{static createInterface(){return new r.utils.Interface(Zt)}static connect(e,t){return new r.Contract(e,Zt,t)}}Qt.abi=Zt;const ea=[{constant:!1,inputs:[{components:[{name:"target",type:"address"},{name:"callData",type:"bytes"}],name:"calls",type:"tuple[]"}],name:"aggregate",outputs:[{name:"blockNumber",type:"uint256"},{name:"returnData",type:"bytes[]"}],payable:!1,stateMutability:"nonpayable",type:"function"}];class ta{static createInterface(){return new r.utils.Interface(ea)}static connect(e,t){return new r.Contract(e,ea,t)}}ta.abi=ea;const aa=[{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call[]",name:"calls",type:"tuple[]"}],name:"aggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes[]",name:"returnData",type:"bytes[]"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bool",name:"allowFailure",type:"bool"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call3[]",name:"calls",type:"tuple[]"}],name:"aggregate3",outputs:[{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bool",name:"allowFailure",type:"bool"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call3Value[]",name:"calls",type:"tuple[]"}],name:"aggregate3Value",outputs:[{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call[]",name:"calls",type:"tuple[]"}],name:"blockAndAggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"blockHash",type:"bytes32"},{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"},{inputs:[],name:"getBasefee",outputs:[{internalType:"uint256",name:"basefee",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],name:"getBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBlockNumber",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getChainId",outputs:[{internalType:"uint256",name:"chainid",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockCoinbase",outputs:[{internalType:"address",name:"coinbase",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockDifficulty",outputs:[{internalType:"uint256",name:"difficulty",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockGasLimit",outputs:[{internalType:"uint256",name:"gaslimit",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockTimestamp",outputs:[{internalType:"uint256",name:"timestamp",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"addr",type:"address"}],name:"getEthBalance",outputs:[{internalType:"uint256",name:"balance",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bool",name:"requireSuccess",type:"bool"},{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call[]",name:"calls",type:"tuple[]"}],name:"tryAggregate",outputs:[{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bool",name:"requireSuccess",type:"bool"},{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call[]",name:"calls",type:"tuple[]"}],name:"tryBlockAndAggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"blockHash",type:"bytes32"},{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"}];class na{static createInterface(){return new r.utils.Interface(aa)}static connect(e,t){return new r.Contract(e,aa,t)}}na.abi=aa;const oa=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256",name:"amplificationParameter",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"startValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endTime",type:"uint256"}],name:"AmpUpdateStarted",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"currentValue",type:"uint256"}],name:"AmpUpdateStopped",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAmplificationParameter",outputs:[{internalType:"uint256",name:"value",type:"uint256"},{internalType:"bool",name:"isUpdating",type:"bool"},{internalType:"uint256",name:"precision",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"swapRequest",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"bytes",name:"poolConfig",type:"bytes"}],name:"setAssetManagerPoolConfig",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"paused",type:"bool"}],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"rawEndValue",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"}],name:"startAmplificationParameterUpdate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopAmplificationParameterUpdate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];class ia{static createInterface(){return new r.utils.Interface(oa)}static connect(e,t){return new r.Contract(e,oa,t)}}ia.abi=oa;const sa=[{inputs:[{internalType:"contract IStaticAToken",name:"_waToken",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"waToken",outputs:[{internalType:"contract IStaticAToken",name:"",type:"address"}],stateMutability:"view",type:"function"}];class ra{static createInterface(){return new r.utils.Interface(sa)}static connect(e,t){return new r.Contract(e,sa,t)}}ra.abi=sa;const pa=[{inputs:[{internalType:"contract IAuthorizer",name:"authorizer",type:"address"},{internalType:"contract IWETH",name:"weth",type:"address"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IAuthorizer",name:"newAuthorizer",type:"address"}],name:"AuthorizerChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ExternalBalanceTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IFlashLoanRecipient",name:"recipient",type:"address"},{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"feeAmount",type:"uint256"}],name:"FlashLoan",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"int256",name:"delta",type:"int256"}],name:"InternalBalanceChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!0,internalType:"address",name:"liquidityProvider",type:"address"},{indexed:!1,internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{indexed:!1,internalType:"int256[]",name:"deltas",type:"int256[]"},{indexed:!1,internalType:"uint256[]",name:"protocolFeeAmounts",type:"uint256[]"}],name:"PoolBalanceChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!0,internalType:"address",name:"assetManager",type:"address"},{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"int256",name:"cashDelta",type:"int256"},{indexed:!1,internalType:"int256",name:"managedDelta",type:"int256"}],name:"PoolBalanceManaged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!0,internalType:"address",name:"poolAddress",type:"address"},{indexed:!1,internalType:"enum IVault.PoolSpecialization",name:"specialization",type:"uint8"}],name:"PoolRegistered",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"relayer",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bool",name:"approved",type:"bool"}],name:"RelayerApprovalChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!0,internalType:"contract IERC20",name:"tokenIn",type:"address"},{indexed:!0,internalType:"contract IERC20",name:"tokenOut",type:"address"},{indexed:!1,internalType:"uint256",name:"amountIn",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amountOut",type:"uint256"}],name:"Swap",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"contract IERC20[]",name:"tokens",type:"address[]"}],name:"TokensDeregistered",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{indexed:!1,internalType:"address[]",name:"assetManagers",type:"address[]"}],name:"TokensRegistered",type:"event"},{inputs:[],name:"WETH",outputs:[{internalType:"contract IWETH",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"assetInIndex",type:"uint256"},{internalType:"uint256",name:"assetOutIndex",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.BatchSwapStep[]",name:"swaps",type:"tuple[]"},{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"int256[]",name:"limits",type:"int256[]"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"batchSwap",outputs:[{internalType:"int256[]",name:"assetDeltas",type:"int256[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"}],name:"deregisterTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"minAmountsOut",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.ExitPoolRequest",name:"request",type:"tuple"}],name:"exitPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IFlashLoanRecipient",name:"recipient",type:"address"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"flashLoan",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"}],name:"getInternalBalance",outputs:[{internalType:"uint256[]",name:"balances",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"}],name:"getPool",outputs:[{internalType:"address",name:"",type:"address"},{internalType:"enum IVault.PoolSpecialization",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"contract IERC20",name:"token",type:"address"}],name:"getPoolTokenInfo",outputs:[{internalType:"uint256",name:"cash",type:"uint256"},{internalType:"uint256",name:"managed",type:"uint256"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"assetManager",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"}],name:"getPoolTokens",outputs:[{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract ProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"relayer",type:"address"}],name:"hasApprovedRelayer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"maxAmountsIn",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"fromInternalBalance",type:"bool"}],internalType:"struct IVault.JoinPoolRequest",name:"request",type:"tuple"}],name:"joinPool",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.PoolBalanceOpKind",name:"kind",type:"uint8"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct IVault.PoolBalanceOp[]",name:"ops",type:"tuple[]"}],name:"managePoolBalance",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.UserBalanceOpKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"asset",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"}],internalType:"struct IVault.UserBalanceOp[]",name:"ops",type:"tuple[]"}],name:"manageUserBalance",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"assetInIndex",type:"uint256"},{internalType:"uint256",name:"assetOutIndex",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.BatchSwapStep[]",name:"swaps",type:"tuple[]"},{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"}],name:"queryBatchSwap",outputs:[{internalType:"int256[]",name:"",type:"int256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"enum IVault.PoolSpecialization",name:"specialization",type:"uint8"}],name:"registerPool",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"address[]",name:"assetManagers",type:"address[]"}],name:"registerTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IAuthorizer",name:"newAuthorizer",type:"address"}],name:"setAuthorizer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"paused",type:"bool"}],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"relayer",type:"address"},{internalType:"bool",name:"approved",type:"bool"}],name:"setRelayerApproval",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"assetIn",type:"address"},{internalType:"contract IAsset",name:"assetOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.SingleSwap",name:"singleSwap",type:"tuple"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"uint256",name:"limit",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swap",outputs:[{internalType:"uint256",name:"amountCalculated",type:"uint256"}],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}];class la{static createInterface(){return new r.utils.Interface(pa)}static connect(e,t){return new r.Contract(e,pa,t)}}la.abi=pa;const da=[{inputs:[{components:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256[]",name:"normalizedWeights",type:"uint256[]"},{internalType:"contract IRateProvider[]",name:"rateProviders",type:"address[]"},{internalType:"address[]",name:"assetManagers",type:"address[]"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],internalType:"struct WeightedPool.NewPoolParams",name:"params",type:"tuple"},{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"feeType",type:"uint256"},{indexed:!1,internalType:"uint256",name:"protocolFeePercentage",type:"uint256"}],name:"ProtocolFeePercentageCacheUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getATHRateProduct",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getActualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastPostJoinExitInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getNormalizedWeights",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"feeType",type:"uint256"}],name:"getProtocolFeePercentageCache",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolSwapFeeDelegation",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRateProviders",outputs:[{internalType:"contract IRateProvider[]",name:"",type:"address[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"bytes",name:"poolConfig",type:"bytes"}],name:"setAssetManagerPoolConfig",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"updateProtocolFeePercentageCache",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class ua{static createInterface(){return new r.utils.Interface(da)}static connect(e,t){return new r.Contract(e,da,t)}}ua.abi=da;const ca=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256[]",name:"normalizedWeights",type:"uint256[]"},{internalType:"contract IRateProvider[]",name:"rateProviders",type:"address[]"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class ya{static createInterface(){return new r.utils.Interface(ca)}static connect(e,t){return new r.Contract(e,ca,t)}}ya.abi=ca;const ba=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct YearnLinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class ma{static createInterface(){return new r.utils.Interface(ba)}static connect(e,t){return new r.Contract(e,ba,t)}}ma.abi=ba;const fa=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"YearnLinearPoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract LinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Ta{static createInterface(){return new r.utils.Interface(fa)}static connect(e,t){return new r.Contract(e,fa,t)}}Ta.abi=fa;const ha=[{inputs:[{components:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"token0",type:"address"},{internalType:"contract IERC20",name:"token1",type:"address"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"bool",name:"oracleEnabled",type:"bool"},{internalType:"address",name:"owner",type:"address"}],internalType:"struct ExtensibleWeightedPool2Tokens.NewPoolParams",name:"baseParams",type:"tuple"},{components:[{internalType:"int256",name:"alpha",type:"int256"},{internalType:"int256",name:"beta",type:"int256"},{internalType:"int256",name:"c",type:"int256"},{internalType:"int256",name:"s",type:"int256"},{internalType:"int256",name:"lambda",type:"int256"}],internalType:"struct GyroECLPMath.Params",name:"eclpParams",type:"tuple"},{components:[{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],internalType:"struct GyroECLPMath.Vector2",name:"tauAlpha",type:"tuple"},{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],internalType:"struct GyroECLPMath.Vector2",name:"tauBeta",type:"tuple"},{internalType:"int256",name:"u",type:"int256"},{internalType:"int256",name:"v",type:"int256"},{internalType:"int256",name:"w",type:"int256"},{internalType:"int256",name:"z",type:"int256"},{internalType:"int256",name:"dSq",type:"int256"}],internalType:"struct GyroECLPMath.DerivedParams",name:"derivedEclpParams",type:"tuple"},{internalType:"address",name:"rateProvider0",type:"address"},{internalType:"address",name:"rateProvider1",type:"address"},{internalType:"address",name:"capManager",type:"address"},{components:[{internalType:"bool",name:"capEnabled",type:"bool"},{internalType:"uint120",name:"perAddressCap",type:"uint120"},{internalType:"uint128",name:"globalCap",type:"uint128"}],internalType:"struct ICappedLiquidity.CapParams",name:"capParams",type:"tuple"},{internalType:"address",name:"pauseManager",type:"address"}],internalType:"struct GyroECLPPool.GyroParams",name:"params",type:"tuple"},{internalType:"address",name:"configAddress",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"capManager",type:"address"}],name:"CapManagerUpdated",type:"event"},{anonymous:!1,inputs:[{components:[{internalType:"bool",name:"capEnabled",type:"bool"},{internalType:"uint120",name:"perAddressCap",type:"uint120"},{internalType:"uint128",name:"globalCap",type:"uint128"}],indexed:!1,internalType:"struct ICappedLiquidity.CapParams",name:"params",type:"tuple"}],name:"CapParamsUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"derivedParamsValidated",type:"bool"}],name:"ECLPDerivedParamsValidated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paramsValidated",type:"bool"}],name:"ECLPParamsValidated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"invariantAfterJoin",type:"uint256"}],name:"InvariantAterInitializeJoin",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"oldInvariant",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newInvariant",type:"uint256"}],name:"InvariantOldAndNew",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"OracleEnabledChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"oracleUpdatedIndex",type:"uint256"}],name:"OracleIndexUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"oldPauseManager",type:"address"},{indexed:!1,internalType:"address",name:"newPauseManager",type:"address"}],name:"PauseManagerChanged",type:"event"},{anonymous:!1,inputs:[],name:"PausedLocally",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256[]",name:"balances",type:"uint256[]"},{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],indexed:!1,internalType:"struct GyroECLPMath.Vector2",name:"invariant",type:"tuple"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"SwapParams",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[],name:"UnpausedLocally",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"_dSq",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsAlpha",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsBeta",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsC",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsLambda",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsS",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_tauAlphaX",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_tauAlphaY",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_tauBetaX",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_tauBetaY",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_u",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_v",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_w",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_z",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"capManager",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"capParams",outputs:[{components:[{internalType:"bool",name:"capEnabled",type:"bool"},{internalType:"uint120",name:"perAddressCap",type:"uint120"},{internalType:"uint128",name:"globalCap",type:"uint128"}],internalType:"struct ICappedLiquidity.CapParams",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_pauseManager",type:"address"}],name:"changePauseManager",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"startIndex",type:"uint256"},{internalType:"uint256",name:"endIndex",type:"uint256"}],name:"dirtyUninitializedOracleSamples",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getECLPParams",outputs:[{components:[{internalType:"int256",name:"alpha",type:"int256"},{internalType:"int256",name:"beta",type:"int256"},{internalType:"int256",name:"c",type:"int256"},{internalType:"int256",name:"s",type:"int256"},{internalType:"int256",name:"lambda",type:"int256"}],internalType:"struct GyroECLPMath.Params",name:"params",type:"tuple"},{components:[{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],internalType:"struct GyroECLPMath.Vector2",name:"tauAlpha",type:"tuple"},{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],internalType:"struct GyroECLPMath.Vector2",name:"tauBeta",type:"tuple"},{internalType:"int256",name:"u",type:"int256"},{internalType:"int256",name:"v",type:"int256"},{internalType:"int256",name:"w",type:"int256"},{internalType:"int256",name:"z",type:"int256"},{internalType:"int256",name:"dSq",type:"int256"}],internalType:"struct GyroECLPMath.DerivedParams",name:"d",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[],name:"getInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLargestSafeQueryWindow",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getLastInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"enum IPriceOracle.Variable",name:"variable",type:"uint8"}],name:"getLatest",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMiscData",outputs:[{internalType:"int256",name:"logInvariant",type:"int256"},{internalType:"int256",name:"logTotalSupply",type:"int256"},{internalType:"uint256",name:"oracleSampleCreationTimestamp",type:"uint256"},{internalType:"uint256",name:"oracleIndex",type:"uint256"},{internalType:"bool",name:"oracleEnabled",type:"bool"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getNormalizedWeights",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"enum IPriceOracle.Variable",name:"variable",type:"uint8"},{internalType:"uint256",name:"ago",type:"uint256"}],internalType:"struct IPriceOracle.OracleAccumulatorQuery[]",name:"queries",type:"tuple[]"}],name:"getPastAccumulators",outputs:[{internalType:"int256[]",name:"results",type:"int256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"spotPrice",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getSample",outputs:[{internalType:"int256",name:"logPairPrice",type:"int256"},{internalType:"int256",name:"accLogPairPrice",type:"int256"},{internalType:"int256",name:"logBptPrice",type:"int256"},{internalType:"int256",name:"accLogBptPrice",type:"int256"},{internalType:"int256",name:"logInvariant",type:"int256"},{internalType:"int256",name:"accLogInvariant",type:"int256"},{internalType:"uint256",name:"timestamp",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"enum IPriceOracle.Variable",name:"variable",type:"uint8"},{internalType:"uint256",name:"secs",type:"uint256"},{internalType:"uint256",name:"ago",type:"uint256"}],internalType:"struct IPriceOracle.OracleAverageQuery[]",name:"queries",type:"tuple[]"}],name:"getTimeWeightedAverage",outputs:[{internalType:"uint256[]",name:"results",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTokenRates",outputs:[{internalType:"uint256",name:"rate0",type:"uint256"},{internalType:"uint256",name:"rate1",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTotalSamples",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"gyroConfig",outputs:[{internalType:"contract IGyroConfig",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pauseManager",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"rateProvider0",outputs:[{internalType:"contract IRateProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"rateProvider1",outputs:[{internalType:"contract IRateProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_capManager",type:"address"}],name:"setCapManager",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"bool",name:"capEnabled",type:"bool"},{internalType:"uint120",name:"perAddressCap",type:"uint120"},{internalType:"uint128",name:"globalCap",type:"uint128"}],internalType:"struct ICappedLiquidity.CapParams",name:"params",type:"tuple"}],name:"setCapParams",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"paused",type:"bool"}],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"}];class Ia{static createInterface(){return new r.utils.Interface(ha)}static connect(e,t){return new r.Contract(e,ha,t)}}Ia.abi=ha;const ga=[{name:"Deposit",inputs:[{name:"provider",type:"address",indexed:!0},{name:"value",type:"uint256",indexed:!1},{name:"locktime",type:"uint256",indexed:!0},{name:"type",type:"int128",indexed:!1},{name:"ts",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Withdraw",inputs:[{name:"provider",type:"address",indexed:!0},{name:"value",type:"uint256",indexed:!1},{name:"ts",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Supply",inputs:[{name:"prevSupply",type:"uint256",indexed:!1},{name:"supply",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{stateMutability:"nonpayable",type:"constructor",inputs:[{name:"token_addr",type:"address"},{name:"_name",type:"string"},{name:"_symbol",type:"string"},{name:"_authorizer_adaptor",type:"address"}],outputs:[]},{stateMutability:"view",type:"function",name:"token",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"name",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"symbol",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"decimals",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"admin",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"nonpayable",type:"function",name:"commit_smart_wallet_checker",inputs:[{name:"addr",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"apply_smart_wallet_checker",inputs:[],outputs:[]},{stateMutability:"view",type:"function",name:"get_last_user_slope",inputs:[{name:"addr",type:"address"}],outputs:[{name:"",type:"int128"}]},{stateMutability:"view",type:"function",name:"user_point_history__ts",inputs:[{name:"_addr",type:"address"},{name:"_idx",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"locked__end",inputs:[{name:"_addr",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"nonpayable",type:"function",name:"checkpoint",inputs:[],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit_for",inputs:[{name:"_addr",type:"address"},{name:"_value",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"create_lock",inputs:[{name:"_value",type:"uint256"},{name:"_unlock_time",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"increase_amount",inputs:[{name:"_value",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"increase_unlock_time",inputs:[{name:"_unlock_time",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"withdraw",inputs:[],outputs:[]},{stateMutability:"view",type:"function",name:"balanceOf",inputs:[{name:"addr",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"balanceOf",inputs:[{name:"addr",type:"address"},{name:"_t",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"balanceOfAt",inputs:[{name:"addr",type:"address"},{name:"_block",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"totalSupply",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"totalSupply",inputs:[{name:"t",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"totalSupplyAt",inputs:[{name:"_block",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"supply",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"locked",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"tuple",components:[{name:"amount",type:"int128"},{name:"end",type:"uint256"}]}]},{stateMutability:"view",type:"function",name:"epoch",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"point_history",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"bias",type:"int128"},{name:"slope",type:"int128"},{name:"ts",type:"uint256"},{name:"blk",type:"uint256"}]}]},{stateMutability:"view",type:"function",name:"user_point_history",inputs:[{name:"arg0",type:"address"},{name:"arg1",type:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"bias",type:"int128"},{name:"slope",type:"int128"},{name:"ts",type:"uint256"},{name:"blk",type:"uint256"}]}]},{stateMutability:"view",type:"function",name:"user_point_epoch",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"slope_changes",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"int128"}]},{stateMutability:"view",type:"function",name:"future_smart_wallet_checker",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"smart_wallet_checker",inputs:[],outputs:[{name:"",type:"address"}]}];class _a{static createInterface(){return new r.utils.Interface(ga)}static connect(e,t){return new r.Contract(e,ga,t)}}_a.abi=ga;const xa=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IERC20",name:"votingEscrow",type:"address"},{internalType:"contract IVeDelegation",name:"delegation",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"newImplementation",type:"address"}],name:"DelegationImplementationUpdated",type:"event"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"adjustedBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"adjusted_balance_of",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDelegationImplementation",outputs:[{internalType:"contract IVeDelegation",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVotingEscrow",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"killDelegation",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IVeDelegation",name:"delegation",type:"address"}],name:"setDelegation",outputs:[],stateMutability:"nonpayable",type:"function"}];class Pa{static createInterface(){return new r.utils.Interface(xa)}static connect(e,t){return new r.Contract(e,xa,t)}}Pa.abi=xa;var wa,Ea=Object.freeze({__proto__:null,AaveLinearPool__factory:it,AaveLinearPoolFactory__factory:rt,AaveWrapping__factory:lt,Authoriser__factory:ut,BalancerHelpers__factory:yt,BalancerMinter__factory:mt,BalancerPoolDataQueries__factory:Tt,BalancerRelayer__factory:It,BatchRelayerLibrary__factory:_t,ComposableStablePool__factory:Pt,ComposableStablePoolFactory__factory:Et,ConvergentCurvePool__factory:St,ERC20__factory:kt,ERC4626LinearPool__factory:Ct,ERC4626LinearPoolFactory__factory:Mt,EulerLinearPool__factory:Rt,EulerLinearPoolFactory__factory:Lt,FXPool__factory:Ut,GaugeClaimHelper__factory:qt,GearboxLinearPool__factory:Wt,GearboxLinearPoolFactory__factory:Kt,GyroConfig__factory:Jt,LidoRelayer__factory:Xt,LinearPool__factory:zt,LiquidityGaugeV5__factory:Qt,Multicall__factory:ta,Multicall3__factory:na,StablePool__factory:ia,StaticATokenRateProvider__factory:ra,Vault__factory:la,WeightedPool__factory:ua,WeightedPoolFactory__factory:ya,YearnLinearPool__factory:ma,YearnLinearPoolFactory__factory:Ta,GyroEV2__factory:Ia,VeBal__factory:_a,VeDelegationProxy__factory:Pa});function Aa(e,n,o,i,s,r){const p=new Array(s.length).fill(t.Zero);return s.forEach(((s,l)=>{if(e.some((e=>Je(s,e)))){const e=a.BigNumber.from(r).add(t.WeiPerEther);p[l]=o===exports.SwapType.SwapExactOut?p[l].add(a.BigNumber.from(i[l]).mul(e).div(t.WeiPerEther)):p[l].add(i[l])}if(n.some((e=>Je(s,e)))){const e=t.WeiPerEther.sub(a.BigNumber.from(r));p[l]=o===exports.SwapType.SwapExactIn?p[l].add(a.BigNumber.from(i[l]).mul(e).div(t.WeiPerEther)):p[l].add(i[l])}})),p}exports.SwapType=void 0,(wa=exports.SwapType||(exports.SwapType={}))[wa.SwapExactIn=0]="SwapExactIn",wa[wa.SwapExactOut=1]="SwapExactOut";var Sa={1:{contracts:{aaveLinearPoolFactory:"0x0b576c1245f479506e7c8bbc4db4db07c1cd31f9",arbitrumRootGauge:"0x6337949cbc4825bbd09242c811770f6f6fee9ffc",arbitrumRootGaugeFactory:"0x1c99324edc771c82a0dccb780cc7dda0045e50e7",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x8f42adbba1b16eaae3bb5754915e0d06059add75",authorizerAdaptorEntrypoint:"0xf5decdb1f3d1ee384908fbe16d2f0348ae43a9ea",authorizerWithAdaptorValidation:"0x6048a8c631fb7e77eca533cf9c29784e482391e7",avalancheRootGauge:"0xc57b4be50bf6bbe5f6a4fe379da342b32b37bf2f",avalancheRootGaugeFactory:"0x10f3e79911a490aa5b5d5cda6f111029c4eab5ac",bal:"0xba100000625a3754423978a60c9317c58a424e3d",balancerHelpers:"0x5addcca35b7a0d07c74063c48700c8590e87864e",balancerMinter:"0x239e55f427d44c3cc793f49bfb507ebe76638a2b",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0xfea793aa415061c483d2390414275ad314b3f621",balancerTokenAdmin:"0xf302f9f50958c5593770fdf4d4812309ff77414f",balTokenHolderFactory:"0xb848f50141f3d4255b37ac288c25c109104f2158",batchRelayerLibrary:"0xf77018c0d817da22cadbdf504c00c0d32ce1e5c2",circuitBreakerLib:"0x4967b3353cdf9e5c67421a3890d35f2f3bb50527",composableStablePoolFactory:"0xfada0f4547ab2de89d1304a668c39b3e09aa7c76",distributionScheduler:"0xbd35248f8325dd1cb2bbf9d01e80a6bb99a792dd",doubleEntrypointFixRelayer:"0xca96c4f198d343e251b1a01f3eba061ef3da73c1",erc4626LinearPoolFactory:"0x813ee7a840ce909e7fea2117a44a90b8063bd4fd",eulerLinearPoolFactory:"0x5f43fba61f63fa6bff101a0a0458cea917f6b347",externalWeightedMath:"0x3db89f0ca3b388f2bcdbccd2ff8e13c22459cf75",feeDistributor:"0xd3cf852898b21fc233251427c2dc93d3d604f3bb",gaugeAdder:"0x5dbad78818d4c8958eff2d5b95b28385a22113cd",gaugeController:"0xc128468b7ce63ea702c1f104d55a2566b13d3abd",gaugeWorkingBalanceHelper:"0xdab2583911e872a00a851fb80dcc78a4b46ba57c",gearboxLinearPoolFactory:"0x39a79eb449fc05c92c39aa6f0e9bfac03be8de5b",gnosisRootGauge:"0x05277ce7d1e365d660624612d8b8b9b55bfd4518",gnosisRootGaugeFactory:"0x2a18b396829bc29f66a1e59fadd7a0269a6605e8",l2GaugeCheckpointer:"0x343688c5cb92115a52ca485af7f62b4b7a2e9ccc",liquidityGaugeFactory:"0xf1665e19bc105be4edd3739f88315cc699cc5b65",liquidityGaugeV5:"0xe5f96070ca00cd54795416b1a4b4c2403231c548",managedPoolAddRemoveTokenLib:"0x4148bf5b0688ed0a87f317c6534cb841f503349e",managedPoolAmmLib:"0xb37646acbb1a91287721b2cdbe01ba0dba5e57a2",managedPoolFactory:"0xbf904f9f340745b4f0c4702c7b6ab1e808ea6b93",merkleOrchard:"0xe3881627b8deebccf9c23b291430a549fc0be5f7",mockAaveLendingPool:"0x28fa1e40011adf98898e8243b2a48bb21ebf0c29",mockAaveLinearPool:"0x4ce277df0feb5b4d07a0ca2adcf5326e4005239d",mockComposableStablePool:"0x5537f945d8c3fcfdc1b8deceebd220fad26afda8",mockErc4626LinearPool:"0x9516a2d25958edb8da246a320f2c7d94a0dbe25d",mockErc4626Token:"0xb99edc4b289b0f2284fcf3f66884191bdce29624",mockEulerLinearPool:"0xdec02e6642e2c999af429f5ce944653cad15e093",mockEulerToken:"0xc101dca301a4011c1f925e9622e749e550a1b667",mockGearboxDieselToken:"0xb7a32b67aadb3866cc5c2fabc6c6ab8a9027c3c1",mockGearboxLinearPool:"0x0d05aac44ac7dd3c7ba5d50be93eb884a057d234",mockGearboxVault:"0xc7b779ab638b7a59f490ac95199502343a81e006",mockManagedPool:"0xd0cbf6765997b7ca7be6440f5e305b2ec7b96065",mockShareToken:"0x192e67544694a7baa2dea94f9b1df58bb3395a12",mockSilo:"0x66c94ae8d795e98f69ca65ffac87b38b17be3ca2",mockSiloLinearPool:"0x74cbfaf94a3577c539a9dcee9870a6349a33b34f",mockSiloRepository:"0x8e2dfc5e111dbe14e9d725210b9342688dd51c6c",mockStaticAToken:"0x1f3c910c416ed2340150281c5eb93325c38817a1",mockWeightedPool:"0x8055b8c947de30130bc1ec750c8f345a50006b23",mockYearnLinearPool:"0xac5b4ef7ede2f2843a704e96dcaa637f4ba3dc3f",mockYearnTokenVault:"0x806e02dea8d4a0882cad9fa3fa75b212328692de",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",omniVotingEscrowAdaptor:"0x96484f2abf5e58b15176dbf1a799627b53f13b6d",optimismRootGauge:"0xbc230b1a66a138cd9cfc7b352390025978dfadde",optimismRootGaugeFactory:"0x866d4b65694c66fbfd15dd6fa933d0a6b3940a36",polygonRootGauge:"0xfeb1a24c2752e53576133cdb718f25bc64ebdd52",polygonRootGaugeFactory:"0xa98bce70c92ad2ef3288dbcd659bc0d6b62f8f13",polygonZkEvmRootGauge:"0x45bf48d996d22afc9bc150df7fb4d13a49088602",polygonZkEvmRootGaugeFactory:"0x9bf951848288ccd87d06fac426150262cd3447de",poolRecoveryHelper:"0x1b300c86980a5195bcf49bd419a068d98dc133db",preseededVotingEscrowDelegation:"0xb496ff44746a8693a060fafd984da41b253f6790",protocolFeePercentagesProvider:"0x97207b095e4d5c9a6e4cfbfcd2c3358e03b90c4a",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x5ef4c5352882b10893b70dbcaa0c000965bd23c5",protocolIdRegistry:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",recoveryModeHelper:"0x7827108af2fd9910ea7cf361d9b827941fa7d809",siloLinearPoolFactory:"0x4e11aeec21baf1660b1a46472963cb3da7811c89",singleRecipientGauge:"0xb2007b8b7e0260042517f635cfd8e6dd2dd7f007",singleRecipientGaugeFactory:"0x4fb47126fa83a8734991e41b942ac29a3266c968",smartWalletChecker:"0x7869296efd0a76872fee62a058c8fbca5c1c826c",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x67f8df125b796b05895a6dc8ecf944b9556ecb0b",votingEscrow:"0xc128a9954e6c874ea3d62ce62b468ba073093f25",votingEscrowDelegation:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",votingEscrowDelegationProxy:"0x6f5a2ee11e7a772aeb5114a20d0d7c0ff61eb8a0",votingEscrowRemapper:"0x83e443ef4f9963c77bd860f94500075556668cb8",weightedPoolFactory:"0x897888115ada5773e02aa29f775430bfb5f34c51",weth:"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",wstEthRateProvider:"0x72d07d7dca67b8a406ad1ec34ce969c90bfee768",yearnLinearPoolFactory:"0x5f5222ffa40f2aed6380d022184d6ea67c776ee0"},tokens:{AAVE:"0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9",aFEI:"0x683923db55fead99a79fa01a27eec3cb19679cc3",aFRAX:"0xd4937682df3c8aef4fe912a96a74121c0829e664",ALCX:"0xdbdb4d16eda451d0503b854cf79d55697f90c8df",alUSD:"0xbc6da0fe9ad5f3b0d58160288917aa56653660e9",ANGLE:"0x31429d1856ad1377a8a0079410b297e1a9e214c2",AURA:"0xc0c293ce456ff0ed870add98a0828dd4d2903dbf",AURABAL:"0x616e8bfa43f920657b3497dbf40d6b1a02d4608d",aUSDC:"0xbcca60bb61934080951369a648fb03df4f96263c",aUSDT:"0x3ed3b47dd13ec9a98b44e6204a523e766b225811",aWBTC:"0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656",BADGER:"0x3472a5a71965499acd81997a54bba8d852c6e53d",BAL:"0xba100000625a3754423978a60c9317c58a424e3d",BalWeth8020:"0x5c6ee304399dbdb9c8ef030ab642b10820db8f56",bb_a_usd:"0xa13a9247ea42d743238089903570127dda72fe44",cDAI:"0x5d3a536e4d6dbd6114cc1ead35777bab948e3643",cETH:"0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5",COMP:"0xc00e94cb662c3520282e6f5717214004a7f26888",CRV:"0xd533a949740bb3306d119cc777fa900ba034cd52",cUSDC:"0x39aa39c021dfbae8fac545936693ac917d5e7563",CVX:"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b",cvxCRV:"0x62b9c7356a2dc64a1969e19c23e4f579f9810aa7",DAI:"0x6b175474e89094c44da98b954eedeac495271d0f",DIGG:"0x798d1be841a82a273720ce31c822c61a67a601c3",DUSD:"0x5bc25f649fc4e26069ddf4cf4010f9f706c23831",ENS:"0xc18360217d8f7ab5e7c516566761ea12ce7f9d72",EURS:"0xdb25f211ab05b1c97d595516f45794528a807ad8",FARM:"0xa0246c9032bc3a600820415ae600c6388619a14d",FEI:"0x956f47f50a910163d8bf957cf5846d573e7f87ca",FRAX:"0x853d955acef822db058eb8505911ed77f175b99e",FTM:"0x4e15361fd6b4bb609fa63c81a2be19d873717870",FXS:"0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0",GEAR:"0xba3335588d9403515223f109edc4eb7269a9ab5d",GTC:"0xde30da39c46104798bb5aa3fe8b9e0e1f348163f",LINK:"0x514910771af9ca656af840dff83e8264ecf986ca",MIM:"0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3",renBTC:"0xeb4c2781e4eba804ce9a9803c67d0893436bb27d",RETH:"0xae78736cd615f374d3085123a210448e74fc6393",sBTC:"0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6",SPELL:"0x090185f2135308bad17527004364ebcc2d37e5f6",stkAAVE:"0x4da27a545c0c5b758a6ba100e3a049001de870f5",SUSHI:"0x6b3595068778dd592e39a122f4f5a5cf09c90fe2",USDC:"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",USDT:"0xdac17f958d2ee523a2206206994597c13d831ec7",WBTC:"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",WETH:"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",xSUSHI:"0x8798249c2e607446efb7ad49ec89dd1865ff4272"}},4:{contracts:{authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",balancerHelpers:"0x5addcca35b7a0d07c74063c48700c8590e87864e",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x41b953164995c11c81da73d212ed8af25741b7ac",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8"},tokens:{}},5:{contracts:{authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x5d90225de345ee24d1d2b6f45de90b056f5265a1",authorizerAdaptorEntrypoint:"0xacaac3e6d6df918bf3c809dfc7d42de0e4a72d4c",authorizerWithAdaptorValidation:"0x8ea89804145c007e7d226001a96955ad53836087",bal:"0xfa8449189744799ad2ace7e0ebac8bb7575eff47",balancerHelpers:"0x5addcca35b7a0d07c74063c48700c8590e87864e",balancerMinter:"0xdf0399539a72e2689b8b2dd53c3c2a0883879fdd",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0x03f1ab8b19bce21eb06c364aec9e40322572a1e9",balancerTokenAdmin:"0x0f32d7d830e20809bcb9071581a696135dd472b7",balTokenHolderFactory:"0x45e617b07021b97407367624648d1a0a358a751a",batchRelayerLibrary:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",childChainGauge:"0x6b5da774890db7b7b96c6f44e6a4b0f657399e2e",childChainGaugeFactory:"0x7ba29fe8e83dd6097a7298075c4affdbda3121cc",childChainGaugeRewardHelper:"0xc128a9954e6c874ea3d62ce62b468ba073093f25",childChainGaugeTokenAdder:"0x55b18f514d7f0c6c886d0c23ac72df5d3b5f8850",childChainLiquidityGaugeFactory:"0x393b918cc2ffa238732e83dd4ee52343f57d767b",childChainStreamer:"0x5b5b72d76b68f4bb1d2a10ef0fc77711f8ec7ed0",circuitBreakerLib:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",composableStablePoolFactory:"0x1802953277fd955f9a254b80aa0582f193cf1d77",distributionScheduler:"0x05a0bf0540f346b6dac25550738343beb51c0f65",doubleEntrypointFixRelayer:"0xbe9458ab5b6f289e524410141c8d5e20a6b035fe",eulerLinearPoolFactory:"0x813ee7a840ce909e7fea2117a44a90b8063bd4fd",externalWeightedMath:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",feeDistributor:"0x42b67611b208e2e9b4cc975f6d74c87b865ae066",gaugeAdder:"0x3f170631ed9821ca51a59d996ab095162438dc10",gaugeController:"0xbb1ce49b16d55a1f2c6e88102f32144c7334b116",gaugeWorkingBalanceHelper:"0xa7d524046ef89de9f8e4f2d7b029f66ccb738d48",l2BalancerPseudoMinter:"0x81cfae226343b24ba12ec6521db2c79e7aeeb310",l2LayerZeroBridgeForwarder:"0xef44d6786b2b4d544b7850fe67ce6381626bf2d6",liquidityGaugeFactory:"0x3b8ca519122cdd8efb272b0d3085453404b25bd0",liquidityGaugeV5:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",managedPoolAddRemoveTokenLib:"0xacf05be5134d64d150d153818f8c67ee36996650",managedPoolAmmLib:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",managedPoolFactory:"0x03f3fb107e74f2eac9358862e91ad3c692712054",merkleOrchard:"0x5cf4928a3205728bd12830e1840f7db85c62a4b9",mockComposableStablePool:"0x5d343d374a769d1ab102e0418a516dadb08a86e4",mockEulerLinearPool:"0x43fa2c00419f60e18966aa043debd4701cb91b6d",mockEulerToken:"0xb99edc4b289b0f2284fcf3f66884191bdce29624",mockManagedPool:"0xff79b51ec2934dd1810a8e0325e3b08708720b26",mockShareToken:"0xb8bdcbf8ccf443d055d5ffe1d8154fac8187fc94",mockSilo:"0xa7a7e22398622bf71ff31dae5355ec7843b13806",mockSiloLinearPool:"0xbbb66a4fff47701ec6c528db615f5e7bf1abdaaf",mockSiloRepository:"0x7153de1a6d71360f07017838c28deca0d6c03e2a",mockWeightedPool:"0x072ed560cc042d7ab1c080a9e4fa8c6f4858deb3",noProtocolFeeLiquidityBootstrappingPoolFactory:"0xb0c726778c3ae4b3454d85557a48e8fa502bdd6a",nullVotingEscrow:"0xa523f47a933d5020b23629ddf689695aa94612dc",omniVotingEscrowAdaptor:"0x83e443ef4f9963c77bd860f94500075556668cb8",poolRecoveryHelper:"0x1cbbe6cea5e4fe7d69c586b4e362a646deef105d",preseededVotingEscrowDelegation:"0x7af980bdbc36d21ce228efabcca35707566a2be5",protocolFeePercentagesProvider:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x85153b639a35d6e6cf8b291aca237fbe67377154",protocolIdRegistry:"0x4fb47126fa83a8734991e41b942ac29a3266c968",recoveryModeHelper:"0x300ab2038eac391f26d9f895dc61f8f66a548833",rewardsOnlyGauge:"0x40bd3faef4268ea40f4c372d7f0a44c3efaaa6b1",siloLinearPoolFactory:"0x30fd8a0f7009f50616afdab4af91a0a2ef4eae49",singleRecipientGauge:"0x0e9addc34f93bccb45d1f744b9f9301285c5b48f",singleRecipientGaugeFactory:"0xe3881627b8deebccf9c23b291430a549fc0be5f7",smartWalletChecker:"0x1b6df1ff5db99f8a8a04d38f7478bab056fa35a7",testBalancerToken:"0xfa8449189744799ad2ace7e0ebac8bb7575eff47",timelockAuthorizer:"0x70e26f740bad6a2cdd762e2478496268882c21d4",timelockAuthorizerMigrator:"0x7159c4b96bfcfca232355b55778e85cf9e245192",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0xd13afc362f619b840c8f4aac1d957ce219ef37ca",votingEscrow:"0x33a99dcc4c85c014cf12626959111d5898bbcabf",votingEscrowDelegation:"0xcff73979321788d59a6170ff012730db2087f31c",votingEscrowDelegationProxy:"0x6817149cb753bf529565b4d023d7507ed2ff4bc0",votingEscrowRemapper:"0x5dbad78818d4c8958eff2d5b95b28385a22113cd",weightedPoolFactory:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",weth:"0xdfcea9088c8a88a76ff74892c1457c17dfeef9c1",wstEthRateProvider:"0x80a94f458491ca88f09767e58a92fd23cbf1196f"},tokens:{}},10:{contracts:{aaveLinearPoolFactory:"0x7396f99b48e7436b152427bfa3dd6aa8c7c6d05b",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x8f42adbba1b16eaae3bb5754915e0d06059add75",authorizerAdaptorEntrypoint:"0xed86ff0c507d3af5f35d3523b77c17415fcffacb",authorizerWithAdaptorValidation:"0xacf05be5134d64d150d153818f8c67ee36996650",bal:"0xfe8b128ba8c78aabc59d4c64cee7ff28e9379921",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0x03f1ab8b19bce21eb06c364aec9e40322572a1e9",batchRelayerLibrary:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",childChainGauge:"0x81cfae226343b24ba12ec6521db2c79e7aeeb310",childChainGaugeFactory:"0xa523f47a933d5020b23629ddf689695aa94612dc",childChainGaugeRewardHelper:"0x8ab784368a1883da90d8513b48801e2db1cb2d5d",childChainGaugeTokenAdder:"0x6f5a2ee11e7a772aeb5114a20d0d7c0ff61eb8a0",childChainLiquidityGaugeFactory:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",childChainStreamer:"0x239e55f427d44c3cc793f49bfb507ebe76638a2b",circuitBreakerLib:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",composableStablePoolFactory:"0x1802953277fd955f9a254b80aa0582f193cf1d77",doubleEntrypointFixRelayer:"0x3b8ca519122cdd8efb272b0d3085453404b25bd0",erc4626LinearPoolFactory:"0x7adbdabaa80f654568421887c12f09e0c7bd9629",externalWeightedMath:"0x8df317a729fcaa260306d7de28888932cb579b88",gaugeWorkingBalanceHelper:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",l2BalancerPseudoMinter:"0x4fb47126fa83a8734991e41b942ac29a3266c968",l2LayerZeroBridgeForwarder:"0xbef13d1e54d0c79da8b0ad704883e1cea7eb2100",managedPoolAddRemoveTokenLib:"0x59562f93c447656f6e4799fc1fc7c3d977c3324f",managedPoolAmmLib:"0xded7fef7d8ecdcb74f22f0169e1a9ec696e6695d",managedPoolFactory:"0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4",mockAaveLendingPool:"0x533a16f90e7d3ca31dbc608e5ec54967710f0d2a",mockAaveLinearPool:"0x45d37982784f022a9864748b4e8750e1e7019604",mockComposableStablePool:"0x11a4cf51bb0bb4d925cadfda61fcda952d64889c",mockErc4626LinearPool:"0x2da61ef3cdcb97efb0f7099c02527fabfe94dee5",mockErc4626Token:"0x4be0e4d6184348c5ba845a4010528cfc779610b8",mockManagedPool:"0xb4af4fdd49da2a2ba9522eadcf86d407a69f19c8",mockStaticAToken:"0x8b7854708c0c54f9d7d1ff351d4f84e6de0e134c",mockWeightedPool:"0x62f5f9a446d198e8e4c84ee56e5217416720edaf",mockYearnLinearPool:"0x34557ef500bfc060b8e3f2da58ef725bb7d32202",mockYearnTokenVault:"0xb15608d28eb43378a7e7780add3fe9bc132baf40",noProtocolFeeLiquidityBootstrappingPoolFactory:"0xf302f9f50958c5593770fdf4d4812309ff77414f",nullVotingEscrow:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",poolRecoveryHelper:"0x26743984e3357efc59f2fd6c1afdc310335a61c9",protocolFeePercentagesProvider:"0xacaac3e6d6df918bf3c809dfc7d42de0e4a72d4c",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0xc128a9954e6c874ea3d62ce62b468ba073093f25",protocolIdRegistry:"0x9805dcfd25e6de36bad8fe9d3fe2c9b44b764102",recoveryModeHelper:"0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98",rewardsOnlyGauge:"0xc128468b7ce63ea702c1f104d55a2566b13d3abd",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x6817149cb753bf529565b4d023d7507ed2ff4bc0",votingEscrowDelegationProxy:"0x9da18982a33fd0c7051b19f0d7c76f2d5e7e017c",weightedPoolFactory:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",weth:"0x4200000000000000000000000000000000000006",yearnLinearPoolFactory:"0x19dfef0a828eec0c85fbb335aa65437417390b85"},tokens:{}},42:{contracts:{authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x97207b095e4d5c9a6e4cfbfcd2c3358e03b90c4a",balancerHelpers:"0x94905e703fead7f0fd0eee355d267ee909784e6d",balancerMinter:"0x1bbfa323155526f54eec458571bb5a75e0c41507",balancerTokenAdmin:"0xab093cd16e765b5b23d34030aafaf026558e0a19",balTokenHolderFactory:"0xa98bce70c92ad2ef3288dbcd659bc0d6b62f8f13",childChainLiquidityGaugeFactory:"0xf9ac7b9df2b3454e841110cce5550bd5ac6f875f",childChainStreamer:"0x4de578134995bea8480d7696946217f356339ab8",gaugeController:"0x35c425234dc42e7402f54cc54573f77842963a56",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x1b57f637ce3408f1f834b0b70f9a595b062daea7",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",rewardsOnlyGauge:"0x868543bb787317632f94fcfe8eb85406b123590c",testBalancerToken:"0xa2d801064652a269d92ee2a59f3261155ec66830",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",votingEscrow:"0x16ba924752ef283c7946db8a122a6742aa35c1dc",votingEscrowDelegation:"0xdc6d62ae091ea77331542042a72e5e38b188837c",votingEscrowDelegationProxy:"0x98d0d0a65cbeccaa647a5a95cf27cf2f00e1231c",wstEthRateProvider:"0xd7fad3bd59d6477cbe1be7f646f7f1ba25b230f8"},tokens:{}},100:{contracts:{aaveLinearPoolFactory:"0x62aab12865d7281048c337d53a4dde9d770321e6",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x5addcca35b7a0d07c74063c48700c8590e87864e",authorizerAdaptorEntrypoint:"0x8f42adbba1b16eaae3bb5754915e0d06059add75",authorizerWithAdaptorValidation:"0x03f3fb107e74f2eac9358862e91ad3c692712054",bal:"0x7ef541e2a22058048904fe5744f9c7e4c57af717",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",balancerRelayer:"0x3536fd480ca495ac91e698a703248a8915c137a3",batchRelayerLibrary:"0xb9ad3466cdd42015cc05d4804dc68d562b6a2065",childChainGauge:"0x96484f2abf5e58b15176dbf1a799627b53f13b6d",childChainGaugeFactory:"0x83e443ef4f9963c77bd860f94500075556668cb8",childChainGaugeRewardHelper:"0xf7d5dce55e6d47852f054697bab6a1b48a00ddbd",childChainGaugeTokenAdder:"0x1802953277fd955f9a254b80aa0582f193cf1d77",childChainLiquidityGaugeFactory:"0x809b79b53f18e9bc08a961ed4678b901ac93213a",childChainStreamer:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",circuitBreakerLib:"0x54f8f9d28e26fa5864cfa80f50a5df95fd85f46a",composableStablePoolFactory:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",externalWeightedMath:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",gaugeWorkingBalanceHelper:"0x682f0ddbfd41d1272982f64a499fb62d80e27589",l2BalancerPseudoMinter:"0xa8920455934da4d853faac1f94fe7bef72943ef1",l2LayerZeroBridgeForwarder:"0xeb151668006cd04dadd098afd0a82e78f77076c3",managedPoolAddRemoveTokenLib:"0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4",managedPoolAmmLib:"0xacf05be5134d64d150d153818f8c67ee36996650",managedPoolFactory:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",mockAaveLendingPool:"0x040dba12bb3d5c0a73ddfe84c220be3ddba06966",mockAaveLinearPool:"0x1ac55c31dac78ca943cb8ebfca5945ce09e036e2",mockComposableStablePool:"0xf3678a0b54c61ccd88ce321c2e07f87ac75f08b9",mockManagedPool:"0xc061361fda32ff5b65f7d98acc9a87349d3f0768",mockStaticAToken:"0x35d8f4a4c0e95f3d925cb4cbbbf513a0172ed8a4",mockWeightedPool:"0xd8752f9b0a2c2813796abd2be212a32ffd656ef1",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x85a80afee867adf27b50bdb7b76da70f1e853062",nullVotingEscrow:"0x013d4382f291be5688afbcc741ee8a24c66b2c92",poolRecoveryHelper:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",protocolFeePercentagesProvider:"0x41b953164995c11c81da73d212ed8af25741b7ac",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0xdae7e32adc5d490a43ccba1f0c736033f2b4efca",protocolIdRegistry:"0x6b5da774890db7b7b96c6f44e6a4b0f657399e2e",recoveryModeHelper:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",rewardsOnlyGauge:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x5dbad78818d4c8958eff2d5b95b28385a22113cd",votingEscrowDelegationProxy:"0x7a2535f5fb47b8e44c02ef5d9990588313fe8f05",weightedPoolFactory:"0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7",weth:"0xe91d153e0b41518a2ce8dd3d7944fa863463a97d"},tokens:{}},137:{contracts:{aaveLinearPoolFactory:"0xab2372275809e15198a7968c7f324053867cdb0c",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0xc128468b7ce63ea702c1f104d55a2566b13d3abd",authorizerAdaptorEntrypoint:"0xab093cd16e765b5b23d34030aafaf026558e0a19",authorizerWithAdaptorValidation:"0x020301b0a99efb6816b41007765fb577259ec418",bal:"0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3",balancerHelpers:"0x239e55f427d44c3cc793f49bfb507ebe76638a2b",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0xd18d5d377eb23362e54fa496597d7e962d56c554",batchRelayerLibrary:"0x4271de2595c3d85d2d455c5778adf2d7ad54322c",childChainGauge:"0xc9b36096f5201ea332db35d6d195774ea0d5988f",childChainGaugeFactory:"0x22625eedd92c81a219a83e1dc48f88d54786b017",childChainGaugeRewardHelper:"0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33",childChainGaugeTokenAdder:"0x1554ee754707d5c93b7934af404747aba521aaf2",childChainLiquidityGaugeFactory:"0x3b8ca519122cdd8efb272b0d3085453404b25bd0",childChainStreamer:"0x6f5a2ee11e7a772aeb5114a20d0d7c0ff61eb8a0",circuitBreakerLib:"0xedfd0a7005a7c72c44ff13bea370c86a9d11bee1",composableStablePoolFactory:"0x6ab5549bbd766a43afb687776ad8466f8b42f777",doubleEntrypointFixRelayer:"0x79d0011892fe558fc5a4ec7d4ca5db59069f460f",erc4626LinearPoolFactory:"0x5c5fcf8fbd4cd563ced27e7d066b88ee20e1867a",externalWeightedMath:"0x72ebafddc4c7d3eb702c81295d90a8b29f008a03",gaugeWorkingBalanceHelper:"0x08fd003d8f1892d4ec684e6c3ee0128081be461b",l2BalancerPseudoMinter:"0x47b489bf5836f83abd928c316f8e39bc0587b020",l2LayerZeroBridgeForwarder:"0xb98f54a74590a6e681ff664b2fa22ebffe1a929e",managedPoolAddRemoveTokenLib:"0xf553bf40db86c35f3058434039d51aad29c6180b",managedPoolAmmLib:"0xcefd59eedafa9ee8ccda1aaf944088e68b5bd890",managedPoolFactory:"0xb8dfa4fd0f083de2b7edc0d5eed5e684e54ba45d",merkleOrchard:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",mockAaveLendingPool:"0x0df6bb26533eb86f371b1f70eecdd955420523c6",mockAaveLinearPool:"0x0889b240a5876aae745ac19f1771853671dc5d36",mockComposableStablePool:"0x0f25823cf786b78696b16536e2f2b9835289ab51",mockErc4626LinearPool:"0xc55ec796a4debe625d95436a3531f4950b11bdcf",mockErc4626Token:"0x19dfef0a828eec0c85fbb335aa65437417390b85",mockManagedPool:"0x074efd7806e6c28e8b6611075b1aa62c6c408090",mockStaticAToken:"0xe72b2780d3c57f781bd4e8572e200cd7e9a447c2",mockWeightedPool:"0xb77e03655ee894aade216a83d05511a9f9895126",mockYearnLinearPool:"0xdae301690004946424e41051ace1791083be42a1",mockYearnTokenVault:"0x28fa1e40011adf98898e8243b2a48bb21ebf0c29",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x41b953164995c11c81da73d212ed8af25741b7ac",nullVotingEscrow:"0x1311fbc9f60359639174c1e7cc2032dbdb5cc4d1",poolRecoveryHelper:"0x495f696430f4a51f7fcb98fbe68a9cb7a07fb1ba",protocolFeePercentagesProvider:"0x42ac0e6fa47385d55aff070d79ef0079868c48a6",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0xef44d6786b2b4d544b7850fe67ce6381626bf2d6",protocolIdRegistry:"0xa523f47a933d5020b23629ddf689695aa94612dc",recoveryModeHelper:"0x1eb79551ca0e83ec145608bc39a0c7f10ca21aa5",rewardsOnlyGauge:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0xd961e30156c2e0d0d925a0de45f931cb7815e970",votingEscrowDelegationProxy:"0x0f08eef2c785aa5e7539684af04755dec1347b7c",weightedPoolFactory:"0xfc8a407bba312ac761d8bfe04ce1201904842b76",weth:"0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270",yearnLinearPoolFactory:"0x0b576c1245f479506e7c8bbc4db4db07c1cd31f9"},tokens:{BAL:"0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3",USDC:"0x2791bca1f2de4661ed88a30c99a7a9449aa84174",WBTC:"0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6",WETH:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",WMATIC:"0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270"}},1101:{contracts:{aaveLinearPoolFactory:"0x4b7b369989e613ff2c65768b7cf930cc927f901e",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0xdcdbf71a870cc60c6f9b621e28a7d3ffd6dd4965",authorizerAdaptorEntrypoint:"0xb9ad3466cdd42015cc05d4804dc68d562b6a2065",authorizerWithAdaptorValidation:"0x8df317a729fcaa260306d7de28888932cb579b88",bal:"0x120ef59b80774f02211563834d8e3b72cb1649d6",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0x809b79b53f18e9bc08a961ed4678b901ac93213a",balancerRelayer:"0x4678731dc41142a902a114ac5b2f77b63f4a259d",batchRelayerLibrary:"0x54f8f9d28e26fa5864cfa80f50a5df95fd85f46a",childChainGauge:"0x59562f93c447656f6e4799fc1fc7c3d977c3324f",childChainGaugeFactory:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",circuitBreakerLib:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",composableStablePoolFactory:"0x8ea89804145c007e7d226001a96955ad53836087",erc4626LinearPoolFactory:"0x6b1da720be2d11d95177ccfc40a917c2688f396c",externalWeightedMath:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",gaugeWorkingBalanceHelper:"0xef454a7b3f965d3f6723e462405246f8cd865425",gearboxLinearPoolFactory:"0x687b8c9b41e01be8b591725fac5d5f52d0564d79",l2BalancerPseudoMinter:"0x475d18169be8a89357a9ee3ab00ca386d20fa229",l2LayerZeroBridgeForwarder:"0xded7fef7d8ecdcb74f22f0169e1a9ec696e6695d",managedPoolAddRemoveTokenLib:"0xacf05be5134d64d150d153818f8c67ee36996650",managedPoolAmmLib:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",managedPoolFactory:"0xaf779e58dafb4307b998c7b3c9d3f788dfc80632",mockAaveLendingPool:"0x161f4014c27773840ccb4ec1957113e6dd028846",mockAaveLinearPool:"0xbfd65c6160cfd638a85c645e6e6d8acac5dac935",mockComposableStablePool:"0x6f5f794a3cef904b8517c4c311de2fa837ff24a0",mockErc4626LinearPool:"0xac4b72c01072a52b73ca71105504f1372efcce0d",mockErc4626Token:"0x0c6052254551eae3ecac77b01dfcf1025418828f",mockGearboxDieselToken:"0x698caed853be9cea96c268f565e2b61d3b2bcda4",mockGearboxLinearPool:"0x32f03464fdf909fdf3798f87ff3712b10c59bd86",mockGearboxVault:"0x88ed12a90142fdbfe2a28f7d5b48927254c7e760",mockLiquidityBootstrappingPool:"0x3c87ff3e9307dbebfae720e04c6439e49f79bf9b",mockManagedPool:"0x522ee506a2f63d0ae1d79d6f5dbd9d0bca32c866",mockStaticAToken:"0x4638ab64022927c9bd5947607459d13f57f1551c",mockWeightedPool:"0x78385153d2f356c87001f09bb5424137c618d38b",mockYearnLinearPool:"0x02c9dcb975262719a61f9b40bdf0987ead9add3a",mockYearnTokenVault:"0xdbf7b9f1d2bfba14e42709f84dda3187ee410e38",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98",nullVotingEscrow:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",poolRecoveryHelper:"0xf7d5dce55e6d47852f054697bab6a1b48a00ddbd",protocolFeePercentagesProvider:"0x1802953277fd955f9a254b80aa0582f193cf1d77",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",protocolIdRegistry:"0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7",recoveryModeHelper:"0x300ab2038eac391f26d9f895dc61f8f66a548833",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",votingEscrowDelegationProxy:"0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7",weightedPoolFactory:"0x03f3fb107e74f2eac9358862e91ad3c692712054",weth:"0x4f9a0e7fd2bf6067db6994cf12e4495df938e6e9",yearnLinearPoolFactory:"0x44d33798dddcdabc93fe6a40c80588033dc502d3"},tokens:{}},8453:{contracts:{aaveLinearPoolFactory:"0x687b8c9b41e01be8b591725fac5d5f52d0564d79",authorizer:"0x809b79b53f18e9bc08a961ed4678b901ac93213a",authorizerAdaptor:"0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7",authorizerAdaptorEntrypoint:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",authorizerWithAdaptorValidation:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",bal:"0x4158734d47fc9692176b5085e0f52ee0da5d47f1",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0x300ab2038eac391f26d9f895dc61f8f66a548833",balancerRelayer:"0x76f7204b62f554b79d444588edac9dfa7032c71a",batchRelayerLibrary:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",childChainGauge:"0x59562f93c447656f6e4799fc1fc7c3d977c3324f",childChainGaugeFactory:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",circuitBreakerLib:"0xef454a7b3f965d3f6723e462405246f8cd865425",composableStablePoolFactory:"0x8df317a729fcaa260306d7de28888932cb579b88",erc4626LinearPoolFactory:"0x161f4014c27773840ccb4ec1957113e6dd028846",externalWeightedMath:"0x7920bfa1b2041911b354747ca7a6cdd2dfc50cfd",gaugeWorkingBalanceHelper:"0xa7d524046ef89de9f8e4f2d7b029f66ccb738d48",gearboxLinearPoolFactory:"0x9dd32684176638d977883448a4c914311c07bd62",l2BalancerPseudoMinter:"0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7",l2LayerZeroBridgeForwarder:"0x8ea89804145c007e7d226001a96955ad53836087",managedPoolAddRemoveTokenLib:"0xb19382073c7a0addbb56ac6af1808fa49e377b75",managedPoolAmmLib:"0x7d2248f194755dca9a1887099394f39476d28c9a",managedPoolFactory:"0x9a62c91626d39d0216b3959112f9d4678e20134d",mockAaveLendingPool:"0x88ed12a90142fdbfe2a28f7d5b48927254c7e760",mockAaveLinearPool:"0x712e23a9b91aa30ee7997d1c7a1a285d4c7912d1",mockComposableStablePool:"0x7f6e9d6a4093af9d09bae92d24bfe42fc5369ae6",mockErc4626LinearPool:"0x1cc2e10c486ffb7228810b9c7c183d0cd92cdf44",mockErc4626Token:"0x4638ab64022927c9bd5947607459d13f57f1551c",mockGearboxDieselToken:"0xb521dd5c8e13fe202626cac98873fea2b7760ce4",mockGearboxLinearPool:"0x3c28a59356b473847aaa5e0b6f561636079213a6",mockGearboxVault:"0x79e435875ccee3cd9e8da23fe34f9a011d05ea6c",mockLiquidityBootstrappingPool:"",mockManagedPool:"0xe50ad96af9370d05d3c1ce85f17c31557b29c4ee",mockStaticAToken:"0x698caed853be9cea96c268f565e2b61d3b2bcda4",mockWeightedPool:"0xd9dbbfaa703f3c33838365ae00fe4eb22cdf8d46",mockYearnLinearPool:"0x369877467fc3b6774de4e11e0c0abbde70eb40fd",mockYearnTokenVault:"0xdbf7b9f1d2bfba14e42709f84dda3187ee410e38",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x0c6052254551eae3ecac77b01dfcf1025418828f",nullVotingEscrow:"0x475d18169be8a89357a9ee3ab00ca386d20fa229",poolRecoveryHelper:"0x03f3fb107e74f2eac9358862e91ad3c692712054",protocolFeePercentagesProvider:"0xded7fef7d8ecdcb74f22f0169e1a9ec696e6695d",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0xacf05be5134d64d150d153818f8c67ee36996650",protocolIdRegistry:"0x682f0ddbfd41d1272982f64a499fb62d80e27589",recoveryModeHelper:"0x313a8d36b1d90a4cba3a505fdc3480c3870be053",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",votingEscrowDelegationProxy:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",weightedPoolFactory:"0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4",weth:"0x4200000000000000000000000000000000000006",yearnLinearPoolFactory:"0x44d33798dddcdabc93fe6a40c80588033dc502d3"},tokens:{}},42161:{contracts:{aaveLinearPoolFactory:"0x7396f99b48e7436b152427bfa3dd6aa8c7c6d05b",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",authorizerAdaptorEntrypoint:"0x97207b095e4d5c9a6e4cfbfcd2c3358e03b90c4a",authorizerWithAdaptorValidation:"0x6b1da720be2d11d95177ccfc40a917c2688f396c",bal:"0x040d1edc9569d4bab2d15287dc5a4f10f56a56b8",balancerHelpers:"0x77d46184d22ca6a3726a2f500c776767b6a3d6ab",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0x598ce0f1ab64b27256759ef99d883ee51138b9bd",batchRelayerLibrary:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",childChainGauge:"0xa523f47a933d5020b23629ddf689695aa94612dc",childChainGaugeFactory:"0x6817149cb753bf529565b4d023d7507ed2ff4bc0",childChainGaugeRewardHelper:"0xa0dabebaad1b243bbb243f933013d560819eb66f",childChainGaugeTokenAdder:"0xbfd9769b061e57e478690299011a028194d66e3c",childChainLiquidityGaugeFactory:"0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2",childChainStreamer:"0xd7fad3bd59d6477cbe1be7f646f7f1ba25b230f8",circuitBreakerLib:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",composableStablePoolFactory:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",doubleEntrypointFixRelayer:"0x8e5698dc4897dc12243c8642e77b4f21349db97c",erc4626LinearPoolFactory:"0x7adbdabaa80f654568421887c12f09e0c7bd9629",externalWeightedMath:"0x03f3fb107e74f2eac9358862e91ad3c692712054",gaugeWorkingBalanceHelper:"0xea924b45a3fcdaadf4e5cfb1665823b8f8f2039b",l2BalancerPseudoMinter:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",l2LayerZeroBridgeForwarder:"0x12ca9de662a7bf5dc89e034a5083ef751b08ede7",managedPoolAddRemoveTokenLib:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",managedPoolAmmLib:"0x300ab2038eac391f26d9f895dc61f8f66a548833",managedPoolFactory:"0x8ea89804145c007e7d226001a96955ad53836087",merkleOrchard:"0x9805dcfd25e6de36bad8fe9d3fe2c9b44b764102",mockAaveLendingPool:"0x533a16f90e7d3ca31dbc608e5ec54967710f0d2a",mockAaveLinearPool:"0x19b1c92631405a0a9495ccba0becf4f2e8e908bd",mockComposableStablePool:"0xff7e6b102516e071dcda763ee9d02c1515481db5",mockErc4626LinearPool:"0x3f53a862919ccfa023cb6ace91378a79fb0f6bf5",mockErc4626Token:"0x4be0e4d6184348c5ba845a4010528cfc779610b8",mockManagedPool:"0xf5a71257b331c02da1eae52151c3d600f16b76f0",mockStaticAToken:"0x8b7854708c0c54f9d7d1ff351d4f84e6de0e134c",mockWeightedPool:"0x129c6402ff88611aa59bf2e14b39e091822e2c9c",mockYearnLinearPool:"0x1fa7f727934226aedab636d62a084931b97d366b",mockYearnTokenVault:"0xb15608d28eb43378a7e7780add3fe9bc132baf40",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x1802953277fd955f9a254b80aa0582f193cf1d77",nullVotingEscrow:"0x9da18982a33fd0c7051b19f0d7c76f2d5e7e017c",poolRecoveryHelper:"0xb5e56cc3d2e38e53b1166175c59e921a37cdc1e2",protocolFeePercentagesProvider:"0x5ef4c5352882b10893b70dbcaa0c000965bd23c5",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x70bbd023481788e443472e123ab963e5ebf58d06",protocolIdRegistry:"0x5cf4928a3205728bd12830e1840f7db85c62a4b9",recoveryModeHelper:"0x682f0ddbfd41d1272982f64a499fb62d80e27589",rewardsOnlyGauge:"0x41b953164995c11c81da73d212ed8af25741b7ac",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x6b5da774890db7b7b96c6f44e6a4b0f657399e2e",votingEscrowDelegationProxy:"0x81cfae226343b24ba12ec6521db2c79e7aeeb310",weightedPoolFactory:"0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7",weth:"0x82af49447d8a07e3bd95bd0d56f35241523fbab1",yearnLinearPoolFactory:"0x19dfef0a828eec0c85fbb335aa65437417390b85"},tokens:{BADGER:"0xbfa641051ba0a0ad1b0acf549a89536a0d76472e",CRV:"0x11cdb42b0eb46d95f990bedd4695a6e3fa034978",LDO:"0x13ad51ed4f1b7e9dc168d8a00cb3f4ddd85efa60",renBTC:"0xdbf31df14b66535af65aac99c32e9ea844e14501",SUSHI:"0xd4d42f0b6def4ce0383636770ef773390d85c61a",USDC:"0xff970a61a04b1ca14834a43f5de4533ebddb5cc8",USDT:"0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9",WBTC:"0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",WETH:"0x82af49447d8a07e3bd95bd0d56f35241523fbab1"}},43114:{contracts:{aaveLinearPoolFactory:"0x6caf662b573f577de01165d2d38d1910bba41f8a",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0xdae7e32adc5d490a43ccba1f0c736033f2b4efca",authorizerAdaptorEntrypoint:"0x4e7bbd911cf1efa442bc1b2e9ea01ffe785412ec",authorizerWithAdaptorValidation:"0x8df317a729fcaa260306d7de28888932cb579b88",bal:"0xe15bcb9e0ea69e6ab9fa080c4c4a5632896298c3",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0xc128468b7ce63ea702c1f104d55a2566b13d3abd",balancerRelayer:"0x03f1ab8b19bce21eb06c364aec9e40322572a1e9",batchRelayerLibrary:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",childChainGauge:"0x4b7b369989e613ff2c65768b7cf930cc927f901e",childChainGaugeFactory:"0x161f4014c27773840ccb4ec1957113e6dd028846",childChainGaugeRewardHelper:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",childChainGaugeTokenAdder:"0xf302f9f50958c5593770fdf4d4812309ff77414f",childChainLiquidityGaugeFactory:"0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2",childChainStreamer:"0xd7fad3bd59d6477cbe1be7f646f7f1ba25b230f8",circuitBreakerLib:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",composableStablePoolFactory:"0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98",distributionScheduler:"0xc128a9954e6c874ea3d62ce62b468ba073093f25",erc4626LinearPoolFactory:"0x4507d91cd2c0d51d9b4f30bf0b93afc938a70ba5",externalWeightedMath:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",gaugeWorkingBalanceHelper:"0x687b8c9b41e01be8b591725fac5d5f52d0564d79",l2BalancerPseudoMinter:"0xea924b45a3fcdaadf4e5cfb1665823b8f8f2039b",l2LayerZeroBridgeForwarder:"0x4638ab64022927c9bd5947607459d13f57f1551c",managedPoolAddRemoveTokenLib:"0xacf05be5134d64d150d153818f8c67ee36996650",managedPoolAmmLib:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",managedPoolFactory:"0x03f3fb107e74f2eac9358862e91ad3c692712054",mockAaveLendingPool:"0x57ea28a99394978d060e483477c0fd9fb9afa96c",mockAaveLinearPool:"0xa826a114b0c7db4d1ff4a4be845a78998c64564c",mockComposableStablePool:"0xea4643102dfc03d5e382e7827bf767f6587e9965",mockErc4626LinearPool:"0xed3e2f496cbcd8e212192fb8d1499842f04a0d19",mockErc4626Token:"0x2ebe41e1aa44d61c206a94474932dadc7d3fd9e3",mockManagedPool:"0x3fb81f6fb0dd94c6fc7e138887f1ca4cdb5e2999",mockStaticAToken:"0xd8b6b96c88ad626eb6209c4876e3b14f45f8803a",mockWeightedPool:"0xb2b5b452d53401391155ea48c4451f6e9b0dd058",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",nullVotingEscrow:"0x6b1da720be2d11d95177ccfc40a917c2688f396c",poolRecoveryHelper:"0x3b8ca519122cdd8efb272b0d3085453404b25bd0",protocolFeePercentagesProvider:"0x239e55f427d44c3cc793f49bfb507ebe76638a2b",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x8f42adbba1b16eaae3bb5754915e0d06059add75",recoveryModeHelper:"0x300ab2038eac391f26d9f895dc61f8f66a548833",rewardsOnlyGauge:"0x41b953164995c11c81da73d212ed8af25741b7ac",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",votingEscrowDelegationProxy:"0x0c6052254551eae3ecac77b01dfcf1025418828f",weightedPoolFactory:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",weth:"0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7"},tokens:{}},11155111:{contracts:{aaveLinearPoolFactory:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0xdcdbf71a870cc60c6f9b621e28a7d3ffd6dd4965",authorizerAdaptorEntrypoint:"0xb9ad3466cdd42015cc05d4804dc68d562b6a2065",authorizerWithAdaptorValidation:"0xb521dd5c8e13fe202626cac98873fea2b7760ce4",bal:"0xb19382073c7a0addbb56ac6af1808fa49e377b75",balancerHelpers:"0xdae7e32adc5d490a43ccba1f0c736033f2b4efca",balancerMinter:"0x1783cd84b3d01854a96b4ed5843753c2ccbd574a",balancerQueries:"0x1802953277fd955f9a254b80aa0582f193cf1d77",balancerRelayer:"0x6d5342d716c13d9a3f072a2b11498624ade27f90",balancerTokenAdmin:"0x7d2248f194755dca9a1887099394f39476d28c9a",balTokenHolderFactory:"0xef454a7b3f965d3f6723e462405246f8cd865425",batchRelayerLibrary:"0x5f6848976c2914403b425f18b589a65772f082e3",childChainGauge:"0xc49ca921c4cd1117162eaeec0ee969649997950c",childChainGaugeFactory:"0xc370cd86d5488c1788b62f11b09adb0c47f47440",circuitBreakerLib:"0x4c0c450bedb9282a7a54fcb316c285e85a8c0265",composableStablePoolFactory:"0xa3fd20e29358c056b727657e83dfd139abbc9924",erc4626LinearPoolFactory:"0x59562f93c447656f6e4799fc1fc7c3d977c3324f",externalWeightedMath:"0x8246e571d88acd1346179cc3641de87fe3544d7a",feeDistributor:"0xa6971317fb06c76ef731601c64433a4846fca707",gaugeAdder:"0xe42ffa682a26ef8f25891db4882932711d42e467",gaugeController:"0x577e5993b9cc480f07f98b5ebd055604bd9071c4",gaugeWorkingBalanceHelper:"0x2e4abed3362a622c5f712bb183005a476b146bd3",gearboxLinearPoolFactory:"0x8df317a729fcaa260306d7de28888932cb579b88",l2BalancerPseudoMinter:"0xb51f7ffc97cedfb6922e8b9bbf3ef7575fafd630",l2LayerZeroBridgeForwarder:"0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7",liquidityGaugeFactory:"0x2ff226cd12c80511a641a6101f071d853a4e5363",liquidityGaugeV5:"0x82416ce6ea7dd4923d4a3ed70a79b4a432a382c4",managedPoolAddRemoveTokenLib:"0xc7416e4f3715467ddcf28dc409a9483b2e4d4f43",managedPoolAmmLib:"0xa30ade89e6af5b0ca515cd78e44f9ad0c63989b2",managedPoolFactory:"0x63e179c5b6d54b2c2e36b9ce4085ef5a8c86d50c",mockAaveLendingPool:"0x300ab2038eac391f26d9f895dc61f8f66a548833",mockAaveLinearPool:"0xe4efd99f3c03778ba913eb578c599329634e2bd7",mockComposableStablePool:"0xa8d865fe1d68a405b29f884358468c9b52d4841d",mockErc4626LinearPool:"0x0c2ead6f2dc2a9385187023f4cec5925337b330f",mockErc4626Token:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",mockGearboxDieselToken:"0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4",mockGearboxLinearPool:"0x112a7b7ca66e6963c49bc523a415f7d8cdb806b9",mockGearboxVault:"0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98",mockLiquidityBootstrappingPool:"0xe90472ffc41d7ddf8e3b456bba748e3f22c59c6f",mockManagedPool:"0xe458224ca8d6605c87b73e92aa5cb7a4e77770f3",mockShareToken:"0x0c6052254551eae3ecac77b01dfcf1025418828f",mockSilo:"0x6b1da720be2d11d95177ccfc40a917c2688f396c",mockSiloLinearPool:"0xa149cf2d795aab83a15673f5beade9361e4e3f65",mockSiloRepository:"0xa7d524046ef89de9f8e4f2d7b029f66ccb738d48",mockStaticAToken:"0x03f3fb107e74f2eac9358862e91ad3c692712054",mockWeightedPool:"0xf7a7e1f48fa43cb7919ff4eb362c5be78092df4a",mockYearnLinearPool:"0x016b7366f76aa2794097798b90cf239796aeff8d",mockYearnTokenVault:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",nullVotingEscrow:"0x475d18169be8a89357a9ee3ab00ca386d20fa229",omniVotingEscrowAdaptor:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",poolRecoveryHelper:"0x1b6f057520b4e826271d47b8bdab98e35af17e59",preseededVotingEscrowDelegation:"0xb1a4fe1c6d25a0ddab47431a92a723dd71d9021f",protocolFeePercentagesProvider:"0xf7d5dce55e6d47852f054697bab6a1b48a00ddbd",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x809b79b53f18e9bc08a961ed4678b901ac93213a",protocolIdRegistry:"0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7",recoveryModeHelper:"0x5419e785b83ad3539d3a8741c0abb77d90d8784e",siloLinearPoolFactory:"0x8ea89804145c007e7d226001a96955ad53836087",singleRecipientGauge:"0x9a5ddde7056ceffb03d9962c4549ac1c4ad1f985",singleRecipientGaugeFactory:"0x7ee4d172ae50c627a1bfa9a99e1260c54da26fdf",smartWalletChecker:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",testBalancerToken:"0xb19382073c7a0addbb56ac6af1808fa49e377b75",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x927906bbac747c13c75f6447fe8abb490eab456c",votingEscrow:"0x150a72e4d4d81bbf045565e232c50ed0931ad795",votingEscrowDelegation:"0x0c5538098ebe88175078972f514c9e101d325d4f",votingEscrowDelegationProxy:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",votingEscrowRemapper:"0xf24917fb88261a37cc57f686ebc831a5c0b9fd39",weightedPoolFactory:"0x7920bfa1b2041911b354747ca7a6cdd2dfc50cfd",weth:"0x7b79995e5f793a07bc00c21412e50ecae098e7f9",yearnLinearPoolFactory:"0xacf05be5134d64d150d153818f8c67ee36996650"},tokens:{}}};const va="0xBA12222222228d8Ba445958a75a0704d566BF2C8",ka={[exports.Network.MAINNET]:{chainId:exports.Network.MAINNET,addresses:{contracts:{multicall:"0xeefba1e63905ef1d7acba5a8513c70307c1ce441",poolDataQueries:"0xf5CDdF6feD9C589f1Be04899F48f9738531daD59",lidoRelayer:"0xdcdbf71A870cc60C6F9B621E28a7D3Ffd6Dd4965",veBal:"0xC128a9954e6c874eA3d62ce62B468bA073093F25",gaugeControllerCheckpointer:"0x8e5698dc4897dc12243c8642e77b4f21349db97c",veBalProxy:"0x6f5a2eE11E7a772AeB5114A20d0D7c0ff61EB8A0",gyroConfigProxy:"0xac89cc9d78bbad7eb3a02601b4d65daa1f908aa6",...Sa[exports.Network.MAINNET].contracts},tokens:{bal:Sa[exports.Network.MAINNET].contracts.bal,wrappedNativeAsset:Sa[exports.Network.MAINNET].contracts.weth,bbaUsd:Sa[exports.Network.MAINNET].tokens.bb_a_usd,lbpRaisingTokens:["0x6b175474e89094c44da98b954eedeac495271d0f","0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"],stETH:"0xae7ab96520de3a18e5e111b5eaab095312d7fe84",wstETH:"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",veBal:"0xC128a9954e6c874eA3d62ce62B468bA073093F25",...Sa[exports.Network.MAINNET].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/blocklytics/ethereum-blocks"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"ethereum"}},pools:{wETHwstETH:{id:"0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080",address:"0x32296969ef14eb0c6d29669c550d4a0449130230"}},poolsToIgnore:["0xbd482ffb3e6e50dc1c437557c3bea2b68f3683ee0000000000000000000003c6","0x0afbd58beca09545e4fb67772faf3858e610bcd00000000000000000000004b9","0xf22ff21e17157340575158ad7394e068048dd98b0000000000000000000004b8","0xf71d0774b214c4cf51e33eb3d30ef98132e4dbaa00000000000000000000046e"],sorConnectingTokens:[{symbol:"wEth",address:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"},{symbol:"wstEth",address:"0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0"},{symbol:"DOLA",address:"0x865377367054516e17014CcdED1e7d814EDC9ce4"},{symbol:"rEth",address:"0xae78736cd615f374d3085123a210448e74fc6393"},{symbol:"ETHx",address:"0xa35b1b31ce002fbf2058d22f30f95d405200a15b"}],sorTriPathMidPoolIds:["0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112"]},[exports.Network.POLYGON]:{chainId:exports.Network.POLYGON,addresses:{contracts:{multicall:"0xa1B2b503959aedD81512C37e9dce48164ec6a94d",poolDataQueries:"0x84813aA3e079A665C0B80F944427eE83cBA63617",gaugeClaimHelper:"0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33",gyroConfigProxy:"0xfdc2e9e03f515804744a40d0f8d25c16e93fbe67",...Sa[exports.Network.POLYGON].contracts},tokens:{bal:Sa[exports.Network.POLYGON].contracts.bal,wrappedNativeAsset:Sa[exports.Network.POLYGON].contracts.weth,lbpRaisingTokens:["0x8f3cf7ad23cd3cadbd9735aff958023239c6a063","0x2791bca1f2de4661ed88a30c99a7a9449aa84174","0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"],...Sa[exports.Network.POLYGON].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-polygon-prune-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-polygon",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/ianlapham/polygon-blocks"},thirdParty:{coingecko:{nativeAssetId:"",platformId:"polygon-pos"}},pools:{},poolsToIgnore:["0x600bd01b6526611079e12e1ff93aba7a3e34226f0000000000000000000009e4","0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455"],sorConnectingTokens:[{symbol:"weth",address:"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"},{symbol:"bbrz2",address:"0xe22483774bd8611be2ad2f4194078dac9159f4ba"}]},[exports.Network.ARBITRUM]:{chainId:exports.Network.ARBITRUM,addresses:{contracts:{multicall:"0x269ff446d9892c9e19082564df3f5e8741e190a1",poolDataQueries:"0x7Ba29fE8E83dd6097A7298075C4AFfdBda3121cC",gaugeClaimHelper:"0xa0dabebaad1b243bbb243f933013d560819eb66f",gyroConfigProxy:"0x9b683ca24b0e013512e2566b68704dbe9677413c",...Sa[exports.Network.ARBITRUM].contracts},tokens:{bal:Sa[exports.Network.ARBITRUM].contracts.bal,wrappedNativeAsset:Sa[exports.Network.ARBITRUM].contracts.weth,lbpRaisingTokens:["0xda10009cbd5d07dd0cecc66161fc93d7c9000da1","0xff970a61a04b1ca14834a43f5de4533ebddb5cc8","0x82af49447d8a07e3bd95bd0d56f35241523fbab1"],...Sa[exports.Network.ARBITRUM].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-arbitrum-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-arbitrum",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-one-blocks"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"arbitrum-one"}},pools:{},sorConnectingTokens:[{symbol:"weth",address:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"}],sorTriPathMidPoolIds:["0x178e029173417b1f9c8bc16dcec6f697bc323746000200000000000000000158","0x0052688295413b32626d226a205b95cdb337de860002000000000000000003d1","0xa1a8bf131571a2139feb79401aa4a2e9482df6270002000000000000000004b4"]},[exports.Network.GOERLI]:{chainId:exports.Network.GOERLI,addresses:{contracts:{multicall:"0x77dCa2C955b15e9dE4dbBCf1246B4B85b651e50e",poolDataQueries:"0x6d3197d069F8F9f1Fe7e23665Bc64CB77ED8b089",veBal:"0x33A99Dcc4C85C014cf12626959111D5898bbCAbF",veBalProxy:"0xA1F107D1cD709514AE8A914eCB757E95f9cedB31",erc4626LinearPoolFactory:"0xba240c856498e2d7a70af4911aafae0d6b565a5b",aaveLinearPoolFactory:"0x76578ecf9a141296ec657847fb45b0585bcda3a6",...Sa[exports.Network.GOERLI].contracts},tokens:{bal:Sa[exports.Network.GOERLI].contracts.bal,wrappedNativeAsset:Sa[exports.Network.GOERLI].contracts.weth}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-goerli-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-goerli",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/blocklytics/goerli-blocks"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"ethereum"}},pools:{},sorConnectingTokens:[{symbol:"weth",address:"0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1"}]},[exports.Network.OPTIMISM]:{chainId:exports.Network.OPTIMISM,addresses:{contracts:{multicall:"0x2dc0e2aa608532da689e89e237df582b783e552c",poolDataQueries:"0x6B5dA774890Db7B7b96C6f44e6a4b0F657399E2e",gyroConfigProxy:"0x32acb44fc929339b9f16f0449525cc590d2a23f3",...Sa[exports.Network.OPTIMISM].contracts},tokens:{bal:"0xfe8b128ba8c78aabc59d4c64cee7ff28e9379921",wrappedNativeAsset:Sa[exports.Network.OPTIMISM].contracts.weth,lbpRaisingTokens:["0xda10009cbd5d07dd0cecc66161fc93d7c9000da1","0x7f5c764cbc14f9669b88837ca1490cca17c31607","0x4200000000000000000000000000000000000006"],...Sa[exports.Network.OPTIMISM].tokens}},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"optimistic-ethereum"}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-optimism",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-optimism",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/lyra-finance/optimism-mainnet-blocks"},pools:{},sorConnectingTokens:[{symbol:"weth",address:"0x4200000000000000000000000000000000000006"}]},[exports.Network.GNOSIS]:{chainId:exports.Network.GNOSIS,addresses:{contracts:{multicall:"0xbb6fab6b627947dae0a75808250d8b2652952cb5",poolDataQueries:"0x3f170631ed9821Ca51A59D996aB095162438DC10",...Sa[exports.Network.GNOSIS].contracts},tokens:{wrappedNativeAsset:Sa[exports.Network.GNOSIS].contracts.weth,bal:Sa[exports.Network.GNOSIS].contracts.bal,...Sa[exports.Network.GNOSIS].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gnosis-chain-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-gnosis-chain"},thirdParty:{coingecko:{nativeAssetId:"xdai",platformId:"xdai"}},averageBlockTime:5,pools:{},sorConnectingTokens:[{symbol:"weth",address:"0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d"},{symbol:"wsEth",address:"0x6C76971f98945AE98dD7d4DFcA8711ebea946eA6"}],sorTriPathMidPoolIds:["0xeb30c85cc528537f5350cf5684ce6a4538e13394000200000000000000000059","0x7644fa5d0ea14fcf3e813fdf93ca9544f8567655000000000000000000000066"]},[exports.Network.FANTOM]:{chainId:exports.Network.FANTOM,addresses:{contracts:{vault:"0x20dd72Ed959b6147912C2e529F0a0C651c33c9ce",multicall:"0x66335d7ad8011f6aa3f48aadcb523b62b38ed961",poolDataQueries:"0xb132F1E145DcC085980C531e2dA81f2b84efc14F",gaugeClaimHelper:"0x0000000000000000000000000000000000000000",balancerRelayer:"0x419f7925b8c9e409b6ee8792242556fa210a7a09",balancerHelpers:"0xfE18C7C70b0a2c6541bEde0367124278BC345Dc8",weightedPoolFactory:"0x60467cb225092cE0c989361934311175f437Cf53",composableStablePoolFactory:"0x44814E3A603bb7F1198617995c5696C232F6e8Ed",yearnLinearPoolFactory:"0x1f73ae6ed391a2b1e84ff988a1bb5394b78a4a71"},tokens:{bal:"0xF24Bcf4d1e507740041C9cFd2DddB29585aDCe1e",wrappedNativeAsset:"0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83",lbpRaisingTokens:["0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83","0x04068DA6C83AFCFA0e13ba15A6696662335D5B75","0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E"]}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-v2-fantom",gaugesSubgraph:"",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/beethovenxfi/fantom-blocks"},thirdParty:{coingecko:{nativeAssetId:"ftm",platformId:"fantom"}},pools:{},poolsToIgnore:[],sorConnectingTokens:[{symbol:"wftm",address:"0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83"}]},[exports.Network.SEPOLIA]:{chainId:exports.Network.SEPOLIA,addresses:{contracts:{multicall:"0xcA11bde05977b3631167028862bE2a173976CA11",poolDataQueries:"0x9805dcfD25e6De36bad8fe9D3Fe2c9b44B764102",...Sa[exports.Network.SEPOLIA].contracts},tokens:{bal:Sa[exports.Network.SEPOLIA].contracts.bal,wrappedNativeAsset:Sa[exports.Network.SEPOLIA].contracts.weth,...Sa[exports.Network.SEPOLIA].tokens}},urls:{subgraph:"https://api.studio.thegraph.com/query/24660/balancer-sepolia-v2/version/latest"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"ethereum"}},pools:{},poolsToIgnore:[],sorConnectingTokens:[]},[exports.Network.ZKEVM]:{chainId:exports.Network.ZKEVM,addresses:{contracts:{balancerMinter:"0x475D18169BE8a89357A9ee3Ab00ca386d20fA229",multicall:"0xcA11bde05977b3631167028862bE2a173976CA11",poolDataQueries:"0xF24917fB88261a37Cc57F686eBC831a5c0B9fD39",...Sa[exports.Network.ZKEVM].contracts},tokens:{bal:Sa[exports.Network.ZKEVM].contracts.bal,wrappedNativeAsset:Sa[exports.Network.ZKEVM].contracts.weth,...Sa[exports.Network.ZKEVM].tokens}},urls:{subgraph:"https://api.studio.thegraph.com/query/24660/balancer-polygon-zk-v2/version/latest",gaugesSubgraph:"https://api.studio.thegraph.com/query/24660/balancer-gauges-polygon-zk/version/latest"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"polygon-zkevm"}},averageBlockTime:4,multicallBatchSize:128,pools:{},poolsToIgnore:[],sorConnectingTokens:[{symbol:"weth",address:"0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9"},{symbol:"wsEth",address:"0x5D8cfF95D7A57c0BF50B30b43c7CC0D52825D4a9"}]},[exports.Network.AVALANCHE]:{chainId:exports.Network.AVALANCHE,addresses:{contracts:{balancerMinter:"0xEa924b45a3fcDAAdf4E5cFB1665823B8F8F2039B",multicall:"0xcA11bde05977b3631167028862bE2a173976CA11",poolDataQueries:"0x67af5D428d38C5176a286a2371Df691cDD914Fb8",...Sa[exports.Network.AVALANCHE].contracts},tokens:{bal:Sa[exports.Network.AVALANCHE].contracts.bal,wrappedNativeAsset:Sa[exports.Network.AVALANCHE].contracts.weth,...Sa[exports.Network.AVALANCHE].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-avalanche-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-avalanche",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/iliaazhel/avalanche-blocks"},thirdParty:{coingecko:{nativeAssetId:"avalanche-2",platformId:"avalanche"}},pools:{},poolsToIgnore:[],sorConnectingTokens:[{symbol:"WAVAX",address:"0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7"},{symbol:"sAVAX",address:"0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be"}]},[exports.Network.BASE]:{chainId:exports.Network.BASE,addresses:{contracts:{balancerMinter:"0xc7E5ED1054A24Ef31D827E6F86caA58B3Bc168d7",multicall:"0xcA11bde05977b3631167028862bE2a173976CA11",poolDataQueries:"",...Sa[exports.Network.BASE].contracts},tokens:{bal:Sa[exports.Network.BASE].contracts.bal,wrappedNativeAsset:Sa[exports.Network.BASE].contracts.weth,...Sa[exports.Network.BASE].tokens}},urls:{subgraph:"https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest",gaugesSubgraph:"https://api.studio.thegraph.com/query/24660/balancer-gauges-base/version/latest",blockNumberSubgraph:"https://api.studio.thegraph.com/query/48427/bleu-base-blocks/version/latest"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"base"}},averageBlockTime:2,pools:{},poolsToIgnore:[],sorConnectingTokens:[{symbol:"weth",address:"0x4200000000000000000000000000000000000006"}],sorTriPathMidPoolIds:["0x2db50a0e0310723ef0c2a165cb9a9f80d772ba2f00020000000000000000000d"]}},Ba=e=>ka[e].addresses;var Ca;exports.BalancerErrorCode=void 0,(Ca=exports.BalancerErrorCode||(exports.BalancerErrorCode={})).ABOVE_MAX_TOKENS="ABOVE_MAX_TOKENS",Ca.BELOW_MIN_TOKENS="BELOW_MIN_TOKENS",Ca.EXIT_DELTA_AMOUNTS="EXIT_DELTA_AMOUNTS",Ca.FEE_PROVIDER_NOT_PROVIDED="FEE_PROVIDER_NOT_PROVIDED",Ca.GAUGES_HELPER_ADDRESS_NOT_PROVIDED="GAUGES_HELPER_ADDRESS_NOT_PROVIDED",Ca.GAUGES_NOT_FOUND="GAUGES_NOT_FOUND",Ca.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED="GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED",Ca.GAUGES_REWARD_TOKEN_EMPTY="GAUGES_REWARD_TOKEN_EMPTY",Ca.ILLEGAL_PARAMETER="ILLEGAL_PARAMETER",Ca.INTERNAL_ERROR_INVALID_ABI="INTERNAL_ERROR_INVALID_ABI",Ca.INPUT_LENGTH_MISMATCH="INPUT_LENGTH_MISMATCH",Ca.INPUT_OUT_OF_BOUNDS="INPUT_OUT_OF_BOUNDS",Ca.INPUT_TOKEN_INVALID="INPUT_TOKEN_INVALID",Ca.INVALID_PROTOCOL_ID="INVALID_PROTOCOL_ID",Ca.INVALID_SWAP_FEE_PERCENTAGE="INVALID_SWAP_FEE_PERCENTAGE",Ca.INVALID_WEIGHTS="INVALID_WEIGHTS",Ca.JOIN_DELTA_AMOUNTS="JOIN_DELTA_AMOUNTS",Ca.JOIN_WITH_ZERO_AMOUNT="JOIN_WITH_ZERO_AMOUNT",Ca.MISSING_AMP="MISSING_AMP",Ca.MISSING_DECIMALS="MISSING_DECIMALS",Ca.MISSING_PRICE_RATE="MISSING_PRICE_RATE",Ca.MISSING_TOKENS="MISSING_TOKENS",Ca.MISSING_WEIGHT="MISSING_WEIGHT",Ca.NO_POOL_DATA="NO_POOL_DATA",Ca.NO_VALUE_PARAMETER="NO_VALUE_PARAMETER",Ca.POOL_DOESNT_EXIST="POOL_DOESNT_EXIST",Ca.QUERY_BATCH_SWAP="QUERY_BATCH_SWAP",Ca.RELAY_SWAP_AMOUNTS="RELAY_SWAP_AMOUNTS",Ca.REWARD_TOKEN_ZERO="REWARD_TOKEN_ZERO",Ca.TIMESTAMP_IN_THE_FUTURE="TIMESTAMP_IN_THE_FUTURE",Ca.TOKEN_MISMATCH="TOKEN_MISMATCH",Ca.UNSUPPORTED_PAIR="UNSUPPORTED_PAIR",Ca.UNSUPPORTED_POOL_TYPE="UNSUPPORTED_POOL_TYPE",Ca.UNSUPPORTED_POOL_TYPE_VERSION="UNSUPPORTED_POOL_TYPE_VERSION";class Oa extends Error{constructor(e){super(Oa.getMessage(e)),this.code=e,this.name="BalancerError"}static getMessage(e){switch(e){case exports.BalancerErrorCode.ABOVE_MAX_TOKENS:return"the array contains more tokens than the maximum allowed";case exports.BalancerErrorCode.BELOW_MIN_TOKENS:return"the array does not contain the minimum quantity of tokens";case exports.BalancerErrorCode.EXIT_DELTA_AMOUNTS:return"Error when checking exit call deltas";case exports.BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED:return"Fee Provider Repository has not been provided";case exports.BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED:return"Liquidity Gauges Helper Contract address has not been provided";case exports.BalancerErrorCode.GAUGES_NOT_FOUND:return"Liquidity Gauges not found with given addresses";case exports.BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED:return"Liquidity Gauges Reward Minter Contract address has not been provided";case exports.BalancerErrorCode.GAUGES_REWARD_TOKEN_EMPTY:return"No Reward Tokens for Liquidity Gauges provided";case exports.BalancerErrorCode.INPUT_LENGTH_MISMATCH:return"input length mismatch";case exports.BalancerErrorCode.INPUT_OUT_OF_BOUNDS:return"input out of bounds";case exports.BalancerErrorCode.INPUT_TOKEN_INVALID:return"input token invalid";case exports.BalancerErrorCode.INVALID_PROTOCOL_ID:return"The provided protocol id does not correspond to a protocol";case exports.BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE:return"The swap fee needs to be greater than zero and less than 1e17(10%)";case exports.BalancerErrorCode.INVALID_WEIGHTS:return"The sum of the weights needs to be equal to 1e18(100%)";case exports.BalancerErrorCode.JOIN_DELTA_AMOUNTS:return"Error when checking join call deltas";case exports.BalancerErrorCode.JOIN_WITH_ZERO_AMOUNT:return"Cant join pool with 0 amount of token in";case exports.BalancerErrorCode.MISSING_AMP:return"missing amp";case exports.BalancerErrorCode.MISSING_DECIMALS:return"missing decimals";case exports.BalancerErrorCode.MISSING_PRICE_RATE:return"missing price rate";case exports.BalancerErrorCode.MISSING_TOKENS:return"missing tokens";case exports.BalancerErrorCode.MISSING_WEIGHT:return"missing weight";case exports.BalancerErrorCode.NO_POOL_DATA:return"no pool data";case exports.BalancerErrorCode.NO_VALUE_PARAMETER:return"Illegal value passed as parameter";case exports.BalancerErrorCode.POOL_DOESNT_EXIST:return"balancer pool does not exist";case exports.BalancerErrorCode.RELAY_SWAP_AMOUNTS:return"Error when checking swap amounts";case exports.BalancerErrorCode.REWARD_TOKEN_ZERO:return"All Zero Values for Reward Tokens";case exports.BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE:return"Timestamp cannot be in the future";case exports.BalancerErrorCode.TOKEN_MISMATCH:return"token mismatch";case exports.BalancerErrorCode.UNSUPPORTED_PAIR:return"unsupported token pair";case exports.BalancerErrorCode.UNSUPPORTED_POOL_TYPE:return"unsupported pool type";default:return"Unknown error"}}}function Ma(e,t,a){return a?function(e,t){const a=ie-ce.divDownFixed(e,t);return a<0?BigInt(0):a}(e,t):function(e,t){const a=ce.divDownFixed(e,t)-ie;return a<0?BigInt(0):a}(e,t)}const Fa=BigInt(1e3);function Ra(e,t,a,n){const o=t.length,i=function(e,t,a){let n=ne;const o=t.length;for(let e=0;ei){if(s-i<=1)return s}else if(i-s<=1)return s}throw new Error("Errors.STABLE_INVARIANT_DIDNT_CONVERGE")}(e,t,!0);let s=ne,r=i/BigInt(o);for(let e=0;e{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:s,pool:t,shouldUnwrapNativeAsset:o});const p=this.sortValuesExitExactBptIn({pool:t,wrappedNativeAsset:i,shouldUnwrapNativeAsset:o,singleTokenOut:s}),{minAmountsOut:l,expectedAmountsOut:d}=p.singleTokenOutIndex>=0?this.calcTokenOutGivenExactBptIn({...p,bptIn:a,slippage:n}):this.calcTokensOutGivenExactBptIn({...p,bptIn:a,slippage:n}),u=p.singleTokenOutIndex>=0?A.exitExactBPTInForOneTokenOut(a,p.singleTokenOutIndex):A.exitExactBPTInForTokensOut(a),c=this.encodeExitPool({poolTokens:p.poolTokens,poolId:t.id,exiter:e,minAmountsOut:l,userData:u,toInternalBalance:r}),y=(new Na).calcPriceImpact(t,d.map(BigInt),BigInt(a),!1);return{...c,expectedAmountsOut:d,minAmountsOut:l,priceImpact:y}},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{this.checkInputsExactTokensOut(n,a,t);const r=this.sortValuesExitExactTokensOut({pool:t,wrappedNativeAsset:i,amountsOut:n,tokensOut:a}),{expectedBPTIn:p,maxBPTIn:l}=this.calcBptInGivenExactTokensOut({...r,slippage:o}),{downScaledAmountsOut:d,poolTokens:u}=r,c=A.exitBPTInForExactTokensOut(d,l);return{...this.encodeExitPool({poolId:t.id,userData:c,poolTokens:u,minAmountsOut:d,exiter:e,toInternalBalance:s}),expectedBPTIn:p,maxBPTIn:l,priceImpact:(new Na).calcPriceImpact(t,d.map(BigInt),BigInt(p),!1)}},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:void 0,pool:t,shouldUnwrapNativeAsset:!1});const i=be(t),{minAmountsOut:s,expectedAmountsOut:r}=this.calcTokensOutGivenExactBptIn({...i,singleTokenOutIndex:-1,bptIn:a,slippage:n}),p=E.recoveryModeExit(a),l=this.encodeExitPool({poolTokens:i.poolTokens,poolId:t.id,exiter:e,minAmountsOut:s,userData:p,toInternalBalance:o}),d=(new Na).calcPriceImpact(t,r.map(BigInt),BigInt(a),!1);return{...l,expectedAmountsOut:r,minAmountsOut:s,priceImpact:d}},this.checkInputsExactBPTIn=({bptIn:e,singleTokenOut:n,pool:o,shouldUnwrapNativeAsset:i})=>{if(!e.length||a.parseFixed(e,18).isNegative())throw new Oa(exports.BalancerErrorCode.INPUT_OUT_OF_BOUNDS);if(n&&n!==t.AddressZero&&!o.tokens.map((e=>e.address)).some((e=>Je(e,n))))throw new Oa(exports.BalancerErrorCode.TOKEN_MISMATCH);if(!i&&n===t.AddressZero)throw new Error("shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values");if(o.tokens.some((e=>void 0===e.decimals)))throw new Oa(exports.BalancerErrorCode.MISSING_DECIMALS);if(!o.amp)throw new Oa(exports.BalancerErrorCode.MISSING_AMP)},this.checkInputsExactTokensOut=(e,t,a)=>{if(t.length!=e.length||t.length!=a.tokensList.length)throw new Oa(exports.BalancerErrorCode.INPUT_LENGTH_MISMATCH);if(a.tokens.some((e=>void 0===e.decimals)))throw new Oa(exports.BalancerErrorCode.MISSING_DECIMALS);if(!a.amp)throw new Oa(exports.BalancerErrorCode.MISSING_AMP)},this.sortValuesExitExactBptIn=({pool:e,wrappedNativeAsset:t,shouldUnwrapNativeAsset:a,singleTokenOut:n})=>{const o=be(e,t,a),{poolTokens:i}=o;let s=-1;return n&&(s=i.indexOf(n)),{...o,singleTokenOutIndex:s}},this.sortValuesExitExactTokensOut=({pool:e,wrappedNativeAsset:a,amountsOut:n,tokensOut:o})=>{const i=o.some((e=>e===t.AddressZero)),s=be(e,a,i),{scalingFactors:r}=s,p=new Y(a),[,l]=p.sortTokens(o,n),d=le(l.map((e=>BigInt(e))),r.map((e=>BigInt(e))));return{...s,upScaledAmountsOut:d,downScaledAmountsOut:l}},this.calcTokenOutGivenExactBptIn=({poolTokens:e,ampWithPrecision:t,upScaledBalances:n,totalSharesEvm:o,swapFeeEvm:i,singleTokenOutIndex:s,bptIn:r,slippage:p,scalingFactors:l})=>{const d=P.StableMathBigInt._calcTokenOutGivenExactBptIn(t,n,s,BigInt(r),o,i).toString(),u=de(BigInt(d)-BigInt(1),l[s]).toString(),c=Array(e.length).fill("0"),y=Array(e.length).fill("0");return c[s]=u,y[s]=Ke(a.BigNumber.from(u),a.BigNumber.from(p)).toString(),{minAmountsOut:y,expectedAmountsOut:c}},this.calcTokensOutGivenExactBptIn=({upScaledBalances:e,totalSharesEvm:t,scalingFactors:n,bptIn:o,slippage:i})=>{const s=ue(P.StableMathBigInt._calcTokensOutGivenExactBptIn(e,BigInt(o),t),n),r=s.map((e=>e.toString()));return{minAmountsOut:s.map((e=>Ke(a.BigNumber.from(e),a.BigNumber.from(i)).toString())),expectedAmountsOut:r}},this.calcBptInGivenExactTokensOut=({ampWithPrecision:e,upScaledBalances:t,upScaledAmountsOut:n,totalSharesEvm:o,swapFeeEvm:i,slippage:s})=>{const r=P.StableMathBigInt._calcBptInGivenExactTokensOut(e,t,n,o,i).toString();return{maxBPTIn:$e(a.BigNumber.from(r),a.BigNumber.from(s)).toString(),expectedBPTIn:r}},this.encodeExitPool=({poolId:e,exiter:t,poolTokens:a,minAmountsOut:n,userData:o,toInternalBalance:i})=>{const s=va,r="exitPool",p={poolId:e,sender:t,recipient:t,exitPoolRequest:{assets:a,minAmountsOut:n,userData:o,toInternalBalance:i}};return{data:la.createInterface().encodeFunctionData(r,[p.poolId,p.sender,p.recipient,p.exitPoolRequest]),to:s,functionName:r,attributes:p}}}}class Da{constructor(){this.buildJoin=({joiner:e,pool:t,tokensIn:a,amountsIn:n,slippage:o,wrappedNativeAsset:i})=>{this.checkInputs(a,n,t);const s=this.sortValues({pool:t,wrappedNativeAsset:i,tokensIn:a,amountsIn:n}),{expectedBPTOut:r,minBPTOut:p}=this.calcBptOutGivenExactTokensIn({...s,slippage:o});return{...this.encodeJoinPool({joiner:e,amountsIn:n,tokensIn:a,poolId:t.id,minBPTOut:p,...s}),minBPTOut:p,expectedBPTOut:r,priceImpact:(new Na).calcPriceImpact(t,s.sortedAmountsIn.map(BigInt),BigInt(r),!0)}},this.checkInputs=(e,t,a)=>{if(t.length!=e.length||t.length!=a.tokensList.length)throw new Oa(exports.BalancerErrorCode.INPUT_LENGTH_MISMATCH);if(a.tokens.some((e=>void 0===e.decimals)))throw new Oa(exports.BalancerErrorCode.MISSING_DECIMALS);if(!a.amp)throw new Oa(exports.BalancerErrorCode.MISSING_AMP)},this.sortValues=({pool:e,wrappedNativeAsset:a,amountsIn:n,tokensIn:o})=>{const{poolTokens:i,ampWithPrecision:s,totalSharesEvm:r,swapFeeEvm:p,scalingFactors:l,upScaledBalances:d}=be(e,a,o.includes(t.AddressZero)),u=new Y(a),[,c]=u.sortTokens(o,n);return{poolTokens:i,ampWithPrecision:s,totalSharesEvm:r,swapFeeEvm:p,upScaledBalances:d,upScaledAmountsIn:le(c.map((e=>BigInt(e))),l.map((e=>BigInt(e)))),sortedAmountsIn:c}},this.calcBptOutGivenExactTokensIn=({ampWithPrecision:e,upScaledBalances:t,upScaledAmountsIn:n,totalSharesEvm:o,swapFeeEvm:i,slippage:s})=>{const r=P.StableMathBigInt._calcBptOutGivenExactTokensIn(e,t,n,o,i).toString();return{expectedBPTOut:r,minBPTOut:Ke(a.BigNumber.from(r),a.BigNumber.from(s)).toString()}},this.encodeJoinPool=({poolId:e,joiner:t,poolTokens:a,sortedAmountsIn:n,amountsIn:o,tokensIn:i,minBPTOut:s})=>{const r=A.joinExactTokensInForBPTOut(n,s),p=va,l="joinPool",d={poolId:e,sender:t,recipient:t,joinPoolRequest:{assets:a,maxAmountsIn:n,userData:r,fromInternalBalance:!1}};return{attributes:d,data:la.createInterface().encodeFunctionData(l,[d.poolId,d.sender,d.recipient,d.joinPoolRequest]),functionName:l,to:p,value:Ue(i,o)}}}}class Ua{calcTotal(e){var t,n;let o=a.BigNumber.from(0),i=a.BigNumber.from(0);for(let a=0;a{this.checkInputs(a,n,t.tokensList);const s=this.sortValuesBasedOnPoolVersion({pool:t,wrappedNativeAsset:i,amountsIn:n,tokensIn:a}),r=this.buildExactTokensInForBPTOut({...s,slippage:o,joiner:e,poolId:t.id}),p=Ue(a,n),l=(new Na).calcPriceImpact(t,s.sortedAmountsIn.map(BigInt),BigInt(r.expectedBPTOut),!0);return{...r,to:va,value:p,priceImpact:l}}}sortValuesBasedOnPoolVersion({pool:e,wrappedNativeAsset:t,amountsIn:a,tokensIn:n}){return this.sortV1(t,n,a,e)}checkInputs(e,t,a){if(e.length!=t.length||e.length!=a.length-1)throw new Oa(exports.BalancerErrorCode.INPUT_LENGTH_MISMATCH)}encodeUserDataExactTokensInForBPTOut(e,t,n){const o=Ke(a.BigNumber.from(e),a.BigNumber.from(t)).toString();return{userData:C.joinExactTokensInForBPTOut(n,o),minBPTOut:o}}encodeJoinPool(e,t,a,n,o,i){const s="joinPool",r={poolId:e,sender:t,recipient:a,joinPoolRequest:{assets:n,maxAmountsIn:i,userData:o,fromInternalBalance:!1}};return{functionName:s,attributes:r,data:la.createInterface().encodeFunctionData(s,[r.poolId,r.sender,r.recipient,r.joinPoolRequest])}}sortV1(e,a,n,o){const i=new Y(e),[,s]=i.sortTokens(a,n),{poolTokens:r,ampWithPrecision:p,swapFeeEvm:l,totalSharesEvm:d,bptIndex:u,scalingFactorsWithoutBpt:c,upScaledBalancesWithoutBpt:y}=be(o,e,a.includes(t.AddressZero));return{sortedAmountsIn:s,scalingFactorsWithoutBpt:c,upScaledBalancesWithoutBpt:y,ampWithPrecision:p,totalSharesEvm:d,swapFeeEvm:l,bptIndex:u,poolTokens:r}}buildExactTokensInForBPTOut(e){const{sortedAmountsIn:t,scalingFactorsWithoutBpt:a,upScaledBalancesWithoutBpt:n,ampWithPrecision:o,totalSharesEvm:i,swapFeeEvm:s,bptIndex:r,poolTokens:p,slippage:l,poolId:d,joiner:u}=e,c=this.calcBptOutGivenExactTokensIn(t,a,n,o,i,s),y=this.encodeUserDataExactTokensInForBPTOut(c,l,t),{functionName:b,data:m,attributes:f}=this.encodeJoinPool(d,u,u,p,y.userData,je(t,r,"0"));return{functionName:b,data:m,attributes:f,minBPTOut:y.minBPTOut,expectedBPTOut:c.toString()}}calcBptOutGivenExactTokensIn(e,t,a,n,o,i){const s=le(e.map(BigInt),t.map(BigInt));return p.StableMathBigInt._calcBptOutGivenExactTokensIn(n,a,s,o,i)}sortV4(e,t,a){const{poolTokens:n,poolTokensWithoutBpt:o,ampWithPrecision:i,swapFeeEvm:s,totalSharesEvm:r,scalingFactorsWithoutBpt:p,upScaledBalancesWithoutBpt:l}=be(a),[d]=ze(o,e,t);return{sortedAmountsIn:d,scalingFactorsWithoutBpt:p,upScaledBalancesWithoutBpt:l,ampWithPrecision:i,totalSharesEvm:r,swapFeeEvm:s,bptIndex:0,poolTokens:n}}}class Ha{constructor(){this.buildExitExactBPTIn=({exiter:e,pool:t,bptIn:a,slippage:n,shouldUnwrapNativeAsset:o,wrappedNativeAsset:i,singleTokenOut:s,toInternalBalance:r})=>{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:s,pool:t,shouldUnwrapNativeAsset:o});const p=this.sortValuesExitExactBptIn({pool:t,wrappedNativeAsset:i,shouldUnwrapNativeAsset:o,singleTokenOut:s}),{minAmountsOut:l,expectedAmountsOut:d}=p.singleTokenOutIndexWithoutBpt>=0?this.calcTokenOutGivenExactBptIn({...p,bptIn:a,slippage:n}):this.calcTokensOutGivenExactBptIn({...p,bptIn:a,slippage:n}),u=p.singleTokenOutIndexWithoutBpt>=0?C.exitExactBPTInForOneTokenOut(a,p.singleTokenOutIndexWithoutBpt):C.exitExactBPTInForAllTokensOut(a),c=je(l,p.bptIndex,"0"),y=this.encodeExitPool({poolTokens:p.poolTokens,poolId:t.id,exiter:e,userData:u,minAmountsOut:c,toInternalBalance:r}),b=(new Na).calcPriceImpact(t,d.map(BigInt),BigInt(a),!1);return{...y,expectedAmountsOut:d,minAmountsOut:l,priceImpact:b}},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{this.checkInputsExactTokensOut(a,n,t);const r=this.sortValuesExitExactTokensOut({pool:t,wrappedNativeAsset:i,amountsOut:n,tokensOut:a}),{bptIn:p,maxBPTIn:l}=this.calcBptInGivenExactTokensOut({...r,slippage:o}),d=C.exitBPTInForExactTokensOut(r.downscaledAmountsOutWithoutBpt,l);return{...this.encodeExitPool({poolTokens:r.poolTokens,minAmountsOut:r.downscaledAmountsOutWithBpt,userData:d,exiter:e,poolId:t.id,toInternalBalance:s}),maxBPTIn:l,expectedBPTIn:p,priceImpact:(new Na).calcPriceImpact(t,r.downscaledAmountsOutWithoutBpt.map(BigInt),BigInt(p),!1)}},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{this.checkInputsRecoveryExit({bptIn:a,pool:t}),t.tokens.forEach((e=>e.priceRate="1"));const i=be(t),{minAmountsOut:s,expectedAmountsOut:r}=this.calcTokensOutGivenExactBptIn({...i,bptIn:a,slippage:n}),p=E.recoveryModeExit(a),l=je(s,i.bptIndex,"0"),d=this.encodeExitPool({poolTokens:i.poolTokens,poolId:t.id,exiter:e,userData:p,minAmountsOut:l,toInternalBalance:o}),u=(new Na).calcPriceImpact(t,r.map(BigInt),BigInt(a),!1);return{...d,expectedAmountsOut:r,minAmountsOut:s,priceImpact:u}},this.checkInputsExactBPTIn=({bptIn:e,singleTokenOut:n,pool:o,shouldUnwrapNativeAsset:i})=>{if(a.BigNumber.from(e).lte(0))throw new Oa(exports.BalancerErrorCode.INPUT_OUT_OF_BOUNDS);if(!n&&o.poolTypeVersion<2)throw new Error("Unsupported Exit Type For Pool");if(n&&n!==t.AddressZero&&!o.tokens.map((e=>e.address)).some((e=>Je(e,n))))throw new Oa(exports.BalancerErrorCode.TOKEN_MISMATCH);if(!i&&n===t.AddressZero)throw new Error("shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values");if(o.tokens.some((e=>void 0===e.decimals)))throw new Oa(exports.BalancerErrorCode.MISSING_DECIMALS);if(!o.amp)throw new Oa(exports.BalancerErrorCode.MISSING_AMP)},this.checkInputsExactTokensOut=(e,t,a)=>{if(e.length!=t.length||e.length!=a.tokensList.length-1)throw new Oa(exports.BalancerErrorCode.INPUT_LENGTH_MISMATCH)},this.checkInputsRecoveryExit=({bptIn:e,pool:t})=>{if(a.BigNumber.from(e).lte(0))throw new Oa(exports.BalancerErrorCode.INPUT_OUT_OF_BOUNDS);if(!t.isInRecoveryMode)throw new Error("Exit type not supported because pool is not in Recovery Mode");if(t.tokens.some((e=>void 0===e.decimals)))throw new Oa(exports.BalancerErrorCode.MISSING_DECIMALS);if(!t.amp)throw new Oa(exports.BalancerErrorCode.MISSING_AMP)},this.sortValuesExitExactBptIn=({pool:e,singleTokenOut:t,wrappedNativeAsset:a,shouldUnwrapNativeAsset:n})=>{const o=be(e,a,n);let i=-1;return t&&(i=o.poolTokensWithoutBpt.indexOf(t)),{...o,singleTokenOutIndexWithoutBpt:i}},this.sortValuesExitExactTokensOut=({pool:e,wrappedNativeAsset:n,amountsOut:o,tokensOut:i})=>{const s=i.some((e=>e===t.AddressZero)),r=be(e,n,s),p=new Y(n),[,l]=p.sortTokens(i,o),d=je(l,r.bptIndex,"0").map((e=>{const t=a.BigNumber.from(e);return t.isZero()?e:t.sub(1).toString()})),u=le(l.map((e=>BigInt(e))),r.scalingFactorsWithoutBpt);return{...r,upScaledAmountsOutWithoutBpt:u,downscaledAmountsOutWithBpt:d,downscaledAmountsOutWithoutBpt:l}},this.calcTokenOutGivenExactBptIn=({ampWithPrecision:e,upScaledBalancesWithoutBpt:t,singleTokenOutIndexWithoutBpt:n,scalingFactorsWithoutBpt:o,totalSharesEvm:i,swapFeeEvm:s,bptIn:r,slippage:p})=>{const l=P.StableMathBigInt._calcTokenOutGivenExactBptIn(e,t,n,BigInt(r),i,s),d=Array(t.length).fill("0"),u=Array(t.length).fill("0"),c=de(l,o[n]);return d[n]=c.toString(),u[n]=Ke(a.BigNumber.from(c),a.BigNumber.from(p)).toString(),{minAmountsOut:u,expectedAmountsOut:d}},this.calcTokensOutGivenExactBptIn=({upScaledBalancesWithoutBpt:e,totalSharesEvm:t,scalingFactorsWithoutBpt:n,bptIn:o,slippage:i})=>{const s=ue(P.StableMathBigInt._calcTokensOutGivenExactBptIn(e,BigInt(o),t),n),r=s.map((e=>e.toString()));return{minAmountsOut:s.map((e=>Ke(a.BigNumber.from(e),a.BigNumber.from(i)).toString())),expectedAmountsOut:r}},this.calcBptInGivenExactTokensOut=({ampWithPrecision:e,upScaledBalancesWithoutBpt:t,upScaledAmountsOutWithoutBpt:n,totalSharesEvm:o,swapFeeEvm:i,slippage:s})=>{const r=P.StableMathBigInt._calcBptInGivenExactTokensOut(e,t,n,o,i).toString();return{bptIn:r,maxBPTIn:$e(a.BigNumber.from(r),a.BigNumber.from(s)).toString()}},this.encodeExitPool=e=>{const{exiter:t,poolId:a,minAmountsOut:n,userData:o,poolTokens:i,toInternalBalance:s}=e,r="exitPool",p={poolId:a,sender:t,recipient:t,exitPoolRequest:{assets:i,minAmountsOut:n,userData:o,toInternalBalance:s}};return{to:va,functionName:r,attributes:p,data:la.createInterface().encodeFunctionData(r,[p.poolId,p.sender,p.recipient,p.exitPoolRequest])}}}}class Ka{constructor(e=new Ha,t=new Ua,a=new Ga,n=new Na,o=new Wa){this.exit=e,this.liquidity=t,this.spotPriceCalculator=a,this.priceImpactCalculator=n,this.join=o}}class $a{bptZeroPriceImpact(e,t){if(t.length!==e.tokensList.length)throw new Oa(exports.BalancerErrorCode.INPUT_LENGTH_MISMATCH);const{scalingFactorsRaw:a,totalSharesEvm:n,upScaledBalances:o,weights:i}=be(e);let s=ne;for(let e=0;e{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:s,pool:t,shouldUnwrapNativeAsset:o});const p=this.sortValuesExitExactBptIn({pool:t,wrappedNativeAsset:i,shouldUnwrapNativeAsset:o,singleTokenOut:s}),{minAmountsOut:l,expectedAmountsOut:d}=p.singleTokenOutIndex>=0?this.calcTokenOutGivenExactBptIn({...p,bptIn:a,slippage:n}):this.calcTokensOutGivenExactBptIn({...p,bptIn:a,slippage:n}),u=p.singleTokenOutIndex>=0?S.exitExactBPTInForOneTokenOut(a,p.singleTokenOutIndex):S.exitExactBPTInForTokensOut(a),c=this.encodeExitPool({poolTokens:p.poolTokens,poolId:t.id,exiter:e,minAmountsOut:l,userData:u,toInternalBalance:r}),y=(new $a).calcPriceImpact(t,d.map(BigInt),BigInt(a),!1);return{...c,expectedAmountsOut:d,minAmountsOut:l,priceImpact:y}},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{this.checkInputsExactTokensOut(n,a,t);const r=this.sortValuesExitExactTokensOut({pool:t,wrappedNativeAsset:i,amountsOut:n,tokensOut:a}),{expectedBPTIn:p,maxBPTIn:l}=this.calcBptInGivenExactTokensOut({...r,slippage:o}),{downScaledAmountsOut:d,poolTokens:u}=r,c=S.exitBPTInForExactTokensOut(d,l);return{...this.encodeExitPool({poolId:t.id,userData:c,poolTokens:u,minAmountsOut:d,exiter:e,toInternalBalance:s}),expectedBPTIn:p,maxBPTIn:l,priceImpact:(new $a).calcPriceImpact(t,d.map(BigInt),BigInt(p),!1)}},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:void 0,pool:t,shouldUnwrapNativeAsset:!1}),t.tokens.forEach((e=>e.priceRate="1"));const i=be(t),{minAmountsOut:s,expectedAmountsOut:r}=this.calcTokensOutGivenExactBptIn({...i,bptIn:a,slippage:n,singleTokenOutIndex:-1}),p=E.recoveryModeExit(a),l=this.encodeExitPool({poolTokens:i.poolTokens,poolId:t.id,exiter:e,minAmountsOut:s,userData:p,toInternalBalance:o}),d=(new $a).calcPriceImpact(t,r.map(BigInt),BigInt(a),!1);return{...l,expectedAmountsOut:r,minAmountsOut:s,priceImpact:d}},this.checkInputsExactBPTIn=({bptIn:e,singleTokenOut:n,pool:o,shouldUnwrapNativeAsset:i})=>{if(!e.length||a.parseFixed(e,18).isNegative())throw new Oa(exports.BalancerErrorCode.INPUT_OUT_OF_BOUNDS);if(n&&n!==t.AddressZero&&!o.tokens.map((e=>e.address)).some((e=>Je(e,n))))throw new Oa(exports.BalancerErrorCode.TOKEN_MISMATCH);if(!i&&n===t.AddressZero)throw new Error("shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values");if(o.tokens.some((e=>void 0===e.decimals)))throw new Oa(exports.BalancerErrorCode.MISSING_DECIMALS)},this.checkInputsExactTokensOut=(e,t,a)=>{if(t.length!=e.length||t.length!=a.tokensList.length)throw new Oa(exports.BalancerErrorCode.INPUT_LENGTH_MISMATCH);if(a.tokens.some((e=>void 0===e.decimals)))throw new Oa(exports.BalancerErrorCode.MISSING_DECIMALS)},this.sortValuesExitExactBptIn=({pool:e,wrappedNativeAsset:t,shouldUnwrapNativeAsset:a,singleTokenOut:n})=>{const o=be(e,t,a),{poolTokens:i}=o;let s=-1;return n&&(s=i.indexOf(n.toLowerCase())),{...o,singleTokenOutIndex:s}},this.sortValuesExitExactTokensOut=({pool:e,wrappedNativeAsset:a,amountsOut:n,tokensOut:o})=>{const i=o.some((e=>e===t.AddressZero)),s=be(e,a,i),{scalingFactors:r}=s,p=new Y(a),[,l]=p.sortTokens(o,n),d=le(l.map((e=>BigInt(e))),r.map((e=>BigInt(e))));return{...s,upScaledAmountsOut:d,downScaledAmountsOut:l}},this.calcTokenOutGivenExactBptIn=({poolTokens:e,weights:t,upScaledBalances:n,totalSharesEvm:o,swapFeeEvm:i,singleTokenOutIndex:s,bptIn:r,slippage:p,scalingFactors:l})=>{const d=P.WeightedMaths._calcTokenOutGivenExactBptIn(n[s],t[s],BigInt(r),o,i).toString(),u=de(BigInt(d)-BigInt(1),l[s]).toString(),c=Array(e.length).fill("0"),y=Array(e.length).fill("0");return c[s]=u,y[s]=Ke(a.BigNumber.from(u),a.BigNumber.from(p)).toString(),{minAmountsOut:y,expectedAmountsOut:c}},this.calcTokensOutGivenExactBptIn=({upScaledBalances:e,totalSharesEvm:t,scalingFactors:n,bptIn:o,slippage:i})=>{const s=ue(P.WeightedMaths._calcTokensOutGivenExactBptIn(e,BigInt(o),t).map((e=>e.toString())).map((e=>BigInt(e))),n),r=s.map((e=>e.toString()));return{minAmountsOut:s.map((e=>Ke(a.BigNumber.from(e),a.BigNumber.from(i)).toString())),expectedAmountsOut:r}},this.calcBptInGivenExactTokensOut=({weights:e,upScaledBalances:t,upScaledAmountsOut:n,totalSharesEvm:o,swapFeeEvm:i,slippage:s})=>{const r=P.WeightedMaths._calcBptInGivenExactTokensOut(t,e,n,o,i).toString();return{maxBPTIn:$e(a.BigNumber.from(r),a.BigNumber.from(s)).toString(),expectedBPTIn:r}},this.encodeExitPool=({poolId:e,exiter:t,poolTokens:a,minAmountsOut:n,userData:o,toInternalBalance:i})=>{const s=va,r="exitPool",p={poolId:e,sender:t,recipient:t,exitPoolRequest:{assets:a,minAmountsOut:n,userData:o,toInternalBalance:i}};return{data:la.createInterface().encodeFunctionData(r,[p.poolId,p.sender,p.recipient,p.exitPoolRequest]),to:s,functionName:r,attributes:p}}}}class ja{constructor(){this.buildJoin=({joiner:e,pool:t,tokensIn:a,amountsIn:n,slippage:o,wrappedNativeAsset:i})=>{this.checkInputs(n,a,t);const s=this.sortValues({pool:t,wrappedNativeAsset:i,tokensIn:a,amountsIn:n}),{expectedBPTOut:r,minBPTOut:p}=this.calcBptOutGivenExactTokensIn({...s,slippage:o});return{...this.encodeJoinPool({...s,poolId:t.id,joiner:e,minBPTOut:p,tokensIn:a,amountsIn:n}),minBPTOut:p,expectedBPTOut:r,priceImpact:(new $a).calcPriceImpact(t,s.sortedAmountsIn.map(BigInt),BigInt(r),!0)}},this.checkInputs=(e,t,a)=>{if(e.length!=t.length||e.length!=a.tokensList.length)throw new Oa(exports.BalancerErrorCode.INPUT_LENGTH_MISMATCH);if(a.tokens.some((e=>void 0===e.decimals)))throw new Oa(exports.BalancerErrorCode.MISSING_DECIMALS);if(a.tokens.some((e=>!e.weight)))throw new Oa(exports.BalancerErrorCode.MISSING_WEIGHT)},this.sortValues=({pool:e,tokensIn:a,amountsIn:n,wrappedNativeAsset:o})=>{const i=a.some((e=>e===t.AddressZero)),s=be(e,o,i),r=new Y(o),[,p]=r.sortTokens(a,n),l=le(p.map(BigInt),s.scalingFactors);return{...s,sortedAmountsIn:p,upScaledAmountsIn:l}},this.calcBptOutGivenExactTokensIn=({upScaledBalances:e,weights:t,upScaledAmountsIn:n,totalSharesEvm:o,swapFeeEvm:i,slippage:s})=>{const r=p.WeightedMaths._calcBptOutGivenExactTokensIn(e,t,n,o,i).toString();return{expectedBPTOut:r,minBPTOut:Ke(a.BigNumber.from(r),a.BigNumber.from(s)).toString()}},this.encodeJoinPool=({sortedAmountsIn:e,poolTokens:t,poolId:a,joiner:n,minBPTOut:o,amountsIn:i,tokensIn:s})=>{const r="joinPool",p={poolId:a,sender:n,recipient:n,joinPoolRequest:{assets:t,maxAmountsIn:e,userData:S.joinExactTokensInForBPTOut(e,o),fromInternalBalance:!1}};return{to:va,functionName:r,data:la.createInterface().encodeFunctionData(r,[p.poolId,p.sender,p.recipient,p.joinPoolRequest]),attributes:p,value:Ue(s,i)}}}}class Xa{calcTotal(e){var t;let n=a.BigNumber.from(0),o=a.BigNumber.from(0);for(let a=0;ae.add(qe(t.weight||"0",18))),a.BigNumber.from(0));if(n.gt(0)){return Ge(o.mul(i).div(n),36)}return"0"}}class Ya{calcPoolSpotPrice(e,t,a){const n=e===a.address||t===a.address;if(n){const e={address:a.address,balance:a.totalShares,decimals:18,priceRate:"1",weight:"0"};a.tokens.push(e),a.tokensList.push(a.address)}const o=p.WeightedPool.fromPool(a),i=o.parsePoolPairData(e,t),s=o._spotPriceAfterSwapExactTokenInForTokenOut(i,p.ZERO).toString();return n&&(a.tokens.pop(),a.tokensList.pop()),s}}class za{constructor(e=new Ja,t=new ja,a=new Xa,n=new Ya,o=new $a){this.exit=e,this.join=t,this.liquidity=a,this.spotPriceCalculator=n,this.priceImpactCalculator=o}}class Za{calcTotal(e){var n,o;let i=t.Zero,s=t.Zero;for(let t=0;t{throw new Error("Exit type not supported")},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{throw new Error("Exit type not supported")},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{throw new Error("Exit type not supported")}}}class an{constructor(){this.buildJoin=({joiner:e,pool:t,tokensIn:a,amountsIn:n,slippage:o,wrappedNativeAsset:i})=>{throw new Error("Join type not supported")}}}class nn{constructor(e=new tn,t=new an,a=new Ua,n=new Ga,o=new Na){this.exit=e,this.join=t,this.liquidity=a,this.spotPriceCalculator=n,this.priceImpactCalculator=o}}class on{bptZeroPriceImpact(e,t){throw new Error("Linear Pool bptZeroPriceImpact Not Implented")}calcPriceImpact(e,t,a,n){return"0"}}class sn{constructor(){this.buildExitExactBPTIn=({exiter:e,pool:t,bptIn:a,slippage:n,shouldUnwrapNativeAsset:o,wrappedNativeAsset:i,singleTokenOut:s,toInternalBalance:r})=>{throw new Error("Exit type not supported")},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{throw new Error("Exit type not supported")},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:void 0,pool:t,shouldUnwrapNativeAsset:!1}),t.tokens.forEach((e=>e.priceRate="1"));const i=be(t),{minAmountsOut:s,expectedAmountsOut:r}=this.calcTokensOutGivenExactBptIn({...i,bptIn:a,slippage:n}),p=E.recoveryModeExit(a),l=je(s,i.bptIndex,"0"),d=this.encodeExitPool({poolTokens:i.poolTokens,poolId:t.id,exiter:e,minAmountsOut:l,userData:p,toInternalBalance:o}),u=(new on).calcPriceImpact(t,r.map(BigInt),BigInt(a),!1);return{...d,expectedAmountsOut:r,minAmountsOut:s,priceImpact:u}},this.checkInputsExactBPTIn=({bptIn:e,pool:t})=>{if(a.BigNumber.from(e).lte(0))throw new Oa(exports.BalancerErrorCode.INPUT_OUT_OF_BOUNDS);if(t.tokens.some((e=>void 0===e.decimals)))throw new Oa(exports.BalancerErrorCode.MISSING_DECIMALS)},this.calcTokensOutGivenExactBptIn=({bptIndex:e,upScaledBalances:t,totalSharesEvm:n,scalingFactors:o,bptIn:i,slippage:s})=>{const r=Ye(ue(P.LinearMaths._calcTokensOutGivenExactBptIn(t,BigInt(i),n,e),o),e).map((e=>e.toString()));return{minAmountsOut:r.map((e=>Ke(a.BigNumber.from(e),a.BigNumber.from(s)).toString())),expectedAmountsOut:r}},this.encodeExitPool=e=>{const{exiter:t,poolId:a,minAmountsOut:n,userData:o,poolTokens:i,toInternalBalance:s}=e,r="exitPool",p={poolId:a,sender:t,recipient:t,exitPoolRequest:{assets:i,minAmountsOut:n,userData:o,toInternalBalance:s}};return{to:va,functionName:r,attributes:p,data:la.createInterface().encodeFunctionData(r,[p.poolId,p.sender,p.recipient,p.exitPoolRequest])}}}}class rn{constructor(){this.buildJoin=({joiner:e,pool:t,tokensIn:a,amountsIn:n,slippage:o,wrappedNativeAsset:i})=>{throw new Error("Join type not supported")}}}const pn=18,ln=qe("1",pn);class dn{calcTotal(e){var a,n;let o=t.Zero,i=t.Zero;for(let t=0;tBigInt(0)){const t=ce.divDownFixed(i,o);for(let a=0;aBigInt(0)){const t=ce.divDownFixed(i,o);for(let a=0;at.address!==e.address)),n=await Promise.all(t.map((async e=>{const t=await this.pools.findBy("address",e.address);if(!t)return;const a=qe(await this.getLiquidity(t),18),n=qe(t.totalShares,18),o=qe(e.balance,18),i=n.eq(0)?0:a.mul(o).div(n);return{address:t.address,liquidity:i.toString()}}))),o=n.reduce(((e,t)=>e.add(t?t.liquidity:a.BigNumber.from(0))),a.BigNumber.from(0)),i=t.filter((e=>!n.find((t=>(null==t?void 0:t.address)===e.address)))),s=await Promise.all(i.map((async e=>{var t;const a=await this.tokenPrices.find(e.address);return{address:e.address,decimals:e.decimals,priceRate:e.priceRate,price:(null==a?void 0:a.usd)&&a||{usd:null===(t=e.token)||void 0===t?void 0:t.latestUSDPrice},balance:e.balance,weight:e.weight}}))),r=qe(En.from(e.poolType).liquidity.calcTotal(s),18);return Ge(o.add(r),18)}async getBptPrice(e){const t=await this.getLiquidity(e);return(parseFloat(t)/parseFloat(e.totalShares)).toString()}}const Sn=a.BigNumber.from("0"),vn=e=>e?Object.keys(e).filter((t=>e[t].gt(Sn))).reduce(((t,a)=>(t[a]=e[a],t)),{}):{},kn=(e,t,a)=>e.map((e=>((e,t,a)=>{if(!t[e.address]&&!a[e.address])return e;const n=vn(t[e.address]),o=vn(a[e.address]);return e.claimableTokens||(e.claimableTokens={...n,...o}),e})(e,t,a))).filter((e=>e.claimableTokens&&Object.keys(e.claimableTokens).length)),Bn=(e,t)=>{var a;if(t.rewardTokens)for(const n of Object.keys(t.rewardTokens))e[a=t.id]||(e[a]=[]),e[t.id].push(n);return e},Cn=new e.Interface(["function claim_rewards(address sender, address receiver) returns (uint256)","function claimable_tokens(address addr) view returns (uint256)","function claimable_reward(address addr, address token) view returns (uint256)"]),On=new e.Interface(["function mintMany(address[] gauges) returns (uint256)"]),Mn=new e.Interface(["function getPendingRewards(address gauge, address user, address token) view returns (uint256)","function claimRewardsFromGauges(address[] gauges, address user)"]);class Fn{constructor(e,t,a,n,o,i){this.multicall=n,this.liquidityGauges=e,this.feeDistributor=t,this.chainId=a,this.gaugeClaimHelperAddress=o,this.balancerMinterAddress=i}async getClaimableRewardTokens(e){const t=await this.getGauges();if(!t.length)throw new Oa(exports.BalancerErrorCode.GAUGES_NOT_FOUND);const a=t.map((e=>e.address)),n=this.getRewardTokens(t),o=await this.retrieveClaimableTokens(a,e),i=await this.retrieveClaimableRewards(n,e);return kn(t,i,o)}async buildClaimRewardTokensRequest(e,t){if(1===this.chainId||5===this.chainId){if(!this.balancerMinterAddress)throw new Oa(exports.BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED)}else if(!this.gaugeClaimHelperAddress)throw new Oa(exports.BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED);const n=(await this.getClaimableRewardTokens(t)).filter((t=>e.map((e=>e.toLowerCase())).includes(t.address.toLowerCase()))).filter((e=>e.claimableTokens&&Object.keys(e.claimableTokens).length)),o=Array.from(new Set(n.map((e=>e.claimableTokens)).map((e=>Object.keys(e||{}))).flatMap((e=>e))));if(!o.length)throw new Oa(exports.BalancerErrorCode.GAUGES_REWARD_TOKEN_EMPTY);const i=o.map((e=>n.reduce(((t,a)=>(a.claimableTokens&&a.claimableTokens[e]&&a.claimableTokens[e]!==Sn&&(t=a.claimableTokens[e].add(t)),t)),a.BigNumber.from(0))));if(!i.length||i.every((e=>e.eq(Sn))))throw new Oa(exports.BalancerErrorCode.REWARD_TOKEN_ZERO);if(1===this.chainId||5===this.chainId){if(!this.balancerMinterAddress)throw new Oa(exports.BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED);const a=On.encodeFunctionData("mintMany",[e]);return{to:this.balancerMinterAddress,from:t,callData:a,tokensOut:o,expectedTokensValue:i,functionName:"mintMany"}}{if(!this.gaugeClaimHelperAddress)throw new Oa(exports.BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED);const a=Mn.encodeFunctionData("claimRewardsFromGauges",[e,t]);return{to:this.gaugeClaimHelperAddress,from:t,callData:a,tokensOut:o,expectedTokensValue:i,functionName:"claimRewardsFromGauges"}}}async getClaimableVeBalTokens(e,t){var a;if(!this.feeDistributor)throw new Oa(exports.BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED);return null===(a=this.feeDistributor)||void 0===a?void 0:a.getClaimableBalances(e,t)}async buildClaimVeBalTokensRequest(e,t){if(!this.feeDistributor)throw new Oa(exports.BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED);const a=await this.feeDistributor.getClaimableBalances(e,t),n=t.map((e=>{var t;return null!==(t=a[e])&&void 0!==t?t:Sn}));if(n.every((e=>e.eq(Sn))))throw new Oa(exports.BalancerErrorCode.REWARD_TOKEN_ZERO);const o=this.feeDistributor.claimBalances(e,t);return{to:this.feeDistributor.feeDistributor.address,from:e,callData:o,tokensOut:t,expectedTokensValue:n,functionName:"claimTokens"}}async getGauges(){return await this.liquidityGauges.fetch()}getRewardTokens(e){return e.reduce(Bn,{})}async retrieveClaimableRewards(e,t){const n=Object.keys(e),{payload:o,paths:i}=this.getPayload(n,e,t),[,s]=await this.multicall.callStatic.aggregate(o),r=s.map((e=>"0x"==e?"0x0":e));return i.reduce((e=>(t,n,o)=>{var i;const s=a.BigNumber.from(`${e[o]}`);return s.gt(Sn)&&(t[i=n.gauge]||(t[i]={}),t[n.gauge][n.token]=s),t})(r),{})}getPayload(e,t,a){const n=[],o=[];for(const i of e)for(const e of t[i])o.push({gauge:i,token:e}),n.push(this.getArguments(a,i,e));return{payload:n,paths:o}}getArguments(e,t,a){if(1===this.chainId||5===this.chainId)return{target:t,callData:Cn.encodeFunctionData("claimable_reward",[e,a])};if(!this.gaugeClaimHelperAddress)throw new Oa(exports.BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED);return{target:this.gaugeClaimHelperAddress,callData:Mn.encodeFunctionData("getPendingRewards",[t,e,a])}}async retrieveClaimableTokens(e,t){if(this.chainId===exports.Network.MAINNET||this.chainId===exports.Network.GOERLI){const n=ka[this.chainId].addresses.tokens.bal,o=e.map((e=>({target:e,callData:Cn.encodeFunctionData("claimable_tokens",[t])}))),[,i]=await this.multicall.callStatic.aggregate(o),s=i.map((e=>"0x"==e?"0x0":e));return e.reduce(((e,t)=>(n,o,i)=>{const s=a.BigNumber.from(`${e[i]}`);return s.gt(Sn)&&(n[o]||(n[o]={}),n[o][t]=s),n})(s,n),{})}return{}}}async function Rn(e,a,n,o){const i={sender:t.AddressZero,recipient:t.AddressZero,fromInternalBalance:!1,toInternalBalance:!1};try{return(await e.callStatic.queryBatchSwap(a,n,o,i)).map((e=>e.toString()))}catch(e){throw`queryBatchSwap call error: ${e}`}}var Nn=function(){return Nn=Object.assign||function(e){for(var t,a=1,n=arguments.length;ae();function zo(e,t=Yo){return{PoolShare:(a,n)=>t((t=>e.request(No,a,{...n,...t})),"PoolShare","query"),PoolShares:(a,n)=>t((t=>e.request(Lo,a,{...n,...t})),"PoolShares","query"),Pools:(a,n)=>t((t=>e.request(Do,a,{...n,...t})),"Pools","query"),AllPools:(a,n)=>t((t=>e.request(Uo,a,{...n,...t})),"AllPools","query"),Pool:(a,n)=>t((t=>e.request(Vo,a,{...n,...t})),"Pool","query"),PoolHistoricalLiquidities:(a,n)=>t((t=>e.request(qo,a,{...n,...t})),"PoolHistoricalLiquidities","query"),PoolSnapshots:(a,n)=>t((t=>e.request(Go,a,{...n,...t})),"PoolSnapshots","query"),JoinExits:(a,n)=>t((t=>e.request(Wo,a,{...n,...t})),"JoinExits","query"),Balancers:(a,n)=>t((t=>e.request(Ho,a,{...n,...t})),"Balancers","query"),TokenPrices:(a,n)=>t((t=>e.request(Ko,a,{...n,...t})),"TokenPrices","query"),TokenLatestPrices:(a,n)=>t((t=>e.request($o,a,{...n,...t})),"TokenLatestPrices","query"),TokenLatestPrice:(a,n)=>t((t=>e.request(Jo,a,{...n,...t})),"TokenLatestPrice","query"),User:(a,n)=>t((t=>e.request(jo,a,{...n,...t})),"User","query"),Users:(a,n)=>t((t=>e.request(Xo,a,{...n,...t})),"Users","query")}}var Zo,Qo,ei,ti,ai,ni,oi,ii,si,ri,pi,li,di,ui,ci,yi,bi,mi;!function(e){e.Arbitrum="Arbitrum",e.Avalanche="Avalanche",e.Base="Base",e.Gnosis="Gnosis",e.Optimism="Optimism",e.Polygon="Polygon",e.PolygonZkEvm="PolygonZkEvm"}(Zo||(Zo={})),function(e){e.gauges="gauges",e.id="id",e.numGauges="numGauges"}(Qo||(Qo={})),function(e){e.balance="balance",e.gauge="gauge",e.gauge__id="gauge__id",e.gauge__isKilled="gauge__isKilled",e.gauge__isPreferentialGauge="gauge__isPreferentialGauge",e.gauge__poolAddress="gauge__poolAddress",e.gauge__poolId="gauge__poolId",e.gauge__relativeWeightCap="gauge__relativeWeightCap",e.gauge__streamer="gauge__streamer",e.gauge__symbol="gauge__symbol",e.gauge__totalSupply="gauge__totalSupply",e.id="id",e.user="user",e.user__id="user__id"}(ei||(ei={})),function(e){e.id="id",e.name="name"}(ti||(ti={})),function(e){e.gauge="gauge",e.gauge__addedTimestamp="gauge__addedTimestamp",e.gauge__address="gauge__address",e.gauge__id="gauge__id",e.id="id",e.timestamp="timestamp",e.user="user",e.user__id="user__id",e.weight="weight"}(ai||(ai={})),function(e){e.addedTimestamp="addedTimestamp",e.address="address",e.id="id",e.liquidityGauge="liquidityGauge",e.liquidityGauge__id="liquidityGauge__id",e.liquidityGauge__isKilled="liquidityGauge__isKilled",e.liquidityGauge__isPreferentialGauge="liquidityGauge__isPreferentialGauge",e.liquidityGauge__poolAddress="liquidityGauge__poolAddress",e.liquidityGauge__poolId="liquidityGauge__poolId",e.liquidityGauge__relativeWeightCap="liquidityGauge__relativeWeightCap",e.liquidityGauge__streamer="liquidityGauge__streamer",e.liquidityGauge__symbol="liquidityGauge__symbol",e.liquidityGauge__totalSupply="liquidityGauge__totalSupply",e.rootGauge="rootGauge",e.rootGauge__chain="rootGauge__chain",e.rootGauge__id="rootGauge__id",e.rootGauge__isKilled="rootGauge__isKilled",e.rootGauge__recipient="rootGauge__recipient",e.rootGauge__relativeWeightCap="rootGauge__relativeWeightCap",e.type="type",e.type__id="type__id",e.type__name="type__name"}(ni||(ni={})),function(e){e.factory="factory",e.factory__id="factory__id",e.factory__numGauges="factory__numGauges",e.gauge="gauge",e.gauge__addedTimestamp="gauge__addedTimestamp",e.gauge__address="gauge__address",e.gauge__id="gauge__id",e.id="id",e.isKilled="isKilled",e.isPreferentialGauge="isPreferentialGauge",e.pool="pool",e.poolAddress="poolAddress",e.poolId="poolId",e.pool__address="pool__address",e.pool__id="pool__id",e.pool__poolId="pool__poolId",e.relativeWeightCap="relativeWeightCap",e.rewardTokensList="rewardTokensList",e.shares="shares",e.streamer="streamer",e.symbol="symbol",e.tokens="tokens",e.totalSupply="totalSupply"}(oi||(oi={})),function(e){e.bias="bias",e.id="id",e.slope="slope",e.timestamp="timestamp",e.user="user",e.user__id="user__id"}(ii||(ii={})),function(e){e.bias="bias",e.dstChainId="dstChainId",e.id="id",e.localUser="localUser",e.localUser__id="localUser__id",e.remoteUser="remoteUser",e.slope="slope",e.timestamp="timestamp",e.votingEscrowID="votingEscrowID",e.votingEscrowID__id="votingEscrowID__id",e.votingEscrowID__stakedSupply="votingEscrowID__stakedSupply"}(si||(si={})),function(e){e.asc="asc",e.desc="desc"}(ri||(ri={})),function(e){e.address="address",e.gauges="gauges",e.gaugesList="gaugesList",e.id="id",e.poolId="poolId",e.preferentialGauge="preferentialGauge",e.preferentialGauge__id="preferentialGauge__id",e.preferentialGauge__isKilled="preferentialGauge__isKilled",e.preferentialGauge__isPreferentialGauge="preferentialGauge__isPreferentialGauge",e.preferentialGauge__poolAddress="preferentialGauge__poolAddress",e.preferentialGauge__poolId="preferentialGauge__poolId",e.preferentialGauge__relativeWeightCap="preferentialGauge__relativeWeightCap",e.preferentialGauge__streamer="preferentialGauge__streamer",e.preferentialGauge__symbol="preferentialGauge__symbol",e.preferentialGauge__totalSupply="preferentialGauge__totalSupply"}(pi||(pi={})),function(e){e.decimals="decimals",e.gauge="gauge",e.gauge__id="gauge__id",e.gauge__isKilled="gauge__isKilled",e.gauge__isPreferentialGauge="gauge__isPreferentialGauge",e.gauge__poolAddress="gauge__poolAddress",e.gauge__poolId="gauge__poolId",e.gauge__relativeWeightCap="gauge__relativeWeightCap",e.gauge__streamer="gauge__streamer",e.gauge__symbol="gauge__symbol",e.gauge__totalSupply="gauge__totalSupply",e.id="id",e.periodFinish="periodFinish",e.rate="rate",e.symbol="symbol",e.totalDeposited="totalDeposited"}(li||(li={})),function(e){e.chain="chain",e.factory="factory",e.factory__id="factory__id",e.factory__numGauges="factory__numGauges",e.gauge="gauge",e.gauge__addedTimestamp="gauge__addedTimestamp",e.gauge__address="gauge__address",e.gauge__id="gauge__id",e.id="id",e.isKilled="isKilled",e.recipient="recipient",e.relativeWeightCap="relativeWeightCap"}(di||(di={})),function(e){e.factory="factory",e.factory__id="factory__id",e.factory__numGauges="factory__numGauges",e.gauge="gauge",e.gauge__addedTimestamp="gauge__addedTimestamp",e.gauge__address="gauge__address",e.gauge__id="gauge__id",e.id="id",e.isKilled="isKilled",e.recipient="recipient",e.relativeWeightCap="relativeWeightCap"}(ui||(ui={})),function(e){e.gaugeShares="gaugeShares",e.gaugeVotes="gaugeVotes",e.id="id",e.omniVotingLocks="omniVotingLocks",e.votingLocks="votingLocks"}(ci||(ci={})),function(e){e.bias="bias",e.id="id",e.lockedBalance="lockedBalance",e.slope="slope",e.timestamp="timestamp",e.unlockTime="unlockTime",e.updatedAt="updatedAt",e.user="user",e.user__id="user__id",e.votingEscrowID="votingEscrowID",e.votingEscrowID__id="votingEscrowID__id",e.votingEscrowID__stakedSupply="votingEscrowID__stakedSupply"}(yi||(yi={})),function(e){e.id="id",e.locks="locks",e.omniLocks="omniLocks",e.stakedSupply="stakedSupply"}(bi||(bi={})),function(e){e.allow="allow",e.deny="deny"}(mi||(mi={}));const fi=So` + fragment SubgraphGaugeShare on GaugeShare { + id + balance + user { + id + } + gauge { + id + isKilled + poolId + poolAddress + totalSupply + } +} + `,Ti=So` + fragment SubgraphLiquidityGauge on LiquidityGauge { + id + symbol + poolAddress + poolId + streamer + factory { + id + numGauges + } + totalSupply + tokens { + id + symbol + decimals + totalDeposited + rate + periodFinish + } +} + `,hi=So` + fragment SubgraphPoolWithPreferentialGauge on Pool { + id + poolId + preferentialGauge { + ...SubgraphLiquidityGauge + } +} + ${Ti}`,Ii=So` + query GaugeShare($id: ID!, $block: Block_height) { + gaugeShare(id: $id, block: $block) { + ...SubgraphGaugeShare + } +} + ${fi}`,gi=So` + query GaugeShares($first: Int, $orderBy: GaugeShare_orderBy, $orderDirection: OrderDirection, $skip: Int, $where: GaugeShare_filter, $block: Block_height) { + gaugeShares( + first: $first + orderBy: $orderBy + orderDirection: $orderDirection + skip: $skip + where: $where + block: $block + ) { + ...SubgraphGaugeShare + } +} + ${fi}`,_i=So` + query LiquidityGauges($skip: Int, $first: Int, $orderBy: LiquidityGauge_orderBy, $orderDirection: OrderDirection, $where: LiquidityGauge_filter, $block: Block_height) { + liquidityGauges( + skip: $skip + first: $first + orderBy: $orderBy + orderDirection: $orderDirection + where: $where + block: $block + ) { + ...SubgraphLiquidityGauge + } +} + ${Ti}`,xi=So` + query Pools($skip: Int, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $where: Pool_filter, $block: Block_height) { + pools( + skip: $skip + first: $first + orderBy: $orderBy + orderDirection: $orderDirection + where: $where + block: $block + ) { + ...SubgraphPoolWithPreferentialGauge + } +} + ${hi}`,Pi=So` + query PoolGauges($where: Pool_filter, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $skip: Int, $block: Block_height) { + pools( + where: $where + first: $first + orderBy: $orderBy + orderDirection: $orderDirection + skip: $skip + block: $block + ) { + gauges { + id + relativeWeightCap + } + preferentialGauge { + id + } + } +} + `,wi=(e,t,a)=>e();function Ei(e){return zo(new d.GraphQLClient(e))}function Ai(e){return function(e,t=wi){return{GaugeShare:(a,n)=>t((t=>e.request(Ii,a,{...n,...t})),"GaugeShare","query"),GaugeShares:(a,n)=>t((t=>e.request(gi,a,{...n,...t})),"GaugeShares","query"),LiquidityGauges:(a,n)=>t((t=>e.request(_i,a,{...n,...t})),"LiquidityGauges","query"),Pools:(a,n)=>t((t=>e.request(xi,a,{...n,...t})),"Pools","query"),PoolGauges:(a,n)=>t((t=>e.request(Pi,a,{...n,...t})),"PoolGauges","query")}}(new d.GraphQLClient(e))}class Si{constructor(t,a,n={}){this.options=n,this.calls=[],this.paths=[],this.address="0xcA11bde05977b3631167028862bE2a173976CA11",this.interface=new e.Interface(t),this.multicall=na.connect(this.address,a)}call(e,t,a,n){return this.calls.push([t,a,n]),this.paths.push(e),this}async execute(e={},t=1024){const a=e;return(await this.executeMulticall(t)).forEach(((e,t)=>s.set(a,this.paths[t],e.length>1?e:e[0]))),this.calls=[],this.paths=[],a}async executeMulticall(e){const t=Math.ceil(this.calls.length/e),a=[],n=[];for(let a=0;a({target:e,allowFailure:!0,callData:this.interface.encodeFunctionData(t,a)})));n.push(this.multicall.callStatic.aggregate3(t,this.options))}return(await Promise.all(n)).forEach(((t,n)=>{const o=n*e;for(let e=0;e{a.call(`${e}.weights`,t,"getNormalizedWeights")},Bi=(e,t,a)=>{a.call(`${e}.targets`,t,"getTargets"),a.call(`${e}.wrappedTokenRate`,t,"getWrappedTokenRate")},Ci=(e,t,a)=>{a.call(`${e}.amp`,t,"getAmplificationParameter")},Oi=(e,t,a)=>{a.call(`${e}.tokenRates`,t,"getTokenRates")},Mi=async(e,t,a,n=1024)=>{if(0===e.length)return{};const o=new Si(vi,a);e.forEach((({id:e,address:a,poolType:n,poolTypeVersion:i})=>{((e,t,a,n,o)=>{o.call(`${e}.poolTokens`,a,"getPoolTokens",[e]),o.call(`${e}.totalShares`,t,(e=>e.includes("Linear")||["StablePhantom"].includes(e)?"getVirtualSupply":"ComposableStable"===e?"getActualSupply":"totalSupply")(n)),o.call(`${e}.swapFee`,t,(e=>"Element"===e?"percentFee":"FX"===e?"protocolPercentFee":"getSwapFeePercentage")(n))})(e,a,t,n,o),((e,t=1)=>{const a=()=>({});switch(e){case"Weighted":case"LiquidityBootstrapping":case"Investment":return ki;case"Stable":case"StablePhantom":case"MetaStable":case"ComposableStable":return Ci;case"GyroE":case"Gyro2":return 2===t?Oi:a;case"AaveLinear":return 1===t?Bi:a;default:return a}})(n,i)(e,a,o)}));return await o.execute({},n)};async function Fi(e,t,n,o,i=1024){if(0===e.length)return e;const s=[],r=await Mi(e,n,o,i);return e.forEach((e=>{const t=r[e.id];s.push(((e,t)=>({...e,tokens:t.poolTokens?e.tokens.map((n=>{const o=t.poolTokens[0].map((e=>e.toLowerCase())).indexOf(n.address),i=e.wrappedIndex&&e.tokensList[e.wrappedIndex],s=void 0===n.decimals?18:n.decimals;return{...n,balance:a.formatFixed(t.poolTokens[1][o],s),weight:t.weights&&a.formatFixed(t.weights[o],18)||n.weight,priceRate:t.wrappedTokenRate&&i&&i.toLowerCase()===n.address.toLowerCase()&&a.formatFixed(t.wrappedTokenRate,18)||n.priceRate}})):e.tokens,totalShares:t.totalShares?a.formatFixed(t.totalShares,18):e.totalShares,swapFee:t.swapFee?a.formatFixed(t.swapFee,18):e.swapFee,amp:t.amp&&t.amp[0]&&a.formatFixed(t.amp[0],String(t.amp[2]).length-1)||e.amp,lowerTarget:t.targets&&a.formatFixed(t.targets[0],18)||e.lowerTarget,upperTarget:t.targets&&a.formatFixed(t.targets[1],18)||e.upperTarget,tokenRates:t.tokenRates&&t.tokenRates.map((e=>a.formatFixed(e,18)))||e.tokenRates}))(e,t))})),s}class Ri{constructor(e,t,a,n,o){this.client=e,this.provider=t,this.network=a,this.sorConfig=n,this.defaultArgs=(null==o?void 0:o.args)||{orderBy:bo.TotalLiquidity,orderDirection:ro.Desc,where:{swapEnabled:{eq:!0},totalShares:{gt:1e-12}}}}async getPools(e){const t=function(e){return e.map((e=>({...e,poolType:e.poolType||"",tokens:(e.tokens||[]).map((e=>({...e,weight:e.weight||null}))),totalWeight:e.totalWeight||void 0,amp:e.amp||void 0,expiryTime:e.expiryTime?s.parseInt(e.expiryTime):void 0,unitSeconds:e.unitSeconds?s.parseInt(e.unitSeconds):void 0,principalToken:e.principalToken||void 0,baseToken:e.baseToken||void 0})))}((await this.getSubgraphPools(e)).filter((e=>{if(!this.network.poolsToIgnore)return!0;return-1===this.network.poolsToIgnore.findIndex((t=>t.toLowerCase()===e.id.toLowerCase()))})));if(this.sorConfig&&!1===this.sorConfig.fetchOnChainBalances)return t;const a=j.getInstance();a.time(`fetching on-chain balances for ${t.length} pools`);const n=await Fi(t,this.network.addresses.contracts.multicall,this.network.addresses.contracts.vault,this.provider,this.network.multicallBatchSize);return a.timeEnd(`fetching on-chain balances for ${t.length} pools`),n}async getSubgraphPools(e){const t=new nt(e||this.defaultArgs).format(new at);if(t.first){const{pools:e}=await this.client.Pools(t);return e}const{pool0:a,pool1000:n,pool2000:o}=await this.client.AllPools(t);return[...a,...n,...o]}}class Ni{constructor(e,t){this.client=e,this.weth=t.toLowerCase()}async getNativeAssetPriceInToken(e){const t=await this.getLatestPriceInEthFromSubgraph(e);if(!t)throw Error("No price found in the subgraph");return""+1/t}async getLatestPriceInEthFromSubgraph(e){e=e.toLowerCase();const{latestPrices:t}=await this.client.TokenLatestPrices({where:{asset_in:[e,this.weth]}}),a=s.keyBy(t,"id");if(a[`${e}-${this.weth}`])return parseFloat(a[`${e}-${this.weth}`].price);const n=t.filter((t=>t.asset===e));for(const e of n){const t=a[`${e.pricingAsset}-${this.weth}`];if(t)return parseFloat(e.price)*parseFloat(t.price)}return null}}function Li(e){var t,a;if("number"==typeof e.network){const a=ka[e.network];return{...a,urls:{...a.urls,subgraph:null!==(t=e.customSubgraphUrl)&&void 0!==t?t:a.urls.subgraph},tenderly:e.tenderly}}return{...e.network,urls:{...e.network.urls,subgraph:null!==(a=e.customSubgraphUrl)&&void 0!==a?a:e.network.urls.subgraph},tenderly:e.network.tenderly}}const Di=["0x00c2a4be503869fa751c2dbcb7156cc970b5a8da000000000000000000000477","0x02d928e68d8f10c0358566152677db51e1e2dc8c00000000000000000000051e","0x04248aabca09e9a1a3d5129a7ba05b7f17de768400000000000000000000050e","0x05513ca725b6ce035ca2641075474eb469f05f4c00020000000000000000041f","0x0a0fb4ff697de5ac5b6770cd8ee1b72af80b57cf000000000000000000000496","0x0afbd58beca09545e4fb67772faf3858e610bcd00000000000000000000004b9","0x0d05aac44ac7dd3c7ba5d50be93eb884a057d23400000000000000000000051c","0x11839d635e2f0270da37e8ef4324d4d5d54329570002000000000000000004d8","0x126e7643235ec0ab9c103c507642dc3f4ca23c66000000000000000000000468","0x133d241f225750d2c92948e464a5a80111920331000000000000000000000476","0x159cb00338fb63f263fd6f621df619cef71da9540000000000000000000004d5","0x173063a30e095313eee39411f07e95a8a806014e0002000000000000000003ab","0x1bd2f176a812e312077bca87e37c08432bb09f3e0000000000000000000005a1","0x20b156776114e8a801e9767d90c6ccccc8adf398000000000000000000000499","0x246ffb4d928e394a02e45761fecdba6c2e79b8eb000000000000000000000541","0x25accb7943fd73dda5e23ba6329085a3c24bfb6a000200000000000000000387","0x26c2b83fc8535deead276f5cc3ad9c1a2192e02700020000000000000000056b","0x2b218683178d029bab6c9789b1073aa6c96e517600000000000000000000058c","0x2ba7aa2213fa2c909cd9e46fed5a0059542b36b00000000000000000000003a3","0x2bbf681cc4eb09218bee85ea2a5d3d13fa40fc0c0000000000000000000000fd","0x2e52c64fd319e380cdbcfc4577ea1fda558a32e40002000000000000000005ba","0x2f4eb100552ef93840d5adc30560e5513dfffacb000000000000000000000334","0x2ff1a9dbdacd55297452cfd8a4d94724bc22a5f7000000000000000000000484","0x3035917be42af437cbdd774be26b9ec90a2bd677000200000000000000000543","0x331d50e0b00fc1c32742f151e56b9b616227e23e00000000000000000000047c","0x334c96d792e4b26b841d28f53235281cec1be1f200020000000000000000038a","0x335d1709d4da9aca59d16328db5cd4ea66bfe06b0000000000000000000004d6","0x395d8a1d9ad82b5abe558f8abbfe183b27138af40000000000000000000004e5","0x3bb22fc9033b802f2ac47c18885f63476f158afc000000000000000000000483","0x3c640f0d3036ad85afa2d5a9e32be651657b874f00000000000000000000046b","0x3cdae4f12a67ba563499e102f309c73213cb241c000000000000000000000335","0x3dbb8d974b82e82ce79c20c0f5995f4f1f533ede000000000000000000000470","0x3f7a7fd7f214be45ec26820fd01ac3be4fc75aa70002000000000000000004c5","0x3fcb7085b8f2f473f80bf6d879cae99ea4de934400000000000000000000056d","0x41503c9d499ddbd1dcdf818a1b05e9774203bf46000000000000000000000594","0x4228290ee9cab692938ff0b4ba303fbcdb68e9f200020000000000000000057d","0x454ed96955d04d2f5cdd05e0fd1c77975bfe5307000000000000000000000410","0x481c5fc05d63a58aa2f0f2aa417c021b5d419cb200000000000000000000056a","0x483006684f422a9448023b2382615c57c5ecf18f000000000000000000000488","0x4a82b580365cff9b146281ab72500957a849abdc000000000000000000000494","0x4c81255cc9ed7062180ea99962fe05ac0d57350b0000000000000000000005a3","0x4c8d2e60863e8d7e1033eda2b3d84e92a641802000000000000000000000040f","0x4cbde5c4b4b53ebe4af4adb85404725985406163000000000000000000000595","0x4ce0bd7debf13434d3ae127430e9bd4291bfb61f00020000000000000000038b","0x4ce277df0feb5b4d07a0ca2adcf5326e4005239d000000000000000000000518","0x4fd4687ec38220f805b6363c3c1e52d0df3b5023000200000000000000000473","0x4fd63966879300cafafbb35d157dc5229278ed230000000000000000000000e9","0x50cf90b954958480b8df7958a9e965752f62712400000000000000000000046f","0x53bc3cba3832ebecbfa002c12023f8ab1aa3a3a0000000000000000000000411","0x5a6a8cffb4347ff7fc484bf5f0f8a2e234d34255000200000000000000000275","0x5b3240b6be3e7487d61cd1afdfc7fe4fa1d81e6400000000000000000000037b","0x60683b05e9a39e3509d8fdb9c959f23170f8a0fa000000000000000000000489","0x60d604890feaa0b5460b28a424407c24fe89374a0000000000000000000004fc","0x639883476960a23b38579acfd7d71561a0f408cf000200000000000000000505","0x652d486b80c461c397b0d95612a404da936f3db30000000000000000000000e7","0x6667c6fa9f2b3fc1cc8d85320b62703d938e43850000000000000000000004fb","0x6a1eb2e9b45e772f55bd9a34659a04b6f75da68700000000000000000000040d","0x6c56e72c551b5ac4bf54a620a76077ca768c8fe40002000000000000000004da","0x70b7d3b3209a59fb0400e17f67f3ee8c37363f4900020000000000000000018f","0x7337224d59cb16c2dc6938cd45a7b2c60c865d6a0000000000000000000004d4","0x74cbfaf94a3577c539a9dcee9870a6349a33b34f000000000000000000000534","0x779d01f939d78a918a3de18cc236ee89221dfd4e0000000000000000000004c7","0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe","0x804cdb9116a10bb78768d3252355a1b18067bf8f0000000000000000000000fb","0x813e3fe1761f714c502d1d2d3a7cceb33f37f59d00000000000000000000040c","0x82698aecc9e28e9bb27608bd52cf57f704bd1b83000000000000000000000336","0x8a6b25e33b12d1bb6929a8793961076bd1f9d3eb0002000000000000000003e8","0x8e6ec57a822c2f527f2df7c7d7d361df3e7530a1000000000000000000000498","0x8f4063446f5011bc1c9f79a819efe87776f23704000000000000000000000197","0x9001cbbd96f54a658ff4e6e65ab564ded76a543100000000000000000000050a","0x9210f1204b5a24742eba12f710636d76240df3d00000000000000000000000fc","0x9516a2d25958edb8da246a320f2c7d94a0dbe25d000000000000000000000519","0x959216bb492b2efa72b15b7aacea5b5c984c3cca000200000000000000000472","0x968024662b9566b42d78af23a0f441bc8723fa83000200000000000000000418","0x99c88ad7dc566616548adde8ed3effa730eb6c3400000000000000000000049a","0x9b1c8407a360443a9e5eca004713e4088fab8ac0000000000000000000000497","0x9b692f571b256140a39a34676bffa30634c586e100000000000000000000059d","0x9d7f992c900fbea0ec314bdd71b7cc1becf76a33000200000000000000000573","0x9fb771d530b0ceba5160f7bfe2dd1e8b8aa1340300000000000000000000040e","0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d","0xa1697f9af0875b63ddc472d6eebada8c1fab85680000000000000000000004f9","0xa3823e50f20982656557a4a6a9c06ba5467ae9080000000000000000000000e6","0xa718042e5622099e5f0ace4e7122058ab39e1bbe000200000000000000000475","0xa8b103a10a94f4f2d7ed2fdcd5545e807557330700000000000000000000048e","0xac5b4ef7ede2f2843a704e96dcaa637f4ba3dc3f00000000000000000000051d","0xac976bb42cb0c85635644e8c7c74d0e0286aa61c0000000000000000000003cb","0xae37d54ae477268b9997d4161b96b8200755935c000000000000000000000337","0xae8535c23afedda9304b03c68a3563b75fc8f92b0000000000000000000005a0","0xb0f75e97a114a4eb4a425edc48990e6760726709000000000000000000000198","0xb5e3de837f869b0248825e0175da73d4e8c3db6b000200000000000000000474","0xb841b062ea8ccf5c4cb78032e91de4ae875560420002000000000000000005b7","0xb9bd68a77ccf8314c0dfe51bc291c77590c4e9e6000200000000000000000385","0xbb6881874825e60e1160416d6c426eae65f2459e000000000000000000000592","0xbc0f2372008005471874e426e86ccfae7b4de79d000000000000000000000485","0xbf2ef8bdc2fc0f3203b3a01778e3ec5009aeef3300000000000000000000058d","0xbfa413a2ff0f20456d57b643746133f54bfe0cd20000000000000000000004c3","0xc2b021133d1b0cf07dba696fd5dd89338428225b000000000000000000000598","0xc443c15033fcb6cf72cc24f1bda0db070ddd9786000000000000000000000593","0xc50d4347209f285247bda8a09fc1c12ce42031c3000000000000000000000590","0xc5dc1316ab670a2eed5716d7f19ced321191f38200000000000000000000056e","0xc8c79fcd0e859e7ec81118e91ce8e4379a481ee6000000000000000000000196","0xcaa052584b462198a5a9356c28bce0634d65f65c0000000000000000000004db","0xcbfa4532d8b2ade2c261d3dd5ef2a2284f7926920000000000000000000004fa","0xcfae6e251369467f465f13836ac8135bd42f8a56000000000000000000000591","0xd4e7c1f3da1144c9e2cfd1b015eda7652b4a439900000000000000000000046a","0xd6e355036f41dc261b3f1ed3bbc6003e87aadb4f000000000000000000000495","0xd7edb56f63b2a0191742aea32df1f98ca81ed9c600000000000000000000058e","0xd997f35c9b1281b82c8928039d14cddab5e13c2000000000000000000000019c","0xdba274b4d04097b90a72b62467d828cefd708037000000000000000000000486","0xdc063deafce952160ec112fa382ac206305657e60000000000000000000004c4","0xdec02e6642e2c999af429f5ce944653cad15e093000000000000000000000469","0xe03af00fabe8401560c1ff7d242d622a5b601573000000000000000000000493","0xe0fcbf4d98f0ad982db260f86cf28b49845403c5000000000000000000000504","0xe2d16b0a39f3fbb4389a0e8f1efcbecfb3d1e6e10000000000000000000005a7","0xe4dc3c1998ac693d68f4c77476d7c815694c3e94000200000000000000000416","0xe6bcc79f328eec93d4ec8f7ed35534d9ab549faa0000000000000000000000e8","0xe8c56405bc405840154d9b572927f4197d110de10000000000000000000005a4","0xeb486af868aeb3b6e53066abc9623b1041b42bc000000000000000000000046c","0xeb567dde03f3da7fe185bdacd5ab495ab220769d000000000000000000000548","0xec3626fee40ef95e7c0cbb1d495c8b67b34d398300000000000000000000053d","0xf22ff21e17157340575158ad7394e068048dd98b0000000000000000000004b8","0xf57c794f42da72b38c8f610ff3b5e8502e48cbde00000000000000000000055c","0xf71d0774b214c4cf51e33eb3d30ef98132e4dbaa00000000000000000000046e","0xfa24a90a3f2bbe5feea92b95cd0d14ce709649f900000000000000000000058f","0xfd11ccdbdb7ab91cb9427a6d6bf570c95876d1950000000000000000000004c2","0xfebb0bbf162e64fb9d0dfe186e517d84c395f016000000000000000000000502","0xfef969638c52899f91781f1be594af6f40b99bad00000000000000000000047b","0x02e139d53ebf4033bf78ab66c6a1e7f1f204487f0002000000000000000009f9","0x03090a9811181a2afe830a3a0b467698ccf3a8b1000000000000000000000bf5","0x0320c1c5b6df19a194d48882aaec1c72940081d9000000000000000000000a7d","0x04b54ea92d73de2d62d651db7d9778f0c49157d8000200000000000000000ba2","0x0503dd6b2d3dd463c9bef67fb5156870af63393e00000000000000000000042e","0x0889b240a5876aae745ac19f1771853671dc5d36000000000000000000000b3f","0x0bc54e914f53f98d16035f4f0d948f3e09c2fac0000200000000000000000bac","0x0c06e87c7b88d998f645b91c1f53b51294b12bca000100000000000000000bb9","0x10b040038f87219d9b42e025e3bd9b8095c87dd9000000000000000000000b11","0x117a3d474976274b37b7b94af5dcade5c90c6e85000000000000000000000aca","0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000a5f","0x1379b816b9be611431d693290289c204720ca56d000100000000000000000b6f","0x150e7b885bdfce974f2abe88a72fdbd692175c6f0002000000000000000009fd","0x178e029173417b1f9c8bc16dcec6f697bc323746000000000000000000000758","0x1aafc31091d93c3ff003cff5d2d8f7ba2e7284250000000000000000000003b3","0x216690738aac4aa0c4770253ca26a28f0115c595000000000000000000000b2c","0x216d6db0c28204014618482c369d7fbf0a8f3232000100000000000000000b60","0x230ecdb2a7cee56d6889965a023aa0473d6da507000000000000000000000bf3","0x252ff6a3a6fd7b5e8e999de8e3f5c3b306ed1401000200000000000000000bec","0x25e57f4612912614e6c99616bd2abb9b5ae71e99000000000000000000000bf0","0x2645b13fd2c5295296e94a76280b968bdcbbdfed000000000000000000000c11","0x284eb68520c8fa83361c1a3a5910aec7f873c18b000000000000000000000ac9","0x2c8dbe8eb86135d9f2f26d196748c088d47f73e7000200000000000000000a29","0x31bccf9e28b94e5dacebaa67fe8bc1603cecd904000000000000000000000a01","0x341068a547c3cde3c09e338714010dd01b32f93f000200000000000000000a34","0x3db543faf7a92052de7860c5c9debabee59ed5bd000000000000000000000a62","0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd00000000000000000000070d","0x3efb91c4f9b103ee45885695c67794591916f34e000200000000000000000b43","0x402cfdb7781fa85d52f425352661128250b79e12000000000000000000000be3","0x43894de14462b421372bcfe445fa51b1b4a0ff3d000000000000000000000b36","0x4739e50b59b552d490d3fdc60d200977a38510c0000000000000000000000b10","0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b","0x4a0b73f0d13ff6d43e304a174697e3d5cfd310a400020000000000000000091c","0x4a77ef015ddcd972fd9ba2c7d5d658689d090f1a000000000000000000000b38","0x4ae3661afa119892f0cc8c43edaf6a94989ac171000000000000000000000c06","0x4ccb966d8246240afb7a1a24628efb930870b1c40002000000000000000009fc","0x52cc8389c6b93d740325729cc7c958066cee4262000000000000000000000b0f","0x5b77107fcdf2b41903bab2bc555d4fc14cf7667d000000000000000000000b32","0x5bae72b75caab1f260d21bc028c630140607d6e8000000000000000000000ac6","0x600bd01b6526611079e12e1ff93aba7a3e34226f0000000000000000000009e4","0x63ce19ccd39930725b8a3d2733627804718ab83d000000000000000000000bf2","0x64efad69f099813021b41f4cac6e749fd55e188f000000000000000000000b39","0x6933ec1ca55c06a894107860c92acdfd2dd8512f000000000000000000000428","0x6abe4e7a497b8293c258389c1b00d177e4f257ed00010000000000000000080d","0x6c8c7fc50247a47038015eb1fd5dc105d05dafba000200000000000000000ba0","0x7079a25dec33be61bbd81b2fb69b468e80d3e72c0000000000000000000009ff","0x71bd10c2a590b5858f5576550c163976a48af906000000000000000000000b27","0x7c82a23b4c48d796dee36a9ca215b641c6a8709d000000000000000000000acd","0x7f4f4942f2a14b6ab7b08b10ada1aacede4ee8d4000200000000000000000b44","0x86aef31951e0a3a54333bd9e72f9a95587d058c5000200000000000000000912","0x882c7a84231484b3e9f3fd45ac04b1eb5d35b076000200000000000000000a91","0x894c82800526e0391e709c0983a5aea3718b7f6d000000000000000000000ac5","0x89b28a9494589b09dbccb69911c189f74fdadc5a000000000000000000000b33","0x89bb15076c9f2d86aa98ec6cffc1a71e31c38953000000000000000000000bf1","0x89f1146fee52b5d9166e9c83cc388b6d8f69f1380001000000000000000009e7","0x8a819a4cabd6efcb4e5504fe8679a1abd831dd8f00000000000000000000042d","0x8b58a1e7fff52001c22386c2918d45938a6a9be30001000000000000000008d9","0x8b8225bfedebaf1708c55743acb4ad43fd4d0f21000200000000000000000918","0x8fbd0f8e490735cfc3abf4f29cbddd5c3289b9a7000000000000000000000b5b","0x8fd39252d683fdb60bddd4df4b53c9380b496d59000200000000000000000b45","0x9321e2250767d79bab5aa06daa8606a2b3b7b4c5000000000000000000000bf4","0x949a12b95ec5b80c375b98963a5d6b33b0d0efff0002000000000000000009fe","0x9a020bdc2faff5bd24c6acc2020d01ff9f2c627a000000000000000000000ae2","0x9cf9358300e34bf9373d30129a1e718d8d058b54000200000000000000000913","0x9e34631547adcf2f8cefa0f5f223955c7b137571000000000000000000000ad5","0xa5a935833f6a5312715f182733eab088452335d7000100000000000000000bee","0xa5fe91dde37d8bf2dacacc0168b115d28ed03f84000000000000000000000b35","0xa8bf1c584519be0184311c48adbdc4c15cb2e8c1000000000000000000000bf6","0xab269164a10fab22bc87c39946da06c870b172d6000000000000000000000bfc","0xac2cae8d2f78a4a8f92f20dbe74042cd0a8d5af3000000000000000000000be2","0xae646817e458c0be890b81e8d880206710e3c44e000000000000000000000acb","0xaef2c171dbe64b0c18977e16e70bfd29d4ee0256000000000000000000000ac8","0xb0c830dceb4ef55a60192472c20c8bf19df03488000000000000000000000be1","0xb266ac3b7c98d7bcb28731dac0ef42dba1b276be000000000000000000000be4","0xb371aa09f5a110ab69b39a84b5469d29f9b22b76000000000000000000000b37","0xb3d658d5b95bf04e2932370dd1ff976fe18dd66a000000000000000000000ace","0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e","0xb59be8f3c85a9dd6e2899103b6fbf6ea405b99a4000000000000000000000b34","0xb878ecce26838fbba4f78cb5b791a0e09152c067000000000000000000000427","0xb973ca96a3f0d61045f53255e319aedb6ed4924000000000000000000000042f","0xbd4e35784c832d0f9049b54cb3609e5907c5b495000100000000000000000b14","0xc55ec796a4debe625d95436a3531f4950b11bdcf000000000000000000000b3e","0xc7e6389e364f4275eb442ef215ed21877028e2af000000000000000000000ac7","0xc83b55bbd005f1f84906545fcdb145dee53523e0000200000000000000000b30","0xcb21a9e647c95127ed784626485b3104cb28d0e7000000000000000000000425","0xd00f9ca46ce0e4a63067c4657986f0167b0de1e5000000000000000000000b42","0xd2f3b9e67c69762dd1c88f1d3dadd1649a190761000200000000000000000bf7","0xd4accb350f9cf59fe3cf7a5ee6ed9ace6a568ea9000200000000000000000b75","0xda1cd1711743e57dd57102e9e61b75f3587703da000000000000000000000acc","0xdae301690004946424e41051ace1791083be42a1000000000000000000000b40","0xde0a77ab6689b980c30306b10f9131a007e1af81000200000000000000000ba1","0xe051605a83deae38d26a7346b100ef1ac2ef8a0b0000000000000000000003ce","0xe1fb90d0d3b47e551d494d7ebe8f209753526b01000000000000000000000ac4","0xe2272cddb2cc408e79e02a73d1db9acc24a843d5000200000000000000000ba7","0xe2dc0e0f2c358d6e31836dee69a558ab8d1390e70000000000000000000009fa","0xe4885ed2818cc9e840a25f94f9b2a28169d1aea7000000000000000000000b29","0xe6909c2f18a29d97217a6146f045e1780606991f000100000000000000000bfe","0xe78b25c06db117fdf8f98583cdaaa6c92b79e917000000000000000000000b2b","0xea11645ac7d8f2def94c9d8d86bd766296c9b6b6000000000000000000000b3a","0xeb480dbbdd921cd6c359e4cc4c65ddea6395e2a1000200000000000000000946","0xed35f28f837e96f81240ebb82e0e3f518c7e8a2f000100000000000000000bb5","0xf0211cceebe6fcc45052b4e57ee95d233f5669d2000100000000000000000c01","0xf22a66046b5307842f21b311ecb4c462c24c0635000000000000000000000b15","0xf28f17be00f8ca3c9b7f66a4aad5513757fb3341000200000000000000000b5a","0xf42ed61450458ee4620f5ef4f29adb25a6ef0fb6000000000000000000000bf8","0xf48f01dcb2cbb3ee1f6aab0e742c2d3941039d56000000000000000000000445","0xf93579002dbe8046c43fefe86ec78b1112247bb8000000000000000000000759","0xf984eb2b8a7ef780245a797a2fccd82f346409ca000000000000000000000a59","0xfa2c0bd8327c99db5bde4c9e9e5cbf30946351bb000000000000000000000948","0xff4ce5aaab5a627bf82f4a571ab1ce94aa365ea600000000000000000000075a","0x1ac55c31dac78ca943cb8ebfca5945ce09e036e2000000000000000000000024","0x225e0047671939a8d78e08ebd692788abe63f15c000000000000000000000009","0x41211bba6d37f5a74b22e667533f080c7c7f3f1300000000000000000000000b","0x4de21b365d6543661d0e105e579a34b963862497000200000000000000000045","0x581ec1f5e7ced12b186deae32256adb53bdd5b08000000000000000000000001","0x66f33ae36dd80327744207a48122f874634b3ada000100000000000000000013","0xa3ed6f78edc29f69df8a0d16b1d1ccf9871f918c000000000000000000000032","0xa611a551b95b205ccd9490657acf7899daee5db700000000000000000000002e","0xb95829adbacd8af89e291dee78bc09e24de51d6b000000000000000000000043","0xb973ca96a3f0d61045f53255e319aedb6ed49240000200000000000000000011","0xba1a5b19d09a79dada039b1f974015c5a989d5fd000100000000000000000046","0xbb9cd48d33033f5effbedec9dd700c7d7e1dcf5000000000000000000000000e","0xd16f72b02da5f51231fde542a8b9e2777a478c8800000000000000000000000f","0xd4015683b8153666190e0b2bec352580ebc4caca00000000000000000000000d","0xe15cac1df3621e001f76210ab12a7f1a1691481f000000000000000000000044","0xe7f88d7d4ef2eb18fcf9dd7216ba7da1c46f3dd600000000000000000000000a","0xf48f01dcb2cbb3ee1f6aab0e742c2d3941039d56000200000000000000000012","0xfedb19ec000d38d92af4b21436870f115db22725000000000000000000000010","0xffff76a3280e95dc855696111c2562da09db2ac000000000000000000000000c","0x00fcd3d55085e998e291a0005cedecf58ac14c4000020000000000000000047f","0x077794c30afeccdf5ad2abc0588e8cee7197b71a000000000000000000000352","0x117a3d474976274b37b7b94af5dcade5c90c6e85000000000000000000000381","0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000353","0x19b1c92631405a0a9495ccba0becf4f2e8e908bd000000000000000000000410","0x1e550b7764da9638fdd32c8a701364de31f45ee800000000000000000000047c","0x1fa7f727934226aedab636d62a084931b97d366b000000000000000000000411","0x23ca0306b21ea71552b148cf3c4db4fc85ae19290000000000000000000000c9","0x284eb68520c8fa83361c1a3a5910aec7f873c18b000000000000000000000380","0x2a96254ca32020b20ed3506f8f75318da24709f9000200000000000000000456","0x36942963e3b6f37ecc45a4e72349558514233f0000000000000000000000048a","0x3f53a862919ccfa023cb6ace91378a79fb0f6bf500000000000000000000040f","0x40af308e3d07ec769d85eb80afb116525ff4ac99000000000000000000000485","0x418de00ae109e6f874d872658767866d680eaa1900000000000000000000047d","0x45c4d1376943ab28802b995acffc04903eb5223f000000000000000000000470","0x4689122d360c4725d244c5cfea22861333d862e6000100000000000000000468","0x4739e50b59b552d490d3fdc60d200977a38510c0000000000000000000000409","0x49a0e3334496442a9706e481617724e7e37eaa080000000000000000000003ff","0x519cce718fcd11ac09194cff4517f12d263be067000000000000000000000382","0x52cc8389c6b93d740325729cc7c958066cee4262000000000000000000000408","0x567ecfcb22205d279bb8eed3e066989902bf03d5000000000000000000000452","0x585d95df0231fa08aeee35ff0c16b92fd0ecdc3300020000000000000000045f","0x5a7f39435fd9c381e4932fa2047c9a5136a5e3e7000000000000000000000400","0x5bae72b75caab1f260d21bc028c630140607d6e8000000000000000000000350","0x6cb787a419c3e6ee2e9ff365856c29cd10659113000000000000000000000474","0x7c82a23b4c48d796dee36a9ca215b641c6a8709d000000000000000000000406","0x81fc12c60ee5b753cf5fd0adc342dfb5f3817e3200000000000000000000035d","0x894c82800526e0391e709c0983a5aea3718b7f6d00000000000000000000034f","0x970712708a08e8fb152be4d81b2dc586923f5369000200000000000000000479","0x9bf7c3b63c77b4b4f2717776f15a4bec1b532a280000000000000000000000c8","0x9cebf13bb702f253abf1579294694a1edad00eaa000000000000000000000486","0x9e34631547adcf2f8cefa0f5f223955c7b137571000000000000000000000407","0x9fb7d6dcac7b6aa20108bad226c35b85a9e31b63000200000000000000000412","0xa1ea76c42b2938cfa9abea12357881006c52851300000000000000000000048f","0xa50f89e9f439fde2a6fe05883721a00475da3c4500000000000000000000048b","0xa612b6aed2e7ca1a3a4f23fbca9128461bbb7718000000000000000000000274","0xa8af146d79ac0bb981e4e0d8b788ec5711b1d5d000000000000000000000047b","0xad28940024117b442a9efb6d0f25c8b59e1c950b00000000000000000000046f","0xae646817e458c0be890b81e8d880206710e3c44e00000000000000000000039d","0xaef2c171dbe64b0c18977e16e70bfd29d4ee0256000000000000000000000351","0xbbf9d705b75f408cfcaee91da32966124d2c6f7d00000000000000000000047e","0xbd724eb087d4cc0f61a5fed1fffaf937937e14de000000000000000000000473","0xbe0f30217be1e981add883848d0773a86d2d2cd4000000000000000000000471","0xc46be4b8bb6b5a3d3120660efae9c5416318ed40000000000000000000000472","0xc69771058481551261709d8db44977e9afde645000010000000000000000042a","0xc6eee8cb7643ec2f05f46d569e9ec8ef8b41b389000000000000000000000475","0xcba9ff45cfb9ce238afde32b0148eb82cbe635620000000000000000000003fd","0xcf8b555b7754556cf2ac2165e77ee23ed8517d7900020000000000000000045e","0xd0dc20e6342db2de82692b8dc842301ff9121805000200000000000000000454","0xd3d5d45f4edf82ba0dfaf061d230766032a10e07000200000000000000000413","0xd6d20527c7b0669989ee082b9d3a1c63af742290000000000000000000000483","0xda1cd1711743e57dd57102e9e61b75f3587703da0000000000000000000003fc","0xe1fb90d0d3b47e551d494d7ebe8f209753526b0100000000000000000000034e","0xee02583596aee94cccb7e8ccd3921d955f17982a00000000000000000000040a","0xf984eb2b8a7ef780245a797a2fccd82f346409ca00000000000000000000034d","0xff8f84e8c87532af96aef5582ee451572233678b000200000000000000000478","0x054e7b0c73e1ee5aed6864fa511658fc2b54bcaa000000000000000000000015","0x3f1a2c4a3a751f6626bd90ef16e104f0772d4d6b00020000000000000000001b","0x7275c131b1f67e8b53b4691f92b0e35a4c1c6e22000000000000000000000010","0xa154009870e9b6431305f19b09f9cfd7284d4e7a000000000000000000000013","0xa1d14d922a575232066520eda11e27760946c991000000000000000000000012","0xa826a114b0c7db4d1ff4a4be845a78998c64564c000000000000000000000008","0xea67626e1f0b59e0d172a04f5702ef90bcdf440c00000000000000000000000f","0xeb496161099d45b3ea4892408ef745c6182eb56e00000000000000000000000e","0xece571847897fd61e764d455dc15cf1cd9de8d6f000000000000000000000014","0xed3e2f496cbcd8e212192fb8d1499842f04a0d19000000000000000000000009","0x02c9dcb975262719a61f9b40bdf0987ead9add3a000000000000000000000006","0x16c9a4d841e88e52b51936106010f27085a529ec00000000000000000000000c","0x32be2d0ddeaf3333501b24a28668ce373ba8e763000200000000000000000014","0x32f03464fdf909fdf3798f87ff3712b10c59bd86000000000000000000000005","0x4b718e0e2fea1da68b763cd50c446fba03ceb2ea00000000000000000000000b","0x68a69c596b3839023c0e08d09682314f582314e5000200000000000000000011","0x6f34a44fce1506352a171232163e7716dd073ade000200000000000000000015","0x9e2d87f904862671eb49cb358e74284762cc9f42000200000000000000000013","0xac4b72c01072a52b73ca71105504f1372efcce0d000000000000000000000003","0xbfd65c6160cfd638a85c645e6e6d8acac5dac935000000000000000000000004","0xe274c9deb6ed34cfe4130f8d0a8a948dea5bb28600000000000000000000000d"];class Ui{constructor(e){this.chainId=e,this.balancerApiUrl="https://api-v3.balancer.fi/",this.tokenPriceQuery=d.gql` + query queryTokenPrices($chainKey: GqlChain!) { + tokenGetCurrentPrices(chains: [$chainKey]) { + address + price + } + } + `,this.chainKey=exports.Network[e]}async getNativeAssetPriceInToken(e){const{tokenGetCurrentPrices:t}=await d.request(this.balancerApiUrl,this.tokenPriceQuery,{chainKey:this.chainKey}),a=t.find((({address:t})=>t.toLowerCase()===e.toLowerCase()));if(!a)throw new Error("Token Price not found in the API");const n=t.find((({address:e})=>e.toLowerCase()===Vi[this.chainKey]));if(!n)throw new Error("Native Token Price not found in the API");const o=a.price/n.price;return String(o)}}var Vi;function qi(e=!0){return e?"https://api.coingecko.com/api/v3/":"https://pro-api.coingecko.com/api/v3/"}function Gi(e=!0){return e?"x-cg-demo-api-key":"x-cg-pro-api-key"}!function(e){e.MAINNET="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.POLYGON="0x0000000000000000000000000000000000001010",e.ARBITRUM="0x912ce59144191c1204e64559fe8253a0e49e6548",e.AVALANCHE="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.BASE="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.FANTOM="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.GNOSIS="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.OPTIMISM="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.ZKEVM="0xa2036f0538221a77a3937f1379699f44945018d0"}(Vi||(Vi={}));class Wi{constructor(e,t){this.chainId=e,this.urlBase=`${qi(null==t?void 0:t.isDemoApiKey)}simple/token_price/${this.platformId}?vs_currencies=${this.nativeAssetId}`,this.coingeckoApiKeyHeaderName=Gi(null==t?void 0:t.isDemoApiKey),this.apiKey=t.coingeckoApiKey}async getNativeAssetPriceInToken(e){const t=await this.getTokenPriceInNativeAsset(e);return""+1/parseFloat(t)}async getTokenPriceInNativeAsset(e){var t;const a=`${this.urlBase}&contract_addresses=${e}`,{data:n}=await w.default.get(a,{headers:{Accept:"application/json","Content-Type":"application/json",[this.coingeckoApiKeyHeaderName]:null!==(t=this.apiKey)&&void 0!==t?t:""}});if(void 0===n[e.toLowerCase()]||void 0===n[e.toLowerCase()][this.nativeAssetId])throw Error("No price returned from Coingecko");return n[e.toLowerCase()][this.nativeAssetId]}get platformId(){return ka[this.chainId].thirdParty.coingecko.platformId||"2"}get nativeAssetId(){return ka[this.chainId].thirdParty.coingecko.nativeAssetId||""}}class Hi extends p.SOR{constructor(e){const t=Li(e),a=Hi.getSorConfig(e),n=Hi.getSorNetworkConfig(t),o=new l.JsonRpcProvider(e.rpcUrl,e.network),i=Ei(t.urls.subgraph);super(o,n,Hi.getPoolDataService(t,a,o,i),Hi.getTokenPriceService(t,a,i,e.coingecko))}static getSorConfig(e){return{tokenPriceService:"api",poolDataService:"subgraph",fetchOnChainBalances:!0,...e.sor}}static getSorNetworkConfig(e){var t;return{...e,vault:e.addresses.contracts.vault,weth:e.addresses.tokens.wrappedNativeAsset,lbpRaisingTokens:null===(t=e.addresses.tokens)||void 0===t?void 0:t.lbpRaisingTokens,wETHwstETH:e.pools.wETHwstETH,connectingTokens:e.sorConnectingTokens,triPathMidPoolIds:e.sorTriPathMidPoolIds}}static getPoolDataService(e,t,a,n){var o;const i=[...null!==(o=e.poolsToIgnore)&&void 0!==o?o:[],...Di];return"object"==typeof t.poolDataService?t.poolDataService:new Ri(n,a,{...e,poolsToIgnore:i},t)}static getTokenPriceService(e,t,a,n){return"coingecko"===t.tokenPriceService&&n?new Wi(e.chainId,n):"object"==typeof t.tokenPriceService?t.tokenPriceService:"subgraph"===t.tokenPriceService?new Ni(a,e.addresses.tokens.wrappedNativeAsset):new Ui(e.chainId)}}function Ki(e){if(e.poolIds.length>2)throw new Error("Simple flash swap only supports a maximum of two pools");if(e.assets.length>2)throw new Error("Simple flash swap only supports a maximum of to two assets (tokens)")}function $i(e,t){return[{poolId:e[0],assetInIndex:0,assetOutIndex:1,amount:t,userData:"0x"},{poolId:e[1],assetInIndex:1,assetOutIndex:0,amount:"0",userData:"0x"}]}function Ji(e){return-1*Number(e)}function ji(e){return s.sum(e)}const Xi={"0xae7ab96520de3a18e5e111b5eaab095312d7fe84":"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0","0xd46ba6d942050d489dbd938a2c909a5d5039a161":"0xedb171c18ce90b633db442f2a6f72874093b49ef","0x1e6bb68acec8fefbd87d192be09bb274170a0548":"0xF03387d8d0FF326ab586A58E0ab4121d106147DF"};function Yi(e){let t=e;return Xi.hasOwnProperty(e)&&(t=Xi[e]),t}var zi;function Zi(e,t,a){const{tokens:n,contracts:o}=Ba(a);let i={id:zi.vault,address:o.vault};return n.stETH&&o.lidoRelayer&&[e,t].includes(n.stETH)&&(i={id:zi.lido,address:o.lidoRelayer}),i}function Qi(e){return e.id===zi.lido?_t.abi.filter((e=>"function"===e.type&&e.name&&["swap","batchSwap"].includes(e.name))):la.abi.filter((e=>"function"===e.type&&e.name&&["swap","batchSwap"].includes(e.name)))}function es(e){return{amount:e,max:t=>e.mul(1e4+t).div(1e4),min:t=>e.mul(1e4-t).div(1e4)}}function ts(e,t){const a=t===exports.SwapType.SwapExactIn?e.swapAmount:e.returnAmount,n=t===exports.SwapType.SwapExactIn?e.returnAmount:e.swapAmount,o=t===exports.SwapType.SwapExactIn?e.swapAmountForSwaps||e.swapAmount:e.returnAmountFromSwaps||e.returnAmount,i=t===exports.SwapType.SwapExactIn?e.returnAmountFromSwaps||e.returnAmount:e.swapAmountForSwaps||e.swapAmount,s=Yi(e.tokenIn),r=Yi(e.tokenOut);return{...e,amountIn:a,amountOut:n,amountInForLimits:es(o),amountOutForLimits:es(i),tokenInForSwaps:s,tokenOutFromSwaps:r}}!function(e){e[e.vault=1]="vault",e[e.lido=2]="lido"}(zi||(zi={}));class as{constructor(e,t,a){this.kind=t,this.chainId=a,this.functionName="swap",this.swapInfo=ts(e,t),this.relayer=Zi(this.swapInfo.tokenIn,this.swapInfo.tokenOut,this.chainId)}setFunds(e,t){this.funds={sender:e,recipient:t||e,fromInternalBalance:!1,toInternalBalance:!1}}setDeadline(e){this.deadline=e}get amount(){return this.kind===exports.SwapType.SwapExactOut?this.swapInfo.amountOutForLimits.amount:this.swapInfo.amountInForLimits.amount}setLimits(e){this.limit=this.kind===exports.SwapType.SwapExactIn?this.swapInfo.amountOutForLimits.min(e).toString():this.swapInfo.amountInForLimits.max(e).toString()}get singleSwap(){return{poolId:this.swapInfo.swaps[0].poolId,kind:this.kind,assetIn:this.swapInfo.tokenInForSwaps,assetOut:this.swapInfo.tokenOutFromSwaps,amount:this.amount.toString(),userData:"0x"}}attributes(){var e;if(!this.funds||!this.limit||!this.deadline)throw new Error("Uninitialized arguments");let t={request:this.singleSwap,funds:this.funds,limit:this.limit,deadline:this.deadline};const a=this.fragment();return a[0].inputs&&(null===(e=a[0].inputs)||void 0===e?void 0:e.length)>4&&(t={...t,value:"0",outputReference:"0"}),t}data(){return new e.Interface(this.fragment()).encodeFunctionData("swap",Object.values(this.attributes()))}value(e){let n=a.BigNumber.from(0);return this.swapInfo.tokenIn===t.AddressZero&&(n=this.kind===exports.SwapType.SwapExactIn?this.swapInfo.amountIn:this.swapInfo.amountInForLimits.max(e)),n}to(){return this.relayer.address}fragment(){return Qi(this.relayer).filter((e=>e.name===this.functionName))}}class ns{constructor(e,t,a){this.kind=t,this.chainId=a,this.functionName="batchSwap",this.swapInfo=ts(e,t),this.relayer=Zi(this.swapInfo.tokenIn,this.swapInfo.tokenOut,this.chainId)}setFunds(e,t){this.funds={sender:e,recipient:t||e,fromInternalBalance:!1,toInternalBalance:!1}}setDeadline(e){this.deadline=e}minAmountOut(e){return this.kind===exports.SwapType.SwapExactIn?this.swapInfo.amountOutForLimits.min(e):this.swapInfo.amountOutForLimits.amount}maxAmountIn(e){return this.kind===exports.SwapType.SwapExactOut?this.swapInfo.amountInForLimits.max(e):this.swapInfo.amountInForLimits.amount}setLimits(e){this.limits=this.swapInfo.tokenAddresses.map((t=>{let n=a.BigNumber.from(0);return t===this.swapInfo.tokenInForSwaps&&(n=this.maxAmountIn(e)),t===this.swapInfo.tokenOutFromSwaps&&(n=this.minAmountOut(e).mul(-1)),n})).map((e=>e.toString().split(".")[0]))}attributes(){var e;if(!this.funds||!this.limits||!this.deadline)throw new Error("Uninitialized arguments");let t={kind:this.kind,swaps:this.swapInfo.swaps,assets:this.swapInfo.tokenAddresses,funds:this.funds,limits:this.limits,deadline:this.deadline};const a=this.fragment();return a[0].inputs&&(null===(e=a[0].inputs)||void 0===e?void 0:e.length)>6&&(t={...t,value:"0",outputReferences:[]}),t}data(){return new e.Interface(this.fragment()).encodeFunctionData("batchSwap",Object.values(this.attributes()))}value(e){let n=a.BigNumber.from(0);return this.swapInfo.tokenIn===t.AddressZero&&(n=this.maxAmountIn(e)),n}to(){return this.relayer.address}fragment(){return Qi(this.relayer).filter((e=>e.name===this.functionName))}}const os={maxPools:4,gasPrice:"1",deadline:"999999999999999999",maxSlippage:10};class is{constructor(e){e instanceof p.SOR?(this.sor=e,this.chainId=this.sor.provider._network.chainId):(this.sor=new Hi(e),"number"==typeof e.network?this.chainId=e.network:this.chainId=e.network.chainId),this.vaultContract=la.connect(va,this.sor.provider)}static getLimitsForSlippage(e,t,a,n,o,i){return Aa(e,t,a,n,o,i).map((e=>e.toString()))}async findRouteGivenIn({tokenIn:e,tokenOut:t,amount:a,gasPrice:n,maxPools:o=4}){return this.sor.getSwaps(e,t,p.SwapTypes.SwapExactIn,a,{gasPrice:n,maxPools:o})}async findRouteGivenOut({tokenIn:e,tokenOut:t,amount:a,gasPrice:n,maxPools:o=4}){return this.sor.getSwaps(e,t,p.SwapTypes.SwapExactOut,a,{gasPrice:n,maxPools:o})}buildSwap({userAddress:e,recipient:t,swapInfo:a,kind:n,deadline:o,maxSlippage:i}){if(!this.chainId)throw"Missing network configuration";const s=a.swaps.length>1?new ns(a,n,this.chainId):new as(a,n,this.chainId);s.setFunds(e,t),s.setDeadline(o),s.setLimits(i);const r=s.to(),{functionName:p}=s;return{to:r,functionName:p,attributes:s.attributes(),data:s.data(),value:s.value(i)}}async buildRouteExactIn(e,t,n,o,i,s=os){const r={...os,...s},p=await this.findRouteGivenIn({tokenIn:n,tokenOut:o,amount:a.BigNumber.from(i),gasPrice:a.BigNumber.from(r.gasPrice),maxPools:r.maxPools});return this.buildSwap({userAddress:e,recipient:t,swapInfo:p,kind:exports.SwapType.SwapExactIn,deadline:r.deadline,maxSlippage:r.maxSlippage})}static encodeBatchSwap(e){return la.createInterface().encodeFunctionData("batchSwap",[e.kind,e.swaps,e.assets,e.funds,e.limits,e.deadline])}static encodeSimpleFlashSwap(e){return this.encodeBatchSwap(function({poolIds:e,assets:t,flashLoanAmount:a,walletAddress:n}){Ki({poolIds:e,assets:t});const o=$i(e,a),i={sender:n,fromInternalBalance:!1,recipient:n,toInternalBalance:!1};return{kind:exports.SwapType.SwapExactIn,swaps:o,assets:t,funds:i,limits:["0","0"],deadline:"999999999999999999"}}(e))}async fetchPools(e){return this.sor.fetchPools(e)}getPools(){return this.sor.getPools()}async queryBatchSwap(e){return await Rn(this.vaultContract,e.kind,e.swaps,e.assets)}async querySimpleFlashSwap(e){return await async function(e){Ki(e);const[t,a]=e.assets;try{const n=await Rn(e.vaultContract,exports.SwapType.SwapExactIn,$i(e.poolIds,e.flashLoanAmount),e.assets),o={[t]:Ji(n[0]).toString(),[a]:Ji(n[1]).toString()};return{profits:o,isProfitable:ji([o[t],o[a]])>0}}catch(e){throw`Failed to querySimpleFlashSwap: ${e}`}}({...e,vaultContract:this.vaultContract})}async getSorSwap(e){return await async function(e,t,a,n,o){const i=a===exports.SwapType.SwapExactIn?p.SwapTypes.SwapExactIn:p.SwapTypes.SwapExactOut;return await o.getSwaps(e.toLowerCase(),t.toLowerCase(),i,n)}(e.tokenIn,e.tokenOut,e.swapType,e.amount,this.sor)}async queryExactIn(e){const t=await this.query(e,exports.SwapType.SwapExactIn);return this.assetDeltas(t.map(String),e.tokenAddresses)}async queryExactOut(e){const t=await this.query(e,exports.SwapType.SwapExactOut);return this.assetDeltas(t.map(String),e.tokenAddresses)}query(e,a){const{swaps:n,tokenAddresses:o}=e,i={sender:t.AddressZero,recipient:t.AddressZero,fromInternalBalance:!1,toInternalBalance:!1};return this.vaultContract.callStatic.queryBatchSwap(a,n,o,i)}assetDeltas(e,t){return Object.fromEntries(e.map(((e,a)=>[t[a],e])))}}var ss;exports.PoolKind=void 0,(ss=exports.PoolKind||(exports.PoolKind={}))[ss.WEIGHTED=0]="WEIGHTED",ss[ss.LEGACY_STABLE=1]="LEGACY_STABLE",ss[ss.COMPOSABLE_STABLE=2]="COMPOSABLE_STABLE",ss[ss.COMPOSABLE_STABLE_V2=3]="COMPOSABLE_STABLE_V2";const rs=_t.createInterface();class ps{static encodeApproveVault(e,t){return rs.encodeFunctionData("approveVault",[e,t])}static encodeSetRelayerApproval(e,t,a){return rs.encodeFunctionData("setRelayerApproval",[e,t,a])}static encodeGaugeWithdraw(e,t,a,n){return rs.encodeFunctionData("gaugeWithdraw",[e,t,a,n])}static encodeGaugeDeposit(e,t,a,n){return rs.encodeFunctionData("gaugeDeposit",[e,t,a,n])}static encodeSwap(e){return rs.encodeFunctionData("swap",[e.request,e.funds,e.limit,e.deadline,e.value,e.outputReference])}static encodeBatchSwap(e){return rs.encodeFunctionData("batchSwap",[e.swapType,e.swaps,e.assets,e.funds,e.limits,e.deadline,e.value,e.outputReferences])}static encodeExitPool(e){return rs.encodeFunctionData("exitPool",[e.poolId,e.poolKind,e.sender,e.recipient,e.exitPoolRequest,e.outputReferences])}static encodeJoinPool(e){return rs.encodeFunctionData("joinPool",[e.poolId,e.kind,e.sender,e.recipient,e.joinPoolRequest,e.value,e.outputReference])}static encodeWrapAaveDynamicToken(e){return rs.encodeFunctionData("wrapAaveDynamicToken",[e.staticToken,e.sender,e.recipient,e.amount,e.fromUnderlying,e.outputReference])}static encodeUnwrapAaveStaticToken(e){return rs.encodeFunctionData("unwrapAaveStaticToken",[e.staticToken,e.sender,e.recipient,e.amount,e.toUnderlying,e.outputReference])}static encodeUnwrapWstETH(e){return rs.encodeFunctionData("unwrapWstETH",[e.sender,e.recipient,e.amount,e.outputReference])}static encodeUnwrap(e,t){let a;switch(t){case"AaveLinear":return this.encodeUnwrapAaveStaticToken({staticToken:e.wrappedToken,sender:e.sender,recipient:e.recipient,amount:e.amount,toUnderlying:!0,outputReference:e.outputReference});case"BeefyLinear":case"ERC4626Linear":a="unwrapERC4626";break;case"EulerLinear":a="unwrapEuler";break;case"GearboxLinear":a="unwrapGearbox";break;case"ReaperLinear":a="unwrapReaperVaultToken";break;case"TetuLinear":a="unwrapTetu";break;case"YearnLinear":a="unwrapYearn";break;case"MidasLinear":a="unwrapCompoundV2";break;case"SiloLinear":a="unwrapShareToken";break;default:throw new Error("Unwrapping not supported for this pool type: "+t)}return rs.encodeFunctionData(a,[e.wrappedToken,e.sender,e.recipient,e.amount,e.outputReference])}static encodePeekChainedReferenceValue(e){return rs.encodeFunctionData("peekChainedReferenceValue",[e])}static toChainedReference(e,t=!0){const n=t?ps.CHAINED_REFERENCE_TEMP_PREFIX:ps.CHAINED_REFERENCE_READONLY_PREFIX,o=`0x${n}${"0".repeat(64-n.length)}`;return a.BigNumber.from(o).add(e)}static fromChainedReference(e,t=!0){const n=t?ps.CHAINED_REFERENCE_TEMP_PREFIX:ps.CHAINED_REFERENCE_READONLY_PREFIX,o=`0x${n}${"0".repeat(64-n.length)}`;return a.BigNumber.from(e).sub(a.BigNumber.from(o))}static isChainedReference(e){const t=a.BigNumber.from(e),n=a.BigNumber.from("0xfff0000000000000000000000000000000000000000000000000000000000000"),o=t.toBigInt()&n.toBigInt();return"0xba10000000000000000000000000000000000000000000000000000000000000"===a.BigNumber.from(o)._hex.toString()}static formatExitPoolInput(e){const{assets:t,minAmountsOut:a,userData:n,toInternalBalance:o,poolId:i,poolKind:s,sender:r,recipient:p,outputReferences:l}=e;return{poolId:i,poolKind:s,sender:r,recipient:p,outputReferences:l,exitPoolRequest:{assets:t,minAmountsOut:a,userData:n,toInternalBalance:o}}}static formatJoinPoolInput(e){const{assets:t,maxAmountsIn:a,userData:n,fromInternalBalance:o,poolId:i,kind:s,sender:r,recipient:p,value:l,outputReference:d}=e;return{poolId:i,kind:s,sender:r,recipient:p,value:l,outputReference:d,joinPoolRequest:{assets:t,maxAmountsIn:a,userData:n,fromInternalBalance:o}}}}ps.CHAINED_REFERENCE_TEMP_PREFIX="ba10",ps.CHAINED_REFERENCE_READONLY_PREFIX="ba11",ps.signRelayerApproval=async(e,a,n,o)=>{const i=o.interface.encodeFunctionData("setRelayerApproval",[a,e,!0]),s=await te.signSetRelayerApprovalAuthorization(o,n,e,i);return te.encodeCalldataAuthorization("0x",t.MaxUint256,s)};class ls{constructor(e){this.url=Li(e).urls.subgraph,this.client=this.initClient()}initClient(){return zo(new d.GraphQLClient(this.url))}}class ds{constructor(e,t){this.swaps=t||new is(e)}async fetchPools(){return this.swaps.fetchPools()}getPools(){return this.swaps.getPools()}async getSpotPrice(e,t,a=[]){0===a.length&&(await this.fetchPools(),a=this.getPools());const n=p.parseToPoolsDict(a,0),o=this.swaps.sor.routeProposer.getCandidatePathsFromDict(e,t,0,n,4);if(0===o.length)throw new Oa(exports.BalancerErrorCode.UNSUPPORTED_PAIR);return p.getSpotPriceAfterSwapForPath(o[0],0,p.ZERO).toString()}}const us=["function getPoolId() view returns (bytes32)","function getSwapFeePercentage() view returns (uint256)","function getProtocolFeesCollector() view returns (address)","function inRecoveryMode() view returns (bool)"];class cs{constructor(t,a,n={}){this.multicall=t,this.options=n,this.calls=[],this.paths=[],this.interface=new e.Interface(a)}call(e,t,a,n){return this.calls.push([t,a,n]),this.paths.push(e),this}async execute(e={}){const t=e;return(await this.executeMulticall()).forEach(((e,a)=>s.set(t,this.paths[a],e.length>1?e:e[0]))),this.calls=[],this.paths=[],t}async executeMulticall(){const[,e]=await this.multicall.callStatic.aggregate(this.calls.map((([e,t,a])=>({target:e,callData:this.interface.encodeFunctionData(t,a)}))),this.options);return e.map(((e,t)=>this.interface.decodeFunctionResult(this.calls[t][1],e)))}}function ys(e){return Math.round(Date.now()/1e3)-e<86400}class bs{constructor(e,t){this.veBalAddress=e,this.multicall=t}async getLockInfo(e){if(!this.veBalAddress)throw new Error("veBal address must be defined");const t=new cs(this.multicall,[..._a.abi]);t.call("locked",this.veBalAddress,"locked",[e]),t.call("epoch",this.veBalAddress,"epoch"),t.call("totalSupply",this.veBalAddress,"totalSupply()");const a=await t.execute();return this.formatLockInfo(a)}formatLockInfo(e){const[t,a]=e.locked,n=t.gt(0),o=1e3*a.toNumber();const i=n&&Date.now()>o;return{lockedEndDate:o,lockedAmount:Be(t),totalSupply:Be(e.totalSupply),epoch:Be(e.epoch,0),hasExistingLock:n,isExpired:i}}}class ms{constructor(e,t){if(!e.veBalProxy)throw new Error("veBalProxy address must be defined");this.instance=Pa.connect(e.veBalProxy,t)}async getAdjustedBalance(e){return Be(await this.instance.adjustedBalanceOf(e))}}class fs{constructor(e,t){this.getLiquidityGauge=Qt.connect,this.contractAddresses="number"==typeof e?ka[e].addresses.contracts:e;const a=la.connect(this.contractAddresses.vault,t),n=yt.connect(this.contractAddresses.balancerHelpers,t);let o;this.contractAddresses.lidoRelayer&&(o=Xt.connect(this.contractAddresses.lidoRelayer,t));const i=ta.connect(this.contractAddresses.multicall,t),s=It.connect(this.contractAddresses.balancerRelayer,t);let r,p,l,d,u,c,y,b,m,f,T;this.contractAddresses.veBal&&(r=new bs(this.contractAddresses.veBal,i)),this.contractAddresses.veBalProxy&&(p=new ms(this.contractAddresses,t)),this.contractAddresses.gaugeClaimHelper&&(l=qt.connect(this.contractAddresses.gaugeClaimHelper,t)),this.contractAddresses.composableStablePoolFactory&&(d=Et.connect(this.contractAddresses.composableStablePoolFactory,t)),this.contractAddresses.weightedPoolFactory&&(u=ya.connect(this.contractAddresses.weightedPoolFactory,t)),this.contractAddresses.aaveLinearPoolFactory&&(c=rt.connect(this.contractAddresses.aaveLinearPoolFactory,t)),this.contractAddresses.erc4626LinearPoolFactory&&(y=Mt.connect(this.contractAddresses.erc4626LinearPoolFactory,t)),this.contractAddresses.eulerLinearPoolFactory&&(b=Lt.connect(this.contractAddresses.eulerLinearPoolFactory,t)),this.contractAddresses.gearboxLinearPoolFactory&&(m=Kt.connect(this.contractAddresses.gearboxLinearPoolFactory,t)),this.contractAddresses.yearnLinearPoolFactory&&(f=Ta.connect(this.contractAddresses.yearnLinearPoolFactory,t)),this.contractAddresses.gyroConfigProxy&&(T=Jt.connect(this.contractAddresses.gyroConfigProxy,t)),this.instances={aaveLinearPoolFactory:c,balancerHelpers:n,BasePool:this.getBasePool,composableStablePoolFactory:d,ERC20:this.getErc20,erc4626LinearPoolFactory:y,eulerLinearPoolFactory:b,gaugeClaimHelper:l,gearboxLinearPoolFactory:m,gyroConfig:T,liquidityGauge:this.getLiquidityGauge,lidoRelayer:o,multicall:i,relayer:s,veBal:r,veBalProxy:p,weightedPoolFactory:u,yearnLinearPoolFactory:f,vault:a}}get contracts(){return this.instances}getErc20(e,t){return kt.connect(e,t)}getBasePool(e,t){return((e,t)=>new y.Contract(e,us,t))(e,t)}}class Ts{constructor(e,t){this.tokenPrices=e,this.tokenHistoricalPrices=t}async calcImpLoss(e,t){if(1e3*e>=Date.now())throw console.error(`[ImpermanentLossService][calcImpLoss]Error: ${Oa.getMessage(exports.BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE)}`),new Oa(exports.BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE);const a=await this.prepareData(e,t),n=this.getPoolValueDelta(a),o=this.getHoldValueDelta(a);return this.calculateImpermanentLoss(n,o)}calculateImpermanentLoss(e,t){return Math.floor(100*Math.abs(e/t-1)*100)/100}getPoolValueDelta(e){return e.reduce(((e,t)=>e*Math.pow(Math.abs(t.priceDelta+1),t.weight)),1)}getHoldValueDelta(e){return e.reduce(((e,t)=>e+Math.abs(t.priceDelta+1)*t.weight),0)}async prepareData(e,t){const a=t.tokens.filter((e=>e.address!==t.address)),n=this.getWeights(a),o=a.map((e=>e.address)),i=await this.getEntryPrices(e,o),s=await this.getExitPrices(a);return this.getAssets(a,s,i,n)}getAssets(e,t,a,n){return e.map(((e,o)=>({priceDelta:this.getDelta(a[e.address],t[e.address]),weight:n[o]})))}getDelta(e,t){if(0===e)throw console.error(`[ImpermanentLossService][getDelta]Error: ${Oa.getMessage(exports.BalancerErrorCode.ILLEGAL_PARAMETER)}: entry price is 0`),new Oa(exports.BalancerErrorCode.ILLEGAL_PARAMETER);return(t-e)/e}getWeights(e){const t=e.every((e=>!e.weight)),a=Math.round(1/e.length*100)/100,n=t?e.map((()=>a)):e.map((e=>{var t;return Number(null!==(t=e.weight)&&void 0!==t?t:0)}));if(n.some((e=>0===e)))throw console.error(`[ImpermanentLossService][getWeights]Error: ${Oa.getMessage(exports.BalancerErrorCode.MISSING_WEIGHT)}`),new Oa(exports.BalancerErrorCode.MISSING_WEIGHT);return n}async getExitPrices(e){var t;const a=await Promise.all(e.map((e=>this.tokenPrices.find(e.address)))).catch((()=>[]));if(!a.length||a.some((e=>void 0===(null==e?void 0:e.usd))))throw console.error(`[ImpermanentLossService][getExitPrices]Error: ${Oa.getMessage(exports.BalancerErrorCode.MISSING_PRICE_RATE)}`),new Oa(exports.BalancerErrorCode.MISSING_PRICE_RATE);const n=e.map(((e,t)=>({...e,price:a[t]}))),o={};for(const e of n)(null===(t=e.price)||void 0===t?void 0:t.usd)&&(o[e.address]=+e.price.usd);return o}async getEntryPrices(e,t){const a={};for(const n of t){const t=await this.tokenHistoricalPrices.findBy(n,e).catch((e=>{j.getInstance().warn(`[ImpermanentLossService][getEntryPrices]Error: ${e.message}`)}));if(!(null==t?void 0:t.usd)){throw j.getInstance().warn(`[ImpermanentLossService][getEntryPrices]Error: ${Oa.getMessage(exports.BalancerErrorCode.MISSING_PRICE_RATE)}`),new Oa(exports.BalancerErrorCode.MISSING_PRICE_RATE)}a[n]=+t.usd}return a}}const hs=145e3,Is=1648465251,gs=31536e3,_s=2**(1/4),xs=(e=Math.round((new Date).getTime()/1e3))=>{const t=Math.floor((e-Is)/gs);return hs*_s**-t},Ps=e=>365*(hs*_s**-e/7);var ws=Object.freeze({__proto__:null,INITIAL_RATE:hs,START_EPOCH_TIME:Is,weekly:xs,total:Ps,between:(e,t)=>{if(et.address!==e.address)),n=await Promise.all(a.map((async t=>{let a=0;const n=await this.tokenYields.find(t.address);if(n)a="MetaStable"===e.poolType||e.poolType.includes("Gyro")?n*(1-await this.protocolSwapFeePercentage(e)):"ComposableStable"===e.poolType||"Weighted"===e.poolType&&e.poolTypeVersion>=2?t.isExemptFromYieldProtocolFee?n:n*(1-parseFloat(e.protocolYieldFeeCache||"0.5")):n;else{const n=await this.pools.findBy("address",t.address);if(n){const o=await this.swapFees(n);let i=(await this.tokenAprs(n)).total;("ComposableStable"===e.poolType||"Weighted"===e.poolType&&2===e.poolTypeVersion)&&(t.isExemptFromYieldProtocolFee||(i*=1-parseFloat(e.protocolYieldFeeCache||"0.5"))),a=o+i}}return a}))),o=async e=>{var a,n,o,i,s;let r;if(e.weight)return parseFloat(e.weight);if(null===(n=null===(a=e.token)||void 0===a?void 0:a.pool)||void 0===n?void 0:n.poolType){const t=await this.pools.findBy("address",e.address);t&&(r=(await this.bptPrice(t)).toString())}else r=(null===(o=e.price)||void 0===o?void 0:o.usd)||(null===(i=await this.tokenPrices.find(e.address))||void 0===i?void 0:i.usd)||(null===(s=e.token)||void 0===s?void 0:s.latestUSDPrice);if(r){return parseFloat(e.balance)*parseFloat(r)/parseFloat(t)}throw`No price for ${e.address}`},i=await Promise.all(a.map((async(e,t)=>{if(0===n[t])return 0;try{const a=await o(e);return Math.round(n[t]*a)}catch(e){return j.getInstance().error(e),0}})));return{total:i.reduce(((e,t)=>e+t),0),breakdown:s.pickBy(s.zipObject(a.map((e=>e.address)),i),s.identity)}}async stakingApr(e,t=1){if(!this.liquidityGauges)return 0;const a=await this.liquidityGauges.findBy("poolId",e.id);if(!a||1==e.chainId&&0===a.workingSupply||e.chainId>1&&0===a.totalSupply||e.chainId>1&&0===a.balInflationRate)return 0;const n=ka[e.chainId].addresses.tokens.bal;if(!n)return 0;const[o,i]=await Promise.all([this.tokenPrices.find(n),this.bptPrice(e)]);if(!(null==o?void 0:o.usd))throw"Missing BAL price";const s=(a.workingSupply+.4)/.4*i;if(a.balInflationRate){const e=86400*a.balInflationRate*365*parseFloat(o.usd);return Math.round(1e4*t*e/s)}if(e.chainId>1){if(!a.rewardTokens)return 0;const e=n&&a.rewardTokens[n];if(!e)return 0;{let t;try{t=await this.rewardTokenApr(n,e);const o=a.totalSupply*i,s=t.value/o;return Math.round(1e4*s)}catch(e){return 0}}}const r=parseFloat(o.usd),p=Math.round((new Date).getTime()/1e3),l=xs(p)/7*365*a.relativeWeight*r;return Math.round(1e4*t*l/s)}async rewardAprs(e){if(!this.liquidityGauges)return{total:0,breakdown:{}};const t=await this.liquidityGauges.findBy("poolId",e.id);if(!t||!t.rewardTokens||Object.keys(t.rewardTokens).length<1)return{total:0,breakdown:{}};const a=ka[e.chainId].addresses.tokens.bal,n=Object.keys(t.rewardTokens).filter((e=>e!=a)).map((async e=>{const a=t.rewardTokens[e];try{return await this.rewardTokenApr(e,a)}catch(t){return{address:e,value:0}}})),o=await this.bptPrice(e),i=t.totalSupply*o;if(0==i)return{total:0,breakdown:{}};const s={};let r=0;for await(const e of Object.values(n)){const t=e.value/i,a=Math.round(1e4*t);r+=a,s[e.address]=a}return{total:r,breakdown:s}}async protocolApr(e){if("0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014"!=e.id||!this.feeDistributor)return 0;const t=new Es(this.feeDistributor,this.tokenPrices),{lastWeekBalRevenue:a,lastWeekBBAUsdRevenue:n,veBalSupply:o}=await t.data(),i=await this.bptPrice(e);if(!i)throw"bptPrice for veBal pool missing";const s=(a+n)/7;return Math.round(365*s*1e4/(i*o))}async apr(e){if(Di.includes(e.id))return{swapFees:0,tokenAprs:{total:0,breakdown:{}},stakingApr:{min:0,max:0},rewardAprs:{total:0,breakdown:{}},protocolApr:0,min:0,max:0};const[t,a,n,o,i,s]=await Promise.all([this.swapFees(e),this.tokenAprs(e),this.stakingApr(e),this.stakingApr(e,2.5),this.rewardAprs(e),this.protocolApr(e)]);return{swapFees:t,tokenAprs:a,stakingApr:{min:n,max:o},rewardAprs:i,protocolApr:s,min:t+a.total+i.total+n,max:t+a.total+i.total+s+o}}async last24hFees(e){return new As(this.yesterdaysPools).last24h(e)}async totalLiquidity(e){try{const t=new An(this.pools,this.tokenPrices);return await t.getLiquidity(e)}catch(t){return j.getInstance().warn("Liquidity calculcation failed, falling back to subgraph"),e.totalLiquidity}}async bptPrice(e){return parseFloat(await this.totalLiquidity(e))/parseFloat(e.totalShares)}async protocolSwapFeePercentage(e){let t=.5;return t=e.poolType.includes("Gyro")&&this.gyroConfigRepository?await this.gyroConfigRepository.getGyroProtocolFee(e.address):e.protocolSwapFeeCache?parseFloat(e.protocolSwapFeeCache):await this.feeCollector.find("")||.5,t}async rewardTokenApr(e,t){if(t.period_finish.toNumber(){e.includes("Linear")&&vs.includes(e)&&ks.set(e,"batchSwap")})),ks.set(exports.PoolType.Element,"batchSwap"),ks.set(exports.PoolType.Investment,"joinPool"),ks.set(exports.PoolType.LiquidityBootstrapping,"joinPool"),ks.set(exports.PoolType.MetaStable,"joinPool"),ks.set(exports.PoolType.Stable,"joinPool"),ks.set(exports.PoolType.StablePhantom,"batchSwap"),ks.set(exports.PoolType.Weighted,"joinPool"),ks.set(exports.PoolType.ComposableStable,"joinPool");const Bs=new Map;vs.forEach((e=>{e.includes("Linear")&&vs.includes(e)&&Bs.set(e,"batchSwap")})),Bs.set(exports.PoolType.Element,"batchSwap"),Bs.set(exports.PoolType.Investment,"exitPool"),Bs.set(exports.PoolType.LiquidityBootstrapping,"exitPool"),Bs.set(exports.PoolType.MetaStable,"exitPool"),Bs.set(exports.PoolType.Stable,"exitPool"),Bs.set(exports.PoolType.StablePhantom,"batchSwap"),Bs.set(exports.PoolType.Weighted,"exitPool"),Bs.set(exports.PoolType.ComposableStable,"exitPool");class Cs{constructor(e){this.pools=e,this.getGraphNodes=async(e,t,a)=>{if(!await this.pools.find(t))throw new Oa(exports.BalancerErrorCode.POOL_DOESNT_EXIST);const n=await this.buildGraphFromRootPool(t,a);if(n.id!==t)throw new Error("Error creating graph nodes");return e?Cs.orderByBfs(n).reverse():Cs.orderByBfs(n)}}async buildGraphFromRootPool(e,a){const n=await this.pools.find(e);if(!n)throw new Oa(exports.BalancerErrorCode.POOL_DOESNT_EXIST);return(await this.buildGraphFromPool(n.address,0,void 0,t.WeiPerEther,a))[0]}getTokenTotal(e){const a=e.tokensList.indexOf(e.address);let n=t.Zero;const{balancesEvm:o}=be(e);return o.forEach(((e,t)=>{a!==t&&(n=n.add(e))})),n}async buildGraphFromPool(e,n,o,i,s){var r;const p=await this.pools.findBy("address",e);if(!p){if(o){const t=await this.pools.findBy("address",o.address),a=t.tokensList.indexOf(e),s=null!==(r=t.tokens[a].decimals)&&void 0!==r?r:18,{balancesEvm:p}=be(t);return Cs.createInputTokenNode(n,e,s,o,i,p[a].toString())}throw new Oa(exports.BalancerErrorCode.POOL_DOESNT_EXIST)}const l=ks.get(p.poolType),d=Bs.get(p.poolType);if(!l||!d)throw new Oa(exports.BalancerErrorCode.UNSUPPORTED_POOL_TYPE);const u=this.getTokenTotal(p),{spotPriceCalculator:c}=En.from(p.poolType),y={};let b=18;p.tokens.forEach((e=>{if(Je(e.address,p.address))return void(b=e.decimals?e.decimals:18);const t=c.calcPoolSpotPrice(e.address,p.address,p);y[e.address]=t}));let m={address:p.address,id:p.id,type:p.poolType,joinAction:l,exitAction:d,isProportionalExit:!1,children:[],marked:!1,index:n.toString(),parent:o,proportionOfParent:i,isLeaf:!1,spotPrices:y,decimals:b,balance:p.totalShares,priceRate:t.WeiPerEther.toString()};if(this.updateNodeIfProportionalExit(p,m),n++,p.poolType.toString().includes("Linear"))[m,n]=this.createLinearNodeChildren(m,n,p,s);else{const{balancesEvm:e}=be(p);for(let t=0;t2)&&(t.isProportionalExit=!0)}createLinearNodeChildren(e,t,a,n){var o;if(void 0===a.mainIndex)throw new Error("Issue With Linear Pool");if(n.map((e=>e.toLowerCase())).includes(a.tokensList[a.mainIndex].toLowerCase())){const n=this.createWrappedTokenNode(a,t,e,e.proportionOfParent);return e.children.push(n[0]),[e,n[1]]}{const{balancesEvm:n}=be(a),i=null!==(o=a.tokens[a.mainIndex].decimals)&&void 0!==o?o:18,s=Cs.createInputTokenNode(t,a.tokensList[a.mainIndex],i,e,e.proportionOfParent,n[a.mainIndex].toString());return e.children.push(s[0]),[e,t=s[1]]}}createWrappedTokenNode(e,t,a,n){var o;if(void 0===e.wrappedIndex||void 0===e.mainIndex)throw new Error("Issue With Linear Pool");const{balancesEvm:i,upScaledBalances:s,scalingFactorsRaw:r,priceRates:p}=be(e),l={type:"WrappedToken",address:e.tokensList[e.wrappedIndex],id:"N/A",children:[],marked:!1,joinAction:"wrap",exitAction:"unwrap",isProportionalExit:!1,index:t.toString(),parent:a,proportionOfParent:n,isLeaf:!1,spotPrices:{},decimals:18,balance:i[e.wrappedIndex].toString(),priceRate:p[e.wrappedIndex].toString()};t++;const d=null!==(o=e.tokens[e.mainIndex].decimals)&&void 0!==o?o:18,u=de(s[e.wrappedIndex],r[e.mainIndex]).toString(),c=Cs.createInputTokenNode(t,e.tokensList[e.mainIndex],d,l,n,u);return l.children=[c[0]],[l,t=c[1]]}static createInputTokenNode(e,a,n,o,i,s){return[{address:a,id:"N/A",type:"Input",children:[],marked:!1,joinAction:"input",exitAction:"output",isProportionalExit:!1,index:e.toString(),parent:o,proportionOfParent:i,isLeaf:!0,spotPrices:{},decimals:n,balance:s,priceRate:t.WeiPerEther.toString()},e+1]}static orderByBfs(e){const t=[],a=[];for(e.marked=!0,t.push(e);t.length>0;){const e=t.shift();e&&a.push(e),null==e||e.children.forEach((e=>{e.marked||(e.marked=!0,t.push(e))}))}return a}static getLeafAddresses(e){return e.filter((e=>e.isLeaf)).map((e=>e.address))}static isProportionalPools(e){return e.every((e=>!(e.children.length>1)||e.isProportionalExit))}}class Os{constructor(){}}Os.joinInit=t=>e.defaultAbiCoder.decode(["uint256","uint256[]"],t),Os.joinExactTokensInForBPTOut=t=>e.defaultAbiCoder.decode(["uint256","uint256[]","uint256"],t),Os.joinTokenInForExactBPTOut=t=>e.defaultAbiCoder.decode(["uint256","uint256","uint256"],t),Os.joinAllTokensInForExactBPTOut=t=>e.defaultAbiCoder.decode(["uint256","uint256"],t),Os.exitExactBPTInForOneTokenOut=t=>e.defaultAbiCoder.decode(["uint256","uint256","uint256"],t),Os.exitExactBPTInForTokensOut=t=>e.defaultAbiCoder.decode(["uint256","uint256"],t),Os.exitBPTInForExactTokensOut=t=>e.defaultAbiCoder.decode(["uint256","uint256[]","uint256"],t);class Ms{constructor(e){this.relayerModel=e}joinKind(t){const a=e.defaultAbiCoder.decode(["uint256"],t)[0];if(!a)throw new Error("No exit kind.");return a.toNumber()}decodeJoinData(e,t){if(t===exports.WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT){return Os.joinAllTokensInForExactBPTOut(e).toString()}if(t===exports.WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT){const[,t]=Os.joinExactTokensInForBPTOut(e);return t}if(t===exports.WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT){const[,t,a]=Os.joinTokenInForExactBPTOut(e);return[t.toString(),a]}throw new Error("Non supported join data")}allTokensInForExactBPTOut(){throw new Error("joinAllTokensInForExactBPTOut not supported")}joinExactTokensInForBPTOut(e,t){const n=this.decodeJoinData(e,exports.WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT),o=this.relayerModel.doChainedRefReplacements(n),i=t._calcBptOutGivenExactTokensIn(o.map((e=>a.BigNumber.from(e))));if("StablePhantom"==t.SubgraphType||"ComposableStable"==t.SubgraphType){const e=t.tokens.find((e=>Je(e.address,t.address)));if(!e)throw new Error("Pool does not contain BPT as a token");const n=a.parseFixed(e.balance.toString(),e.decimals);t.updateTokenBalanceForPool(t.address,n.sub(i))}else t.updateTokenBalanceForPool(t.address,t.totalShares.add(i));const s=t.tokens.filter((e=>!Je(e.address,t.address)));return o.forEach(((e,n)=>{const o=a.parseFixed(s[n].balance.toString(),s[n].decimals);t.updateTokenBalanceForPool(s[n].address,o.add(e))})),[i.toString(),s.map((e=>e.address)),o]}joinTokenInForExactBPTOut(e,t){const[n,o]=this.decodeJoinData(e,exports.WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT),i=this.relayerModel.doChainedRefReplacement(n),s=t.parsePoolPairData(t.tokensList[Number(o)],t.address),r=a.formatFixed(i,18),l=t._tokenInForExactTokenOut(s,p.bnum(r.toString())).dp(s.decimalsIn),d=a.parseFixed(l.toString(),s.decimalsIn);return t.updateTokenBalanceForPool(s.tokenIn,s.balanceIn.add(d)),t.updateTokenBalanceForPool(s.tokenOut,s.balanceOut.add(i)),[d.toString(),s.tokenIn,d.toString()]}async doJoinPool(e,a){const n=a[e.poolId],o=this.joinKind(e.encodedUserData);let i="0",s=[],r=[];if(o===exports.WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT)i=this.allTokensInForExactBPTOut();else if(o===exports.WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT)[i,s,r]=this.joinExactTokensInForBPTOut(e.encodedUserData,n);else{if(o!==exports.WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT)throw new Error("Exit type not implemented");{let t,a;[i,t,a]=this.joinTokenInForExactBPTOut(e.encodedUserData,n),s.push(t),r.push(a)}}return s.push(n.address),r.push(t.Zero.sub(i).toString()),e.outputReference&&ps.isChainedReference(e.outputReference)&&this.relayerModel.setChainedReferenceValue(e.outputReference,i),[s,r]}}class Fs{constructor(e){this.relayerModel=e}exitKind(t,a){const n=e.defaultAbiCoder.decode(["uint256"],a)[0];if(!n)throw new Error("No exit kind.");return"ComposableStable"===t?n.toNumber()===exports.ComposableStablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT?exports.WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT:n.toNumber()===exports.ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT?exports.WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT:exports.WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT:n.toNumber()}decodeExitData(e,t){if(t===exports.WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT){const[,t,a]=Os.exitBPTInForExactTokensOut(e);return[t.toString(),a.toString()]}if(t===exports.WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT){const[,t,a]=Os.exitExactBPTInForOneTokenOut(e);return[t.toString(),a.toString()]}if(t===exports.WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT){const[,t]=Os.exitExactBPTInForTokensOut(e);return[t.toString()]}throw new Error("Non supported exit data")}exactBptInForTokensOut(e,t){const[n]=this.decodeExitData(e,exports.WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT),o=this.relayerModel.doChainedRefReplacement(n),i=t._calcTokensOutGivenExactBptIn(a.BigNumber.from(o)).map((e=>e.toString()));if("StablePhantom"==t.SubgraphType||"ComposableStable"==t.SubgraphType){const e=t.tokens.find((e=>Je(e.address,t.address)));if(!e)throw new Error("Pool does not contain BPT as a token");const n=a.parseFixed(e.balance.toString(),e.decimals);t.updateTokenBalanceForPool(t.address,n.add(o))}else t.updateTokenBalanceForPool(t.address,t.totalShares.sub(o));const s=t.tokens.filter((e=>!Je(e.address,t.address)));return i.forEach(((e,n)=>{const o=a.parseFixed(s[n].balance.toString(),s[n].decimals);t.updateTokenBalanceForPool(s[n].address,o.sub(e))})),[o,s.map((e=>e.address)),i]}exactBptInForOneTokenOut(e,t){const[n,o]=this.decodeExitData(e,exports.WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT),i=this.relayerModel.doChainedRefReplacement(n),s=t.parsePoolPairData(t.address,t.tokensList[Number(o)]),r=a.formatFixed(i,s.decimalsIn),l=t._exactTokenInForTokenOut(s,p.bnum(r)).dp(s.decimalsOut),d=a.parseFixed(l.toString(),s.decimalsOut),u=function(e,t){const n=[];return t.forEach((t=>{const o=e.tokens.findIndex((e=>Je(e.address,t)));if(o<0)throw"Pool does not contain tokenIn";n.push(a.parseFixed(e.tokens[o].balance,e.tokens[o].decimals).toString())})),n}(t,[t.address,s.tokenOut]);t.updateTokenBalanceForPool(s.tokenOut,a.BigNumber.from(u[1]).sub(d)),"StablePhantom"==t.SubgraphType||"ComposableStable"==t.SubgraphType?t.updateTokenBalanceForPool(t.address,a.BigNumber.from(u[0]).add(i)):t.updateTokenBalanceForPool(t.address,t.totalShares.sub(i));const c=t.tokensList.filter((e=>!Je(e,t.address))),y=new Array(c.length).fill("0");return y[Number(o)]=d.toString(),[i,c,y]}async doExitPool(e,a){const n=a[e.poolId],o=this.exitKind(n.SubgraphType,e.encodedUserData);let i,s=[],r=[];const p=[],l=[];if(o===exports.WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT)[i,r,s]=this.exactBptInForTokensOut(e.encodedUserData,n);else{if(o!==exports.WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT)throw new Error("Exit type not implemented");[i,r,s]=this.exactBptInForOneTokenOut(e.encodedUserData,n)}for(let t=0;tt.Zero.sub(e).toString()))),[p,l]}}class Rs{constructor(e){this.relayerModel=e}async doSingleSwap(e,a){const n=this.relayerModel.doChainedRefReplacement(e.request.amount.toString()),o=a[e.request.poolId],[,i]=this.doSwap(e.request.assetIn,e.request.assetOut,o,e.request.kind,n),s=t.Zero.sub(i);if(!e.outputReference)throw new Error("Missing outputReference");return this.relayerModel.setChainedReferenceValue(e.outputReference.toString(),s.abs().toString()),[s.toString(),n]}async doBatchSwap(e,a){const n=e.assets,o=new Array(n.length).fill(t.Zero);let i;for(let t=0;t{const s=n[t.assetInIndex],r=n[t.assetOutIndex],p=a[t.poolId];let l=t.amount;"0"===l&&(l=i);const[d,u]=this.doSwap(s,r,p,e.swapType,l);i=e.swapType===exports.SwapType.SwapExactIn?u.toString():d.toString(),o[t.assetInIndex]=o[t.assetInIndex].add(d),o[t.assetOutIndex]=o[t.assetOutIndex].sub(u)}));for(let t=0;te.toString()))}doSwap(e,n,o,i,s){const r=o.parsePoolPairData(e,n),l=i===exports.SwapType.SwapExactIn;let d=l?a.BigNumber.from(s):t.Zero,u=l?t.Zero:a.BigNumber.from(s);const c=a.formatFixed(d,r.decimalsIn),y=a.formatFixed(u,r.decimalsOut);if(l){const e=o._exactTokenInForTokenOut(r,p.bnum(c.toString())).dp(r.decimalsOut);u=a.parseFixed(e.toString(),r.decimalsOut)}else{const e=o._tokenInForExactTokenOut(r,p.bnum(y.toString())).dp(r.decimalsIn);d=a.parseFixed(e.toString(),r.decimalsIn)}return o.updateTokenBalanceForPool(r.tokenIn,r.balanceIn.add(d)),o.updateTokenBalanceForPool(r.tokenOut,r.balanceOut.sub(u)),[d,u]}}class Ns{constructor(e){this.relayerModel=e}async doUnwrap(e,n){const o=n[e.poolId],i=o.tokens[o.wrappedIndex],s=o.tokens[o.mainIndex],r=this.relayerModel.doChainedRefReplacement(e.amount.toString()),p=ce.divDownFixed(ce.mulDownFixed(BigInt(r),a.parseFixed(i.priceRate,18).toBigInt()),t.WeiPerEther.toBigInt()).toString();this.relayerModel.setChainedReferenceValue(e.outputReference.toString(),p);return[[i.address,s.address],[r,t.Zero.sub(p).toString()]]}}class Ls{constructor(e){this.relayerModel=e,this.joinModel=new Ms(e),this.exitModel=new Fs(e),this.swapModel=new Rs(e),this.unwrapModel=new Ns(e)}async doJoin(e,t){return this.joinModel.doJoinPool(e,t)}async doExit(e,t){return this.exitModel.doExitPool(e,t)}async doBatchSwap(e,t){return this.swapModel.doBatchSwap(e,t)}async doSingleSwap(e,t){return this.swapModel.doSingleSwap(e,t)}async doUnwrap(e,t){return this.unwrapModel.doUnwrap(e,t)}}class Ds{constructor(){this.chainedRefs={}}setChainedReferenceValue(e,t){this.chainedRefs[e]=t}getChainedReferenceValue(e){return this.chainedRefs[e]}doChainedRefReplacement(e){return ps.isChainedReference(e.toString())?this.getChainedReferenceValue(e.toString()):e}doChainedRefReplacements(e){return e.map((e=>this.doChainedRefReplacement(e).toString()))}}class Us{constructor(e,t){this.poolDataService=e,this.wrappedNativeAsset=t,this.poolsArray=[],this.poolsDict={}}dataSource(){return this.poolDataService}async all(e=!1){if(e||0===this.poolsArray.length){const e=s.cloneDeep(await this.dataSource().getPools());for(const t of e)if(["Weighted","Investment","Stable","LiquidityBootstrapping"].includes(t.poolType)){const e={address:t.address,balance:t.totalShares,decimals:18,priceRate:"1",weight:"0"};t.tokens.push(e),t.tokensList.push(t.address)}this.poolsArray=e}return this.poolsArray}parseToPoolsDict(e){return Object.fromEntries(s.cloneDeep(e).filter((e=>e.tokensList.length>0&&"0"!==e.tokens[0].balance)).map((e=>[e.id,this.parseNewPool(e)])).filter((([,e])=>void 0!==e)))}parseNewPool(e){if(!e.swapEnabled)return;let t={};try{if(["Weighted","Investment","LiquidityBootstrapping"].includes(e.poolType)){t=p.WeightedPool.fromPool(e,!1)}else if("Stable"===e.poolType){t=p.StablePool.fromPool(e)}else if("MetaStable"===e.poolType){t=p.MetaStablePool.fromPool(e)}else if(e.poolType.toString().includes("Linear")){t=p.LinearPool.fromPool(e)}else if("StablePhantom"===e.poolType){t=p.PhantomStablePool.fromPool(e)}else{if("ComposableStable"!==e.poolType){return void j.getInstance().warn(`Unknown pool type or type field missing: ${e.poolType} ${e.id}`)}t=p.ComposableStablePool.fromPool(e)}if(!t)throw new Error("Issue with Pool");t.SubgraphType=e.poolType}catch(e){return void console.error("Error parseNewPool")}return t}async poolsDictionary(e=!1){if(e||0===Object.keys(this.poolsDict).length){const t=await this.all(e);this.poolsDict=this.parseToPoolsDict(t)}return this.poolsDict}}var Vs,qs;!function(e){e[e.BatchSwap=0]="BatchSwap",e[e.Join=1]="Join",e[e.Exit=2]="Exit",e[e.Swap=3]="Swap",e[e.Unwrap=4]="Unwrap"}(Vs||(Vs={}));class Gs{constructor(e,t){this.poolsSource=new Us(e,t)}updateDeltas(e,a,n){return a.forEach(((a,o)=>{e[a]||(e[a]=t.Zero),e[a]=e[a].add(n[o])})),e}async multicall(e,t=!1){const a=new Ds,n=new Ls(a),o=await this.poolsSource.poolsDictionary(t),i={};for(const t of e){let e=[],a=[];switch(t.actionType){case Vs.Join:[e,a]=await n.doJoin(t,o);break;case Vs.Exit:[e,a]=await n.doExit(t,o);break;case Vs.BatchSwap:e=t.assets,a=await n.doBatchSwap(t,o);break;case Vs.Swap:e=[t.request.assetOut,t.request.assetIn],a=await n.doSingleSwap(t,o);break;case Vs.Unwrap:[e,a]=await n.doUnwrap(t,o)}this.updateDeltas(i,e,a)}return i}static mapSwapRequest(e){return{actionType:Vs.Swap,request:e.request,funds:e.funds,outputReference:e.outputReference}}static mapBatchSwapRequest(e){return{actionType:Vs.BatchSwap,swaps:e.swaps,assets:e.assets,funds:e.funds,swapType:e.swapType,outputReferences:e.outputReferences}}static mapJoinPoolRequest(e){return{actionType:Vs.Join,poolId:e.poolId,encodedUserData:e.joinPoolRequest.userData,outputReference:e.outputReference}}static mapExitPoolRequest(e){return{actionType:Vs.Exit,poolId:e.poolId,encodedUserData:e.exitPoolRequest.userData,outputReferences:e.outputReferences}}static mapUnwrapRequest(e,t,a){return{actionType:Vs.Unwrap,poolId:a,amount:e,outputReference:t}}}const Ws=It.createInterface();function Hs(e){j.getInstance()}class Ks{constructor(e,n,o){this.poolGraph=e,this.simulationService=o,this.createCalls=async(e,t,a,n,o)=>{const{multiRequests:i,encodedCalls:s,outputIndexes:r,deltas:p}=this.createActionCalls(e,t,a,n);o&&s.unshift(this.createSetRelayerApproval(o));return{multiRequests:i,encodedCall:Ws.encodeFunctionData("multicall",[s]),outputIndexes:o?r.map((e=>e+1)):r,deltas:p}},this.amountsOutByJoinPath=async(e,n,o,i,s,r,p,l)=>{const d=await this.simulationService.simulateGeneralisedJoin(this.relayer,n,o,s,e,i,r,p,l),u=d.reduce(((e,t)=>e.add(a.BigNumber.from(t))),t.Zero).toString();return{amountsOut:d,totalAmountOut:u}},this.minAmountsOutByJoinPath=(e,t,n)=>({minAmountsOut:t.map((t=>Ke(a.BigNumber.from(t),a.BigNumber.from(e)).toString())),totalMinAmountOut:Ke(a.BigNumber.from(n),a.BigNumber.from(e)).toString()}),this.createActionCalls=(e,t,a,n)=>{const o=[],i=[],s=[],r=!n,p={};return e.forEach(((e,l)=>{const d=e[0].isLeaf,u=[];if(e.forEach(((o,s)=>{var c,y;if(o.children.length>0&&0===o.children.filter((e=>this.shouldBeConsidered(e))).length)return void(o.index="0");const b=o.children.filter((e=>this.shouldBeConsidered(e))).some((e=>"input"===e.joinAction))?t:this.relayer,m=s===e.length-1,f=null!==(y=d&&(null===(c=o.parent)||void 0===c?void 0:c.children.filter((e=>this.shouldBeConsidered(e))).some((e=>"input"===e.joinAction))))&&void 0!==y&&y,T=m||f?t:this.relayer,h=m&&n?n[l]:"0";switch(o.joinAction){case"batchSwap":{const{modelRequest:e,encodedCall:t,assets:n,amounts:s}=this.createSwap(o,l,h,b,T,a,r);u.push(e),i.push(t),this.updateDeltas(p,n,s)}break;case"joinPool":{const{modelRequest:e,encodedCall:t,assets:n,amounts:s,minBptOut:d}=this.createJoinPool(o,l,h,b,T,a,r);u.push(e),i.push(t),this.updateDeltas(p,[o.address,...n],[d,...s])}break;default:return}})),r){const e=100*l,t=ps.encodePeekChainedReferenceValue(ps.toChainedReference(e,!1));i.push(t),s.push(i.indexOf(t))}o.push(u)})),{multiRequests:o,encodedCalls:i,outputIndexes:s,deltas:p}},this.createSetRelayerApproval=e=>ps.encodeSetRelayerApproval(this.relayer,!0,e),this.createSwap=(e,n,o,i,s,r,p)=>{var l;if(1!==e.children.length)throw new Error("Unsupported swap");const d=e.children[0].address,u=this.getOutputRefValue(n,e.children[0]),c=o,y=r&&!p?this.replaceWrappedNativeAsset([d])[0]:d,b={poolId:e.id,kind:exports.SwapType.SwapExactIn,assetIn:y,assetOut:e.address,amount:u.value,userData:"0x"},m={sender:i,recipient:s,fromInternalBalance:this.allImmediateChildrenSendToInternal(e),toInternalBalance:this.allSiblingsSendToInternal(e)},f=a.BigNumber.from(this.getOutputRefValue(n,e).value),T=r&&!p?Ue([y],[u.value]):t.Zero,h={request:b,funds:m,limit:c,deadline:a.BigNumber.from(Math.ceil(Date.now()/1e3)+3600),value:T,outputReference:f},I=ps.encodeSwap(h);Hs(),Hs(JSON.stringify(h)),Hs(JSON.stringify(null===(l=h.value)||void 0===l?void 0:l.toString()));const g=Gs.mapSwapRequest(h),_=e.children.some((e=>"input"===e.joinAction))?u.value:"0",x=null!=e.parent?"0":a.BigNumber.from(o).mul(-1).toString();return{modelRequest:g,encodedCall:I,assets:[e.address,d],amounts:[x,_]}},this.createJoinPool=(e,a,n,o,i,s,r)=>{var p;const l=[],d=[];e.children.forEach((e=>{l.push(e.address),this.shouldBeConsidered(e)?d.push(this.getOutputRefValue(a,e).value):d.push("0")})),e.type===exports.PoolType.ComposableStable&&(l.push(e.address),d.push("0"));const u=new Y(this.wrappedNativeAsset),[c,y]=u.sortTokens(l,d);let b=[];const m=c.map((e=>e.toLowerCase())).indexOf(e.address.toLowerCase());let f;b=-1===m?y:[...y.slice(0,m),...y.slice(m+1)],f=e.type===exports.PoolType.Weighted?S.joinExactTokensInForBPTOut(b,n):A.joinExactTokensInForBPTOut(b,n);const T=s&&!r?Ue(this.replaceWrappedNativeAsset(c),y):t.Zero,h=this.allImmediateChildrenSendToInternal(e),I=ps.formatJoinPoolInput({poolId:e.id,kind:0,sender:o,recipient:i,value:T,outputReference:this.getOutputRefValue(a,e).value,joinPoolRequest:{},assets:s&&!r?this.replaceWrappedNativeAsset(c):c,maxAmountsIn:y,userData:f,fromInternalBalance:h}),g=ps.encodeJoinPool(I);Hs(),Hs(JSON.stringify(I)),Hs(JSON.stringify(null===(p=I.value)||void 0===p?void 0:p.toString()));const _=Gs.mapJoinPoolRequest(I),x=y.map((e=>ps.isChainedReference(e)?"0":e)),P=ps.isChainedReference(n)?"0":n,w=e.children.filter((e=>this.shouldBeConsidered(e))).some((e=>"input"===e.joinAction));return{modelRequest:_,encodedCall:g,assets:w?c:[],amounts:w?x:[],minBptOut:null!=e.parent?t.Zero.toString():t.Zero.sub(P).toString()}},this.getOutputRefValue=(e,t)=>"input"===t.joinAction?{value:t.index,isRef:!1}:"0"===t.index&&t.parent?{value:"0",isRef:!0}:{value:ps.toChainedReference(a.BigNumber.from(t.index).add(100*e)).toString(),isRef:!0},this.shouldBeConsidered=e=>"0"!==e.index,this.sendsToInternalBalance=e=>"input"!==e.joinAction&&"joinPool"!==e.joinAction,this.allImmediateChildrenSendToInternal=e=>{const t=e.children.filter((e=>this.shouldBeConsidered(e)));return 0!==t.length&&t.filter((e=>this.sendsToInternalBalance(e))).length===t.length},this.allSiblingsSendToInternal=e=>{if(!e.parent)return!1;const t=e.parent.children.filter((e=>this.shouldBeConsidered(e)));return t.filter((e=>this.sendsToInternalBalance(e))).length===t.length},this.replaceWrappedNativeAsset=e=>{const a=e.findIndex((e=>e.toLowerCase()===this.wrappedNativeAsset.toLowerCase()));return Xe(e,a,t.AddressZero)};const{tokens:i,contracts:s}=Ba(n.chainId);this.relayer=s.balancerRelayer,this.wrappedNativeAsset=i.wrappedNativeAsset}checkInputs(e,a){if(0===e.length)throw new Oa(exports.BalancerErrorCode.MISSING_TOKENS);if(a.every((e=>"0"===e)))throw new Oa(exports.BalancerErrorCode.JOIN_WITH_ZERO_AMOUNT);if(e.length!=a.length)throw new Oa(exports.BalancerErrorCode.INPUT_LENGTH_MISMATCH);if(e.some((e=>e===t.AddressZero))&&e.some((e=>e.toLowerCase()===this.wrappedNativeAsset.toLowerCase())))throw new Oa(exports.BalancerErrorCode.INPUT_TOKEN_INVALID)}async joinPool(e,a,n,o,i,s,r,p){this.checkInputs(a,n);const l=await this.poolGraph.getGraphNodes(!0,e,[]),d=a.findIndex((e=>e===t.AddressZero)),u=-1!==d,c=Xe(a,d,this.wrappedNativeAsset.toLowerCase()),y=Ks.getJoinPaths(l,c,n),b=Ks.totalBptZeroPriceImpact(y);Hs();const{multiRequests:m,encodedCall:f,outputIndexes:T}=await this.createCalls(y,o,u,void 0,p),{amountsOut:h,totalAmountOut:I}=await this.amountsOutByJoinPath(o,m,f,c,T,s,r,"0"),{minAmountsOut:g,totalMinAmountOut:_}=this.minAmountsOutByJoinPath(i,h,I),x=Ma(BigInt(I),b.toBigInt(),!0).toString();Hs();const{encodedCall:P,deltas:w}=await this.createCalls(y,o,u,g,p),E=u?w[this.wrappedNativeAsset.toLowerCase()]:t.Zero;return Hs(E.toString()),this.assertDeltas(e,w,c,n,_),{to:this.relayer,encodedCall:P,expectedOut:I,minOut:_,priceImpact:x,value:E}}assertDeltas(e,t,n,o,i){var s;const r=R(e);if(t[r.toLowerCase()].add(i).abs().gt(3))throw console.error("join assertDeltas, bptOut: ",r,i,null===(s=t[r.toLowerCase()])||void 0===s?void 0:s.toString()),new Oa(exports.BalancerErrorCode.JOIN_DELTA_AMOUNTS);delete t[r.toLowerCase()],n.forEach(((e,n)=>{var i,s;if(!a.BigNumber.from(o[n]).eq(0)&&(null===(i=t[e.toLowerCase()])||void 0===i?void 0:i.toString())!==o[n])throw console.error("join assertDeltas, tokenIn: ",e,o[n],null===(s=t[e.toLowerCase()])||void 0===s?void 0:s.toString()),new Oa(exports.BalancerErrorCode.JOIN_DELTA_AMOUNTS);delete t[e.toLowerCase()]}));for(const e in t)if("0"!==t[e].toString())throw console.error("join assertDeltas, non-input token should be 0: ",e,t[e].toString()),new Oa(exports.BalancerErrorCode.JOIN_DELTA_AMOUNTS)}updateDeltas(e,a,n){return a.forEach(((a,o)=>{const i=a.toLowerCase();e[i]||(e[i]=t.Zero),e[i]=e[i].add(n[o])})),e}}qs=Ks,Ks.getJoinPaths=(e,n,o)=>{const i=[],r=e.filter((e=>n.filter(((e,t)=>a.BigNumber.from(o[t]).gt(0))).map((e=>e.toLowerCase())).includes(e.address.toLowerCase())));r.some((e=>e.isLeaf))&&i.push(e);const p=r.filter((e=>!e.isLeaf));return p.forEach((e=>{const r=o.find(((t,a)=>Je(n[a],e.address))),l=p.filter((t=>Je(t.address,e.address))).reduce(((e,t)=>e.add(t.proportionOfParent)),a.BigNumber.from(0)),d=a.BigNumber.from(r).mul(e.proportionOfParent).div(l).toString(),[u]=Cs.createInputTokenNode(0,e.address,e.decimals,e.parent,t.WeiPerEther,e.balance);u.index=d,u.isLeaf=!1;const c=[u];let y=u.parent,b=u;for(;y;){const e=s.cloneDeep(y);e.children=e.children.map((e=>e.address===b.address?b:{...e,index:"0"})),c.push(e),b=e,y=e.parent}i.push(c)})),qs.updateInputAmounts(i,n,o),i},Ks.updateInputAmounts=(e,t,n)=>{const o=(e,t)=>{if(e.length>1){const n=e.reduce(((e,t)=>e.add(t.index)),a.BigNumber.from(0)),o=a.BigNumber.from(t).sub(n);e[0].index=o.add(e[0].index).toString()}},i=e.find((e=>e[0].isLeaf));if(i){const e=qs.updateTotalProportions(i);i.forEach((a=>{"input"===a.joinAction&&(a=qs.updateNodeAmount(a,t,n,e))})),t.forEach(((e,t)=>{const a=i.filter((t=>t.isLeaf&&Je(t.address,e)));o(a,n[t])}))}const s=e.filter((e=>!e[0].isLeaf));s.length>1&&t.forEach(((e,t)=>{const a=s.map((e=>e[0])).filter((t=>Je(t.address,e)));o(a,n[t])}))},Ks.totalBptZeroPriceImpact=e=>{let t=a.BigNumber.from("0");return e.forEach((e=>{if(e[0].isLeaf){e.filter((e=>e.isLeaf)).forEach((e=>{const a=qs.bptOutZeroPiForInputNode(e);t=t.add(a)}))}else{const a=qs.bptOutZeroPiForInputNode(e[0]);t=t.add(a)}})),t},Ks.bptOutZeroPiForInputNode=e=>{if("0"===e.index||"input"!==e.joinAction)return BigInt(0);let t=1,n=e.parent,o=e.address;for(;void 0!==n;){if("batchSwap"===n.joinAction||"joinPool"===n.joinAction){const e=n.spotPrices[o.toLowerCase()];t*=parseFloat(e),o=n.address}n=n.parent}const i=a.parseFixed(t.toFixed(18),18),s=re(BigInt(e.decimals)),r=pe(BigInt(e.index),s);return ce.divDownFixed(r,i.toBigInt())},Ks.updateTotalProportions=e=>{const t={};return e.forEach((e=>{t[e.address]?t[e.address]=t[e.address].add(e.proportionOfParent):t[e.address]=e.proportionOfParent})),t},Ks.updateNodeAmount=(e,t,a,n)=>{const o=t.map((e=>e.toLowerCase())).indexOf(e.address.toLowerCase());if(-1===o)return e.index="0",e;const i=n[e.address],s=e.proportionOfParent.mul(1e18.toString()).div(i).mul(a[o]).div(1e18.toString());return e.index=s.toString(),e};class $s{constructor(e,n){this.chainId=e,this.simulateMulticall=async(e,t,a,n,o="0")=>{const i={...await this.encodeBalanceAndAllowanceOverrides(a,n),...await this.encodeRelayerApprovalOverride(a,e)};return this.simulateTransaction(e,t,a,i,o)},this.simulateTransaction=async(e,t,n,o,i)=>{const s=Object.fromEntries(Object.keys(o).map((e=>[e,{storage:o[e].value}]))),r={...s,[n]:{balance:a.parseFixed("100",18).toHexString()}},p={network_id:this.chainId.toString(),block_number:this.blockNumber,from:n,to:e,input:t,value:i,save_if_fails:!0,simulation_type:"quick",state_objects:r},l=this.tenderlyUrl+"simulate";return(await w.default.post(l,p,this.opts)).data.transaction.transaction_info.call_trace.output},this.encodeRelayerApprovalOverride=async(e,t)=>{const a={[`${this.vaultAddress}`]:{value:{[`_approvedRelayers[${e}][${t}]`]:(!0).toString()}}};return await this.requestStateOverrides(a)},this.encodeBalanceAndAllowanceOverrides=async(e,a)=>{const n=a.filter((e=>e!==t.AddressZero));if(0===n.length)return{};let o={};n.forEach((a=>o={...o,[`${a}`]:{value:{[`_balances[${e}]`]:t.MaxInt256.toString(),[`_allowances[${e}][${this.vaultAddress}]`]:t.MaxInt256.toString(),[`balanceOf[${e}]`]:t.MaxInt256.toString(),[`allowance[${e}][${this.vaultAddress}]`]:t.MaxInt256.toString(),[`balances[${e}]`]:t.MaxInt256.toString(),[`allowed[${e}][${this.vaultAddress}]`]:t.MaxInt256.toString()}}}));const i=await this.requestStateOverrides(o);if(Object.keys(i).some((e=>2!==Object.keys(i[e].value).length)))throw new Error("Couldn't encode state overrides - states should match the ones in the contracts");return i},this.requestStateOverrides=async e=>{const t=this.tenderlyUrl+"contracts/encode-states",a={networkID:this.chainId.toString(),stateOverrides:e},n=(await w.default.post(t,a,this.opts)).data.stateOverrides;if(!n||Object.keys(n).length!==Object.keys(e).length)throw new Error("Couldn't encode state overrides - contracts should be verified and whitelisted on Tenderly");return n};const{contracts:o}=Ba(this.chainId);this.vaultAddress=o.vault,this.tenderlyUrl=`https://api.tenderly.co/api/v1/account/${n.user}/project/${n.project}/`,this.opts={headers:{"X-Access-Key":n.accessKey}},this.blockNumber=n.blockNumber}}var Js;exports.SimulationType=void 0,(Js=exports.SimulationType||(exports.SimulationType={}))[Js.Tenderly=0]="Tenderly",Js[Js.VaultModel=1]="VaultModel",Js[Js.Static=2]="Static";class js{constructor(t,a){this.simulateGeneralisedJoin=async(e,t,a,n,o,i,s,r,p)=>{const l=[];switch(r){case exports.SimulationType.Tenderly:{if(!this.tenderlyHelper)throw new Error("Missing Tenderly config");const t=await this.tenderlyHelper.simulateMulticall(e,a,o,i,p);l.push(...this.decodeResult(t,n));break}case exports.SimulationType.VaultModel:{const e=await this.simulateRequests(t);l.push(...e);break}case exports.SimulationType.Static:{const t=await s.call({to:e,data:a,value:p});try{l.push(...this.decodeResult(t,n))}catch(e){const a=Buffer.from(t.split("x")[1],"hex").toString("utf8");throw new Error(`Transaction reverted with error: ${a}`)}break}default:throw new Error("Simulation type not supported")}return l},this.simulateGeneralisedExit=async(e,t,a,n,o,i,s,r)=>{const p=[];switch(r){case exports.SimulationType.Tenderly:{if(!this.tenderlyHelper)throw new Error("Missing Tenderly config");const t=await this.tenderlyHelper.simulateMulticall(e,a,o,[i]);p.push(...this.decodeResult(t,n));break}case exports.SimulationType.VaultModel:{const e=await this.simulateRequests(t);p.push(...e);break}case exports.SimulationType.Static:{const t=await s.call({to:e,data:a});try{p.push(...this.decodeResult(t,n))}catch(e){const a=Buffer.from(t.split("x")[1],"hex").toString("utf8");throw new Error(`Transaction reverted with error: ${a}`)}break}default:throw new Error("Simulation type not supported")}return p},this.decodeResult=(t,a)=>{const n=e.defaultAbiCoder.decode(["bytes[]"],t)[0];return a.map((t=>e.defaultAbiCoder.decode(["uint256"],n[t]).toString()))},this.simulateRequests=async e=>{if(void 0===this.vaultModel)throw new Error("Missing Vault Model Config.");const t=[];for(const[a,n]of e.entries()){const e=await this.vaultModel.multicall(n,0===a),o=Object.values(e).filter((e=>e.lt(0)));if(0===o.length)throw new Error("No delta found for token out.");t.push(...o.map((e=>e.mul(-1).toString())))}return t},t.tenderly&&(this.tenderlyHelper=new $s(t.chainId,t.tenderly)),this.vaultModel=a?new Gs(a,t.addresses.tokens.wrappedNativeAsset):void 0}}const Xs=It.createInterface();function Ys(e){j.getInstance()}class zs{constructor(e,n,o){this.poolGraph=e,this.simulationService=o,this.amountsOutByExitPath=async(e,t,a,n,o,i,s)=>await this.simulationService.simulateGeneralisedExit(this.relayer,t,a,o,e,n,i,s),this.amountsOutByTokenOut=(e,a,n)=>{const o={};a.forEach(((e,a)=>{var i;return o[e]=(null!==(i=o[e])&&void 0!==i?i:t.Zero).add(n[a])}));return e.map((e=>o[e].toString()))},this.minAmountsOut=(e,t,n)=>({minAmountsOutByExitPath:e.map((e=>Ke(a.BigNumber.from(e),a.BigNumber.from(n)).toString())),minAmountsOutByTokenOut:t.map((e=>Ke(a.BigNumber.from(e),a.BigNumber.from(n)).toString()))}),this.getExitPaths=(e,n)=>{const o=e.map((e=>{const a=[e];for(;a[0].parent;)a.unshift(s.cloneDeep(a[0].parent));return a[0].index=a[a.length-1].proportionOfParent.mul(n).div(t.WeiPerEther).toString(),a})),i=o.reduce(((e,t)=>{const n=t[0].index;return a.BigNumber.from(n).add(e)}),t.Zero),r=a.BigNumber.from(n).sub(i);return o[o.length-1][0].index=r.add(o[o.length-1][0].index).toString(),o},this.createUnwrap=(e,a,n,o,i,s)=>{var r,p;const l=ps.toChainedReference(this.getOutputRef(n,e.index)).toString(),d=ps.toChainedReference(this.getOutputRef(n,a.index)),u=null===(r=e.parent)||void 0===r?void 0:r.type,c={wrappedToken:e.address,sender:i,recipient:s,amount:l,outputReference:d},y=ps.encodeUnwrap(c,u);Ys(),Ys(),Ys(JSON.stringify(c));return{modelRequest:Gs.mapUnwrapRequest(l,d,null===(p=e.parent)||void 0===p?void 0:p.id),encodedCall:y,assets:[a.address],amounts:[t.Zero.sub(o).toString()]}},this.getOutputRef=(e,t)=>100*e+parseInt(t),this.receivesFromInternal=e=>!!e.parent&&("output"!==e.exitAction&&"unwrap"!==e.exitAction&&"exitPool"!==e.exitAction);const{tokens:i,contracts:r}=Ba(n.chainId);this.wrappedNativeAsset=i.wrappedNativeAsset,this.relayer=r.balancerRelayer}async getExitInfo(e,t,a,n){Ys();const o=await this.getExit(e,t,a,n,[],exports.SimulationType.VaultModel);return{tokensOut:o.tokensOut,estimatedAmountsOut:o.expectedAmountsOut,priceImpact:o.priceImpact,tokensToUnwrap:o.tokensToUnwrap}}async buildExitCall(e,t,a,n,o,i,s,r){Ys();const p=await this.getExit(e,t,a,o,null!=r?r:[],i,s),{minAmountsOutByExitPath:l,minAmountsOutByTokenOut:d}=this.minAmountsOut(p.expectedAmountsOutByExitPath,p.expectedAmountsOut,n);Ys();const{encodedCall:u,deltas:c}=await this.createCalls(p.exitPaths,a,p.isProportional,l,s);return this.assertDeltas(e,c,t,p.tokensOut,d),{to:this.relayer,encodedCall:u,tokensOut:p.tokensOut,expectedAmountsOut:p.expectedAmountsOut,minAmountsOut:d,priceImpact:p.priceImpact}}async getExit(e,t,n,o,i,s,r){const p=await this.poolGraph.getGraphNodes(!1,e,i),l=Cs.isProportionalPools(p);Ys();let d=[],u=[],c=[];const y=p.filter((e=>"output"===e.exitAction));if(u=y.map((e=>e.address.toLowerCase())),c=[...new Set(u)].sort(),l){const e=p.map(((e,a)=>(0===a&&(e.index=t),e)));d[0]=e}else d=this.getExitPaths(y,t);const{multiRequests:b,encodedCall:m,outputIndexes:f}=await this.createCalls(d,n,l,void 0,r),T=await this.amountsOutByExitPath(n,b,m,p[0].address,f,o,s),h=y.filter(((e,t)=>a.BigNumber.from(T[t]).gt(e.balance))).map((e=>e.address.toLowerCase()));if(i.some((e=>h.includes(e.toLowerCase()))))throw new Error("Insufficient pool balance to perform generalised exit - try exitting with smaller amounts");if(h.length>0)return await this.getExit(e,t,n,o,[...new Set(h)].sort(),s,r);{const a=this.amountsOutByTokenOut(c,u,T),n=await this.calculatePriceImpact(e,this.poolGraph,c,a,t);return{tokensToUnwrap:i,tokensOut:c,exitPaths:d,isProportional:l,expectedAmountsOut:a,expectedAmountsOutByExitPath:T,priceImpact:n}}}async calculatePriceImpact(e,t,a,n,o){const i=await t.getGraphNodes(!0,e,[]),s=Ks.getJoinPaths(i,a,n),r=Ks.totalBptZeroPriceImpact(s);return Ma(BigInt(o),r.toBigInt(),!1).toString()}assertDeltas(e,t,a,n,o){var i;const s=R(e);if(t[s.toLowerCase()].sub(a).abs().gt(3))throw console.error("exit assertDeltas, bptIn: ",s,a,null===(i=t[s.toLowerCase()])||void 0===i?void 0:i.toString()),new Oa(exports.BalancerErrorCode.EXIT_DELTA_AMOUNTS);delete t[s.toLowerCase()],n.forEach(((e,a)=>{var n;if(t[e.toLowerCase()].add(o[a]).abs().gt(1))throw console.error("exit assertDeltas, tokenOut: ",e,o[a],null===(n=t[e.toLowerCase()])||void 0===n?void 0:n.toString()),new Oa(exports.BalancerErrorCode.EXIT_DELTA_AMOUNTS);delete t[e.toLowerCase()]}));for(const e in t)if("0"!==t[e].toString())throw console.error("exit assertDeltas, non-input token should be 0: ",e,t[e].toString()),new Oa(exports.BalancerErrorCode.EXIT_DELTA_AMOUNTS)}async createCalls(e,t,a,n,o){const{multiRequests:i,calls:r,outputIndexes:p,deltas:l}=this.createActionCalls(s.cloneDeep(e),t,a,n);o&&r.unshift(ps.encodeSetRelayerApproval(this.relayer,!0,o));return{multiRequests:i,encodedCall:Xs.encodeFunctionData("multicall",[r]),outputIndexes:o?p.map((e=>e+1)):p,deltas:l}}updateDeltas(e,a,n){return a.forEach(((a,o)=>{const i=a.toLowerCase();e[i]||(e[i]=t.Zero),e[i]=e[i].add(n[o])})),e}createActionCalls(e,a,n,o){const i=[],s=[],r=[],p=!o,l={},d=(e,t)=>t.children.filter((t=>e.map((e=>e.index)).includes(t.index))).some((e=>"output"===e.exitAction))?a:this.relayer;return e.forEach(((e,u)=>{const c=[],y=e.filter((e=>"output"===e.exitAction));e.forEach((i=>{const b=i.children.find((t=>e.map((e=>e.index)).includes(t.index))),m=((e,t)=>t.parent?d(e,t.parent):a)(e,i),f=d(e,i),T=i.children.filter((t=>e.map((e=>e.index)).includes(t.index))).some((e=>"output"===e.exitAction||"unwrap"===e.exitAction));let h="0";const I=Array(i.children.length).fill("0");switch(o&&T&&(n?i.children.forEach(((e,a)=>{let n;"unwrap"===e.exitAction?(n=y.indexOf(e.children[0]),h=t.WeiPerEther.mul(o[n]).div(e.priceRate).toString()):"output"===e.exitAction?(n=y.indexOf(e),h=o[n]):h="0",I[a]=h})):h="unwrap"===(null==b?void 0:b.exitAction)?t.WeiPerEther.mul(o[u]).div(b.priceRate).toString():o[u]),i.exitAction){case"unwrap":{const{modelRequest:e,encodedCall:t,assets:a,amounts:n}=this.createUnwrap(i,b,u,h,m,f);c.push(e),s.push(t),this.updateDeltas(l,a,n);break}case"batchSwap":{const{modelRequest:e,encodedCall:t,assets:a,amounts:n}=this.createSwap(i,b,u,h,m,f);c.push(e),s.push(t),this.updateDeltas(l,a,n);break}case"exitPool":{let e;e=n?this.createExitPoolProportional(i,I,m,f):this.createExitPool(i,b,u,h,m,f);const{modelRequest:t,encodedCall:a,bptIn:o,tokensOut:r,amountsOut:p}=e;c.push(t),s.push(a),this.updateDeltas(l,[i.address,...r],[o,...p]);break}case"output":p&&(s.push(ps.encodePeekChainedReferenceValue(ps.toChainedReference(this.getOutputRef(u,i.index),!1))),r.push(s.length-1));break;default:return}})),i.push(c)})),{multiRequests:i,calls:s,outputIndexes:r,deltas:l}}createSwap(e,t,n,o,i,s){const r=!e.parent,p=r?e.index:ps.toChainedReference(this.getOutputRef(n,e.index)).toString(),l=t.address,d=[l,e.address],u=o,c={poolId:e.id,kind:exports.SwapType.SwapExactIn,assetIn:e.address,assetOut:l,amount:p,userData:"0x"},y={sender:i,recipient:s,fromInternalBalance:this.receivesFromInternal(e),toInternalBalance:this.receivesFromInternal(t)},b=ps.toChainedReference(this.getOutputRef(n,t.index)),m={request:c,funds:y,limit:u,deadline:a.BigNumber.from(Math.ceil(Date.now()/1e3)+3600),value:"0",outputReference:b};Ys(),Ys(JSON.stringify(m));const f=ps.encodeSwap(m),T=r?p:"0";return{modelRequest:Gs.mapSwapRequest(m),encodedCall:f,assets:d,amounts:["output"!==t.exitAction?"0":a.BigNumber.from(o).mul(-1).toString(),T]}}createBatchSwap(e,n,o,i,s,r){const p=!e.parent,l=p?e.index:ps.toChainedReference(this.getOutputRef(o,e.index)).toString(),d=[...n.map((e=>e.address)),e.address],u=[...i];u.push(l);const c=[],y=[];n.forEach(((a,n)=>{const o=a.proportionOfParent.mul(l).div(t.WeiPerEther).toString(),i={poolId:e.id,assetInIndex:d.length-1,assetOutIndex:n,amount:o,userData:"0x"};c.push(i),y.push({index:n,key:ps.toChainedReference(this.getOutputRef(0,a.index))})}));const b=c.reduce(((e,t)=>e.add(t.amount)),a.BigNumber.from(0)),m=a.BigNumber.from(l).sub(b);c[0].amount=m.add(c[0].amount).toString();const f={sender:s,recipient:r,fromInternalBalance:this.receivesFromInternal(e),toInternalBalance:this.receivesFromInternal(n[0])},T={swapType:exports.SwapType.SwapExactIn,swaps:c,assets:d,funds:f,limits:u,deadline:a.BigNumber.from(Math.ceil(Date.now()/1e3)+3600),value:"0",outputReferences:y};Ys(),Ys(JSON.stringify(T));const h=ps.encodeBatchSwap(T),I=Gs.mapBatchSwapRequest(T),g=p?l:"0",_=[...n.map(((e,t)=>"output"!==e.exitAction?"0":a.BigNumber.from(i[t]).mul(-1).toString())),g];return{modelRequest:I,encodedCall:h,assets:d,amounts:_}}createExitPool(e,a,n,o,i,s){const r=a.address,p=!e.parent,l=p?e.index:ps.toChainedReference(this.getOutputRef(n,e.index)).toString(),d=[],u=[];e.children.forEach((e=>{d.push(e.address),u.push(e.address===r?o:"0")})),e.type===exports.PoolType.ComposableStable&&(d.push(e.address),u.push("0"));const c=new Y(this.wrappedNativeAsset),[y,b]=c.sortTokens(d,u);let m=[];const f=y.map((e=>e.toLowerCase())).indexOf(e.address.toLowerCase());let T;m=-1===f?y:[...y.slice(0,f),...y.slice(f+1)],T=e.type===exports.PoolType.Weighted?S.exitExactBPTInForOneTokenOut(l,m.indexOf(r)):A.exitExactBPTInForOneTokenOut(l,m.indexOf(r));const h=[{index:y.map((e=>e.toLowerCase())).indexOf(r.toLowerCase()),key:ps.toChainedReference(this.getOutputRef(n,a.index))}],I=this.receivesFromInternal(a),g=ps.formatExitPoolInput({poolId:e.id,poolKind:0,sender:i,recipient:s,outputReferences:h,exitPoolRequest:{},assets:y,minAmountsOut:b,userData:T,toInternalBalance:I});Ys(),Ys(JSON.stringify(g));const _=ps.encodeExitPool(g),x=Gs.mapExitPoolRequest(g),P=b.map((e=>ps.isChainedReference(e)?"0":t.Zero.sub(e).toString())),w=ps.isChainedReference(l)?"0":l;return{modelRequest:x,encodedCall:_,bptIn:p?w:t.Zero.toString(),tokensOut:"output"!==a.exitAction?[]:y,amountsOut:"output"!==a.exitAction?[]:P}}createExitPoolProportional(e,a,n,o){const i=!e.parent,s=i?e.index:ps.toChainedReference(this.getOutputRef(0,e.index)).toString(),r=e.children.map((e=>e.address)),p=[...a];e.type===exports.PoolType.ComposableStable&&(r.push(e.address),p.push("0"));const l=new Y(this.wrappedNativeAsset),[d,u]=l.sortTokens(r,p);let c;c=e.type===exports.PoolType.Weighted?S.exitExactBPTInForTokensOut(s):e.type===exports.PoolType.ComposableStable?C.exitExactBPTInForAllTokensOut(s):A.exitExactBPTInForTokensOut(s);const y=e.children.map((e=>({index:d.map((e=>e.toLowerCase())).indexOf(e.address.toLowerCase()),key:ps.toChainedReference(this.getOutputRef(0,e.index))})));let b=0;e.type===exports.PoolType.ComposableStable&&(b=3);const m=e.children.every((e=>this.receivesFromInternal(e))),f=ps.formatExitPoolInput({poolId:e.id,poolKind:b,sender:n,recipient:o,outputReferences:y,exitPoolRequest:{},assets:d,minAmountsOut:u,userData:c,toInternalBalance:m});Ys(),Ys(JSON.stringify(f));const T=ps.encodeExitPool(f),h=Gs.mapExitPoolRequest(f),I=u.map((e=>ps.isChainedReference(e)?"0":t.Zero.sub(e).toString())),g=ps.isChainedReference(s)?"0":s,_=i?g:t.Zero.toString(),x=d.filter((t=>e.children.filter((e=>"output"===e.exitAction)).map((e=>e.address)).includes(t))),P=I.filter(((e,t)=>x.includes(d[t])));return{modelRequest:h,encodedCall:T,bptIn:_,tokensOut:x,amountsOut:P}}}class Zs{constructor(e){this.yesterdaysPools=e}async last24h(e){let t;return this.yesterdaysPools&&(t=await this.yesterdaysPools.find(e.id)),e.totalSwapVolume?(null==t?void 0:t.totalSwapVolume)?parseFloat(e.totalSwapVolume)-parseFloat(t.totalSwapVolume):e.createTime&&ys(e.createTime)?parseFloat(e.totalSwapVolume):0:0}}class Qs{constructor(e,t){this.checkCreateInputs=({tokenAddresses:e,tokenRateCacheDurations:t,exemptFromYieldProtocolFeeFlags:a,rateProviders:n,swapFeeEvm:o})=>{if(e.length!==t.length||t.length!==a.length||a.length!==n.length)throw new Oa(exports.BalancerErrorCode.INPUT_LENGTH_MISMATCH);if(BigInt(o)<=BigInt(0)||BigInt(o)>BigInt(1e17))throw new Oa(exports.BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE)},this.parseCreateParamsForEncoding=({name:e,symbol:t,tokenAddresses:a,amplificationParameter:n,rateProviders:o,tokenRateCacheDurations:i,exemptFromYieldProtocolFeeFlags:s,swapFeeEvm:r,owner:p,salt:l})=>{const d=new Y(this.wrappedNativeAsset),[u,c,y,b]=d.sortTokens(a,o,i,s);return[e,t,u,n,c,y,b,r.toString(),p,l||et()]},this.encodeCreateFunctionData=e=>Et.createInterface().encodeFunctionData("create",e),this.checkInitJoinInputs=({poolId:e,poolAddress:t,tokensIn:a,amountsIn:n})=>{if(!e||!t)throw new Oa(exports.BalancerErrorCode.NO_POOL_DATA);if(a.length!==n.length)throw new Oa(exports.BalancerErrorCode.INPUT_LENGTH_MISMATCH)},this.parseParamsForInitJoin=({joiner:e,poolId:t,poolAddress:a,tokensIn:n,amountsIn:o})=>{const i=new Y(this.wrappedNativeAsset),s=[...n,a],r=[...o,"0"],p=[...o,BigInt.asUintN(256,BigInt(-1)).toString()],[l,d,u]=i.sortTokens(s,r,p),c={poolId:t,sender:e,recipient:e,joinPoolRequest:{assets:l,maxAmountsIn:u,userData:C.joinInit(d),fromInternalBalance:!1}};return{attributes:c,params:[c.poolId,c.sender,c.recipient,c.joinPoolRequest]}},this.encodeInitJoinFunctionData=e=>{const t="joinPool";return{functionName:t,data:la.createInterface().encodeFunctionData(t,e)}},this.getPoolAddressAndIdWithReceipt=async(e,t)=>{var a;const n=Qe({receipt:t,to:(null===(a=this.contracts.composableStablePoolFactory)||void 0===a?void 0:a.address)||"",contractInterface:Et.createInterface(),logName:"PoolCreated"}).args.pool,o=this.getPoolInterface(),i=new y.Contract(n,o,e);return{poolAddress:n,poolId:await i.getPoolId()}};const{tokens:a}=Ba(e.chainId);this.wrappedNativeAsset=a.wrappedNativeAsset,this.contracts=t}create({name:e,symbol:t,tokenAddresses:a,amplificationParameter:n,rateProviders:o,tokenRateCacheDurations:i,exemptFromYieldProtocolFeeFlags:s,swapFeeEvm:r,owner:p,salt:l}){var d;this.checkCreateInputs({rateProviders:o,tokenAddresses:a,tokenRateCacheDurations:i,exemptFromYieldProtocolFeeFlags:s,swapFeeEvm:r});const u=this.parseCreateParamsForEncoding({name:e,symbol:t,tokenAddresses:a,amplificationParameter:n,rateProviders:o,tokenRateCacheDurations:i,exemptFromYieldProtocolFeeFlags:s,swapFeeEvm:r,owner:p,salt:l}),c=this.encodeCreateFunctionData(u);return{to:null===(d=this.contracts.composableStablePoolFactory)||void 0===d?void 0:d.address,data:c}}buildInitJoin({joiner:e,poolId:t,poolAddress:a,tokensIn:n,amountsIn:o}){this.checkInitJoinInputs({tokensIn:n,amountsIn:o,poolId:t,poolAddress:a});const{attributes:i,params:s}=this.parseParamsForInitJoin({joiner:e,poolId:t,poolAddress:a,tokensIn:n,amountsIn:o}),{functionName:r,data:p}=this.encodeInitJoinFunctionData(s);return{to:va,functionName:r,data:p,attributes:i}}getPoolInterface(){return Pt.createInterface()}}class er{constructor(e,t){this.parseCreateParamsForEncoding=({name:e,symbol:t,tokenAddresses:a,normalizedWeights:n,rateProviders:o,swapFeeEvm:i,owner:s,salt:r})=>{const p=new Y(this.wrappedNativeAsset),[l,d,u]=p.sortTokens(a,n,o);return[e,t,l,d,u,i.toString(),s,r||et()]},this.encodeCreateFunctionData=e=>ya.createInterface().encodeFunctionData("create",e),this.parseParamsForInitJoin=({joiner:e,poolId:t,tokensIn:a,amountsIn:n})=>{const o=new Y(this.wrappedNativeAsset),[i,s]=o.sortTokens(a,n),r={poolId:t,sender:e,recipient:e,joinPoolRequest:{assets:i,maxAmountsIn:s,userData:S.joinInit(s),fromInternalBalance:!1}};return{attributes:r,params:[r.poolId,r.sender,r.recipient,r.joinPoolRequest]}},this.encodeInitJoinFunctionData=e=>{const t="joinPool";return{functionName:t,data:la.createInterface().encodeFunctionData(t,e)}},this.checkInitJoinInputs=({poolId:e,tokensIn:t,amountsIn:a})=>{if(!e)throw new Oa(exports.BalancerErrorCode.NO_POOL_DATA);if(t.length!==a.length)throw new Oa(exports.BalancerErrorCode.INPUT_LENGTH_MISMATCH)};const{tokens:a}=Ba(e.chainId);this.wrappedNativeAsset=a.wrappedNativeAsset,this.contracts=t}create({name:e,symbol:t,tokenAddresses:a,normalizedWeights:n,rateProviders:o,swapFeeEvm:i,owner:s,salt:r}){var p;this.checkCreateInputs({tokenAddresses:a,normalizedWeights:n,swapFeeEvm:i,rateProviders:o});const l=this.parseCreateParamsForEncoding({name:e,symbol:t,tokenAddresses:a,normalizedWeights:n,rateProviders:o,swapFeeEvm:i,owner:s,salt:r}),d=this.encodeCreateFunctionData(l);return{to:null===(p=this.contracts.weightedPoolFactory)||void 0===p?void 0:p.address,data:d}}checkCreateInputs({tokenAddresses:e,normalizedWeights:t,swapFeeEvm:a,rateProviders:n}){if(e.length!==t.length||t.length!==n.length)throw new Oa(exports.BalancerErrorCode.INPUT_LENGTH_MISMATCH);if(e.length<2)throw new Oa(exports.BalancerErrorCode.BELOW_MIN_TOKENS);if(e.length>8)throw new Oa(exports.BalancerErrorCode.ABOVE_MAX_TOKENS);if(BigInt(a)<=BigInt(0)||BigInt(a)>BigInt(1e17))throw new Oa(exports.BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE);if(t.reduce(((e,t)=>ce.add(e,BigInt(t))),BigInt(0))!==BigInt(1e18))throw new Oa(exports.BalancerErrorCode.INVALID_WEIGHTS)}buildInitJoin({joiner:e,poolId:t,tokensIn:a,amountsIn:n}){this.checkInitJoinInputs({poolId:t,tokensIn:a,amountsIn:n});const{attributes:o,params:i}=this.parseParamsForInitJoin({joiner:e,poolId:t,tokensIn:a,amountsIn:n}),{functionName:s,data:r}=this.encodeInitJoinFunctionData(i);return{to:va,functionName:s,data:r,attributes:o}}async getPoolAddressAndIdWithReceipt(e,t){var a;const n=Qe({receipt:t,to:(null===(a=this.contracts.weightedPoolFactory)||void 0===a?void 0:a.address)||"",contractInterface:ya.createInterface(),logName:"PoolCreated"}).args.pool,o=this.getPoolInterface(),i=new y.Contract(n,o,e);return{poolAddress:n,poolId:await i.getPoolId()}}getPoolInterface(){return ua.createInterface()}}var tr;exports.ProtocolId=void 0,(tr=exports.ProtocolId||(exports.ProtocolId={}))[tr.AAVE_V1=0]="AAVE_V1",tr[tr.AAVE_V2=1]="AAVE_V2",tr[tr.AAVE_V3=2]="AAVE_V3",tr[tr.AMPLEFORTH=3]="AMPLEFORTH",tr[tr.BEEFY=4]="BEEFY",tr[tr.EULER=5]="EULER",tr[tr.GEARBOX=6]="GEARBOX",tr[tr.IDLE=7]="IDLE",tr[tr.MORPHO=8]="MORPHO",tr[tr.RADIANT=9]="RADIANT",tr[tr.REAPER=10]="REAPER",tr[tr.SILO=11]="SILO",tr[tr.STARGATE=12]="STARGATE",tr[tr.STURDY=13]="STURDY",tr[tr.TESSERA=14]="TESSERA",tr[tr.TETU=15]="TETU",tr[tr.YEARN=16]="YEARN",tr[tr.MIDAS=17]="MIDAS",tr[tr.AGAVE=18]="AGAVE";class ar{constructor(e,t){this.getPoolFactoryInterface=()=>{switch(this.poolType){case exports.PoolType.AaveLinear:return rt.createInterface();case exports.PoolType.Linear:case exports.PoolType.ERC4626Linear:return Mt.createInterface();case exports.PoolType.EulerLinear:return Lt.createInterface();case exports.PoolType.GearboxLinear:return Kt.createInterface();case exports.PoolType.YearnLinear:return Ta.createInterface();default:throw new Oa(exports.BalancerErrorCode.UNSUPPORTED_POOL_TYPE)}},this.getPoolInterface=()=>{switch(this.poolType){case exports.PoolType.AaveLinear:return it.createInterface();case exports.PoolType.Linear:case exports.PoolType.ERC4626Linear:return Ct.createInterface();case exports.PoolType.EulerLinear:return Rt.createInterface();case exports.PoolType.GearboxLinear:return Wt.createInterface();case exports.PoolType.YearnLinear:return ma.createInterface();default:throw new Oa(exports.BalancerErrorCode.UNSUPPORTED_POOL_TYPE)}},this.checkCreateInputs=({swapFeeEvm:e,protocolId:t})=>{if(!exports.ProtocolId[t])throw new Oa(exports.BalancerErrorCode.INVALID_PROTOCOL_ID);if(BigInt(e)<=BigInt(0)||BigInt(e)>BigInt(1e17))throw new Oa(exports.BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE);this.getFactoryAddress()},this.parseCreateParamsForEncoding=({name:e,symbol:t,mainToken:a,wrappedToken:n,upperTargetEvm:o,swapFeeEvm:i,owner:s,protocolId:r,salt:p})=>this.poolType===exports.PoolType.EulerLinear?[e,t,a,n,o,i,s,r.toString()]:[e,t,a,n,o,i,s,r.toString(),p||et()],this.encodeCreateFunctionData=e=>{const t=this.getPoolFactoryInterface();return this.poolType,exports.PoolType.EulerLinear,t.encodeFunctionData("create",e)},this.getFactoryAddress=()=>{switch(this.poolType){case exports.PoolType.AaveLinear:if(this.contracts.aaveLinearPoolFactory)return this.contracts.aaveLinearPoolFactory.address;throw new Oa(exports.BalancerErrorCode.UNSUPPORTED_POOL_TYPE);case exports.PoolType.Linear:case exports.PoolType.ERC4626Linear:if(this.contracts.erc4626LinearPoolFactory)return this.contracts.erc4626LinearPoolFactory.address;throw new Oa(exports.BalancerErrorCode.UNSUPPORTED_POOL_TYPE);case exports.PoolType.EulerLinear:if(this.contracts.eulerLinearPoolFactory)return this.contracts.eulerLinearPoolFactory.address;throw new Oa(exports.BalancerErrorCode.UNSUPPORTED_POOL_TYPE);case exports.PoolType.GearboxLinear:if(this.contracts.gearboxLinearPoolFactory)return this.contracts.gearboxLinearPoolFactory.address;throw new Oa(exports.BalancerErrorCode.UNSUPPORTED_POOL_TYPE);case exports.PoolType.YearnLinear:if(this.contracts.yearnLinearPoolFactory)return this.contracts.yearnLinearPoolFactory.address;throw new Oa(exports.BalancerErrorCode.UNSUPPORTED_POOL_TYPE);default:throw new Oa(exports.BalancerErrorCode.UNSUPPORTED_POOL_TYPE)}},this.getPoolAddressAndIdWithReceipt=async(e,t)=>{const a=Qe({receipt:t,to:this.getFactoryAddress()||"",contractInterface:this.getPoolFactoryInterface(),logName:"PoolCreated"}).args.pool,n=this.getPoolInterface(),o=new y.Contract(a,n,e);return{poolAddress:a,poolId:await o.getPoolId()}},this.contracts=e,this.poolType=t}buildInitJoin(){throw new Oa(exports.BalancerErrorCode.UNSUPPORTED_POOL_TYPE)}create({name:e,symbol:t,mainToken:a,wrappedToken:n,upperTargetEvm:o,swapFeeEvm:i,owner:s,protocolId:r,salt:p}){this.checkCreateInputs({swapFeeEvm:i,protocolId:r});const l=this.parseCreateParamsForEncoding({name:e,symbol:t,mainToken:a,wrappedToken:n,upperTargetEvm:o,swapFeeEvm:i,owner:s,protocolId:r,salt:p}),d=this.encodeCreateFunctionData(l);return{to:this.getFactoryAddress(),data:d}}}class nr{constructor(e,t){this.networkConfig=e,this.contracts=t.contracts}of(e){switch(e){case"Weighted":return new er(this.networkConfig,this.contracts);case"Investment":case"LiquidityBootstrapping":case"Stable":case"MetaStable":case"StablePhantom":default:throw new Oa(exports.BalancerErrorCode.UNSUPPORTED_POOL_TYPE);case"ComposableStable":return new Qs(this.networkConfig,this.contracts);case"Linear":case"AaveLinear":case"ERC4626Linear":case"EulerLinear":case"GearboxLinear":case"YearnLinear":return new ar(this.contracts,e)}}}class or{constructor(e){this.pool=e;const t=(e=>{switch(e){case exports.PoolType.Weighted:return S;case exports.PoolType.Stable:case exports.PoolType.MetaStable:case exports.PoolType.StablePhantom:case exports.PoolType.Element:case exports.PoolType.Gyro2:case exports.PoolType.Gyro3:return A;case exports.PoolType.ComposableStable:return C;default:if(Ze(e))return A}})(e.poolType);if(!t)throw"Pool type not supported";this.encoder=t}buildQueryJoinExactIn({maxAmountsInByToken:e,minimumBPT:n=t.Zero}){const o=this.pool.tokensList.findIndex((e=>this.pool.id.includes(e))),i=[...this.pool.tokensList],s=this.pool.tokensList.map((t=>{var n;return null!==(n=e.get(t))&&void 0!==n?n:a.BigNumber.from("0")}));let r;r=o>-1?Ye(s,o):s;const p=this.encoder.joinExactTokensInForBPTOut(r,n);return[this.pool.id,t.AddressZero,t.AddressZero,{assets:i,maxAmountsIn:s,userData:p,fromInternalBalance:!1}]}buildQueryJoinExactOut({maxAmountIn:e,bptOut:a,tokenIn:n}){const o=this.pool.tokensList.findIndex((e=>this.pool.id.includes(e)));let i=[...this.pool.tokensList];o>-1&&(i=Ye(this.pool.tokensList,o));const s=i.indexOf(n),r=this.encoder.joinTokenInForExactBPTOut(a,s),p=e?this.pool.tokensList.map((t=>t===n?e:"0")):[];return[this.pool.id,t.AddressZero,t.AddressZero,{assets:this.pool.tokensList,maxAmountsIn:p,userData:r,fromInternalBalance:!1}]}buildQueryExitToSingleToken({minAmountOut:e,bptIn:a,tokenOut:n}){const o=this.pool.tokensList.findIndex((e=>this.pool.id.includes(e)));let i=[...this.pool.tokensList];o>-1&&(i=Ye(this.pool.tokensList,o));const s=i.indexOf(n),r=this.encoder.exitExactBPTInForOneTokenOut(a,s),p=e?this.pool.tokensList.map((t=>t===n?e:"0")):[];return[this.pool.id,t.AddressZero,t.AddressZero,{assets:this.pool.tokensList,minAmountsOut:p,userData:r,toInternalBalance:!1}]}buildQueryExitProportionally({minAmountsOut:e=[],bptIn:a}){if(!this.encoder.exitExactBPTInForTokensOut)throw"Proportional exit not implemented";const n=this.encoder.exitExactBPTInForTokensOut(a);return[this.pool.id,t.AddressZero,t.AddressZero,{assets:this.pool.tokensList,minAmountsOut:e,userData:n,toInternalBalance:!1}]}buildQueryExitExactOut({minAmountsOut:e,maxBptIn:a=t.MaxUint256}){const n=this.pool.tokensList.findIndex((e=>this.pool.id.includes(e)));let o=[...e];n>-1&&(o=Ye(e,n));const i=this.encoder.exitBPTInForExactTokensOut(o,a);return[this.pool.id,t.AddressZero,t.AddressZero,{assets:this.pool.tokensList,minAmountsOut:e,userData:i,toInternalBalance:!1}]}}class ir{constructor(e){this.liquidityGaugesRepository=e}async relativeWeight(e){const t=await this.liquidityGaugesRepository.findBy("poolId",e);return t?t.relativeWeight:0}async weekly(e){return xs()*await this.relativeWeight(e)}}const sr=(e,t,n)=>{const o=e.tokens.filter((t=>!e.id.toLowerCase().includes(t.address.toLowerCase()))),i=o.findIndex((e=>e.address.toLowerCase()===t.toLowerCase()));if(-1==i)throw new Error("Token not found in pool");const s=o.map((e=>Ce(e.balance,e.decimals))),r=a.BigNumber.from(n),p=s.map((e=>e.mul(r).div(s[i])));return{tokens:o.map((e=>e.address)),amounts:p.map((e=>e.toString()))}},rr=(e,t)=>()=>{throw`${t} for poolType ${e} not implemented`};class pr{constructor(e,t,a){this.networkConfig=e,this.repositories=t,this.balancerContracts=a,this.aprService=new Ss(this.repositories.pools,this.repositories.tokenPrices,this.repositories.tokenMeta,this.repositories.tokenYields,this.repositories.feeCollector,this.repositories.yesterdaysPools,this.repositories.liquidityGauges,this.repositories.feeDistributor,this.repositories.gyroConfigRepository),this.liquidityService=new An(t.pools,t.tokenPrices),this.simulationService=new js(e,this.repositories.poolsForSimulations),this.graphService=new Cs(this.repositories.poolsOnChain),this.joinService=new Ks(this.graphService,e,this.simulationService),this.exitService=new zs(this.graphService,e,this.simulationService),this.feesService=new As(t.yesterdaysPools),this.volumeService=new Zs(t.yesterdaysPools),this.poolFactory=new nr(e,a),this.impermanentLossService=new Ts(t.tokenPrices,t.tokenHistoricalPrices),t.liquidityGauges&&(this.emissionsService=new ir(t.liquidityGauges)),this.proportionalAmounts=sr}static wrap(e,t){let a,n,o;try{a=En.from(e.poolType),o={buildJoin:(t,n,o,s)=>a.join.buildJoin({joiner:t,pool:e,tokensIn:n,amountsIn:o,slippage:s,wrappedNativeAsset:i}),calcPriceImpact:async(t,n,o)=>a.priceImpactCalculator.calcPriceImpact(e,t.map(BigInt),BigInt(n),o),buildExitExactBPTIn:(t,n,o,s=!1,r,p=!1)=>{if(a.exit.buildExitExactBPTIn)return a.exit.buildExitExactBPTIn({exiter:t,pool:e,bptIn:n,slippage:o,shouldUnwrapNativeAsset:s,wrappedNativeAsset:i,singleTokenOut:r,toInternalBalance:p});throw"ExitExactBPTIn not supported"},buildExitExactTokensOut:(t,n,o,s,r=!1)=>a.exit.buildExitExactTokensOut({exiter:t,pool:e,tokensOut:n,amountsOut:o,slippage:s,wrappedNativeAsset:i,toInternalBalance:r}),buildRecoveryExit:(t,n,o,i=!1)=>a.exit.buildRecoveryExit({exiter:t,pool:e,bptIn:n,slippage:o,toInternalBalance:i}),calcSpotPrice:(t,n)=>a.spotPriceCalculator.calcPoolSpotPrice(t,n,e),calcProportionalAmounts:(t,a)=>sr(e,t,a)}}catch(t){if("UNSUPPORTED_POOL_TYPE"!=t.code){j.getInstance().warn(t)}o={buildJoin:rr(e.poolType,"buildJoin"),calcPriceImpact:rr(e.poolType,"calcPriceImpact"),buildExitExactBPTIn:rr(e.poolType,"buildExitExactBPTIn"),buildExitExactTokensOut:rr(e.poolType,"buildExitExactTokensOut"),calcSpotPrice:rr(e.poolType,"calcSpotPrice"),buildRecoveryExit:rr(e.poolType,"buildRecoveryExit")}}try{n=new or(e),o={...o,buildQueryJoinExactIn:n.buildQueryJoinExactIn.bind(n),buildQueryJoinExactOut:n.buildQueryJoinExactOut.bind(n),buildQueryExitExactOut:n.buildQueryExitExactOut.bind(n),buildQueryExitToSingleToken:n.buildQueryExitToSingleToken.bind(n),buildQueryExitProportionally:n.buildQueryExitProportionally.bind(n)}}catch(t){o={...o,buildQueryJoinExactIn:rr(e.poolType,"buildQueryJoinExactIn"),buildQueryJoinExactOut:rr(e.poolType,"buildQueryJoinExactOut"),buildQueryExitExactOut:rr(e.poolType,"buildQueryExitExactOut"),buildQueryExitToSingleToken:rr(e.poolType,"buildQueryExitToSingleToken"),buildQueryExitProportionally:rr(e.poolType,"buildQueryExitProportionally")}}const i=t.addresses.tokens.wrappedNativeAsset.toLowerCase(),s=e.tokensList.indexOf(e.address);return{...e,...o,bptIndex:s}}dataSource(){return this.repositories.pools}async apr(e){return this.aprService.apr(e)}async impermanentLoss(e,t){return this.impermanentLossService.calcImpLoss(e,t)}async liquidity(e){return this.liquidityService.getLiquidity(e)}async bptPrice(e){return this.liquidityService.getBptPrice(e)}buildJoin({pool:e,tokensIn:t,amountsIn:a,userAddress:n,slippage:o}){const i=En.from(e.poolType);if(!i)throw`buildJoin for poolType ${e.poolType} not implemented`;return i.join.buildJoin({joiner:n,pool:e,tokensIn:t,amountsIn:a,slippage:o,wrappedNativeAsset:this.networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase()})}buildExitExactBPTIn({pool:e,bptAmount:t,userAddress:a,slippage:n,shouldUnwrapNativeAsset:o,singleTokenOut:i}){const s=En.from(e.poolType);if(!s||!s.exit.buildExitExactBPTIn)throw`buildExit for poolType ${e.poolType} not implemented`;return s.exit.buildExitExactBPTIn({pool:e,exiter:a,bptIn:t,slippage:n,wrappedNativeAsset:this.networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase(),shouldUnwrapNativeAsset:null!=o&&o,singleTokenOut:null!=i?i:void 0,toInternalBalance:!1})}buildRecoveryExit({pool:e,bptAmount:t,userAddress:a,slippage:n,toInternalBalance:o}){const i=En.from(e.poolType);if(!i||!i.exit.buildRecoveryExit)throw`buildRecoveryExit for poolType ${e.poolType} not implemented`;return i.exit.buildRecoveryExit({exiter:a,pool:e,bptIn:t,slippage:n,toInternalBalance:!!o})}async generalisedJoin(e,t,a,n,o,i,s,r){return this.joinService.joinPool(e,t,a,n,o,i,s,r)}async generalisedExit(e,t,a,n,o,i,s,r){return this.exitService.buildExitCall(e,t,a,n,o,i,s,r)}calcPriceImpact({pool:e,tokenAmounts:t,bptAmount:a,isJoin:n}){return En.from(e.poolType).priceImpactCalculator.calcPriceImpact(e,t.map(BigInt),BigInt(a),n)}async getExitInfo(e,t,a,n){return this.exitService.getExitInfo(e,t,a,n)}async fees(e){return this.feesService.last24h(e)}async volume(e){return this.volumeService.last24h(e)}async find(e){const t=await this.dataSource().find(e);if(t)return pr.wrap(t,this.networkConfig)}async findBy(e,t){if("id"==e)return this.find(t);if("address"==e){const e=await this.dataSource().findBy("address",t);if(!e)return;return pr.wrap(e,this.networkConfig)}throw`search by ${e} not implemented`}async all(){const e=await this.dataSource().all();return e?e.map((e=>pr.wrap(e,this.networkConfig))).filter((e=>e)):[]}async where(e){const t=await this.dataSource().where(e);if(!t)return[];return t.map((e=>pr.wrap(e,this.networkConfig))).filter((e=>e))}}const lr=new Se("strings/5.7.0");var dr,ur;function cr(e,t,a,n,o){if(e===ur.BAD_PREFIX||e===ur.UNEXPECTED_CONTINUE){let e=0;for(let n=t+1;n>6==2;n++)e++;return e}return e===ur.OVERRUN?a.length-t-1:0}function yr(e,t=dr.current){t!=dr.current&&(lr.checkNormalize(),e=e.normalize(t));let a=[];for(let t=0;t>6|192),a.push(63&n|128);else if(55296==(64512&n)){t++;const o=e.charCodeAt(t);if(t>=e.length||56320!=(64512&o))throw new Error("invalid utf-8 string");const i=65536+((1023&n)<<10)+(1023&o);a.push(i>>18|240),a.push(i>>12&63|128),a.push(i>>6&63|128),a.push(63&i|128)}else a.push(n>>12|224),a.push(n>>6&63|128),a.push(63&n|128)}return o.arrayify(a)}function br(e){const a=yr(e);if(a.length>31)throw new Error("bytes32 string must be less than 32 bytes");return o.hexlify(o.concat([a,t.HashZero]).slice(0,32))}!function(e){e.current="",e.NFC="NFC",e.NFD="NFD",e.NFKC="NFKC",e.NFKD="NFKD"}(dr||(dr={})),function(e){e.UNEXPECTED_CONTINUE="unexpected continuation byte",e.BAD_PREFIX="bad codepoint prefix",e.OVERRUN="string overrun",e.MISSING_CONTINUE="missing continuation byte",e.OUT_OF_RANGE="out of UTF-8 range",e.UTF16_SURROGATE="UTF-16 surrogate",e.OVERLONG="overlong representation"}(ur||(ur={})),Object.freeze({error:function(e,t,a,n,o){return lr.throwArgumentError(`invalid codepoint at offset ${t}; ${e}`,"bytes",a)},ignore:cr,replace:function(e,t,a,n,o){return e===ur.OVERLONG?(n.push(o),0):(n.push(65533),cr(e,t,a))}});var mr,fr="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},Tr={exports:{}};mr=Tr,function(){var e="input is invalid type",t="object"==typeof window,a=t?window:{};a.JS_SHA3_NO_WINDOW&&(t=!1);var n=!t&&"object"==typeof self;!a.JS_SHA3_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node?a=fr:n&&(a=self);var o=!a.JS_SHA3_NO_COMMON_JS&&mr.exports,i=!a.JS_SHA3_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,s="0123456789abcdef".split(""),r=[4,1024,262144,67108864],p=[0,8,16,24],l=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],d=[224,256,384,512],u=[128,256],c=["hex","buffer","arrayBuffer","array","digest"],y={128:168,256:136};!a.JS_SHA3_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!i||!a.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer});for(var b=function(e,t,a){return function(n){return new k(e,t,e).update(n)[a]()}},m=function(e,t,a){return function(n,o){return new k(e,t,o).update(n)[a]()}},f=function(e,t,a){return function(t,n,o,i){return _["cshake"+e].update(t,n,o,i)[a]()}},T=function(e,t,a){return function(t,n,o,i){return _["kmac"+e].update(t,n,o,i)[a]()}},h=function(e,t,a,n){for(var o=0;o>5,this.byteCount=this.blockCount<<2,this.outputBlocks=a>>5,this.extraBytes=(31&a)>>3;for(var n=0;n<50;++n)this.s[n]=0}function B(e,t,a){k.call(this,e,t,a)}k.prototype.update=function(t){if(this.finalized)throw new Error("finalize already called");var a,n=typeof t;if("string"!==n){if("object"!==n)throw new Error(e);if(null===t)throw new Error(e);if(i&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||i&&ArrayBuffer.isView(t)))throw new Error(e);a=!0}for(var o,s,r=this.blocks,l=this.byteCount,d=t.length,u=this.blockCount,c=0,y=this.s;c>2]|=t[c]<>2]|=s<>2]|=(192|s>>6)<>2]|=(128|63&s)<=57344?(r[o>>2]|=(224|s>>12)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<>2]|=(240|s>>18)<>2]|=(128|s>>12&63)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<=l){for(this.start=o-l,this.block=r[u],o=0;o>=8);a>0;)o.unshift(a),a=255&(e>>=8),++n;return t?o.push(n):o.unshift(n),this.update(o),o.length},k.prototype.encodeString=function(t){var a,n=typeof t;if("string"!==n){if("object"!==n)throw new Error(e);if(null===t)throw new Error(e);if(i&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||i&&ArrayBuffer.isView(t)))throw new Error(e);a=!0}var o=0,s=t.length;if(a)o=s;else for(var r=0;r=57344?o+=3:(p=65536+((1023&p)<<10|1023&t.charCodeAt(++r)),o+=4)}return o+=this.encode(8*o),this.update(t),o},k.prototype.bytepad=function(e,t){for(var a=this.encode(t),n=0;n>2]|=this.padding[3&t],this.lastByteIndex===this.byteCount)for(e[0]=e[a],t=1;t>4&15]+s[15&e]+s[e>>12&15]+s[e>>8&15]+s[e>>20&15]+s[e>>16&15]+s[e>>28&15]+s[e>>24&15];r%t==0&&(C(a),i=0)}return o&&(e=a[i],p+=s[e>>4&15]+s[15&e],o>1&&(p+=s[e>>12&15]+s[e>>8&15]),o>2&&(p+=s[e>>20&15]+s[e>>16&15])),p},k.prototype.arrayBuffer=function(){this.finalize();var e,t=this.blockCount,a=this.s,n=this.outputBlocks,o=this.extraBytes,i=0,s=0,r=this.outputBits>>3;e=o?new ArrayBuffer(n+1<<2):new ArrayBuffer(r);for(var p=new Uint32Array(e);s>8&255,p[e+2]=t>>16&255,p[e+3]=t>>24&255;r%a==0&&C(n)}return i&&(e=r<<2,t=n[s],p[e]=255&t,i>1&&(p[e+1]=t>>8&255),i>2&&(p[e+2]=t>>16&255)),p},B.prototype=new k,B.prototype.finalize=function(){return this.encode(this.outputBits,!0),k.prototype.finalize.call(this)};var C=function(e){var t,a,n,o,i,s,r,p,d,u,c,y,b,m,f,T,h,I,g,_,x,P,w,E,A,S,v,k,B,C,O,M,F,R,N,L,D,U,V,q,G,W,H,K,$,J,j,X,Y,z,Z,Q,ee,te,ae,ne,oe,ie,se,re,pe,le,de;for(n=0;n<48;n+=2)o=e[0]^e[10]^e[20]^e[30]^e[40],i=e[1]^e[11]^e[21]^e[31]^e[41],s=e[2]^e[12]^e[22]^e[32]^e[42],r=e[3]^e[13]^e[23]^e[33]^e[43],p=e[4]^e[14]^e[24]^e[34]^e[44],d=e[5]^e[15]^e[25]^e[35]^e[45],u=e[6]^e[16]^e[26]^e[36]^e[46],c=e[7]^e[17]^e[27]^e[37]^e[47],t=(y=e[8]^e[18]^e[28]^e[38]^e[48])^(s<<1|r>>>31),a=(b=e[9]^e[19]^e[29]^e[39]^e[49])^(r<<1|s>>>31),e[0]^=t,e[1]^=a,e[10]^=t,e[11]^=a,e[20]^=t,e[21]^=a,e[30]^=t,e[31]^=a,e[40]^=t,e[41]^=a,t=o^(p<<1|d>>>31),a=i^(d<<1|p>>>31),e[2]^=t,e[3]^=a,e[12]^=t,e[13]^=a,e[22]^=t,e[23]^=a,e[32]^=t,e[33]^=a,e[42]^=t,e[43]^=a,t=s^(u<<1|c>>>31),a=r^(c<<1|u>>>31),e[4]^=t,e[5]^=a,e[14]^=t,e[15]^=a,e[24]^=t,e[25]^=a,e[34]^=t,e[35]^=a,e[44]^=t,e[45]^=a,t=p^(y<<1|b>>>31),a=d^(b<<1|y>>>31),e[6]^=t,e[7]^=a,e[16]^=t,e[17]^=a,e[26]^=t,e[27]^=a,e[36]^=t,e[37]^=a,e[46]^=t,e[47]^=a,t=u^(o<<1|i>>>31),a=c^(i<<1|o>>>31),e[8]^=t,e[9]^=a,e[18]^=t,e[19]^=a,e[28]^=t,e[29]^=a,e[38]^=t,e[39]^=a,e[48]^=t,e[49]^=a,m=e[0],f=e[1],J=e[11]<<4|e[10]>>>28,j=e[10]<<4|e[11]>>>28,k=e[20]<<3|e[21]>>>29,B=e[21]<<3|e[20]>>>29,re=e[31]<<9|e[30]>>>23,pe=e[30]<<9|e[31]>>>23,W=e[40]<<18|e[41]>>>14,H=e[41]<<18|e[40]>>>14,R=e[2]<<1|e[3]>>>31,N=e[3]<<1|e[2]>>>31,T=e[13]<<12|e[12]>>>20,h=e[12]<<12|e[13]>>>20,X=e[22]<<10|e[23]>>>22,Y=e[23]<<10|e[22]>>>22,C=e[33]<<13|e[32]>>>19,O=e[32]<<13|e[33]>>>19,le=e[42]<<2|e[43]>>>30,de=e[43]<<2|e[42]>>>30,te=e[5]<<30|e[4]>>>2,ae=e[4]<<30|e[5]>>>2,L=e[14]<<6|e[15]>>>26,D=e[15]<<6|e[14]>>>26,I=e[25]<<11|e[24]>>>21,g=e[24]<<11|e[25]>>>21,z=e[34]<<15|e[35]>>>17,Z=e[35]<<15|e[34]>>>17,M=e[45]<<29|e[44]>>>3,F=e[44]<<29|e[45]>>>3,E=e[6]<<28|e[7]>>>4,A=e[7]<<28|e[6]>>>4,ne=e[17]<<23|e[16]>>>9,oe=e[16]<<23|e[17]>>>9,U=e[26]<<25|e[27]>>>7,V=e[27]<<25|e[26]>>>7,_=e[36]<<21|e[37]>>>11,x=e[37]<<21|e[36]>>>11,Q=e[47]<<24|e[46]>>>8,ee=e[46]<<24|e[47]>>>8,K=e[8]<<27|e[9]>>>5,$=e[9]<<27|e[8]>>>5,S=e[18]<<20|e[19]>>>12,v=e[19]<<20|e[18]>>>12,ie=e[29]<<7|e[28]>>>25,se=e[28]<<7|e[29]>>>25,q=e[38]<<8|e[39]>>>24,G=e[39]<<8|e[38]>>>24,P=e[48]<<14|e[49]>>>18,w=e[49]<<14|e[48]>>>18,e[0]=m^~T&I,e[1]=f^~h&g,e[10]=E^~S&k,e[11]=A^~v&B,e[20]=R^~L&U,e[21]=N^~D&V,e[30]=K^~J&X,e[31]=$^~j&Y,e[40]=te^~ne&ie,e[41]=ae^~oe&se,e[2]=T^~I&_,e[3]=h^~g&x,e[12]=S^~k&C,e[13]=v^~B&O,e[22]=L^~U&q,e[23]=D^~V&G,e[32]=J^~X&z,e[33]=j^~Y&Z,e[42]=ne^~ie&re,e[43]=oe^~se&pe,e[4]=I^~_&P,e[5]=g^~x&w,e[14]=k^~C&M,e[15]=B^~O&F,e[24]=U^~q&W,e[25]=V^~G&H,e[34]=X^~z&Q,e[35]=Y^~Z&ee,e[44]=ie^~re&le,e[45]=se^~pe&de,e[6]=_^~P&m,e[7]=x^~w&f,e[16]=C^~M&E,e[17]=O^~F&A,e[26]=q^~W&R,e[27]=G^~H&N,e[36]=z^~Q&K,e[37]=Z^~ee&$,e[46]=re^~le&te,e[47]=pe^~de&ae,e[8]=P^~m&T,e[9]=w^~f&h,e[18]=M^~E&S,e[19]=F^~A&v,e[28]=W^~R&L,e[29]=H^~N&D,e[38]=Q^~K&J,e[39]=ee^~$&j,e[48]=le^~te&ne,e[49]=de^~ae&oe,e[0]^=l[n],e[1]^=l[n+1]};if(o)mr.exports=_;else for(P=0;P256)&&xr.throwArgumentError("invalid number type","type",e),n&&(s=256),t=a.BigNumber.from(t).toTwos(s),o.zeroPad(t,s/8)}if(i=e.match(Ir),i){const a=parseInt(i[1]);return(String(a)!==i[1]||0===a||a>32)&&xr.throwArgumentError("invalid bytes type","type",e),o.arrayify(t).byteLength!==a&&xr.throwArgumentError(`invalid value for ${e}`,"value",t),n?o.arrayify((t+"0000000000000000000000000000000000000000000000000000000000000000").substring(0,66)):t}if(i=e.match(_r),i&&Array.isArray(t)){const a=i[1];parseInt(i[2]||String(t.length))!=t.length&&xr.throwArgumentError(`invalid array length for ${e}`,"value",t);const n=[];return t.forEach((function(e){n.push(Pr(a,e,!0))})),o.concat(n)}return xr.throwArgumentError("invalid type","type",e)}function wr(e,t){e.length!=t.length&&xr.throwArgumentError("wrong number of values; expected ${ types.length }","values",t);const a=[];return e.forEach((function(e,n){a.push(Pr(e,t[n]))})),o.hexlify(o.concat(a))}function Er(e,t){return a=wr(e,t),"0x"+hr.keccak_256(o.arrayify(a));var a}const Ar=br("PROTOCOL_SWAP_FEE_PERC"),Sr=br("E-CLP"),vr=Er(["bytes"],[e.defaultAbiCoder.encode(["bytes32","bytes32"],[Ar,Sr])]);class kr{constructor(e,t,a){this.gyroConfigAddress=e,this.multicall=t,this.gyroConfigInterface=Jt.createInterface(),this.gyroConfig=Jt.connect(e,a)}async getGyroProtocolFee(t){let n;const o=Er(["bytes"],[e.defaultAbiCoder.encode(["bytes32","uint256"],[Ar,t])]),i=[{target:this.gyroConfigAddress,callData:this.gyroConfigInterface.encodeFunctionData("hasKey",[o])},{target:this.gyroConfigAddress,callData:this.gyroConfigInterface.encodeFunctionData("hasKey",[vr])},{target:this.gyroConfigAddress,callData:this.gyroConfigInterface.encodeFunctionData("hasKey",[Ar])}],[,[s,r,p]]=await this.multicall.callStatic.aggregate(i),l=a.BigNumber.from(s).eq(1),d=a.BigNumber.from(r).eq(1),u=a.BigNumber.from(p).eq(1);return n=l?parseFloat(a.formatFixed(await this.gyroConfig.getUint(o),18)):d?parseFloat(a.formatFixed(await this.gyroConfig.getUint(vr),18)):u?parseFloat(a.formatFixed(await this.gyroConfig.getUint(Ar),18)):0,n}}const Br=new e.Interface(["function gauge_relative_weight(address gauge, uint timestamp) view returns (uint)"]),Cr=new e.Interface(["function gauge_relative_weight(address gauge) view returns (uint)"]);class Or{constructor(e,t,a){this.multicall=e,this.gaugeControllerAddress=t,this.gaugeControllerCheckpointerAddress=a}async getRelativeWeights(e,t){const a=e.map((e=>this.gaugeControllerCheckpointerAddress&&!t?{target:this.gaugeControllerCheckpointerAddress,callData:Cr.encodeFunctionData("gauge_relative_weight",[n.getAddress(e)])}:{target:this.gaugeControllerAddress,callData:Br.encodeFunctionData("gauge_relative_weight",[n.getAddress(e),t||Math.floor(Date.now()/1e3)])})),[,o]=await this.multicall.callStatic.aggregate(a);return e.reduce(((e,t,a)=>(e[t]||(e[t]=parseFloat(Be(o[a],18))),e)),{})}}class Mr{async get(e){const t=await this.query(e);return(null==t?void 0:t.length)>0?t[0]:void 0}async find(e){return this.get({where:{id:e}})}async findBy(e,t){return this.get({where:{[String(e)]:t}})}async findAllBy(e,t,a=1e3,n=0){const o={where:{[String(e)]:t},first:a,skip:n};return this.query(o)}}class Fr extends Mr{constructor(e,t,a){super(),this.chainId=t,this.blockHeight=a,this.client=Ei(e)}}class Rr extends Mr{constructor(e,t,a){super(),this.chainId=t,this.blockHeight=a,this.client=Ai(e)}}class Nr extends Rr{async query(e){e.orderBy||(e.orderBy=ei.balance),e.orderDirection||(e.orderDirection=ri.desc),!e.block&&this.blockHeight&&(e.block={number:await this.blockHeight()});const{gaugeShares:t}=await this.client.GaugeShares(e);return t.map(this.mapType)}mapType(e){var t;return{id:e.id,balance:e.balance,userAddress:null===(t=e.user)||void 0===t?void 0:t.id,gauge:{id:e.gauge.id,poolId:e.gauge.poolId||void 0,isKilled:e.gauge.isKilled,totalSupply:e.gauge.totalSupply}}}async findByUser(e,t,a){return this.findAllBy(exports.GaugeShareAttributes.UserAddress,e,t,a)}async findByGauge(e,t,a){return this.findAllBy(exports.GaugeShareAttributes.GaugeId,e,t,a)}}const Lr=new e.Interface(["function totalSupply() view returns (uint)","function working_supply() view returns (uint)","function reward_count() view returns (uint)","function reward_tokens(uint rewardIndex) view returns (address)","function reward_data(address rewardToken) view returns (tuple(address token, address distributor, uint period_finish, uint rate, uint last_update, uint integral) data)"]),Dr=new e.Interface(["function inflation_rate(uint currentWeekTimestamp) view returns (uint)"]);class Ur{constructor(e,t){this.multicall=e,this.chainId=t}async getTotalSupplies(e){const t=e.map((e=>({target:e,callData:Lr.encodeFunctionData("totalSupply",[])}))),[,a]=await this.multicall.callStatic.aggregate(t),n=a.map((e=>"0x"==e?"0x0":e));return e.reduce(((e,t,a)=>(e[t]||(e[t]=parseFloat(Be(n[a],18))),e)),{})}async getWorkingSupplies(e){const t=e.map((e=>({target:e,callData:Lr.encodeFunctionData("working_supply",[])}))),[,a]=await this.multicall.callStatic.aggregate(t),n=a.map((e=>"0x"==e?"0x0":e));return e.reduce(((e,t,a)=>(e[t]||(e[t]=parseFloat(Be(n[a],18))),e)),{})}async getInflationRates(e){const t=Math.floor(Date.now()/1e3/604800),a=e.map((e=>({target:e,callData:Dr.encodeFunctionData("inflation_rate",[t])}))),[,n]=await this.multicall.callStatic.aggregate(a),o=n.map((e=>"0x"==e?"0x0":e));return e.reduce(((e,t,a)=>(e[t]||(e[t]=parseFloat(Be(o[a],18))),e)),{})}async getRewardCounts(e){let t;if(1==this.chainId){const a=e.map((e=>({target:e,callData:Lr.encodeFunctionData("reward_count",[])}))),[,n]=await this.multicall.callStatic.aggregate(a),o=n.map((e=>"0x"==e?"0x0":e));t=e.reduce(((e,t,a)=>(e[t]||(e[t]=parseInt(o[a])),e)),{})}else t=e.reduce(((e,t)=>(e[t]||(e[t]=1),e)),{});return t}async getRewardTokens(e,t){const a=t||await this.getRewardCounts(e),n=e.filter((e=>a[e]>0)),o=[0],i=n.map(((e,t)=>{const n=[];for(let t=0;t{const n=o[a],i=o[a+1],r=[];for(let e=n;e{const o=[];for(let t=0;tLr.decodeFunctionResult("reward_data",e)[0]));return Object.keys(a).reduce(((e,t,o)=>{const i=n[o],r=a[t].reduce(((e,t,a)=>(e[t]||(e[t]=s[i+a]),e)),{});return e[t]||(e[t]=r),e}),{})}}class Vr{constructor(e){this.gauges=[],this.client=Ai(e)}async fetch(){const e=(await this.client.Pools({first:1e3,where:{preferentialGauge_not:null}})).pools.map((e=>e.preferentialGauge));return this.gauges=e,this.gauges}async find(e){return 0==this.gauges.length&&await this.fetch(),this.gauges.find((t=>t.id==e))}async findBy(e,t){if(0==this.gauges.length&&await this.fetch(),"id"==e)return this.find(t);if("poolId"==e)return this.gauges.find((e=>e.poolId==t));if("poolAddress"==e)return this.gauges.find((e=>e.poolAddress==t));throw`search by ${e} not implemented`}}class qr{constructor(e,t,a,n,o){this.chainId=n,this.workingSupplies={},this.relativeWeights={},this.inflationRates={},this.rewardData={},a&&(this.gaugeController=new Or(t,a,o)),this.multicall=new Ur(t,n),this.subgraph=new Vr(e)}async fetch(){const e=await this.subgraph.fetch(),t=e.map((e=>e.id));if(1==this.chainId)this.workingSupplies=await this.multicall.getWorkingSupplies(t);else{const t=["0x3b8ca519122cdd8efb272b0d3085453404b25bd0","0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2","0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647","0x809b79b53f18e9bc08a961ed4678b901ac93213a"],a=e.filter((e=>!t.includes(e.factory.id.toLowerCase()))).map((e=>e.id));a.length>0&&(this.inflationRates=await this.multicall.getInflationRates(a),this.workingSupplies=await this.multicall.getWorkingSupplies(a))}return this.gaugeController&&(this.relativeWeights=await this.gaugeController.getRelativeWeights(t)),this.rewardData=e.reduce(((e,t)=>{var n;return e[n=t.id]||(e[n]=t.tokens?Object.fromEntries(t.tokens.map((e=>[e.id.split("-")[0],{distributor:"",last_update:a.BigNumber.from(0),integral:a.BigNumber.from(0),token:e.id.split("-")[0],decimals:e.decimals,rate:Ce(e.rate||"0",e.decimals),period_finish:a.BigNumber.from(e.periodFinish||"0")}]))):{}),e}),{}),e.map(this.compose.bind(this))}async find(e){return this.gauges||(this.gauges=this.fetch()),(await this.gauges).find((t=>t.id==e))}async findBy(e,t){let a;if(this.gauges||(this.gauges=this.fetch()),"id"==e)return this.find(t);if("address"==e)return this.find(t);if("poolId"==e)a=(await this.gauges).find((e=>e.poolId==t));else{if("poolAddress"!=e)throw`search by ${e} not implemented`;a=(await this.gauges).find((e=>e.poolAddress==t))}return a}compose(e){return{id:e.id,address:e.id,name:e.symbol,poolId:e.poolId,poolAddress:e.poolAddress,totalSupply:parseFloat(e.totalSupply),workingSupply:this.workingSupplies[e.id],relativeWeight:this.relativeWeights[e.id],rewardTokens:this.rewardData[e.id],balInflationRate:this.inflationRates[e.id]}}}class Gr{constructor(e,t){this.url=e,this.apiKey=t}async get(e){try{const t=this.toPayload(e),{data:a}=await w.default.post(this.url,t,{headers:{"x-api-key":this.apiKey}});if(a.errors)throw new Error(a.errors.map((e=>e.message)).join(","));return a.data}catch(e){throw console.error(e),e}return[]}toPayload(e){return JSON.stringify({query:b.jsonToGraphQLQuery({query:e})})}}function Wr(e){return new Promise((t=>setTimeout(t,e)))}const Hr=(e,t)=>{var a,n,o,i,s,r,p,l,d,u,c;return{id:e.id,name:e.name||"",address:e.address,chainId:t,poolType:e.poolType,poolTypeVersion:e.poolTypeVersion||1,swapFee:e.swapFee,swapEnabled:e.swapEnabled,protocolYieldFeeCache:e.protocolYieldFeeCache||"0.5",protocolSwapFeeCache:e.protocolSwapFeeCache||"0.5",amp:null!==(a=e.amp)&&void 0!==a?a:void 0,owner:null!==(n=e.owner)&&void 0!==n?n:void 0,factory:null!==(o=e.factory)&&void 0!==o?o:void 0,symbol:null!==(i=e.symbol)&&void 0!==i?i:void 0,tokens:(e.tokens||[]).map(Kr),tokensList:e.tokensList,tokenAddresses:(e.tokens||[]).map((e=>e.address)),totalLiquidity:e.totalLiquidity,totalShares:e.totalShares,totalSwapFee:e.totalSwapFee,totalSwapVolume:e.totalSwapVolume,priceRateProviders:null!==(s=e.priceRateProviders)&&void 0!==s?s:void 0,createTime:e.createTime,mainIndex:null!==(r=e.mainIndex)&&void 0!==r?r:void 0,wrappedIndex:null!==(p=e.wrappedIndex)&&void 0!==p?p:void 0,totalWeight:e.totalWeight||"1",lowerTarget:null!==(l=e.lowerTarget)&&void 0!==l?l:"0",upperTarget:null!==(d=e.upperTarget)&&void 0!==d?d:"0",isInRecoveryMode:null!==(u=e.isInRecoveryMode)&&void 0!==u&&u,isPaused:null!==(c=e.isPaused)&&void 0!==c&&c}},Kr=e=>{const t=$r(e.token);return{...e,isExemptFromYieldProtocolFee:e.isExemptFromYieldProtocolFee||!1,token:t}},$r=e=>{let t=null;return e.pool&&(t={id:e.pool.id,address:e.pool.address,totalShares:e.pool.totalShares,poolType:e.pool.poolType,mainIndex:e.pool.mainIndex||0},(null==e?void 0:e.pool.tokens)&&(t.tokens=e.pool.tokens.map(Jr))),{pool:t,latestUSDPrice:e.latestUSDPrice||void 0}},Jr=e=>({address:e.address,decimals:e.decimals,symbol:e.symbol,balance:e.balance,priceRate:e.priceRate,weight:e.weight,isExemptFromYieldProtocolFee:e.isExemptFromYieldProtocolFee||void 0,token:e.token?$r(e.token):void 0});class jr{constructor(e){var t,a;this.skip=0,this.client=Ei(e.url),this.blockHeight=e.blockHeight,this.chainId=e.chainId;const n={orderBy:bo.TotalLiquidity,orderDirection:ro.Desc,where:{totalShares:{gt:1e-12}}},o=Object.assign({},(null===(t=e.query)||void 0===t?void 0:t.args)||n),i=Object.assign({},(null===(a=e.query)||void 0===a?void 0:a.attrs)||{});this.query={args:o,attrs:i}}async fetchAllPools(){const e=j.getInstance();e.time("fetching pools"),this.blockHeight&&(this.query.args.block={number:await this.blockHeight()});const t=new nt(this.query.args).format(new at),{pool0:a,pool1000:n,pool2000:o}=await this.client.AllPools(t);return e.timeEnd("fetching pools"),[...a,...n,...o].map((e=>Hr(e,this.chainId)))}async fetch(e){const t=j.getInstance();t.time("fetching pools"),(null==e?void 0:e.skip)&&(this.query.args.skip=e.skip),this.blockHeight&&(this.query.args.block={number:await this.blockHeight()}),this.query.args.first=(null==e?void 0:e.first)||this.query.args.first||1e3;const a=new nt(this.query.args).format(new at),{pools:n}=await this.client.Pools(a);return this.skip=((null==e?void 0:e.skip)||0)+n.length,t.timeEnd("fetching pools"),n.map((e=>Hr(e,this.chainId)))}async find(e){return await this.findBy("id",e)}async findBy(e,t){return this.pools||(this.pools=this.fetchAllPools()),(await this.pools).find((a=>a[e]==t))}async all(){return this.pools||(this.pools=this.fetchAllPools()),this.pools}async block(){return this.blockHeight?{number:await this.blockHeight()}:void 0}async where(e){return this.pools||(this.pools=this.fetchAllPools()),(await this.pools).filter(e)}}class Xr{constructor(e,t,a,n){this.poolsSubgraph=e,this.poolsToIgnore=a,this.batchSize=n,this.skip=0,this.provider=t.provider,this.multicall=t.multicall,this.vault=t.vault}filterPools(e){return e.filter((e=>{if(!1===e.swapEnabled)return!1;if(!this.poolsToIgnore)return!0;return-1===this.poolsToIgnore.findIndex((t=>t.toLowerCase()===e.id.toLowerCase()))}))}async fetchDefault(){const e=await this.poolsSubgraph.all(),t=this.filterPools(e),a=j.getInstance();a.time(`fetching onchain ${t.length} pools`);const n=await Fi(t,this.multicall,this.vault,this.provider,this.batchSize);return a.timeEnd(`fetching onchain ${t.length} pools`),n}async fetch(e){const t=await this.poolsSubgraph.fetch(e),a=this.filterPools(t),n=j.getInstance();n.time(`fetching onchain ${a.length} pools`);const o=await Fi(a,this.multicall,this.vault,this.provider,this.batchSize);return n.timeEnd(`fetching onchain ${a.length} pools`),o}async find(e,t=!1){return await this.findBy("id",e,t)}async findBy(e,t,a=!1){return this.pools&&!a||(this.pools=this.fetchDefault()),(await this.pools).find((a=>a[e]==t))}async all(){return this.pools||(this.pools=this.fetchDefault()),this.pools}async where(e){return this.pools||(this.pools=this.fetchDefault()),(await this.pools).filter(e)}async refresh(e){const t=await Fi([e],this.multicall,this.vault,this.provider);if(this.pools){const a=(await this.pools).findIndex((t=>t.address===e.address));-1!==a&&(this.pools=Promise.resolve([...(await this.pools).splice(a,1),t[0]]))}return t[0]}}class Yr extends Rr{async query(e){!e.block&&this.blockHeight&&(e.block={number:await this.blockHeight()});const{pools:t}=await this.client.PoolGauges(e);return t.map(this.mapType)}mapType(e){return e}}var zr;exports.PoolJoinExitAttributes=void 0,(zr=exports.PoolJoinExitAttributes||(exports.PoolJoinExitAttributes={})).Pool="pool",zr.Sender="sender";class Zr extends Fr{async query(e){e.orderBy||(e.orderBy=no.Timestamp),e.orderDirection||(e.orderDirection=ro.Asc),!e.block&&this.blockHeight&&(e.block={number:await this.blockHeight()});const{joinExits:t}=await this.client.JoinExits(e);return t.map(this.mapType)}mapType(e){return{id:e.id,userAddress:e.user.id,poolId:e.pool.id,timestamp:e.timestamp,type:e.type,amounts:e.amounts,tokens:e.pool.tokensList}}async findByUser(e,t,a){return this.findAllBy(exports.PoolJoinExitAttributes.Sender,e,t,a)}async findJoins(e,t){return this.query({where:{sender:e,pool:t,type:"Join"}})}async findExits(e,t){return this.query({where:{sender:e,pool:t,type:"Exit"}})}async findByPool(e,t,a){return this.findAllBy(exports.PoolJoinExitAttributes.Pool,e,t,a)}}class Qr extends Fr{async query(e){e.orderBy||(e.orderBy=uo.Balance),e.orderDirection||(e.orderDirection=ro.Desc),!e.block&&this.blockHeight&&(e.block={number:await this.blockHeight()});const{poolShares:t}=await this.client.PoolShares(e);return t.map(this.mapType)}mapType(e){return{id:e.id,userAddress:e.userAddress.id,poolId:e.poolId.id,balance:e.balance}}async findByUser(e,t,a){return this.findAllBy(exports.PoolShareAttributes.UserAddress,e,t,a)}async findByPool(e,t,a){return this.findAllBy(exports.PoolShareAttributes.PoolId,e,t,a)}}class ep{constructor(e){this.tokens=e}async find(e){return this.tokens.find((t=>t.address.toLowerCase()===e.toLowerCase()))}async findBy(e,t){return this.tokens.find((a=>a[e]===t))}}class tp{constructor(e,t=1,a){var n;this.chainId=t,this.prices={},this.baseTokenAddresses=e.map(Ne),this.url=`${qi(null==a?void 0:a.isDemoApiKey)}simple/token_price/${this.platform(t)}?vs_currencies=usd,eth`,this.urlNative=`${qi(null==a?void 0:a.isDemoApiKey)}simple/price/?vs_currencies=eth,usd&ids=`,this.coingeckoApiKeyHeaderName=Gi(null==a?void 0:a.isDemoApiKey),this.apiKey=null==a?void 0:a.coingeckoApiKey,this.debouncer=new Ve(this.fetch.bind(this),200,null!==(n=null==a?void 0:a.tokensPerPriceRequest)&&void 0!==n?n:10)}async fetch(e,{signal:t}={}){var a,n,o;try{const{data:n}=await w.default.get(`${this.url}&contract_addresses=${e.join(",")}`,{signal:t,headers:{[this.coingeckoApiKeyHeaderName]:null!==(a=this.apiKey)&&void 0!==a?a:""}});return n}catch(e){const t=["Error fetching token prices from coingecko"];return e.isAxiosError?void 0!==(null===(n=e.response)||void 0===n?void 0:n.status)&&t.push(`with status ${null===(o=e.response)||void 0===o?void 0:o.status}`):t.push(e),Promise.reject(t.join(" "))}}fetchNative({signal:e}={}){var t;let a;!function(e){e.ETH="ethereum",e.MATIC="matic-network",e.XDAI="xdai"}(a||(a={}));let n=a.ETH;return 137===this.chainId&&(n=a.MATIC),100===this.chainId&&(n=a.XDAI),w.default.get(`${this.urlNative}${n}`,{signal:e,headers:{[this.coingeckoApiKeyHeaderName]:null!==(t=this.apiKey)&&void 0!==t?t:""}}).then((({data:e})=>e[n])).catch((e=>{var t;const a=["Error fetching native token from coingecko"];return e.isAxiosError?(null===(t=e.response)||void 0===t?void 0:t.status)&&a.push(`with status ${e.response.status}`):a.push(e),Promise.reject(a.join(" "))})).finally((()=>{}))}find(e){const t=Ne(e,this.chainId);if(!this.prices[t]){if(0===Object.keys(this.prices).length)for(const e of this.baseTokenAddresses)this.prices[e]=this.debouncer.fetch(e).then((t=>t[e]));if(t===Te(this.chainId).Addresses.nativeAsset.toLowerCase())return this.nativePrice||(this.prices[t]=this.fetchNative()),this.prices[t];this.prices[t]=this.debouncer.fetch(t).then((e=>e[t]))}return this.prices[t]}async findBy(e,t){if("address"==e)return this.find(t)}platform(e){switch(e){case 1:case 5:case 42:case 31337:return"ethereum";case 100:return"xdai";case 137:return"polygon-pos";case 250:return"fantom";case 1101:return"polygon-zkevm";case 8453:return"base";case 42161:return"arbitrum-one";case 43114:return"avalanche"}return"2"}}class ap{constructor(e=1,t){this.chainId=e,this.prices={},this.urlBase=`${qi(null==t?void 0:t.isDemoApiKey)}coins/${this.platform(e)}/contract/%TOKEN_ADDRESS%/market_chart/range?vs_currency=usd`,this.apiKey=null==t?void 0:t.coingeckoApiKey,this.coingeckoApiKeyHeaderName=Gi(null==t?void 0:t.isDemoApiKey)}async fetch(e,t,{signal:a}={}){var n,o;const i=this.urlRange(e,t);try{const{data:e}=await w.default.get(i,{signal:a,headers:{[this.coingeckoApiKeyHeaderName]:null!==(n=this.apiKey)&&void 0!==n?n:""}});return e}catch(e){if(e.isAxiosError)throw new Error("Error fetching historical token prices from coingecko - "+e.message+" - "+(null===(o=e.response)||void 0===o?void 0:o.statusText));throw new Error("Unknown Error: "+e)}}async find(e){throw"Historic price requires point-in-time timestamp, please use findBy(address, timestamp)"}async findBy(e,t){const a=Ne(e,this.chainId);return{usd:`${(await this.fetch(a,t)).prices[0][1]}`}}platform(e){switch(e){case 1:case 5:case 42:case 31337:return"ethereum";case 137:return"polygon-pos";case 42161:return"arbitrum-one";case 100:return"xdai"}return"2"}urlRange(e,t){const a=t-3600,n=t+3600;return`${this.urlBase.replace("%TOKEN_ADDRESS%",e)}&from=${a}&to=${n}`}}class np{constructor(e,t=1){this.subgraphUrl=e,this.chainId=t,this.prices={},this.debouncer=new Ve(this.fetch.bind(this),200)}async fetch(e,{signal:t}={}){return e.length,w.default.post(this.subgraphUrl,{variables:{addresses:e},query:"query($addresses: [String!]) {\n tokens(\n where: {\n id_in: $addresses\n }\n ) {\n address\n latestUSDPrice\n }\n }"},{signal:t}).then((e=>e.data.data)).then((({tokens:e})=>Object.fromEntries(e.map((e=>[e.address,{usd:e.latestUSDPrice||void 0}]))))).finally((()=>{e.length}))}async find(e){const t=Ne(e,this.chainId);return this.prices[t]||(this.prices[t]=this.debouncer.fetch(t).then((e=>e[t]))),this.prices[t]}async findBy(e,t){if("address"==e)return this.find(t)}}class op{constructor(e,t,a){this.coingeckoRepository=e,this.subgraphRepository=t,this.aaveRates=a}async find(e){let t;try{if(t=await this.coingeckoRepository.find(e),!(null==t?void 0:t.usd))throw new Error("Price not found")}catch(a){j.getInstance().warn(a),t=await this.subgraphRepository.find(e)}const a=await this.aaveRates.getRate(e)||1;return t&&t.usd?{...t,usd:(parseFloat(t.usd)*a).toString()}:t}async findBy(e,t){if("address"===e)return this.find(t);throw`Token price search by ${e} not implemented`}}class ip{constructor(e,t){this.coingeckoRepository=e,this.aaveRates=t}async find(e){return this.findBy(e,Math.floor(Date.now()/1e3))}async findBy(e,t){const a=await this.coingeckoRepository.findBy(e,t),n=await this.aaveRates.getRate(e)||1;return a&&a.usd?{...a,usd:(parseFloat(a.usd)*n).toString()}:a}}const sp=["function claimTokens(address user, address[] tokens) returns (uint256[])","function claimToken(address user, address token) returns (uint256)"],rp=new e.Interface(["function getTokensDistributedInWeek(address token, uint timestamp) view returns (uint)","function claimTokens(address user, address[] tokens) returns (uint256[])","function claimToken(address user, address token) returns (uint256)"]),pp=new e.Interface(["function totalSupply() view returns (uint)"]);class lp{constructor(e,t,a,n,o,i){this.multicall=e,this.feeDistributorAddress=t,this.balAddress=a,this.veBalAddress=n,this.bbAUsdAddress=o,this.feeDistributor=((e,t)=>new y.Contract(e,sp,t))(t,i)}async fetch(e){const t=this.getPreviousWeek(e),a=[{target:this.feeDistributorAddress,callData:rp.encodeFunctionData("getTokensDistributedInWeek",[n.getAddress(this.balAddress),t])},{target:this.feeDistributorAddress,callData:rp.encodeFunctionData("getTokensDistributedInWeek",[n.getAddress(this.bbAUsdAddress),t])},{target:this.veBalAddress,callData:pp.encodeFunctionData("totalSupply",[])}],[,o]=await this.multicall.callStatic.aggregate(a);return{balAmount:parseFloat(Be(o[0],18)),bbAUsdAmount:parseFloat(Be(o[1],18)),veBalSupply:parseFloat(Be(o[2],18)),bbAUsdPrice:parseFloat("1.0"),balAddress:this.balAddress}}async multicallData(e){return this.data||(this.data=await this.fetch(e)),this.data}getPreviousWeek(e){const t=new Date(e);t.setUTCHours(0),t.setUTCMinutes(0),t.setUTCSeconds(0),t.setUTCMilliseconds(0);let a=t.getUTCDay()-4;return a<0&&(a+=7),a+=7,Math.floor(t.getTime()/1e3)-86400*a}async getClaimableBalances(e,t){try{const a=await this.feeDistributor.callStatic.claimTokens(e,t);return this.extractTokenBalance(t,a)}catch(e){return{}}}claimBalances(e,t){return rp.encodeFunctionData("claimTokens",[e,t])}extractTokenBalance(e,t){return e.reduce(((e,n,o)=>{var i;return e[n]=null!==(i=t[o])&&void 0!==i?i:a.BigNumber.from(0),e}),{})}}const dp=new e.Interface(["function getProtocolFeesCollector() view returns (address)"]),up=new e.Interface(["function getSwapFeePercentage() view returns (uint)"]);let cp;class yp{constructor(e,t){this.provider=t,this.vault=new y.Contract(e,dp,this.provider)}async fetch(){const e=await this.vault.getProtocolFeesCollector(),t=new y.Contract(e,up,this.provider),a=await t.getSwapFeePercentage();return parseFloat(Be(a,18))}async find(){return cp||(cp=this.fetch()),this.swapFeePercentage=await cp,this.swapFeePercentage}async findBy(){return this.find()}}const bp=new e.Interface(["function getSwapFeePercentage() view returns (uint)"]);let mp;class fp{constructor(e,t){this.multicall=e,this.protocolFeePercentagesProviderAddress=t}async fetch(){const e=[{target:this.protocolFeePercentagesProviderAddress,callData:bp.encodeFunctionData("getFeeTypePercentage",[0])},{target:this.protocolFeePercentagesProviderAddress,callData:bp.encodeFunctionData("getFeeTypePercentage",[2])}],[,t]=await this.multicall.callStatic.aggregate(e);return{swapFee:parseFloat(Be(t[0],18)),yieldFee:parseFloat(Be(t[2],18))}}async getFees(){return mp||(mp=this.fetch()),this.protocolFees=await mp,this.protocolFees}}class Tp{constructor(e="https://yield-tokens.balancer.workers.dev/"){this.url=e}async fetch(){let e={};try{e=(await w.default.get(this.url)).data}catch(e){j.getInstance().warn(`Failed to fetch yield tokens: ${e}`)}return e}async find(e){const t=e.toLocaleLowerCase();return this.yields||(this.yields=this.fetch()),this.yields.then((e=>e[t]&&e[t]>0?e[t]:0))}async findBy(e,t){return"address"!=e?0:this.find(t)}}const hp=e=>`{\n blocks(first: 1, orderBy: timestamp, orderDirection: asc, where: { timestamp_gt: ${e} }) {\n number\n }\n}`,Ip=async(e,t)=>{const a={query:hp(t)},n=await w.default.post(e,a),{data:{blocks:o}}=n.data;return parseInt(o[0].number)};class gp{constructor(e){this.endpoint=e,this.blocks={}}async find(e){if("dayAgo"==e){const e=""+(Math.floor(Date.now()/1e3)-86400);return this.blocks[e]||(this.blocks={...this.blocks,[e]:Ip(this.endpoint,e)}),this.blocks[e]}}async findBy(e="",t=""){}}var _p=[{chainId:1,address:"0x8888801af4d980682e47f1a9036e589479e835c5",symbol:"mph"},{chainId:1,address:"0x27054b13b1b798b345b591a4d22e6562d47ea75a",symbol:"ast"},{chainId:1,address:"0x3301ee63fb29f863f2333bd4466acb46cd8323e6",symbol:"akita"},{chainId:1,address:"0x616e8bfa43f920657b3497dbf40d6b1a02d4608d",symbol:"aurabal"},{chainId:1,address:"0xc0c293ce456ff0ed870add98a0828dd4d2903dbf",symbol:"aura"},{chainId:1,address:"0x3472a5a71965499acd81997a54bba8d852c6e53d",symbol:"badger"},{chainId:1,address:"0xba100000625a3754423978a60c9317c58a424e3d",symbol:"bal"},{chainId:1,address:"0x804cdb9116a10bb78768d3252355a1b18067bf8f",symbol:"bb-a-dai"},{chainId:1,address:"0x9210f1204b5a24742eba12f710636d76240df3d0",symbol:"bb-a-usdc"},{chainId:1,address:"0x2bbf681cc4eb09218bee85ea2a5d3d13fa40fc0c",symbol:"bb-a-usdt"},{chainId:1,address:"0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb2",symbol:"bb-a-usd"},{chainId:1,address:"0x2d94aa3e47d9d5024503ca8491fce9a2fb4da198",symbol:"bank"},{chainId:1,address:"0x0d8775f648430679a709e98d2b0cb6250d2887ef",symbol:"bat"},{chainId:1,address:"0xf17e65822b568b3903685a7c9f496cf7656cc6c2",symbol:"bico"},{chainId:1,address:"0x799ebfabe77a6e34311eeee9825190b9ece32824",symbol:"btrst"},{chainId:1,address:"0x514910771af9ca656af840dff83e8264ecf986ca",symbol:"link"},{chainId:1,address:"0x3506424f91fd33084466f402d5d97f05f8e3b4af",symbol:"chz"},{chainId:1,address:"0x41e5560054824ea6b0732e656e3ad64e20e94e45",symbol:"cvc"},{chainId:1,address:"0xc00e94cb662c3520282e6f5717214004a7f26888",symbol:"comp"},{chainId:1,address:"0xdef1ca1fb7fbcdc777520aa7f396b4e015f497ab",symbol:"cow"},{chainId:1,address:"0xd533a949740bb3306d119cc777fa900ba034cd52",symbol:"crv"},{chainId:1,address:"0x6b175474e89094c44da98b954eedeac495271d0f",symbol:"dai"},{chainId:1,address:"0xf2051511b9b121394fa75b8f7d4e7424337af687",symbol:"haus"},{chainId:1,address:"0x888888435fde8e7d4c54cab67f206e4199454c60",symbol:"dfx"},{chainId:1,address:"0x798d1be841a82a273720ce31c822c61a67a601c3",symbol:"digg"},{chainId:1,address:"0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c",symbol:"enj"},{chainId:1,address:"0xc18360217d8f7ab5e7c516566761ea12ce7f9d72",symbol:"ens"},{chainId:1,address:"0x4e15361fd6b4bb609fa63c81a2be19d873717870",symbol:"ftm"},{chainId:1,address:"0x956f47f50a910163d8bf957cf5846d573e7f87ca",symbol:"fei"},{chainId:1,address:"0xed1480d12be41d92f36f5f7bdd88212e381a3677",symbol:"fdt"},{chainId:1,address:"0x586aa273f262909eef8fa02d90ab65f5015e0516",symbol:"fiat"},{chainId:1,address:"0xde30da39c46104798bb5aa3fe8b9e0e1f348163f",symbol:"gtc"},{chainId:1,address:"0x900db999074d9277c5da2a43f252d74366230da0",symbol:"giv"},{chainId:1,address:"0x6810e776880c02933d47db1b9fc05908e5386b96",symbol:"gno"},{chainId:1,address:"0xba485b556399123261a5f9c95d413b4f93107407",symbol:"graviaura"},{chainId:1,address:"0x3ec8798b81485a254928b70cda1cf0a2bb0b74d7",symbol:"gro"},{chainId:1,address:"0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f",symbol:"snx"},{chainId:1,address:"0x5a98fcbea516cf06857215779fd812ca3bef1b32",symbol:"ldo"},{chainId:1,address:"0x6dea81c8171d0ba574754ef6f8b412f2ed88c54d",symbol:"lqty"},{chainId:1,address:"0x5f98805a4e8be255a32880fdec7f6728c6568ba0",symbol:"lusd"},{chainId:1,address:"0x965d79f1a1016b574a62986e13ca8ab04dfdd15c",symbol:"m2"},{chainId:1,address:"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2",symbol:"mkr"},{chainId:1,address:"0xd084944d3c05cd115c09d072b9f44ba3e0e45921",symbol:"fold"},{chainId:1,address:"0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0",symbol:"matic"},{chainId:1,address:"0xa3bed4e1c75d00fa6f4e5e6922db7261b5e9acd2",symbol:"mta"},{chainId:1,address:"0x4b13006980acb09645131b91d259eaa111eaf5ba",symbol:"myc"},{chainId:1,address:"0x333a4823466879eef910a04d473505da62142069",symbol:"nation"},{chainId:1,address:"0xcfeaead4947f0705a14ec42ac3d44129e1ef3ed5",symbol:"note"},{chainId:1,address:"0x967da4048cd07ab37855c090aaf366e4ce1b9f48",symbol:"ocean"},{chainId:1,address:"0x64aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5",symbol:"ohm"},{chainId:1,address:"0xab846fb6c81370327e784ae7cbb6d6a6af6ff4bf",symbol:"pal"},{chainId:1,address:"0xcafe001067cdef266afb7eb5a286dcfd277f3de5",symbol:"psp"},{chainId:1,address:"0x68037790a0229e9ce6eaa8a99ea92964106c4703",symbol:"par"},{chainId:1,address:"0x45804880de22913dafe09f4980848ece6ecbaf78",symbol:"paxg"},{chainId:1,address:"0x89ab32156e46f46d02ade3fecbe5fc4243b9aaed",symbol:"pnt"},{chainId:1,address:"0x9992ec3cf6a55b00978cddf2b27bc6882d88d1ec",symbol:"poly"},{chainId:1,address:"0x43d4a3cd90ddd2f8f4f693170c9c8098163502ad",symbol:"d2d"},{chainId:1,address:"0xeb4c2781e4eba804ce9a9803c67d0893436bb27d",symbol:"renbtc"},{chainId:1,address:"0x408e41876cccdc0f92210600ef50372656052a38",symbol:"ren"},{chainId:1,address:"0xfb5453340c03db5ade474b27e68b6a9c6b2823eb",symbol:"robot"},{chainId:1,address:"0xd33526068d116ce69f19a9ee46f0bd304f21a51f",symbol:"rpl"},{chainId:1,address:"0xae78736cd615f374d3085123a210448e74fc6393",symbol:"reth"},{chainId:1,address:"0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6",symbol:"sbtc"},{chainId:1,address:"0x476c5e26a75bd202a9683ffd34359c0cc15be0ff",symbol:"srm"},{chainId:1,address:"0x35e78b3982e87ecfd5b3f3265b601c046cdbe232",symbol:"xai"},{chainId:1,address:"0x3affcca64c2a6f4e3b6bd9c64cd2c969efd1ecbe",symbol:"dsla"},{chainId:1,address:"0xf24d8651578a55b0c119b9910759a351a3458895",symbol:"sdbal"},{chainId:1,address:"0x11c1a6b3ed6bb362954b29d3183cfa97a0c806aa",symbol:"str"},{chainId:1,address:"0x8f693ca8d21b157107184d29d398a8d082b38b76",symbol:"data"},{chainId:1,address:"0x470ebf5f030ed85fc1ed4c2d36b9dd02e77cf1b7",symbol:"temple"},{chainId:1,address:"0xa36fdbbae3c9d55a1d67ee5821d53b50b63a1ab9",symbol:"temp"},{chainId:1,address:"0xdac17f958d2ee523a2206206994597c13d831ec7",symbol:"usdt"},{chainId:1,address:"0x9c4a4204b79dd291d6b6571c5be8bbcd0622f050",symbol:"tcr"},{chainId:1,address:"0x226f7b842e0f0120b7e194d05432b3fd14773a9d",symbol:"unn"},{chainId:1,address:"0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",symbol:"uni"},{chainId:1,address:"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",symbol:"usdc"},{chainId:1,address:"0x81f8f0bb1cb2a06649e51913a151f0e7ef6fa321",symbol:"vita"},{chainId:1,address:"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",symbol:"weth"},{chainId:1,address:"0xedb171c18ce90b633db442f2a6f72874093b49ef",symbol:"wampl"},{chainId:1,address:"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",symbol:"wbtc"},{chainId:1,address:"0xf203ca1769ca8e9e8fe1da9d147db68b6c919817",symbol:"wncg"},{chainId:1,address:"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",symbol:"wsteth"},{chainId:1,address:"0x79c71d3436f39ce382d0f58f1b011d88100b9d91",symbol:"xns"},{chainId:1,address:"0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e",symbol:"yfi"},{chainId:1,address:"0xbcca60bb61934080951369a648fb03df4f96263c",symbol:"ausdc"},{chainId:1,address:"0x028171bca77440897b824ca71d1c56cac55b68a3",symbol:"adai"},{chainId:1,address:"0x3ed3b47dd13ec9a98b44e6204a523e766b225811",symbol:"ausdt"},{chainId:137,address:"0x9c2c5fd7b07e95ee044ddeba0e97a665f142394f",symbol:"1inch"},{chainId:137,address:"0xd6df932a45c0f255f85145f286ea0b292b21c90b",symbol:"aave"},{chainId:137,address:"0xc3fdbadc7c795ef1d6ba111e06ff8f16a20ea539",symbol:"addy"},{chainId:137,address:"0xf84bd51eab957c2e7b7d646a3427c5a50848281d",symbol:"agar"},{chainId:137,address:"0x033d942a6b495c4071083f4cde1f17e986fe856c",symbol:"aga"},{chainId:137,address:"0x0e9b89007eee9c958c0eda24ef70723c2c93dd58",symbol:"amaticc"},{chainId:137,address:"0x034b2090b579228482520c589dbd397c53fc51cc",symbol:"vision"},{chainId:137,address:"0x2c89bbc92bd86f8075d1decc58c7f4e0107f286b",symbol:"avax"},{chainId:137,address:"0x49690541e3f6e933a9aa3cffee6010a7bb5b72d7",symbol:"axiav3"},{chainId:137,address:"0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3",symbol:"bal"},{chainId:137,address:"0xdb7cb471dd0b49b29cab4a1c14d070f27216a0ab",symbol:"bank"},{chainId:137,address:"0xfbdd194376de19a88118e84e279b977f165d01b8",symbol:"bifi"},{chainId:137,address:"0xd6ca869a4ec9ed2c7e618062cdc45306d8dbbc14",symbol:"btc2x-fli-p"},{chainId:137,address:"0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39",symbol:"link"},{chainId:137,address:"0x172370d5cd63279efa6d502dab29171933a610af",symbol:"crv"},{chainId:137,address:"0x8f3cf7ad23cd3cadbd9735aff958023239c6a063",symbol:"dai"},{chainId:137,address:"0x1d607faa0a51518a7728580c238d912747e71f7a",symbol:"data"},{chainId:137,address:"0x85955046df4668e1dd369d2de9f3aeb98dd2a369",symbol:"dpi"},{chainId:137,address:"0xe7804d91dfcde7f776c90043e03eaa6df87e6395",symbol:"dfx"},{chainId:137,address:"0xf28164a485b0b2c90639e47b0f377b4a438a16b1",symbol:"dquick"},{chainId:137,address:"0x45c32fa6df82ead1e2ef74d17b76547eddfaff89",symbol:"frax"},{chainId:137,address:"0x50b728d8d964fd00c2d0aad81718b71311fef68a",symbol:"snx"},{chainId:137,address:"0x72928d5436ff65e57f72d5566dcd3baedc649a88",symbol:"hdao"},{chainId:137,address:"0x3ad707da309f3845cd602059901e39c4dcd66473",symbol:"eth2x-fli-p"},{chainId:137,address:"0x4f025829c4b13df652f38abd2ab901185ff1e609",symbol:"ieth-fli-p"},{chainId:137,address:"0x340f412860da7b7823df372a2b59ff78b7ae6abc",symbol:"imatic-fli-p"},{chainId:137,address:"0xf287d97b6345bad3d88856b26fb7c0ab3f2c7976",symbol:"matic2x-fli-p"},{chainId:137,address:"0x130ce4e4f76c2265f94a961d70618562de0bb8d2",symbol:"ibtc-fli-p"},{chainId:137,address:"0x596ebe76e2db4470966ea395b0d063ac6197a8c5",symbol:"jrt"},{chainId:137,address:"0x3a58a54c066fdc0f2d55fc9c89f0415c92ebf3c4",symbol:"stmatic"},{chainId:137,address:"0xf501dd45a1198c2e1b5aef5314a68b9006d842e0",symbol:"mta"},{chainId:137,address:"0xeaecc18198a475c921b24b8a6c1c1f0f5f3f7ea0",symbol:"seed"},{chainId:137,address:"0xfe712251173a2cd5f5be2b46bb528328ea3565e1",symbol:"mvi"},{chainId:137,address:"0xa3fa99a148fa48d14ed51d610c367c61876997f1",symbol:"mimatic"},{chainId:137,address:"0xa486c6bc102f409180ccb8a94ba045d39f8fc7cb",symbol:"nex"},{chainId:137,address:"0xe2aa7db6da1dae97c5f5c6914d285fbfcc32a128",symbol:"par"},{chainId:137,address:"0x580a84c73811e1839f75d86d75d88cca0c241ff4",symbol:"qi"},{chainId:137,address:"0x831753dd7087cac61ab5644b308642cc1c33dc13",symbol:"quick"},{chainId:137,address:"0xb5c064f955d8e7f38fe0460c556a72987494ee17",symbol:"quick"},{chainId:137,address:"0x00e5646f60ac6fb446f621d146b6e1886f002905",symbol:"rai"},{chainId:137,address:"0x431cd3c9ac9fc73644bf68bf5691f4b83f9e104f",symbol:"rbw"},{chainId:137,address:"0xdbf31df14b66535af65aac99c32e9ea844e14501",symbol:"renbtc"},{chainId:137,address:"0x501ace9c35e60f03a2af4d484f49f9b1efde9f40",symbol:"solace"},{chainId:137,address:"0xfa68fb4628dff1028cfec22b4162fccd0d45efb6",symbol:"maticx"},{chainId:137,address:"0x0b3f868e0be5597d5db7feb59e1cadbb0fdda50a",symbol:"sushi"},{chainId:137,address:"0xdf7837de1f2fa4631d716cf2502f8b230f1dcc32",symbol:"tel"},{chainId:137,address:"0xe6469ba6d2fd6130788e0ea9c0a0515900563b59",symbol:"ust"},{chainId:137,address:"0xc2132d05d31c914a87c6611c10748aeb04b58e8f",symbol:"usdt"},{chainId:137,address:"0x5fe2b58c013d7601147dcdd68c143a77499f5531",symbol:"grt"},{chainId:137,address:"0xbbba073c31bf03b8acf7c28ef0738decf3695683",symbol:"sand"},{chainId:137,address:"0x2934b36ca9a4b31e633c5be670c8c8b28b6aa015",symbol:"thx"},{chainId:137,address:"0x2f800db0fdb5223b3c3f354886d907a671414a7f",symbol:"bct"},{chainId:137,address:"0x2e1ad108ff1d8c782fcbbb89aad783ac49586756",symbol:"tusd"},{chainId:137,address:"0x3809dcdd5dde24b37abe64a5a339784c3323c44f",symbol:"swap"},{chainId:137,address:"0x7fbc10850cae055b27039af31bd258430e714c62",symbol:"ubt"},{chainId:137,address:"0x2791bca1f2de4661ed88a30c99a7a9449aa84174",symbol:"usdc"},{chainId:137,address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",symbol:"weth"},{chainId:137,address:"0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270",symbol:"wmatic"},{chainId:137,address:"0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6",symbol:"wbtc"},{chainId:137,address:"0x24834bbec7e39ef42f4a75eaf8e5b6486d3f0e57",symbol:"lunc"},{chainId:137,address:"0xf153eff70dc0bf3b085134928daeea248d9b30d0",symbol:"xmark"},{chainId:42161,address:"0x9f20de1fc9b161b34089cbeae888168b44b03461",symbol:"arbis"},{chainId:42161,address:"0x040d1edc9569d4bab2d15287dc5a4f10f56a56b8",symbol:"bal"},{chainId:42161,address:"0x031d35296154279dc1984dcd93e392b1f946737b",symbol:"cap"},{chainId:42161,address:"0xf97f4df75117a78c1a5a0dbb814af92458539fb4",symbol:"link"},{chainId:42161,address:"0x354a6da3fcde098f8389cad84b0182725c6c91de",symbol:"comp"},{chainId:42161,address:"0xf4d48ce3ee1ac3651998971541badbb9a14d7234",symbol:"cream"},{chainId:42161,address:"0x11cdb42b0eb46d95f990bedd4695a6e3fa034978",symbol:"crv"},{chainId:42161,address:"0xda10009cbd5d07dd0cecc66161fc93d7c9000da1",symbol:"dai"},{chainId:42161,address:"0x8038f3c971414fd1fc220ba727f2d4a0fc98cb65",symbol:"dht"},{chainId:42161,address:"0xf0b5ceefc89684889e5f7e0a7775bd100fcd3709",symbol:"dusd"},{chainId:42161,address:"0x6c2c06790b3e3e3c38e12ee22f8183b37a13ee55",symbol:"dpx"},{chainId:42161,address:"0x32eb7902d4134bf98a28b963d26de779af92a212",symbol:"rdpx"},{chainId:42161,address:"0xc3ae0333f0f34aa734d5493276223d95b8f9cb37",symbol:"dxd"},{chainId:42161,address:"0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a",symbol:"gmx"},{chainId:42161,address:"0xa0b862f60edef4452f25b4160f177db44deb6cf1",symbol:"gno"},{chainId:42161,address:"0xb965029343d55189c25a7f3e0c9394dc0f5d41b1",symbol:"ndx"},{chainId:42161,address:"0x539bde0d7dbd336b79148aa742883198bbf60342",symbol:"magic"},{chainId:42161,address:"0x4e352cf164e64adcbad318c3a1e222e9eba4ce42",symbol:"mcb"},{chainId:42161,address:"0x3f56e0c36d275367b8c502090edf38289b3dea0d",symbol:"mimatic"},{chainId:42161,address:"0x965772e0e9c84b6f359c8597c891108dcf1c5b1a",symbol:"pickle"},{chainId:42161,address:"0x6694340fc020c5e6b96567843da2df01b2ce1eb6",symbol:"stg"},{chainId:42161,address:"0xd4d42f0b6def4ce0383636770ef773390d85c61a",symbol:"sushi"},{chainId:42161,address:"0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9",symbol:"usdt"},{chainId:42161,address:"0x23a941036ae778ac51ab04cea08ed6e2fe103614",symbol:"grt"},{chainId:42161,address:"0xa72159fc390f0e3c6d415e658264c7c4051e9b87",symbol:"tcr"},{chainId:42161,address:"0x4d15a3a2286d883af0aa1b3f21367843fac63e07",symbol:"tusd"},{chainId:42161,address:"0xfa7f8980b0f1e64a2062791cc3b0871572f1f7f0",symbol:"uni"},{chainId:42161,address:"0xff970a61a04b1ca14834a43f5de4533ebddb5cc8",symbol:"usdc"},{chainId:42161,address:"0xa684cd057951541187f288294a1e1c2646aa2d24",symbol:"vsta"},{chainId:42161,address:"0x64343594ab9b56e99087bfa6f2335db24c2d1f17",symbol:"vst"},{chainId:42161,address:"0x82af49447d8a07e3bd95bd0d56f35241523fbab1",symbol:"weth"},{chainId:42161,address:"0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",symbol:"wbtc"},{chainId:42161,address:"0x82e3a8f066a6989666b031d916c43672085b1582",symbol:"yfi"}];class xp{constructor(e,t,a,n,o){if(this.pools=new jr({url:e.urls.subgraph,chainId:e.chainId,query:n}),this.poolsForSimulations=new Ri(Ei(e.urls.subgraph),t,e,void 0,n),this.poolsOnChain=new Xr(this.pools,{provider:t,multicall:e.addresses.contracts.multicall,vault:e.addresses.contracts.vault},e.poolsToIgnore,e.multicallBatchSize),this.poolShares=new Qr(e.urls.subgraph,e.chainId),this.poolJoinExits=new Zr(e.urls.subgraph,e.chainId),e.urls.gaugesSubgraph&&(this.poolGauges=new Yr(e.urls.gaugesSubgraph,e.chainId),this.gaugeShares=new Nr(e.urls.gaugesSubgraph,e.chainId)),e.urls.blockNumberSubgraph){this.blockNumbers=new gp(e.urls.blockNumberSubgraph);const t=async()=>{if(this.blockNumbers)return await this.blockNumbers.find("dayAgo")};this.yesterdaysPools=new jr({url:e.urls.subgraph,chainId:e.chainId,blockHeight:t,query:n})}else if(e.averageBlockTime){const a=async()=>await t.getBlockNumber()-Math.round(86400/(e.averageBlockTime||2));this.yesterdaysPools=new jr({url:e.urls.subgraph,chainId:e.chainId,blockHeight:a,query:n})}const i=_p.filter((t=>t.chainId==e.chainId)).map((e=>e.address)),s=new tp(i,e.chainId,o),r=new np(e.urls.subgraph,e.chainId),p=new Re(a.contracts.multicall,e.chainId);this.tokenPrices=new op(s,r,p);const l=new ap(e.chainId,o);this.tokenHistoricalPrices=new ip(l,p),this.tokenMeta=new ep([]),e.urls.gaugesSubgraph&&(this.liquidityGauges=new qr(e.urls.gaugesSubgraph,a.contracts.multicall,e.addresses.contracts.gaugeController||"",e.chainId,e.addresses.contracts.gaugeControllerCheckpointer)),e.addresses.contracts.feeDistributor&&e.addresses.tokens.bal&&e.addresses.tokens.veBal&&e.addresses.tokens.bbaUsd&&(this.feeDistributor=new lp(a.contracts.multicall,e.addresses.contracts.feeDistributor,e.addresses.tokens.bal,e.addresses.tokens.veBal,e.addresses.tokens.bbaUsd,t)),this.feeCollector=new yp(e.addresses.contracts.vault,t),e.addresses.contracts.protocolFeePercentagesProvider&&(this.protocolFees=new fp(a.contracts.multicall,e.addresses.contracts.protocolFeePercentagesProvider)),this.tokenYields=new Tp,e.addresses.contracts.gyroConfigProxy&&(this.gyroConfigRepository=new kr(e.addresses.contracts.gyroConfigProxy,a.contracts.multicall,t))}}const Pp=(e,t)=>"Stable"===e?exports.PoolKind.LEGACY_STABLE:"ComposableStable"===e&&1===t?exports.PoolKind.COMPOSABLE_STABLE:"ComposableStable"===e?exports.PoolKind.COMPOSABLE_STABLE_V2:exports.PoolKind.WEIGHTED,wp=ps.encodeSetRelayerApproval,Ep=ps.encodeGaugeWithdraw,Ap=ps.encodeGaugeDeposit,Sp=ps.encodePeekChainedReferenceValue,vp=It.createInterface(),kp=(e,t)=>{var a;return(null===(a=e.poolType)||void 0===a?void 0:a.match(/.*Linear.*/))?Bp(e,t):[]},Bp=(e,t)=>{if(!(e.id&&t.id&&e.tokens&&t.tokens&&e.mainIndex&&t.mainIndex))throw"Missing tokens";const a=e.tokens[e.mainIndex];return[{poolId:e.id,assetIn:e.address,assetOut:a.address},{poolId:t.id,assetIn:a.address,assetOut:t.address}]},Cp=async(e,t)=>{const a=await t.find(e);if(!a)throw`Pool ${e} not found`;const n=async(e,a)=>{let o=[{address:e}];const i=await t.findBy("address",e);if(i&&e!=a){const t=i.tokens.sort(Op),a=await Promise.all(t.map((({address:e})=>n(e,i.address))));o=[{address:e,id:i.id,poolType:i.poolType,poolTypeVersion:i.poolTypeVersion,mainIndex:i.mainIndex,tokens:a.flat()}]}return o},o=a.tokens.sort(Op);return{id:e,address:a.address,tokens:(await Promise.all(o.map((({address:e})=>n(e,a.address))))).flat(),poolType:a.poolType,poolTypeVersion:a.poolTypeVersion,mainIndex:a.mainIndex}},Op=(e,t)=>e.address.toLowerCase()>t.address.toLowerCase()?1:-1,Mp=(e,n,o,i,s,r,p=!1,l,d,u)=>{if(!(s.id&&r.id&&s.tokens&&r.tokens&&s.poolType&&r.poolType))throw"Pool data is missing";const c=s.tokens.flatMap((({address:e})=>e)),y=r.tokens.flatMap((({address:e})=>e)),b="ComposableStable"==s.poolType&&1==s.poolTypeVersion?0:-1;let m,f=[];b>-1?(m=[{index:b,key:ps.toChainedReference(`10${b}`)}],f=[ps.toChainedReference(`20${b}`)]):(m=c.map(((e,t)=>({index:t,key:ps.toChainedReference(`10${t}`)}))),f=c.map(((e,t)=>ps.toChainedReference(`20${t}`))));const T=ps.toChainedReference("999"),h=[];let I=!1;"ComposableStable"===s.poolType&&(I=!0),u&&h.push(wp(n,!0,u)),l&&h.push(Ep(l,e,n,o)),h.push(((e,t,a,n,o=-1,i,s,r,p,l=!0)=>{let d;const u="ComposableStable"===t&&1===a;d=o>-1?A.exitExactBPTInForOneTokenOut(s,o):(u?C.exitExactBPTInForAllTokensOut:A.exitExactBPTInForTokensOut)(s);const c=Pp(t,a);return ps.encodeExitPool({poolId:e,poolKind:c,sender:r,recipient:p,outputReferences:i,exitPoolRequest:{assets:n,minAmountsOut:new Array(n.length).fill("0"),userData:d,toInternalBalance:l}})})(s.id,s.poolType,s.poolTypeVersion||1,c,b,m,o,l?n:e,n));const g=((e,t,a)=>{const n=({tokens:e,mainIndex:t})=>e&&t&&e[t].address||"",o=e.flatMap(n),i=t.flatMap(n),s=o.map(((e,t)=>e&&[t,i.indexOf(e)]||[-1,-1])).map((([a,n])=>{if(-1===a||-1===n)return[];const o=e[a],i=t[n];return kp(o,i)}));return a>-1?[s[a]]:s})(s.tokens,r.tokens,b);if(g.flat().length>0){const e=g.map(((e,t)=>({path:e,inputAmount:String(m[t].key),outputReference:f[t]}))).filter((({path:e})=>e.length>0));h.push(((e,n,o,i,s=!0)=>{const r=[],p=[],l=[],d=[];o.forEach((e=>{const{path:a,inputAmount:n,outputReference:o}=e;for(let e=0;er.address!=e)).map((e=>{var t;const a=c.indexOf(e);return String(I&&f[a]||(null===(t=m[a])||void 0===t?void 0:t.key)||0)}));h.push(((e,a,n,o,i,s,r,p,l,d=!0)=>{const u=o.map((()=>t.MaxInt256)),c=A.joinExactTokensInForBPTOut(i,s),y=Pp(a,n);return ps.encodeJoinPool({poolId:e,kind:y,sender:p,recipient:l,joinPoolRequest:{assets:o,maxAmountsIn:u,userData:c,fromInternalBalance:d},value:"0",outputReference:r})})(r.id,r.poolType,r.poolTypeVersion||1,y,_,i,String(T),n,d?n:e,!0)),!0===p&&h.push(Sp(String(T))),d&&h.push(Ap(d,n,e,String(T)));return vp.encodeFunctionData("multicall",[h])};class Fp{constructor({relayerAddress:e,poolsRepository:t,gaugesRepository:a,provider:n}){this.getExpectedBptOut=Fp.getExpectedBptOut,this.relayerAddress=e,this.poolsRepository=t,this.gaugesRepository=a,this.provider=n}async pool2pool({user:e,from:t,to:a,balance:n,minBptOut:o="0",authorisation:i}){const s=await Cp(t,this.poolsRepository),r=await Cp(a,this.poolsRepository),p=Mp(e,this.relayerAddress,String(n),o,s,r,"0"==o,void 0,void 0,i);return{to:this.relayerAddress,data:p}}async pool2poolWithGauges({user:e,from:t,to:a,balance:n,minBptOut:o="0",authorisation:i}){const s=await this.gaugesRepository.findBy("poolId",t),r=await this.gaugesRepository.findBy("poolId",a);if(!(s&&s.poolId&&r&&r.poolId))throw new Error("Gauge not found");const p=await Cp(s.poolId,this.poolsRepository),l=await Cp(r.poolId,this.poolsRepository),d=Mp(e,this.relayerAddress,String(n),o,p,l,"0"==o,s.id,r.id,i);return{to:this.relayerAddress,data:d}}async gauge2gauge({user:e,from:t,to:a,balance:n,authorisation:o}){const i=[Ep(t,e,this.relayerAddress,n),Ap(a,this.relayerAddress,e,n)];o&&i.unshift(wp(this.relayerAddress,!0,o));const s=vp.encodeFunctionData("multicall",[i]);return{to:this.relayerAddress,data:s}}}Fp.getExpectedBptOut=e=>{const t=vp.decodeFunctionResult("multicall",e)[0].slice(-2).filter((e=>"0x"!==e));return String(BigInt(t))};var Rp,Np;!function(e){e[e.Direct=0]="Direct",e[e.TokenIn=1]="TokenIn",e[e.TokenOut=2]="TokenOut",e[e.Middle=3]="Middle"}(Rp||(Rp={})),function(e){e[e.BatchSwap=0]="BatchSwap",e[e.Join=1]="Join",e[e.Exit=2]="Exit"}(Np||(Np={}));class Lp{constructor(e,t,a,n,o,i,s,r,p,l){const d=this.getActionStep(e,t,a,n);this.amountIn=this.getActionAmount(o,Np.BatchSwap,d,s),this.hasTokenIn=this.actionHasTokenIn(d),this.hasTokenOut=this.actionHasTokenOut(d);const u=this.hasTokenOut?i:"0";this.minOut=this.getActionMinOut(u,r);const[c,y]=this.getActionOutputRef(d,n,s);this.nextOpRefKey=y,this.opRefStart=c,this.sender=this.getSender(this.hasTokenIn,p,l),this.receiver=this.getReceiver(this.hasTokenOut,p,l)}getActionAmount(e,t,a,n){let o=e;return(a===Rp.TokenOut||a===Rp.Middle&&t===Np.Join||a===Rp.Middle&&t===Np.Exit)&&(o=ps.toChainedReference(n-1).toString()),o}getActionOutputRef(e,t,a){let n={};return e!==Rp.TokenIn&&e!==Rp.Middle||(n=this.getOutputRef(a,t),a++),[n,a]}getActionMinOut(e,t){return Ke(a.BigNumber.from(e),a.BigNumber.from(t)).toString()}getActionStep(e,t,a,n){let o;return o=a===e&&n===t?Rp.Direct:a===e?Rp.TokenIn:n===t?Rp.TokenOut:Rp.Middle,o}getOutputRef(e,t){return{index:t,key:ps.toChainedReference(e)}}getFromInternal(e,t){return!e&&!t}getToInternal(e,t){return!e&&!t}actionHasTokenIn(e){return e===Rp.Direct||e===Rp.TokenIn}actionHasTokenOut(e){return e===Rp.Direct||e===Rp.TokenOut}getSender(e,t,a){return e?t:a}getReceiver(e,t,a){return e?t:a}getPoolKind(e){let t=0;return["MetaStable","Stable","StablePhantom"].includes(e)?t=1:"ComposableStable"===e&&(t=3),t}}class Dp extends Lp{constructor(e,t,a,n,o,i,s,r){var p;super(t,a,e.assetInIndex,e.assetOutIndex,e.amount,null!==(p=e.returnAmount)&&void 0!==p?p:"0",n,i,s,r),this.opRefKey=n,this.type=Np.Exit,this.poolId=e.poolId,this.tokenOut=o[e.assetOutIndex],this.toInternalBalance=this.getToInternal(this.hasTokenOut),this.opRef=this.opRefStart}callData(e,t){const a=e.tokensList,n=new Y(t),[o]=n.sortTokens(a),i=this.tokenOut,s=o.findIndex((e=>e.toLowerCase()===i.toLowerCase())),r=Array(a.length).fill("0");r[s]=this.minOut;const p=this.amountIn,l={assets:o,minAmountsOut:r,userData:S.exitExactBPTInForOneTokenOut(p,s),toInternalBalance:this.toInternalBalance,poolId:this.poolId,poolKind:this.getPoolKind(e.poolType),sender:this.sender,recipient:this.receiver,outputReferences:this.opRef.key?[this.opRef]:[],exitPoolRequest:{}},d=ps.formatExitPoolInput(l);return{params:l,encoded:ps.encodeExitPool(d)}}getAmountIn(){return this.hasTokenIn?this.amountIn:"0"}getAmountOut(){return this.hasTokenOut?this.minOut:"0"}}class Up extends Lp{constructor(e,t,a,n,o,i,s,r){var p;super(t,a,e.assetInIndex,e.assetOutIndex,e.amount,null!==(p=e.returnAmount)&&void 0!==p?p:"0",n,i,s,r),this.opRefKey=n,this.type=Np.Join,this.poolId=e.poolId,this.tokenIn=o[e.assetInIndex],this.fromInternal=this.getFromInternal(this.hasTokenIn),this.opRef=this.opRefStart}callData(e,t){const a=e.tokensList,n=new Y(t),[o]=n.sortTokens(a),i=this.tokenIn,s=o.findIndex((e=>e.toLowerCase()===i.toLowerCase())),r=Array(a.length).fill("0");r[s]=this.amountIn;const p=this.minOut,l=S.joinExactTokensInForBPTOut(r,p),d={poolId:this.poolId,sender:this.sender,recipient:this.receiver,kind:this.getPoolKind(e.poolType),joinPoolRequest:{assets:o,maxAmountsIn:r,userData:l,fromInternalBalance:this.fromInternal},value:"0",outputReference:this.opRef.key?this.opRef.key.toString():"0"};return{params:d,encoded:ps.encodeJoinPool(d)}}getAmountIn(){return this.hasTokenIn?this.amountIn:"0"}getAmountOut(){return this.hasTokenOut?this.minOut:"0"}}class Vp extends Lp{constructor(e,t,a,n,o,i,s,r,p){var l;super(t,a,e.assetInIndex,e.assetOutIndex,e.amount,null!==(l=e.returnAmount)&&void 0!==l?l:"0",n,i,r,p),this.mainTokenInIndex=t,this.mainTokenOutIndex=a,this.opRefKey=n,this.assets=o,this.slippage=i,this.pools=s,this.user=r,this.relayer=p,this.approveTokens=[],this.opRef=[],this.type=Np.BatchSwap,this.swaps=[{...e,amount:this.amountIn}];const d=this.isBpt(s,o[e.assetInIndex]);d&&this.approveTokens.push(o[e.assetInIndex]),this.fromInternal=this.getFromInternal(this.hasTokenIn,d);const u=this.isBpt(s,o[e.assetOutIndex]);this.toInternal=this.getToInternal(this.hasTokenOut,u),this.limits=this.getLimits(o,e.assetInIndex,e.assetOutIndex,e.amount,this.hasTokenIn,this.hasTokenOut,this.minOut),this.opRefStart.index&&this.opRef.push(this.opRefStart)}getLimits(e,n,o,i,s,r,p){const l=e.map((()=>a.BigNumber.from(0)));return l[n]=s?a.BigNumber.from(i):t.MaxInt256,r&&(l[o]=a.BigNumber.from(p).mul(-1)),l}updateLimits(e,t){t.hasTokenIn&&(e[t.swaps[0].assetInIndex]=e[t.swaps[0].assetInIndex].add(t.amountIn)),t.hasTokenOut&&(e[t.swaps[0].assetOutIndex]=e[t.swaps[0].assetOutIndex].sub(t.minOut))}isChainedSwap(e){return this.opRef[this.swaps.length-1]&&this.toInternal===e.fromInternal&&this.receiver===e.sender&&this.opRef[this.swaps.length-1].key.toString()===e.amountIn}canAddSwap(e){return!!this.isChainedSwap(e)||e.fromInternal===this.fromInternal&&e.toInternal===this.toInternal&&e.receiver===this.receiver&&e.sender===this.sender}callData(){const e=[];for(const a of this.approveTokens){const n=ps.encodeApproveVault(a,t.MaxUint256.toString());e.push(n)}const n={sender:this.sender,recipient:this.receiver,fromInternalBalance:this.fromInternal,toInternalBalance:this.toInternal},o={swapType:exports.SwapType.SwapExactIn,swaps:this.swaps,assets:this.assets,funds:n,limits:this.limits.map((e=>e.toString())),deadline:a.BigNumber.from(Math.ceil(Date.now()/1e3)+3600),value:"0",outputReferences:this.opRef},i=ps.encodeBatchSwap(o);return e.push(i),{params:o,encoded:e}}getAmountIn(){return this.limits[this.mainTokenInIndex].toString()}getAmountOut(){return this.limits[this.mainTokenOutIndex].abs().toString()}copy(){return new Vp(this.swaps[0],this.mainTokenInIndex,this.mainTokenOutIndex,this.opRefKey,this.assets,this.slippage,this.pools,this.user,this.relayer)}addSwap(e){const t=this.isChainedSwap(e);this.swaps.push(e.swaps[0]),this.approveTokens=[...new Set([...this.approveTokens,...e.approveTokens])],this.toInternal=e.toInternal,this.receiver=e.receiver,this.hasTokenOut=e.hasTokenOut,this.minOut=e.minOut,this.opRef=[...this.opRef,...e.opRef],t||(this.amountIn=a.BigNumber.from(this.amountIn).add(e.amountIn).toString()),this.updateLimits(this.limits,e)}isBpt(e,t){return e.some((e=>e.address.toLowerCase()===t.toLowerCase()))}}function qp(e){const t=function(e){const t=[],a=[],n=[];for(const o of e)o.type===Np.Exit||o.type===Np.Join?o.hasTokenIn?t.push(o):o.hasTokenOut?a.push(o):n.push(o):n.push(o);return[...t,...n,...a]}(e);return function(e){const t=[];let a;for(const n of e)n.type===Np.BatchSwap?a?a.canAddSwap(n)?a.addSwap(n):(t.push(a),a=n.copy()):a=n.copy():(a&&(t.push(a),a=void 0),t.push(n));return a&&t.push(a),t}(t)}const Gp=new e.Interface([{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"address",name:"libraryAddress",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"getLibrary",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"results",type:"bytes[]"}],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}]);function Wp(e){j.getInstance()}function Hp(e,t,a){if("Weighted"!==a)return!1;const n=t[e.assetOutIndex],o=R(e.poolId);return n.toLowerCase()===o.toLowerCase()}function Kp(e,t,a){if("Weighted"!==a)return!1;const n=t[e.assetInIndex],o=R(e.poolId);return n.toLowerCase()===o.toLowerCase()}Object.defineProperty(exports,"PoolFilter",{enumerable:!0,get:function(){return p.PoolFilter}}),Object.defineProperty(exports,"SOR",{enumerable:!0,get:function(){return p.SOR}}),Object.defineProperty(exports,"SwapTypes",{enumerable:!0,get:function(){return p.SwapTypes}}),Object.defineProperty(exports,"stableBPTForTokensZeroPriceImpact",{enumerable:!0,get:function(){return p.stableBPTForTokensZeroPriceImpact}}),Object.defineProperty(exports,"weightedBPTForTokensZeroPriceImpact",{enumerable:!0,get:function(){return p.weightedBPTForTokensZeroPriceImpact}}),exports.AMP_PRECISION=3,exports.APR_THRESHOLD=1e4,exports.AaveLinearPoolFactory__factory=rt,exports.AaveLinearPool__factory=it,exports.AaveRates=Re,exports.AaveWrapping__factory=lt,exports.AssetHelpers=Y,exports.Authoriser__factory=ut,exports.BALANCER_NETWORK_CONFIG=ka,exports.BalancerAPIArgsFormatter=tt,exports.BalancerError=Oa,exports.BalancerErrors=Z,exports.BalancerHelpers__factory=yt,exports.BalancerMinterAuthorization=ae,exports.BalancerMinter__factory=mt,exports.BalancerPoolDataQueries__factory=Tt,exports.BalancerRelayer__factory=It,exports.BalancerSDK=class{constructor(e,t=new Hi(e),a=new ls(e)){this.config=e,this.sor=t,this.subgraph=a;j.getInstance().setLoggingEnabled(!!e.enableLogging),this.networkConfig=Li(e),this.provider=t.provider,this.balancerContracts=new fs(this.networkConfig.addresses.contracts,t.provider),this.data=new xp(this.networkConfig,t.provider,this.balancerContracts,e.subgraphQuery,e.coingecko),this.swaps=new is(this.config),this.relayer=new ps,this.pricing=new ds(e,this.swaps),this.pools=new pr(this.networkConfig,this.data,this.balancerContracts),this.data.liquidityGauges&&(this.claimService=new Fn(this.data.liquidityGauges,this.data.feeDistributor,this.networkConfig.chainId,this.contracts.multicall,this.networkConfig.addresses.contracts.gaugeClaimHelper,this.networkConfig.addresses.contracts.balancerMinter),this.migrationService=new Fp({relayerAddress:this.networkConfig.addresses.contracts.balancerRelayer,poolsRepository:this.data.pools,gaugesRepository:this.data.liquidityGauges.subgraph,provider:this.provider})),this.vaultModel=new Gs(this.data.poolsForSimulations,this.networkConfig.addresses.tokens.wrappedNativeAsset)}get contracts(){return this.balancerContracts.contracts}},exports.BasePoolEncoder=E,exports.BatchRelayerLibrary__factory=_t,exports.BlockNumberRepository=gp,exports.CoingeckoHistoricalPriceRepository=ap,exports.CoingeckoPriceRepository=tp,exports.ComposableStablePoolEncoder=C,exports.ComposableStablePoolFactory__factory=Et,exports.ComposableStablePool__factory=Pt,exports.ConvergentCurvePool__factory=St,exports.Data=xp,exports.Debouncer=Ve,exports.ERC20__factory=kt,exports.ERC4626LinearPoolFactory__factory=Mt,exports.ERC4626LinearPool__factory=Ct,exports.EulerLinearPoolFactory__factory=Lt,exports.EulerLinearPool__factory=Rt,exports.FXPool__factory=Ut,exports.FeeCollectorRepository=yp,exports.FeeDistributorRepository=lp,exports.GaugeClaimHelper__factory=qt,exports.GaugeControllerMulticallRepository=Or,exports.GaugeSharesRepository=Nr,exports.GearboxLinearPoolFactory__factory=Kt,exports.GearboxLinearPool__factory=Wt,exports.GraphQLArgsBuilder=nt,exports.GyroConfig__factory=Jt,exports.GyroEV2__factory=Ia,exports.HistoricalPriceProvider=ip,exports.LidoRelayer__factory=Xt,exports.LinearPool__factory=zt,exports.Liquidity=An,exports.LiquidityGaugeSubgraphRPCProvider=qr,exports.LiquidityGaugeV5__factory=Qt,exports.LiquidityGaugesMulticallRepository=Ur,exports.LiquidityGaugesSubgraphRepository=Vr,exports.ManagedPoolEncoder=v,exports.Migrations=Fp,exports.Multicall3__factory=na,exports.Multicall__factory=ta,exports.POOLS=function(e){return V[e]?V[e]:U},exports.PoolGaugesRepository=Yr,exports.PoolJoinExitRepository=Zr,exports.PoolSharesRepository=Qr,exports.Pools=pr,exports.PoolsBalancerAPIRepository=class{constructor(e){var t,a;this.pools=[],this.skip=0,this.hasFetched=!1,this.isFetching=!1,this.client=new Gr(e.url,e.apiKey);this.query={args:Object.assign({},(null===(t=e.query)||void 0===t?void 0:t.args)||{chainId:1,orderBy:"totalLiquidity",orderDirection:"desc",where:{swapEnabled:{eq:!0},totalShares:{gt:.05}}}),attrs:Object.assign({},(null===(a=e.query)||void 0===a?void 0:a.attrs)||{id:!0,address:!0})},delete this.query.args.skip}fetchFromCache(e,t){return this.pools.slice(t,e+t)}async fetch(e){const t=(null==e?void 0:e.first)||10,a=(null==e?void 0:e.skip)||0;return this.hasFetched||this.fetchAll(e),await this.awaitEnoughPoolsFetched(t,a),this.fetchFromCache(t,a)}async fetchAll(e){this.isFetching=!0,this.hasFetched=!0,this.nextToken&&(this.query.args.nextToken=this.nextToken),this.query.args.first=1e3;const t=new nt(this.query.args).format(new tt),a=this.query.attrs;a.nextToken=!0;const n={pools:{__args:t,...a}},o=(await this.client.get(n)).pools;if(this.nextToken=o.nextToken,this.pools=this.pools.concat(o.pools.map(this.format)),this.nextToken)return await this.fetchAll(e);this.isFetching=!1}async awaitEnoughPoolsFetched(e,t){for(let a=0;a<1e3;a++){if(this.pools.length>e+t)return;if(!this.isFetching)return;await Wr(10)}}async find(e){return 0==this.pools.length&&await this.fetch(),this.findBy("id",e)}async findBy(e,t){0==this.pools.length&&await this.fetch();const a=this.pools.find((a=>a[e]==t));if(a)return this.format(a)}format(e){var t,a,n,o;if(null===(t=e.apr)||void 0===t?void 0:t.rewardAprs.breakdown){const t=JSON.parse(null===(a=e.apr)||void 0===a?void 0:a.rewardAprs.breakdown);e.apr.rewardAprs.breakdown=t}if(null===(n=e.apr)||void 0===n?void 0:n.tokenAprs.breakdown){const t=JSON.parse(null===(o=e.apr)||void 0===o?void 0:o.tokenAprs.breakdown);e.apr.tokenAprs.breakdown=t}return e}},exports.PoolsFallbackRepository=class{constructor(e,t={}){this.providers=e,this.currentProviderIdx=0,this.timeout=t.timeout||1e4}async fetch(e){return this.fallbackQuery("fetch",[e])}get currentProvider(){if(this.providers.length&&!(this.currentProviderIdx>=this.providers.length))return this.providers[this.currentProviderIdx]}async find(e){return this.fallbackQuery("find",[e])}async findBy(e,t){return this.fallbackQuery("findBy",[e,t])}async fallbackQuery(e,t){if(this.currentProviderIdx>=this.providers.length)throw new Error("No working providers found");let a;try{const n=this.providers[this.currentProviderIdx];a=await Promise.race([n[e].apply(n,t),new Promise(((e,t)=>setTimeout((()=>t(new Error("timeout"))),this.timeout)))])}catch(n){const o=n.message;if("timeout"===o){j.getInstance().warn("Provider "+this.currentProviderIdx+" timed out, falling back to next provider")}else{const e=j.getInstance();e.warn(`Provider ${this.currentProviderIdx} failed with error, falling back to next provider.`),e.warn(o)}this.currentProviderIdx++,a=await this.fallbackQuery.call(this,e,t)}return a}},exports.PoolsStaticRepository=class{constructor(e){this.pools=e}async find(e){return this.pools.find((t=>t.id.toLowerCase()===e.toLowerCase()))}async findBy(e,t){return this.pools.find((a=>a[e]===t))}async all(){return this.pools}async where(e){return(await this.all()).filter(e)}},exports.PoolsSubgraphOnChainRepository=Xr,exports.PoolsSubgraphRepository=jr,exports.ProtocolFeesProvider=fp,exports.Relayer=ps,exports.RelayerAuthorization=te,exports.SHALLOW_COMPOSABLE_STABLE_BUFFER=1e6,exports.Sor=Hi,exports.StablePoolEncoder=A,exports.StablePool__factory=ia,exports.StaticATokenRateProvider__factory=ra,exports.StaticTokenPriceProvider=class{constructor(e){this.tokenPrices=Object.fromEntries(Object.entries(e).map((([e,t])=>[e.toLowerCase(),t])))}async find(e){const t=e.toLowerCase(),a=this.tokenPrices[t];if(a)return a}async findBy(e,t){if("address"==e)return this.find(t)}},exports.StaticTokenProvider=ep,exports.Subgraph=ls,exports.SubgraphArgsFormatter=at,exports.SubgraphPriceRepository=np,exports.Swaps=is,exports.TokenPriceProvider=op,exports.TokenYieldsRepository=Tp,exports.Vault__factory=la,exports.VeBal__factory=_a,exports.VeDelegationProxy__factory=Pa,exports.WeightedPoolEncoder=S,exports.WeightedPoolFactory__factory=ya,exports.WeightedPool__factory=ua,exports.YearnLinearPoolFactory__factory=Ta,exports.YearnLinearPool__factory=ma,exports.accountToAddress=Q,exports.addSlippage=$e,exports.addressMapIn=Le,exports.balEmissions=ws,exports.bn=e=>a.parseFixed(`${e}`,18),exports.buildRelayerCalls=function(e,t,n,o,i,s,r){const p=function(e,t,a,n,o,i,s,r){var p;const l=n.findIndex((t=>t.toLowerCase()===e.toLowerCase())),d=n.findIndex((e=>e.toLowerCase()===t.toLowerCase())),u=[];let c=0;for(const e of a){const t=null===(p=i.find((t=>t.id===e.poolId)))||void 0===p?void 0:p.poolType;if(Hp(e,n,t)){const t=new Up(e,l,d,c,n,o,s,r);c=t.nextOpRefKey,u.push(t)}else{if(!Kp(e,n,t)){const t=new Vp(e,l,d,c,n,o,i,s,r);c=t.nextOpRefKey,u.push(t);continue}{const t=new Dp(e,l,d,c,n,o,s,r);c=t.nextOpRefKey,u.push(t)}}}return u}(e.tokenIn,e.tokenOut,e.swaps,e.tokenAddresses,s,t,n,o),l=qp(p),d=[],u=[];r&&d.push(ps.encodeSetRelayerApproval(o,!0,r));for(const e of l){if(e.type===Np.Exit||e.type===Np.Join){const a=t.find((t=>t.id===e.poolId));if(void 0===a)throw new Oa(exports.BalancerErrorCode.NO_POOL_DATA);const{params:n,encoded:o}=e.callData(a,i);d.push(o),u.push(n)}if(e.type===Np.BatchSwap){const{params:t,encoded:a}=e.callData();d.push(...a),u.push(t)}}return function(e,t,n,o){const i=e.reduce(((e=a.BigNumber.from(0),t)=>e.add(t))),s=t.reduce(((e=a.BigNumber.from(0),t)=>e.add(t)));Wp(i.toString()),Wp(n.swapAmount.toString()),Wp(s.toString()),Wp(Ke(n.returnAmount,a.BigNumber.from(o)).toString()),Wp(n.returnAmount.toString());const r=s.sub(Ke(n.returnAmount,a.BigNumber.from(o)));if(!i.eq(n.swapAmount)||!r.lt("3"))throw new Oa(exports.BalancerErrorCode.RELAY_SWAP_AMOUNTS)}(l.map((e=>a.BigNumber.from(e.getAmountIn()))),l.map((e=>a.BigNumber.from(e.getAmountOut()))),e,s),{to:o,data:Gp.encodeFunctionData("multicall",[d]),rawCalls:d,inputs:u}},exports.canUseJoinExit=function(e,a,n){return e!==p.SwapTypes.SwapExactOut&&a.toLowerCase()!==t.AddressZero.toLowerCase()&&n.toLowerCase()!==t.AddressZero.toLowerCase()},exports.factories=Ea,exports.fetchOnChainPoolData=Mi,exports.findEventInReceiptLogs=Qe,exports.formatFixed=Ge,exports.formatFromBigInt18=function(e){return a.formatFixed(a.BigNumber.from(e),18)},exports.getEthValue=Ue,exports.getLimitsForSlippage=Aa,exports.getOnChainBalances=Fi,exports.getPoolAddress=R,exports.getPoolNonce=L,exports.getPoolSpecialization=N,exports.getRandomBytes32=et,exports.insert=je,exports.isLinearish=Ze,exports.isNormalizedWeights=e=>{const a=e.reduce(((e,t)=>e.add(t)),t.Zero);return a.eq(t.WeiPerEther)},exports.isSameAddress=Je,exports.mulSlippage=He,exports.parseFixed=qe,exports.parsePoolInfo=be,exports.parseToBigInt18=function(e){return qe(e,18).toBigInt()},exports.removeItem=Ye,exports.reorderArrays=ze,exports.replace=Xe,exports.signPermit=async(e,n,i,s,r=t.MaxUint256,p)=>{const{chainId:l}=await e.provider.getNetwork(),d=await n.getAddress();p||(p=await e.nonces(d));const u={name:await e.name(),version:"1",chainId:l,verifyingContract:e.address},c={owner:d,spender:await Q(i),value:s,nonce:p,deadline:r},y=await n._signTypedData(u,{Permit:[{name:"owner",type:"address"},{name:"spender",type:"address"},{name:"value",type:"uint256"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]},c);return{...o.splitSignature(y),deadline:a.BigNumber.from(r),nonce:a.BigNumber.from(p)}},exports.someJoinExit=function(e,t,a){return t.some((t=>function(e,t,a){const n=e.find((e=>e.id===t.poolId));return"Weighted"===(null==n?void 0:n.poolType)&&[a[t.assetInIndex],a[t.assetOutIndex]].includes(n.address)}(e,t,a)))},exports.splitPoolId=e=>({address:R(e),specialization:N(e),nonce:L(e)}),exports.subSlippage=Ke,exports.toNormalizedWeights=function(e){if(100==e.length)return Array(100).fill(t.WeiPerEther.div(100));const a=e.reduce(((e,t)=>e.add(t)),t.Zero);if(a.eq(t.WeiPerEther))return e;const n=[];let o=t.Zero;for(let i=0;i{e.price&&(t[e.address]=e.price)})),t},exports.truncateAddresses=function(e){return e.map((e=>`${e.slice(0,6)}...${e.slice(38,42)}`))},exports.unwrapToken=De,exports.wrappedTokensMap=Me,exports.yieldTokens=Oe; +//# sourceMappingURL=index.js.map diff --git a/package/dist/index.js.map b/package/dist/index.js.map new file mode 100644 index 000000000..b86c92ca2 --- /dev/null +++ b/package/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../src/pool-base/encoder.ts","../../src/pool-stable/encoder.ts","../../src/pool-weighted/encoder.ts","../../src/pool-composable-stable/encoder.ts","../node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../../src/pool-utils/poolId.ts","../../src/lib/constants/network.ts","../../src/lib/constants/pools.ts","../../src/modules/data/pool-gauges/types.ts","../../src/modules/data/pool-shares/types.ts","../../src/modules/data/gauge-shares/types.ts","../../src/types.ts","../../src/lib/utils/logger.ts","../../src/lib/utils/assetHelpers.ts","../../src/lib/utils/errors.ts","../../src/lib/utils/signatures.ts","../../src/lib/utils/permit.ts","../../src/lib/utils/solidityMaths.ts","../../src/lib/utils/poolHelper.ts","../../src/lib/constants/tokens.ts","../node_modules/@ethersproject/logger/lib.esm/index.js","../node_modules/@ethersproject/logger/lib.esm/_version.js","../node_modules/@ethersproject/units/lib.esm/_version.js","../node_modules/@ethersproject/units/lib.esm/index.js","../../src/modules/data/token-prices/aave-rates.ts","../../src/lib/utils/tokens.ts","../../src/lib/utils/debouncer.ts","../../src/lib/utils/math.ts","../../src/lib/utils/slippageHelper.ts","../../src/lib/utils/index.ts","../../src/lib/graphql/formatters/balancer-api.ts","../../src/lib/graphql/formatters/subgraph.ts","../../src/lib/graphql/args-builder.ts","../../src/contracts/factories/AaveLinearPool__factory.ts","../../src/contracts/factories/AaveLinearPoolFactory__factory.ts","../../src/contracts/factories/AaveWrapping__factory.ts","../../src/contracts/factories/Authoriser__factory.ts","../../src/contracts/factories/BalancerHelpers__factory.ts","../../src/contracts/factories/BalancerMinter__factory.ts","../../src/contracts/factories/BalancerPoolDataQueries__factory.ts","../../src/contracts/factories/BalancerRelayer__factory.ts","../../src/contracts/factories/BatchRelayerLibrary__factory.ts","../../src/contracts/factories/ComposableStablePool__factory.ts","../../src/contracts/factories/ComposableStablePoolFactory__factory.ts","../../src/contracts/factories/ConvergentCurvePool__factory.ts","../../src/contracts/factories/ERC20__factory.ts","../../src/contracts/factories/ERC4626LinearPool__factory.ts","../../src/contracts/factories/ERC4626LinearPoolFactory__factory.ts","../../src/contracts/factories/EulerLinearPool__factory.ts","../../src/contracts/factories/EulerLinearPoolFactory__factory.ts","../../src/contracts/factories/FXPool__factory.ts","../../src/contracts/factories/GaugeClaimHelper__factory.ts","../../src/contracts/factories/GearboxLinearPool__factory.ts","../../src/contracts/factories/GearboxLinearPoolFactory__factory.ts","../../src/contracts/factories/GyroConfig__factory.ts","../../src/contracts/factories/LidoRelayer__factory.ts","../../src/contracts/factories/LinearPool__factory.ts","../../src/contracts/factories/LiquidityGaugeV5__factory.ts","../../src/contracts/factories/Multicall__factory.ts","../../src/contracts/factories/Multicall3__factory.ts","../../src/contracts/factories/StablePool__factory.ts","../../src/contracts/factories/StaticATokenRateProvider__factory.ts","../../src/contracts/factories/Vault__factory.ts","../../src/contracts/factories/WeightedPool__factory.ts","../../src/contracts/factories/WeightedPoolFactory__factory.ts","../../src/contracts/factories/YearnLinearPool__factory.ts","../../src/contracts/factories/YearnLinearPoolFactory__factory.ts","../../src/contracts/factories/GyroEV2__factory.ts","../../src/contracts/factories/VeBal__factory.ts","../../src/contracts/factories/VeDelegationProxy__factory.ts","../../src/modules/swaps/types.ts","../../src/modules/swaps/helpers.ts","../../src/lib/constants/config.ts","../../src/balancerErrors.ts","../../src/modules/pricing/priceImpact.ts","../../src/lib/utils/stableMathHelpers.ts","../../src/modules/pools/pool-types/concerns/stable/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/stable/exit.concern.ts","../../src/modules/pools/pool-types/concerns/stable/join.concern.ts","../../src/modules/pools/pool-types/concerns/stable/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/stable/spotPrice.concern.ts","../../src/modules/pools/pool-types/stable.module.ts","../../src/modules/pools/pool-types/concerns/stablePhantom/spotPrice.concern.ts","../../src/modules/pools/pool-types/concerns/composableStable/join.concern.ts","../../src/modules/pools/pool-types/concerns/composableStable/exit.concern.ts","../../src/modules/pools/pool-types/composableStable.module.ts","../../src/modules/pools/pool-types/concerns/weighted/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/weighted/exit.concern.ts","../../src/modules/pools/pool-types/concerns/weighted/join.concern.ts","../../src/modules/pools/pool-types/concerns/weighted/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/weighted/spotPrice.concern.ts","../../src/modules/pools/pool-types/weighted.module.ts","../../src/modules/pools/pool-types/concerns/metaStable/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/metaStable/spotPrice.concern.ts","../../src/modules/pools/pool-types/metaStable.module.ts","../../src/modules/pools/pool-types/concerns/stablePhantom/exit.concern.ts","../../src/modules/pools/pool-types/concerns/stablePhantom/join.concern.ts","../../src/modules/pools/pool-types/stablePhantom.module.ts","../../src/modules/pools/pool-types/concerns/linear/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/linear/exit.concern.ts","../../src/modules/pools/pool-types/concerns/linear/join.concern.ts","../../src/modules/pools/pool-types/concerns/linear/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/linear/spotPrice.concern.ts","../../src/modules/pools/pool-types/linear.module.ts","../../src/modules/pools/pool-types/concerns/fx/exit.concern.ts","../../src/modules/pools/pool-types/concerns/fx/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/fx/spotPrice.concern.ts","../../src/modules/pools/pool-types/concerns/fx/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/fx/join.concern.ts","../../src/modules/pools/pool-types/fx.module.ts","../../src/modules/pools/pool-types/concerns/gyro/exit.concern.ts","../../src/modules/pools/pool-types/concerns/gyro/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/gyro/spotPrice.concern.ts","../../src/modules/pools/pool-types/concerns/gyro/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/gyro/join.concern.ts","../../src/modules/pools/pool-types/gyro.module.ts","../../src/modules/pools/pool-type-concerns.ts","../../src/modules/liquidity/liquidity.module.ts","../../src/modules/claims/helper.ts","../../src/modules/claims/ClaimService.ts","../../src/modules/swaps/queryBatchSwap.ts","../node_modules/tslib/tslib.es6.js","../node_modules/graphql-tag/lib/index.js","../../src/modules/subgraph/generated/balancer-subgraph-types.ts","../../src/modules/subgraph/generated/balancer-gauges.ts","../../src/modules/subgraph/subgraph.ts","../../src/lib/utils/multiCaller3.ts","../../src/modules/data/pool/onchain-data.ts","../../src/modules/sor/pool-data/subgraphPoolDataService.ts","../../src/modules/sor/token-price/subgraphTokenPriceService.ts","../../src/modules/sdk.helpers.ts","../../src/lib/constants/poolsToIgnore.ts","../../src/modules/sor/token-price/apiTokenPriceService.ts","../../src/lib/utils/coingecko-api.ts","../../src/modules/sor/token-price/coingeckoTokenPriceService.ts","../../src/modules/sor/sor.module.ts","../../src/modules/swaps/flashSwap/index.ts","../../src/modules/swaps/swap_builder/swap_utils.ts","../../src/modules/swaps/swap_builder/swap_info_decorator.ts","../../src/modules/swaps/swap_builder/single_swap_builder.ts","../../src/modules/swaps/swap_builder/batch_swap_builder.ts","../../src/modules/swaps/swaps.module.ts","../../src/modules/relayer/types.ts","../../src/modules/relayer/relayer.module.ts","../../src/modules/subgraph/subgraph.module.ts","../../src/modules/pricing/pricing.module.ts","../../src/modules/contracts/implementations/base-pool.ts","../../src/lib/utils/multiCaller.ts","../../src/lib/utils/time.ts","../../src/modules/contracts/implementations/veBAL.ts","../../src/modules/contracts/implementations/veBAL-proxy.ts","../../src/modules/contracts/contracts.module.ts","../../src/modules/pools/impermanentLoss/impermanentLossService.ts","../../src/modules/data/bal/emissions.ts","../../src/modules/pools/apr/protocol-revenue.ts","../../src/modules/pools/fees/fees.ts","../../src/modules/pools/apr/apr.ts","../../src/modules/graph/graph.ts","../../src/pool-weighted/decoder.ts","../../src/modules/vaultModel/poolModel/join.ts","../../src/modules/vaultModel/poolModel/exit.ts","../../src/modules/vaultModel/poolModel/swap.ts","../../src/modules/vaultModel/poolModel/unwrap.ts","../../src/modules/vaultModel/poolModel/poolModel.ts","../../src/modules/vaultModel/relayer.ts","../../src/modules/vaultModel/poolSource.ts","../../src/modules/vaultModel/vaultModel.module.ts","../../src/modules/joins/joins.module.ts","../../src/lib/utils/tenderlyHelper.ts","../../src/modules/simulation/simulation.module.ts","../../src/modules/exits/exits.module.ts","../../src/modules/pools/volume/volume.ts","../../src/modules/pools/factory/composable-stable/composable-stable.factory.ts","../../src/modules/pools/factory/weighted/weighted.factory.ts","../../src/modules/pools/factory/types.ts","../../src/modules/pools/factory/linear/linear.factory.ts","../../src/modules/pools/pool-factory__factory.ts","../../src/modules/pools/queries/params_builder.ts","../../src/modules/pools/queries/get_encoder.ts","../../src/modules/pools/emissions/index.ts","../../src/modules/pools/proportional-amounts/index.ts","../../src/modules/pools/index.ts","../node_modules/@ethersproject/strings/lib.esm/_version.js","../node_modules/@ethersproject/strings/lib.esm/utf8.js","../node_modules/@ethersproject/strings/lib.esm/bytes32.js","../node_modules/js-sha3/src/sha3.js","../node_modules/@ethersproject/solidity/lib.esm/_version.js","../node_modules/@ethersproject/solidity/lib.esm/index.js","../node_modules/@ethersproject/keccak256/lib.esm/index.js","../../src/modules/data/gyro-config/repository.ts","../../src/modules/data/gauge-controller/multicall.ts","../../src/modules/subgraph/repository/abstract-subgraph-repository.ts","../../src/modules/subgraph/repository/balancer-subgraph-repository.ts","../../src/modules/subgraph/repository/gauges-subgraph-repository.ts","../../src/modules/data/gauge-shares/repository.ts","../../src/modules/data/liquidity-gauges/multicall.ts","../../src/modules/data/liquidity-gauges/subgraph.ts","../../src/modules/data/liquidity-gauges/provider.ts","../../src/modules/api/balancer-api.client.ts","../../src/modules/data/pool/balancer-api.ts","../../src/modules/data/pool/subgraph-helpers.ts","../../src/modules/data/pool/subgraph.ts","../../src/modules/data/pool/subgraphOnChain.ts","../../src/modules/data/pool-gauges/repository.ts","../../src/modules/data/pool-joinExit/types.ts","../../src/modules/data/pool-joinExit/repository.ts","../../src/modules/data/pool-shares/repository.ts","../../src/modules/data/token/static.ts","../../src/modules/data/token-prices/coingecko.ts","../../src/modules/data/token-prices/coingecko-historical.ts","../../src/modules/data/token-prices/subgraph.ts","../../src/modules/data/token-prices/provider.ts","../../src/modules/data/token-prices/historical-price-provider.ts","../../src/modules/contracts/implementations/feeDistributor.ts","../../src/modules/data/fee-distributor/repository.ts","../../src/modules/data/fee-collector/repository.ts","../../src/modules/data/protocol-fees/provider.ts","../../src/modules/data/token-yields/repository.ts","../../src/modules/data/block-number/index.ts","../../src/modules/data/index.ts","../../src/modules/relayer/actions.ts","../../src/modules/liquidity-managment/migrations/helpers.ts","../../src/modules/liquidity-managment/migrations/builder.ts","../../src/modules/liquidity-managment/migrations.ts","../../src/modules/swaps/joinExit/actions/types.ts","../../src/modules/swaps/joinExit/actions/baseAction.ts","../../src/modules/swaps/joinExit/actions/exit.ts","../../src/modules/swaps/joinExit/actions/join.ts","../../src/modules/swaps/joinExit/actions/swap.ts","../../src/modules/swaps/joinExit/actions/helpers.ts","../../src/modules/swaps/joinExit/joinAndExit.ts","../../src/modules/sdk.module.ts","../../src/modules/data/pool/fallback.ts","../../src/modules/data/pool/static.ts","../../src/modules/data/token-prices/static.ts","../../src/pool-weighted/normalizedWeights.ts"],"sourcesContent":["import { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\n\n// RECOVERY_MODE must match BasePoolUserData.RECOVERY_MODE_EXIT_KIND, the value that (Legacy)BasePool uses to detect the special exit enabled in recovery mode.\nenum BasePoolExitKind {\n RECOVERY_MODE = 255,\n}\n\nexport class BasePoolEncoder {\n /**\n * Encodes the userData parameter for exiting any Pool in recovery mode, by removing tokens in return for\n * an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n */\n static recoveryModeExit = (bptAmountIn: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [BasePoolExitKind.RECOVERY_MODE, bptAmountIn]\n );\n}\n","import { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\n\nexport enum StablePoolJoinKind {\n INIT = 0,\n EXACT_TOKENS_IN_FOR_BPT_OUT,\n TOKEN_IN_FOR_EXACT_BPT_OUT,\n}\n\nexport enum StablePhantomPoolJoinKind {\n INIT = 0,\n COLLECT_PROTOCOL_FEES,\n}\n\nexport enum StablePoolExitKind {\n EXACT_BPT_IN_FOR_ONE_TOKEN_OUT = 0,\n EXACT_BPT_IN_FOR_TOKENS_OUT,\n BPT_IN_FOR_EXACT_TOKENS_OUT,\n}\n\nexport class StablePoolEncoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Encodes the userData parameter for providing the initial liquidity to a StablePool\n * @param initialBalances - the amounts of tokens to send to the pool to form the initial balances\n */\n static joinInit = (amountsIn: BigNumberish[]): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]'],\n [StablePoolJoinKind.INIT, amountsIn]\n );\n\n /**\n * Encodes the userData parameter for collecting protocol fees for StablePhantomPool\n */\n static joinCollectProtocolFees = (): string =>\n defaultAbiCoder.encode(\n ['uint256'],\n [StablePhantomPoolJoinKind.COLLECT_PROTOCOL_FEES]\n );\n\n /**\n * Encodes the userData parameter for joining a StablePool with exact token inputs\n * @param amountsIn - the amounts each of token to deposit in the pool as liquidity\n * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens\n */\n static joinExactTokensInForBPTOut = (\n amountsIn: BigNumberish[],\n minimumBPT: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [StablePoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT, amountsIn, minimumBPT]\n );\n\n /**\n * Encodes the userData parameter for joining a StablePool with to receive an exact amount of BPT\n * @param bptAmountOut - the amount of BPT to be minted\n * @param enterTokenIndex - the index of the token to be provided as liquidity\n */\n static joinTokenInForExactBPTOut = (\n bptAmountOut: BigNumberish,\n enterTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n StablePoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,\n bptAmountOut,\n enterTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a StablePool by removing a single token in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n * @param enterTokenIndex - the index of the token to removed from the pool\n */\n static exitExactBPTInForOneTokenOut = (\n bptAmountIn: BigNumberish,\n exitTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n StablePoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,\n bptAmountIn,\n exitTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a StablePool by removing tokens in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n */\n static exitExactBPTInForTokensOut = (bptAmountIn: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [StablePoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT, bptAmountIn]\n );\n\n /**\n * Encodes the userData parameter for exiting a StablePool by removing exact amounts of tokens\n * @param amountsOut - the amounts of each token to be withdrawn from the pool\n * @param maxBPTAmountIn - the minimum acceptable BPT to burn in return for withdrawn tokens\n */\n static exitBPTInForExactTokensOut = (\n amountsOut: BigNumberish[],\n maxBPTAmountIn: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n StablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,\n amountsOut,\n maxBPTAmountIn,\n ]\n );\n}\n","import { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\n\nexport enum WeightedPoolJoinKind {\n INIT = 0,\n EXACT_TOKENS_IN_FOR_BPT_OUT,\n TOKEN_IN_FOR_EXACT_BPT_OUT,\n ALL_TOKENS_IN_FOR_EXACT_BPT_OUT,\n}\n\nexport enum WeightedPoolExitKind {\n EXACT_BPT_IN_FOR_ONE_TOKEN_OUT = 0,\n EXACT_BPT_IN_FOR_TOKENS_OUT,\n BPT_IN_FOR_EXACT_TOKENS_OUT,\n MANAGEMENT_FEE_TOKENS_OUT,\n}\n\nexport class WeightedPoolEncoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Encodes the userData parameter for providing the initial liquidity to a WeightedPool\n * @param initialBalances - the amounts of tokens to send to the pool to form the initial balances\n */\n static joinInit = (amountsIn: BigNumberish[]): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]'],\n [WeightedPoolJoinKind.INIT, amountsIn]\n );\n\n /**\n * Encodes the userData parameter for joining a WeightedPool with exact token inputs\n * @param amountsIn - the amounts each of token to deposit in the pool as liquidity\n * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens\n */\n static joinExactTokensInForBPTOut = (\n amountsIn: BigNumberish[],\n minimumBPT: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT, amountsIn, minimumBPT]\n );\n\n /**\n * Encodes the userData parameter for joining a WeightedPool with a single token to receive an exact amount of BPT\n * @param bptAmountOut - the amount of BPT to be minted\n * @param enterTokenIndex - the index of the token to be provided as liquidity\n */\n static joinTokenInForExactBPTOut = (\n bptAmountOut: BigNumberish,\n enterTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,\n bptAmountOut,\n enterTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for joining a WeightedPool proportionally to receive an exact amount of BPT\n * @param bptAmountOut - the amount of BPT to be minted\n */\n static joinAllTokensInForExactBPTOut = (bptAmountOut: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT, bptAmountOut]\n );\n\n /**\n * Encodes the userData parameter for exiting a WeightedPool by removing a single token in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n * @param enterTokenIndex - the index of the token to removed from the pool\n */\n static exitExactBPTInForOneTokenOut = (\n bptAmountIn: BigNumberish,\n exitTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,\n bptAmountIn,\n exitTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a WeightedPool by removing tokens in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n */\n static exitExactBPTInForTokensOut = (bptAmountIn: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT, bptAmountIn]\n );\n\n /**\n * Encodes the userData parameter for exiting a WeightedPool by removing exact amounts of tokens\n * @param amountsOut - the amounts of each token to be withdrawn from the pool\n * @param maxBPTAmountIn - the minimum acceptable BPT to burn in return for withdrawn tokens\n */\n static exitBPTInForExactTokensOut = (\n amountsOut: BigNumberish[],\n maxBPTAmountIn: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,\n amountsOut,\n maxBPTAmountIn,\n ]\n );\n}\n\nexport class ManagedPoolEncoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Encodes the userData parameter for exiting a ManagedPool for withdrawing management fees.\n * This can only be done by the pool owner.\n */\n static exitForManagementFees = (): string =>\n defaultAbiCoder.encode(\n ['uint256'],\n [WeightedPoolExitKind.MANAGEMENT_FEE_TOKENS_OUT]\n );\n}\n","import { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\nimport { StablePhantomPoolJoinKind } from '../pool-stable/index';\n\nexport enum ComposableStablePoolJoinKind {\n INIT = 0,\n EXACT_TOKENS_IN_FOR_BPT_OUT,\n TOKEN_IN_FOR_EXACT_BPT_OUT,\n}\n\nexport enum ComposableStablePoolExitKind {\n EXACT_BPT_IN_FOR_ONE_TOKEN_OUT = 0,\n BPT_IN_FOR_EXACT_TOKENS_OUT,\n EXACT_BPT_IN_FOR_ALL_TOKENS_OUT,\n}\n\nexport class ComposableStablePoolEncoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Encodes the userData parameter for providing the initial liquidity to a ComposableStablePool\n * @param initialBalances - the amounts of tokens to send to the pool to form the initial balances\n */\n static joinInit = (amountsIn: BigNumberish[]): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]'],\n [ComposableStablePoolJoinKind.INIT, amountsIn]\n );\n\n /**\n * Encodes the userData parameter for collecting protocol fees for StablePhantomPool\n */\n static joinCollectProtocolFees = (): string =>\n defaultAbiCoder.encode(\n ['uint256'],\n [StablePhantomPoolJoinKind.COLLECT_PROTOCOL_FEES]\n );\n\n /**\n * Encodes the userData parameter for joining a ComposableStablePool with exact token inputs\n * @param amountsIn - the amounts each of token to deposit in the pool as liquidity\n * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens\n */\n static joinExactTokensInForBPTOut = (\n amountsIn: BigNumberish[],\n minimumBPT: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n ComposableStablePoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT,\n amountsIn,\n minimumBPT,\n ]\n );\n\n /**\n * Encodes the userData parameter for joining a ComposableStablePool with to receive an exact amount of BPT\n * @param bptAmountOut - the amount of BPT to be minted\n * @param enterTokenIndex - the index of the token to be provided as liquidity\n */\n static joinTokenInForExactBPTOut = (\n bptAmountOut: BigNumberish,\n enterTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n ComposableStablePoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,\n bptAmountOut,\n enterTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a ComposableStablePool by removing a single token in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n * @param enterTokenIndex - the index of the token to removed from the pool\n */\n static exitExactBPTInForOneTokenOut = (\n bptAmountIn: BigNumberish,\n exitTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,\n bptAmountIn,\n exitTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a StablePool by removing tokens in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n */\n static exitExactBPTInForAllTokensOut = (bptAmountIn: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [\n ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT,\n bptAmountIn,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a ComposableStablePool by removing exact amounts of tokens\n * @param amountsOut - the amounts of each token to be withdrawn from the pool\n * @param maxBPTAmountIn - the max acceptable BPT to burn in return for withdrawn tokens\n */\n static exitBPTInForExactTokensOut = (\n amountsOut: BigNumberish[],\n maxBPTAmountIn: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n ComposableStablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,\n amountsOut,\n maxBPTAmountIn,\n ]\n );\n}\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n var provided = typeof message === 'function' ? message() : message;\n var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n throw new Error(value);\n}\n\nexport { invariant as default };\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { PoolSpecialization } from '../types';\nimport invariant from 'tiny-invariant';\n\n/**\n * Splits a poolId into its components, i.e. pool address, pool specialization and its nonce\n * @param poolId - a bytes32 string of the pool's ID\n * @returns an object with the decomposed poolId\n */\nexport const splitPoolId = (\n poolId: string\n): {\n address: string;\n specialization: PoolSpecialization;\n nonce: BigNumber;\n} => {\n return {\n address: getPoolAddress(poolId),\n specialization: getPoolSpecialization(poolId),\n nonce: getPoolNonce(poolId),\n };\n};\n\n/**\n * Extracts a pool's address from its poolId\n * @param poolId - a bytes32 string of the pool's ID\n * @returns the pool's address\n */\nexport const getPoolAddress = (poolId: string): string => {\n invariant(poolId.length === 66, 'Invalid poolId length');\n return poolId.slice(0, 42);\n};\n\n/**\n * Extracts a pool's specialization from its poolId\n * @param poolId - a bytes32 string of the pool's ID\n * @returns the pool's specialization\n */\nexport const getPoolSpecialization = (poolId: string): PoolSpecialization => {\n invariant(poolId.length === 66, 'Invalid poolId length');\n\n // Only have 3 pool specializations so we can just pull the relevant character\n const specializationCode = parseInt(poolId[45]);\n invariant(specializationCode < 3, 'Invalid pool specialization');\n\n return specializationCode;\n};\n\n/**\n * Extracts a pool's nonce from its poolId\n * @param poolId - a bytes32 string of the pool's ID\n * @returns the pool's nonce\n */\nexport const getPoolNonce = (poolId: string): BigNumber => {\n invariant(poolId.length === 66, 'Invalid poolId length');\n return BigNumber.from(`0x${poolId.slice(46)}`);\n};\n","export enum Network {\n MAINNET = 1,\n GOERLI = 5,\n GÖRLI = 5,\n OPTIMISM = 10,\n GNOSIS = 100,\n POLYGON = 137,\n FANTOM = 250,\n BASE = 8453,\n ZKEVM = 1101,\n ARBITRUM = 42161,\n AVALANCHE = 43114,\n SEPOLIA = 11155111,\n}\n","import { Network } from '@/lib/constants/network';\n\n// Do not display APR values greater than this amount; they are likely to be nonsensical\n// These can arise from pools with extremely low balances (e.g., completed LBPs)\nexport const APR_THRESHOLD = 10_000;\n\n/**\n * For proportional exits from ComposableStable pools the ExactBPTInForTokensOut\n * exit type was removed. Therefore we have to use BPTInForExactTokensOut which\n * makes proportional exits using a user's total BPT balance impossible. In\n * order to 'fix' this we need to subtract a little bit from the bptIn value\n * when calculating the ExactTokensOut. The variable below is that \"little bit\".\n */\nexport const SHALLOW_COMPOSABLE_STABLE_BUFFER = 1e6; // EVM scale, so this is 1 Mwei\n\ntype FactoryType =\n | 'oracleWeightedPool'\n | 'weightedPool'\n | 'stablePool'\n | 'managedPool'\n | 'liquidityBootstrappingPool'\n | 'boostedPool'\n | 'composableStablePool';\n\ntype PoolMetadata = {\n name: string;\n hasIcon: boolean;\n};\n\nexport type NamedPools = {\n staBAL: string;\n bbAaveUSD: {\n v1: string;\n v2: string;\n };\n xMatic: {\n v1: string;\n v2: string;\n };\n stMatic: {\n v1: string;\n v2: string;\n };\n mai4: {\n mai4: string;\n maiBbaUsd: string;\n };\n veBAL: string;\n};\n\ntype Pools = {\n IdsMap: Partial;\n Pagination: {\n PerPage: number;\n PerPool: number;\n PerPoolInitial: number;\n };\n DelegateOwner: string;\n ZeroAddress: string;\n DynamicFees: {\n Gauntlet: string[];\n };\n BlockList: string[];\n ExcludedPoolTypes: string[];\n Stable: {\n AllowList: string[];\n };\n Investment: {\n AllowList: string[];\n };\n Factories: Record;\n Stakable: {\n AllowList: string[];\n };\n Metadata: Record;\n};\n\nconst POOLS_GOERLI: Pools = {\n IdsMap: {\n staBAL:\n '0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062',\n bbAaveUSD: {\n v1: '0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f',\n v2: '0x3d5981bdd8d3e49eb7bbdc1d2b156a3ee019c18e0000000000000000000001a7',\n },\n veBAL: '0xf8a0623ab66f985effc1c69d05f1af4badb01b00000200000000000000000060',\n },\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [\n '0x22d398c68030ef6b1c55321cca6e0cecc5c93b2f000200000000000000000678',\n ],\n ExcludedPoolTypes: ['Element', 'AaveLinear', 'Linear', 'ERC4626Linear', 'FX'],\n Stable: {\n AllowList: [\n '0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f',\n '0xb60e46d90f2de35f7062a27d3a98749414036d5d000200000000000000000061',\n '0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062',\n '0xc957b1acceb21707b782eb8eee2ed8e20088463d000200000000000000000076',\n '0x3d5981bdd8d3e49eb7bbdc1d2b156a3ee019c18e0000000000000000000001a7',\n '0x14f93df8a4e37bfdb49d2cec4789df7a010603d700000000000000000000011d',\n '0x00a62d31b6c776b6813543bc99ff265f7222dbe100000000000000000000011e',\n '0x0c925fce89a22e36ebd9b3c6e0262234e853d2f600000000000000000000019c',\n ],\n },\n Investment: {\n AllowList: [],\n },\n Factories: {\n '0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0': 'oracleWeightedPool',\n '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9': 'weightedPool',\n '0x44afeb87c871d8fea9398a026dea2bd3a13f5769': 'stablePool',\n '0xa55f73e2281c60206ba43a3590db07b8955832be': 'stablePool', // Metastable\n '0xb48cc42c45d262534e46d5965a9ac496f1b7a830': 'liquidityBootstrappingPool',\n '0xb0c726778c3ae4b3454d85557a48e8fa502bdd6a': 'liquidityBootstrappingPool', // LBP (zero protocol fee)\n '0x41e9036ae350baedcc7107760a020dca3c0731ec': 'boostedPool',\n '0xb848f50141f3d4255b37ac288c25c109104f2158': 'composableStablePool',\n '0x94f68b54191f62f781fe8298a8a5fa3ed772d227': 'weightedPool', // weighted pool v2\n },\n Stakable: {\n AllowList: [\n '0x16faf9f73748013155b7bc116a3008b57332d1e600020000000000000000005b',\n '0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f',\n '0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062',\n '0x67f8fcb9d3c463da05de1392efdbb2a87f8599ea000200000000000000000059',\n ],\n },\n Metadata: {\n '0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: false,\n },\n },\n};\n\nconst POOLS_MAINNET: Pools = {\n IdsMap: {\n staBAL:\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063',\n bbAaveUSD: {\n v1: '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe',\n v2: '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d',\n },\n veBAL: '0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014',\n },\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: [\n 'Element',\n 'AaveLinear',\n 'Linear',\n 'ERC4626Linear',\n 'Gyro2',\n 'Gyro3',\n 'GyroE',\n 'FX',\n ],\n Stable: {\n AllowList: [\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063', // staBAL3 (DAI-USD-USDC)\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066', // WBTC-renBTC-sBTC\n '0x9f19a375709baf0e8e35c2c5c65aca676c4c719100000000000000000000006e', // PAR-sEUR-EURS\n '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080', // Lido Metastable\n '0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112', // Rocket Pool Metastable\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe', // Mainnet bb-a-USD\n '0x851523a36690bf267bbfec389c823072d82921a90002000000000000000001ed', // wstETH/WETH #2\n '0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249', // b-auraBAL-Stable (auraBal / 8020 BALETH)\n '0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d', // sdBAL Stable Pool (sdBAL / 8020 BALETH)\n '0x178e029173417b1f9c8bc16dcec6f697bc32374600000000000000000000025d', // Fiat DAO Stable Pool\n '0xf93579002dbe8046c43fefe86ec78b1112247bb80000000000000000000002bc', // USDD 3 pool\n '0xf3aeb3abba741f0eece8a1b1d2f11b85899951cb000200000000000000000351', // MAI stable pool\n '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d', // bb-a-USD V2\n '0x5b3240b6be3e7487d61cd1afdfc7fe4fa1d81e6400000000000000000000037b', // DOLA/INV stable pool\n ],\n },\n Investment: {\n AllowList: [\n '0xccf5575570fac94cec733a58ff91bb3d073085c70002000000000000000000af', // iROBOT mainnet\n '0xe7b1d394f3b40abeaa0b64a545dbcf89da1ecb3f00010000000000000000009a', // Techemy mainnet\n '0x3b40d7d5ae25df2561944dd68b252016c4c7b2800001000000000000000000c2', // WSB-DEFI mainnet\n ],\n },\n Factories: {\n '0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0': 'oracleWeightedPool',\n '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9': 'weightedPool',\n '0xc66ba2b6595d3613ccab350c886ace23866ede24': 'stablePool',\n '0x67d27634e44793fe63c467035e31ea8635117cd4': 'stablePool', // Metastable\n '0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de': 'liquidityBootstrappingPool', // Mainnet LBP\n '0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e': 'liquidityBootstrappingPool', // Mainnet LBP (zero protocol fee)\n '0x48767f9f868a4a7b86a90736632f6e44c2df7fa9': 'managedPool', // Mainnet Managed\n '0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2': 'boostedPool', // mainnet stablephantom\n '0x8df6efec5547e31b0eb7d1291b511ff8a2bf987c': 'stablePool', // stable pool v2\n '0xf9ac7b9df2b3454e841110cce5550bd5ac6f875f': 'composableStablePool', // ComposableStable\n '0xcc508a455f5b0073973107db6a878ddbdab957bc': 'weightedPool', // weighted pool v2\n },\n Stakable: {\n AllowList: [\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063',\n '0x072f14b85add63488ddad88f855fda4a99d6ac9b000200000000000000000027',\n '0x0b09dea16768f0799065c475be02919503cb2a3500020000000000000000001a',\n '0x186084ff790c65088ba694df11758fae4943ee9e000200000000000000000013',\n '0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112',\n '0x27c9f71cc31464b906e0006d4fcbc8900f48f15f00020000000000000000010f',\n '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080',\n '0x350196326aeaa9b98f1903fb5e8fc2686f85318c000200000000000000000084',\n '0x3e5fa9518ea95c3e533eb377c001702a9aacaa32000200000000000000000052',\n '0x51735bdfbfe3fc13dea8dc6502e2e958989429610002000000000000000000a0',\n '0x5d66fff62c17d841935b60df5f07f6cf79bd0f4700020000000000000000014c',\n '0x5f7fa48d765053f8dd85e052843e12d23e3d7bc50002000000000000000000c0',\n '0x702605f43471183158938c1a3e5f5a359d7b31ba00020000000000000000009f',\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe',\n '0x7edde0cb05ed19e03a9a47cd5e53fc57fde1c80c0002000000000000000000c8',\n '0x8f4205e1604133d1875a3e771ae7e4f2b086563900020000000000000000010e',\n '0x90291319f1d4ea3ad4db0dd8fe9e12baf749e84500020000000000000000013c',\n '0x96646936b91d6b9d7d0c47c496afbf3d6ec7b6f8000200000000000000000019',\n '0x96ba9025311e2f47b840a1f68ed57a3df1ea8747000200000000000000000160',\n '0xa02e4b3d18d4e6b8d18ac421fbc3dfff8933c40a00020000000000000000004b',\n '0xa6f548df93de924d73be7d25dc02554c6bd66db500020000000000000000000e',\n '0xbaeec99c90e3420ec6c1e7a769d2a856d2898e4d00020000000000000000008a',\n '0xbf96189eee9357a95c7719f4f5047f76bde804e5000200000000000000000087',\n '0xe2469f47ab58cf9cf59f9822e3c5de4950a41c49000200000000000000000089',\n '0xe99481dc77691d8e2456e5f3f61c1810adfc1503000200000000000000000018',\n '0xec60a5fef79a92c741cb74fdd6bfc340c0279b01000200000000000000000015',\n '0xedf085f65b4f6c155e13155502ef925c9a756003000200000000000000000123',\n '0xefaa1604e82e1b3af8430b90192c1b9e8197e377000200000000000000000021',\n '0xf4c0dd9b82da36c07605df83c8a416f11724d88b000200000000000000000026',\n '0xf5aaf7ee8c39b651cebf5f1f50c10631e78e0ef9000200000000000000000069',\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066',\n '0x92762b42a06dcdddc5b7362cfb01e631c4d44b40000200000000000000000182',\n '0xde8c195aa41c11a0c4787372defbbddaa31306d2000200000000000000000181',\n '0x17ddd9646a69c9445cd8a9f921d4cd93bf50d108000200000000000000000159',\n '0xc45d42f801105e861e86658648e3678ad7aa70f900010000000000000000011e',\n '0x2d344a84bac123660b021eebe4eb6f12ba25fe8600020000000000000000018a',\n '0xb460daa847c45f1c4a41cb05bfb3b51c92e41b36000200000000000000000194',\n '0x5122e01d819e58bb2e22528c0d68d310f0aa6fd7000200000000000000000163',\n '0x851523a36690bf267bbfec389c823072d82921a90002000000000000000001ed',\n '0xe8cc7e765647625b95f59c15848379d10b9ab4af0002000000000000000001de',\n '0x85370d9e3bb111391cc89f6de344e801760461830002000000000000000001ef',\n '0xa7ff759dbef9f3efdd1d59beee44b966acafe214000200000000000000000180',\n '0x3f7c10701b14197e2695dec6428a2ca4cf7fc3b800020000000000000000023c',\n '0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d',\n '0x178e029173417b1f9c8bc16dcec6f697bc32374600000000000000000000025d',\n '0xcfca23ca9ca720b6e98e3eb9b6aa0ffc4a5c08b9000200000000000000000274',\n '0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249',\n '0x0578292cb20a443ba1cde459c985ce14ca2bdee5000100000000000000000269',\n '0x8eb6c82c3081bbbd45dcac5afa631aac53478b7c000100000000000000000270',\n '0x1b65fe4881800b91d4277ba738b567cbb200a60d0002000000000000000002cc',\n '0x99a14324cfd525a34bbc93ac7e348929909d57fd00020000000000000000030e',\n '0x9b532ab955417afd0d012eb9f7389457cd0ea712000000000000000000000338',\n '0x48607651416a943bf5ac71c41be1420538e78f87000200000000000000000327',\n '0x6a5ead5433a50472642cd268e584dafa5a394490000200000000000000000366',\n '0x0fd5663d4893ae0d579d580584806aadd2dd0b8b000200000000000000000367',\n '0x441b8a1980f2f2e43a9397099d15cc2fe6d3625000020000000000000000035f',\n '0xf3aeb3abba741f0eece8a1b1d2f11b85899951cb000200000000000000000351',\n '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d',\n ],\n },\n Metadata: {\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: true,\n },\n '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: true,\n },\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063': {\n name: 'Balancer Stable USD',\n hasIcon: true,\n },\n '0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249': {\n name: 'AuraBAL Stable Pool',\n hasIcon: false,\n },\n },\n};\n\nconst POOLS_POLYGON: Pools = {\n IdsMap: {\n xMatic: {\n v1: '0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4',\n v2: '0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c',\n },\n stMatic: {\n v1: '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366',\n v2: '0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d',\n },\n mai4: {\n mai4: '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012',\n maiBbaUsd:\n '0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e',\n },\n },\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: [\n 'Element',\n 'AaveLinear',\n 'Linear',\n 'ERC4626Linear',\n 'Gyro2',\n 'Gyro3',\n 'GyroE',\n 'FX',\n ],\n Stable: {\n AllowList: [\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012', // polygon MAI/DAI/USDC/USDT\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e', // polygon WBTC/renBTC\n '0xf38cf113d2d4f60c36cbd95af2f48a9a0167045a00000000000000000000005b', // polygon,\n '0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068', // tusd polygon\n '0x5028497af0c9a54ea8c6d42a054c0341b9fc616800020000000000000000007b', // dusd polygon\n '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366', // polygon staked matic\n '0xb4670d1389c758e4380c4211bcbc85342688b9c50002000000000000000003d8', // vQi,\n '0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455', // 4pool\n '0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4', // maticx metastable\n '0xb4b22bd6cdad0ab828be6f8a4086dfa54e9b373600020000000000000000058f', // Polygon tetuBAL-80BAL-20WETH\n '0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba', // tetuBAL-80BAL-20WETH V2 (with short name)\n '0x0b8319061732b34cab22445fa83b81f950e4b7ed000000000000000000000709',\n '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366',\n '0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d',\n '0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c',\n '0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e', // mai / bb-am-USD\n '0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b', // bb-am-USD\n '0xa48d164f6eb0edc68bd03b56fa59e12f24499ad10000000000000000000007c4', // ageur stable\n ],\n },\n Investment: {\n AllowList: [''],\n },\n Factories: {\n '0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0': 'oracleWeightedPool',\n '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9': 'weightedPool',\n '0xc66ba2b6595d3613ccab350c886ace23866ede24': 'stablePool',\n '0xdae7e32adc5d490a43ccba1f0c736033f2b4efca': 'stablePool', // Metastable\n '0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de': 'liquidityBootstrappingPool', // LBP\n '0x41b953164995c11c81da73d212ed8af25741b7ac': 'liquidityBootstrappingPool', // LBP (zero protocol fee)\n '0x0f7bb7ce7b6ed9366f9b6b910adefe72dc538193': 'managedPool', // Polygon Managed\n '0xc128a9954e6c874ea3d62ce62b468ba073093f25': 'boostedPool', // polygon stablephantom\n '0xca96c4f198d343e251b1a01f3eba061ef3da73c1': 'stablePool', // stable pool v2,\n '0x136fd06fa01ecf624c7f2b3cb15742c1339dc2c4': 'composableStablePool', // ComposableStable\n '0x0e39c3d9b2ec765efd9c5c70bb290b1fcd8536e3': 'weightedPool', // weighted pool v2\n },\n Stakable: {\n AllowList: [\n '0x0297e37f1873d2dab4487aa67cd56b58e2f27875000100000000000000000002',\n '0x03cd191f589d12b0582a99808cf19851e468e6b500010000000000000000000a',\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012',\n '0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068',\n '0x10f21c9bd8128a29aa785ab2de0d044dcdd79436000200000000000000000059',\n '0x186084ff790c65088ba694df11758fae4943ee9e000200000000000000000032',\n '0x36128d5436d2d70cab39c9af9cce146c38554ff0000100000000000000000008',\n '0x5a6ae1fd70d04ba4a279fc219dfabc53825cb01d00020000000000000000020e',\n '0x614b5038611729ed49e0ded154d8a5d3af9d1d9e00010000000000000000001d',\n '0x7c9cf12d783821d5c63d8e9427af5c44bad92445000100000000000000000051',\n '0x805ca3ccc61cc231851dee2da6aabff0a7714aa7000200000000000000000361',\n '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366',\n '0xb204bf10bc3a5435017d3db247f56da601dfe08a0002000000000000000000fe',\n '0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455',\n '0xce66904b68f1f070332cbc631de7ee98b650b499000100000000000000000009',\n '0xcf354603a9aebd2ff9f33e1b04246d8ea204ae9500020000000000000000005a',\n '0xdb1db6e248d7bb4175f6e5a382d0a03fe3dcc813000100000000000000000035',\n '0xea4e073c8ac859f2994c07e627178719c8002dc00002000000000000000003dc',\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e',\n '0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4',\n '0x2dbc9ab0160087ae59474fb7bed95b9e808fa6bc0001000000000000000003db',\n '0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba',\n '0x8f9dd2064eb38e8e40f2ab67bde27c0e16ea9b080002000000000000000004ca',\n '0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b',\n '0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e',\n '0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d',\n '0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c',\n ],\n },\n Metadata: {},\n};\n\nconst POOLS_ARBITRUM: Pools = {\n IdsMap: {},\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: ['Element', 'AaveLinear', 'Linear', 'ERC4626Linear', 'FX'],\n Stable: {\n AllowList: [\n '0x9be7de742865d021c0e8fb9d64311b2c040c1ec1000200000000000000000012', // arbitrum\n '0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016', // arbitrum\n '0x386b5d43ba8b97c43d4afb4cdae7877a1b295e8a000000000000000000000020', // tusd arbitrum\n '0x0510ccf9eb3ab03c1508d3b9769e8ee2cfd6fdcf00000000000000000000005d', // mai\n '0x5a5884fc31948d59df2aeccca143de900d49e1a300000000000000000000006f', // VST\n '0xd89746affa5483627a87e55713ec1905114394950002000000000000000000bf', // fluid stable\n '0x7bceaa9c5e7f4836fec3bce2d5346637c9b13970000000000000000000000102', // vesta new stable\n '0xfb5e6d0c1dfed2ba000fbc040ab8df3615ac329c000000000000000000000159', // stETH\n ],\n },\n Investment: {\n AllowList: [''],\n },\n Factories: {\n '0x7dfdef5f355096603419239ce743bfaf1120312b': 'weightedPool', // Arbitrum Weighted\n '0xcf0a32bbef8f064969f21f7e02328fb577382018': 'weightedPool', // Arbitrum WeightedOracle\n '0x2433477a10fc5d31b9513c638f19ee85caed53fd': 'stablePool', // Arbitrum Stable\n '0xebfd5681977e38af65a7487dc70b8221d089ccad': 'stablePool', // Arbitrum MetaStable\n '0x142b9666a0a3a30477b052962dda81547e7029ab': 'liquidityBootstrappingPool', // Arbitrum LBP (old)\n '0x1802953277fd955f9a254b80aa0582f193cf1d77': 'liquidityBootstrappingPool', // Arbitrum LBP (new)\n '0xacd615b3705b9c880e4e7293f1030b34e57b4c1c': 'managedPool', // arbitrum managed\n '0xdae7e32adc5d490a43ccba1f0c736033f2b4efca': 'boostedPool', // arbitrum stablephantom\n '0xef44d6786b2b4d544b7850fe67ce6381626bf2d6': 'stablePool', // stable pool v2\n '0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33': 'composableStablePool', // ComposableStable\n '0x8df6efec5547e31b0eb7d1291b511ff8a2bf987c': 'weightedPool', // weighted pool v2\n },\n Stakable: {\n AllowList: [\n '0x0510ccf9eb3ab03c1508d3b9769e8ee2cfd6fdcf00000000000000000000005d',\n '0x0adeb25cb5920d4f7447af4a0428072edc2cee2200020000000000000000004a',\n '0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016',\n '0x1779900c7707885720d39aa741f4086886307e9e00020000000000000000004b',\n '0x4a3a22a3e7fee0ffbb66f1c28bfac50f75546fc7000200000000000000000008',\n '0x5a5884fc31948d59df2aeccca143de900d49e1a300000000000000000000006f',\n '0x64541216bafffeec8ea535bb71fbc927831d0595000100000000000000000002',\n '0x651e00ffd5ecfa7f3d4f33d62ede0a97cf62ede2000200000000000000000006',\n '0xb28670b3e7ad27bd41fb5938136bf9e9cba90d6500020000000000000000001e',\n '0xb340b6b1a34019853cb05b2de6ee8ffd0b89a008000100000000000000000036',\n '0xb5b77f1ad2b520df01612399258e7787af63025d000200000000000000000010',\n '0xc2f082d33b5b8ef3a7e3de30da54efd3114512ac000200000000000000000017',\n '0xc61ff48f94d801c1ceface0289085197b5ec44f000020000000000000000004d',\n '0xcc65a812ce382ab909a11e434dbf75b34f1cc59d000200000000000000000001',\n '0xe1b40094f1446722c424c598ac412d590e0b3ffb000200000000000000000076',\n '0xb3028ca124b80cfe6e9ca57b70ef2f0ccc41ebd40002000000000000000000ba',\n '0x7bceaa9c5e7f4836fec3bce2d5346637c9b13970000000000000000000000102',\n '0xfb5e6d0c1dfed2ba000fbc040ab8df3615ac329c000000000000000000000159',\n '0x178e029173417b1f9c8bc16dcec6f697bc323746000200000000000000000158',\n ],\n },\n Metadata: {},\n};\n\nconst POOLS_GNOSIS: Pools = {\n IdsMap: {},\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: [\n 'Element',\n 'AaveLinear',\n 'Linear',\n 'ERC4626Linear',\n 'FX',\n 'Gyro2',\n 'Gyro3',\n 'GyroE',\n 'HighAmpComposableStable',\n 'FX',\n ],\n Stable: {\n AllowList: [\n '0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000004',\n '0x707b7d4a1bae449d546dcab869256591bbb3d70b000000000000000000000000',\n ],\n },\n Investment: {\n AllowList: [],\n },\n Factories: {},\n Stakable: {\n AllowList: [],\n },\n Metadata: {},\n};\n\nconst POOLS_GENERIC: Pools = {\n IdsMap: {},\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: ['Element', 'AaveLinear', 'Linear', 'ERC4626Linear', 'FX'],\n Stable: {\n AllowList: [\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063',\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066',\n '0x9f19a375709baf0e8e35c2c5c65aca676c4c719100000000000000000000006e',\n '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080', // Lido Metastable\n '0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112', // Rocket Pool Metastable\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012', // polygon\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e', // polygon\n '0x9be7de742865d021c0e8fb9d64311b2c040c1ec1000200000000000000000012', // arbitrum\n '0x9f19a375709baf0e8e35c2c5c65aca676c4c7191000200000000000000000022', // polygon PAR/PAR,\n '0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016', // arbitrum\n '0xf38cf113d2d4f60c36cbd95af2f48a9a0167045a00000000000000000000005b', // polygon,\n '0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068', // tusd polygon\n '0x386b5d43ba8b97c43d4afb4cdae7877a1b295e8a000000000000000000000020', // tusd arbitrum\n '0x5028497af0c9a54ea8c6d42a054c0341b9fc616800020000000000000000007b', // dusd polygon\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe', // Mainnet bb-a-USD\n '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366', // staked matic\n ],\n },\n Investment: {\n AllowList: [\n '0xccf5575570fac94cec733a58ff91bb3d073085c70002000000000000000000af', // iROBOT mainnet\n '0xe7b1d394f3b40abeaa0b64a545dbcf89da1ecb3f00010000000000000000009a', // Techemy mainnet\n '0x3b40d7d5ae25df2561944dd68b252016c4c7b2800001000000000000000000c2', // WSB-DEFI mainnet\n ],\n },\n Factories: {\n '0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0': 'oracleWeightedPool',\n '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9': 'weightedPool',\n '0xc66ba2b6595d3613ccab350c886ace23866ede24': 'stablePool',\n '0x67d27634e44793fe63c467035e31ea8635117cd4': 'stablePool', // Metastable\n '0x7dfdef5f355096603419239ce743bfaf1120312b': 'weightedPool', // Arbitrum Weighted\n '0xcf0a32bbef8f064969f21f7e02328fb577382018': 'weightedPool', // Arbitrum WeightedOracle\n '0x2433477a10fc5d31b9513c638f19ee85caed53fd': 'stablePool', // Arbitrum Stable\n '0xebfd5681977e38af65a7487dc70b8221d089ccad': 'stablePool', // Arbitrum MetaStable\n '0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de': 'liquidityBootstrappingPool', // Mainnet LBP\n '0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e': 'liquidityBootstrappingPool', // Mainnet LBP (zero protocol fee)\n '0x142b9666a0a3a30477b052962dda81547e7029ab': 'liquidityBootstrappingPool', // Arbitrum LBP (old)\n '0x1802953277fd955f9a254b80aa0582f193cf1d77': 'liquidityBootstrappingPool', // Arbitrum LBP (new)\n '0x48767f9f868a4a7b86a90736632f6e44c2df7fa9': 'managedPool', // Mainnet Managed\n '0x0f7bb7ce7b6ed9366f9b6b910adefe72dc538193': 'managedPool', // Polygon Managed\n '0xacd615b3705b9c880e4e7293f1030b34e57b4c1c': 'managedPool', // arbitrum managed\n '0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2': 'boostedPool', // mainnet stablephantom\n '0xdae7e32adc5d490a43ccba1f0c736033f2b4efca': 'boostedPool', // arbitrum stablephantom\n '0xc128a9954e6c874ea3d62ce62b468ba073093f25': 'boostedPool', // polygon stablephantom\n },\n Stakable: {\n AllowList: [],\n },\n Metadata: {\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: true,\n },\n '0x8fd162f338b770f7e879030830cde9173367f3010000000000000000000004d8': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: true,\n },\n '0xd387dfd3a786e7caa06e6cf0c675352c7ffff30400000000000000000000063e': {\n name: 'Balancer Stable USD',\n hasIcon: true,\n },\n },\n};\n\nconst POOLS_MAP = {\n [Network.GOERLI]: POOLS_GOERLI,\n [Network.MAINNET]: POOLS_MAINNET,\n [Network.POLYGON]: POOLS_POLYGON,\n [Network.ARBITRUM]: POOLS_ARBITRUM,\n [Network.GNOSIS]: POOLS_GNOSIS,\n};\n\nexport function POOLS(networkId: Network): Pools {\n const id = networkId as keyof typeof POOLS_MAP;\n return POOLS_MAP[id] ? POOLS_MAP[id] : POOLS_GENERIC;\n}\n","export enum PoolGaugesAttributes {\n Id = 'id',\n Address = 'address',\n PoolId = 'poolId',\n}\n\nexport interface PoolGauges {\n preferentialGauge: {\n id: string;\n };\n gauges: {\n id: string;\n relativeWeightCap?: string | null;\n }[];\n}\n","export enum PoolShareAttributes {\n Balance = 'balance',\n Id = 'id',\n PoolId = 'poolId',\n UserAddress = 'userAddress',\n}\n\nexport interface PoolShare {\n id: string;\n userAddress: string;\n poolId: string;\n balance: string;\n}\n","export enum GaugeShareAttributes {\n Id = 'id',\n UserAddress = 'user',\n GaugeId = 'gauge',\n Balance = 'balance',\n}\n\nexport interface GaugeShare {\n id: string;\n balance: string;\n userAddress: string;\n gauge: {\n id: string;\n poolId?: string;\n isKilled: boolean;\n totalSupply: string;\n };\n}\n","import { Network } from './lib/constants/network';\nimport type { BigNumberish } from '@ethersproject/bignumber';\nimport type { Contract } from '@ethersproject/contracts';\nimport type { PoolDataService, TokenPriceService } from '@balancer-labs/sor';\nimport type {\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n JoinPoolAttributes,\n} from './modules/pools/pool-types/concerns/types';\nimport type {\n Findable,\n Searchable,\n LiquidityGauge,\n PoolAttribute,\n TokenAttribute,\n Cacheable,\n} from '@/modules/data/types';\nimport type {\n BaseFeeDistributor,\n GaugeSharesRepository,\n PoolGaugesRepository,\n PoolSharesRepository,\n ProtocolFeesProvider,\n PoolJoinExitRepository,\n} from './modules/data';\nimport type { GraphQLArgs } from './lib/graphql';\nimport type { AprBreakdown } from '@/modules/pools/apr/apr';\nimport { SubgraphPoolDataService } from '@/modules/sor/pool-data/subgraphPoolDataService';\nimport * as Queries from '@/modules/pools/queries/types';\nimport { GyroConfigRepository } from '@/modules/data/gyro-config/repository';\n\nexport * from '@/modules/data/types';\nexport { Network, AprBreakdown };\n\nexport type Address = string;\n\nexport interface BalancerSdkConfig {\n //use a known network or provide an entirely custom config\n network: Network | BalancerNetworkConfig;\n rpcUrl: string;\n //overwrite the subgraph url if you don't want to use the balancer labs maintained version\n customSubgraphUrl?: string;\n subgraphQuery?: GraphQLQuery;\n //optionally overwrite parts of the standard SOR config\n sor?: Partial;\n tenderly?: BalancerTenderlyConfig;\n enableLogging?: boolean;\n coingecko?: CoingeckoConfig;\n}\n\nexport interface BalancerTenderlyConfig {\n accessKey: string;\n user: string;\n project: string;\n blockNumber?: number;\n}\n\nexport interface BalancerSdkSorConfig {\n //use a built-in service or provide a custom implementation of a TokenPriceService\n //defaults to coingecko\n tokenPriceService: 'api' | 'coingecko' | 'subgraph' | TokenPriceService;\n //use a built-in service or provide a custom implementation of a PoolDataService\n //defaults to subgraph\n poolDataService: 'subgraph' | PoolDataService;\n //if a custom PoolDataService is provided, on chain balance fetching needs to be handled externally\n //default to true.\n fetchOnChainBalances: boolean;\n}\n\nexport interface ContractAddresses {\n vault: string;\n multicall: string;\n poolDataQueries: string;\n gaugeClaimHelper?: string;\n balancerHelpers: string;\n balancerMinter?: string;\n lidoRelayer?: string;\n balancerRelayer: string;\n gaugeController?: string;\n feeDistributor?: string;\n veBal?: string;\n veBalProxy?: string;\n protocolFeePercentagesProvider?: string;\n weightedPoolFactory?: string;\n composableStablePoolFactory?: string;\n\n aaveLinearPoolFactory?: string;\n erc4626LinearPoolFactory?: string;\n eulerLinearPoolFactory?: string;\n gearboxLinearPoolFactory?: string;\n yearnLinearPoolFactory?: string;\n\n [key: string]: string | undefined;\n}\n\nexport interface BalancerNetworkConfig {\n chainId: Network;\n addresses: {\n contracts: ContractAddresses;\n tokens: {\n wrappedNativeAsset: string;\n lbpRaisingTokens?: string[];\n stETH?: string;\n wstETH?: string;\n bal: string;\n veBal?: string;\n bbaUsd?: string;\n };\n };\n tenderly?: BalancerTenderlyConfig;\n urls: {\n subgraph: string;\n gaugesSubgraph?: string;\n blockNumberSubgraph?: string;\n };\n thirdParty: {\n coingecko: {\n nativeAssetId: string;\n platformId: string;\n };\n };\n averageBlockTime?: number; // In seconds, used if blockNumberSubgraph not set\n multicallBatchSize?: number; // Only zkEVM needs a smaller batch size of 128, defaults to 1024\n pools: {\n wETHwstETH?: PoolReference;\n };\n poolsToIgnore?: string[];\n sorConnectingTokens?: { symbol: string; address: string }[];\n sorTriPathMidPoolIds?: string[];\n}\n\nexport interface BalancerDataRepositories {\n feeDistributor?: BaseFeeDistributor;\n feeCollector: Findable;\n gaugeShares?: GaugeSharesRepository;\n gyroConfigRepository?: GyroConfigRepository;\n liquidityGauges?: Findable;\n protocolFees?: ProtocolFeesProvider;\n /**\n * Why do we need 3 different pools repositories?\n */\n pools: Findable & Searchable;\n // Does it need to be different from the pools repository?\n poolsForSimulations: SubgraphPoolDataService;\n poolGauges?: PoolGaugesRepository;\n poolJoinExits: PoolJoinExitRepository;\n // Perhaps better to use a function to get upto date balances when needed.\n poolsOnChain: Findable &\n Searchable &\n Cacheable;\n poolShares: PoolSharesRepository;\n tokenHistoricalPrices: Findable;\n tokenMeta: Findable;\n tokenPrices: Findable;\n tokenYields: Findable;\n // Replace with a swapFeeRepository, we don't need historic pools for any other reason than to get the swap fee\n yesterdaysPools?: Findable & Searchable;\n}\n\nexport type PoolReference = {\n id: string;\n address: string;\n};\n\nexport enum PoolSpecialization {\n GeneralPool = 0,\n MinimalSwapInfoPool,\n TwoTokenPool,\n}\n\n// Joins\n\nexport type JoinPoolRequest = {\n assets: string[];\n maxAmountsIn: BigNumberish[];\n userData: string;\n fromInternalBalance: boolean;\n};\n\n// Exit\n\nexport type ExitPoolRequest = {\n assets: string[];\n minAmountsOut: string[];\n userData: string;\n toInternalBalance: boolean;\n};\n\n// Balance Operations\n\nexport enum UserBalanceOpKind {\n DepositInternal = 0,\n WithdrawInternal,\n TransferInternal,\n TransferExternal,\n}\n\nexport type UserBalanceOp = {\n kind: UserBalanceOpKind;\n asset: string;\n amount: BigNumberish;\n sender: string;\n recipient: string;\n};\n\nexport enum PoolBalanceOpKind {\n Withdraw = 0,\n Deposit = 1,\n Update = 2,\n}\n\nexport type PoolBalanceOp = {\n kind: PoolBalanceOpKind;\n poolId: string;\n token: string;\n amount: BigNumberish;\n};\n\nexport interface TransactionData {\n contract?: Contract;\n function: string;\n params: string[];\n outputs?: {\n amountsIn?: string[];\n amountsOut?: string[];\n };\n}\n\nexport type Currency = 'eth' | 'usd';\n\nexport type Price = { [currency in Currency]?: string };\nexport type TokenPrices = { [address: string]: Price };\nexport type HistoricalPrices = {\n prices: [[number, number]];\n market_caps: [[number, number]];\n total_volumes: [[number, number]];\n};\n\nexport interface Token {\n address: string;\n decimals?: number;\n symbol?: string;\n price?: Price;\n}\n\nexport interface PoolToken extends Token {\n balance: string;\n priceRate?: string;\n weight?: string | null;\n isExemptFromYieldProtocolFee?: boolean;\n token?: SubPoolMeta;\n}\n\nexport interface SubPoolMeta {\n pool: SubPool | null;\n latestUSDPrice?: string;\n latestFXPrice?: string;\n}\n\nexport interface SubPool {\n id: string;\n address: string;\n poolType: PoolType;\n totalShares: string;\n mainIndex: number;\n tokens?: PoolToken[];\n}\n\nexport interface OnchainTokenData {\n balance: string;\n weight: number;\n decimals: number;\n logoURI: string | undefined;\n name: string;\n symbol: string;\n}\n\nexport interface OnchainPoolData {\n tokens: Record;\n totalSupply: string;\n decimals: number;\n swapFee: string;\n amp?: string;\n swapEnabled: boolean;\n tokenRates?: string[];\n}\n\nexport enum PoolType {\n Weighted = 'Weighted',\n Investment = 'Investment',\n Stable = 'Stable',\n ComposableStable = 'ComposableStable',\n MetaStable = 'MetaStable',\n StablePhantom = 'StablePhantom',\n LiquidityBootstrapping = 'LiquidityBootstrapping',\n Element = 'Element',\n Gyro2 = 'Gyro2',\n Gyro3 = 'Gyro3',\n GyroE = 'GyroE',\n Managed = 'Managed',\n // Linear Pools defined below all operate the same mathematically but have different factories and names in Subgraph\n AaveLinear = 'AaveLinear',\n Linear = 'Linear',\n EulerLinear = 'EulerLinear',\n ERC4626Linear = 'ERC4626Linear',\n BeefyLinear = 'BeefyLinear',\n GearboxLinear = 'GearboxLinear',\n MidasLinear = 'MidasLinear',\n ReaperLinear = 'ReaperLinear',\n SiloLinear = 'SiloLinear',\n TetuLinear = 'TetuLinear',\n YearnLinear = 'YearnLinear',\n FX = 'FX',\n}\n\nexport interface Pool {\n id: string;\n name: string;\n address: string;\n chainId: number;\n poolType: PoolType;\n poolTypeVersion: number;\n swapFee: string;\n protocolYieldFeeCache: string;\n protocolSwapFeeCache: string;\n owner?: string;\n factory?: string;\n tokens: PoolToken[];\n tokensList: string[];\n tokenAddresses?: string[];\n totalLiquidity: string;\n totalShares: string;\n totalSwapFee?: string;\n totalSwapVolume?: string;\n onchain?: OnchainPoolData;\n createTime?: number;\n mainTokens?: string[];\n wrappedTokens?: string[];\n unwrappedTokens?: string[];\n isNew?: boolean;\n volumeSnapshot?: string;\n feesSnapshot?: string;\n boost?: string;\n symbol?: string;\n swapEnabled: boolean;\n amp?: string;\n wrappedIndex?: number;\n mainIndex?: number;\n apr?: AprBreakdown;\n liquidity?: string;\n totalWeight: string;\n lowerTarget: string;\n upperTarget: string;\n priceRateProviders?: PriceRateProvider[];\n lastJoinExitInvariant?: string;\n isInRecoveryMode?: boolean;\n isPaused?: boolean;\n tokenRates?: string[];\n}\n\nexport interface PriceRateProvider {\n address: string;\n token: {\n address: string;\n };\n}\n\n/**\n * Pool use-cases / controller layer\n */\nexport interface PoolWithMethods extends Pool, Queries.ParamsBuilder {\n /**\n * Build join pool transaction parameters with exact tokens in and minimum BPT out based on slippage tolerance\n * @param joiner Account address joining pool\n * @param tokensIn Token addresses provided for joining pool (same length and order as amountsIn)\n * @param amountsIn Token amounts provided for joining pool in EVM scale\n * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildJoin: (\n joiner: string,\n tokensIn: string[],\n amountsIn: string[],\n slippage: string\n ) => JoinPoolAttributes;\n\n /**\n * Calculate price impact of bptAmount against zero price impact BPT amount.\n * @param tokenAmounts Token amounts. Needs a value for each pool token.\n * @param bptAmount BPT amount for comparison (in EVM scale).\n * @param isJoin boolean indicating if the price impact is for a join or exit.\n * @returns price impact in EVM scale.\n */\n calcPriceImpact: (\n tokenAmounts: string[],\n bptAmount: string,\n isJoin: boolean\n ) => Promise;\n\n /**\n * Build exit pool transaction parameters with exact BPT in and minimum token amounts out based on slippage tolerance\n * @param exiter Account address exiting pool\n * @param bptIn BPT provided for exiting pool in EVM scale\n * @param slippage Maximum slippage tolerance in bps. i.e. 50 = 5%\n * @param shouldUnwrapNativeAsset Indicates whether wrapped native asset should be unwrapped after exit. Defaults to false.\n * @param singleTokenOut Optional: token address that if provided will exit to given token\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildExitExactBPTIn: (\n exiter: string,\n bptIn: string,\n slippage: string,\n shouldUnwrapNativeAsset?: boolean,\n singleTokenOut?: string,\n toInternalBalance?: boolean\n ) => ExitExactBPTInAttributes;\n\n /**\n * Build exit pool transaction parameters with exact tokens out and maximum BPT in based on slippage tolerance\n * @param exiter Account address exiting pool\n * @param tokensOut Tokens provided for exiting pool (same length and order as amountsOut)\n * @param amountsOut Amounts provided for exiting pool in EVM scale\n * @param slippage Maximum slippage tolerance in bps. i.e. 50 = 5%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildExitExactTokensOut: (\n exiter: string,\n tokensOut: string[],\n amountsOut: string[],\n slippage: string,\n toInternalBalance?: boolean\n ) => ExitExactTokensOutAttributes;\n\n /**\n * Build recovery exit pool transaction parameters with exact BPT in and minimum token amounts out based on slippage tolerance\n * @param exiter Account address exiting pool\n * @param bptIn BPT amount in EVM scale\n * @param slippage Maximum slippage tolerance in basis points. i.e. 50 = 5%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildRecoveryExit: (\n exiter: string,\n bptIn: string,\n slippage: string,\n toInternalBalance?: boolean\n ) => ExitExactBPTInAttributes;\n\n /**\n * Calculate spot price for swapping tokenIn with tokenOut\n * @param tokenIn Token address\n * @param tokenOut Token address\n * @returns spot price for swapping tokenIn with tokenOut in EVM scale\n */\n calcSpotPrice: (tokenIn: string, tokenOut: string) => string;\n\n bptIndex: number;\n}\n\nexport interface GraphQLQuery {\n args: GraphQLArgs;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attrs: any;\n}\n\nexport type CoingeckoConfig = {\n coingeckoApiKey: string;\n tokensPerPriceRequest?: number;\n isDemoApiKey?: boolean;\n};\n","export class Logger {\n private enableLogging: boolean;\n\n private static instance: Logger;\n\n private constructor() {\n this.enableLogging = true; // Logging is initially enabled\n }\n\n static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger();\n }\n return Logger.instance;\n }\n\n setLoggingEnabled(enabled: boolean): void {\n this.enableLogging = enabled;\n }\n\n info(message: string): void {\n if (this.enableLogging) {\n console.log(`[INFO] ${message}`);\n }\n }\n\n warn(message: string): void {\n if (this.enableLogging) {\n console.warn(`[WARN] ${message}`);\n }\n }\n\n error(message: string): void {\n if (this.enableLogging) {\n console.error(`[ERROR] ${message}`);\n }\n }\n\n time(message: string): void {\n if (this.enableLogging) {\n console.time(`[TIME] ${message}`);\n }\n }\n\n timeEnd(message: string): void {\n if (this.enableLogging) {\n console.timeEnd(`[TIME] ${message}`);\n }\n }\n}\n","import { getAddress } from '@ethersproject/address';\nimport { AddressZero } from '@ethersproject/constants';\nimport invariant from 'tiny-invariant';\n\nconst cmpTokens = (tokenA: string, tokenB: string): number =>\n tokenA.toLowerCase() > tokenB.toLowerCase() ? 1 : -1;\n\nconst transposeMatrix = (matrix: unknown[][]): unknown[][] =>\n matrix[0].map((_, columnIndex) => matrix.map((row) => row[columnIndex]));\n\nexport class AssetHelpers {\n public readonly ETH: string = AddressZero;\n public readonly WETH: string;\n\n constructor(wethAddress: string) {\n this.WETH = getAddress(wethAddress);\n }\n\n static isEqual = (addressA: string, addressB: string): boolean =>\n getAddress(addressA) === getAddress(addressB);\n\n /**\n * Tests whether `token` is ETH (represented by `0x0000...0000`).\n *\n * @param token - the address of the asset to be checked\n */\n isETH = (token: string): boolean => AssetHelpers.isEqual(token, this.ETH);\n\n /**\n * Tests whether `token` is WETH.\n *\n * @param token - the address of the asset to be checked\n */\n isWETH = (token: string): boolean => AssetHelpers.isEqual(token, this.WETH);\n\n /**\n * Converts an asset to the equivalent ERC20 address.\n *\n * For ERC20s this will return the passed address but passing ETH (`0x0000...0000`) will return the WETH address\n * @param token - the address of the asset to be translated to an equivalent ERC20\n * @returns the address of translated ERC20 asset\n */\n translateToERC20 = (token: string): string =>\n this.isETH(token) ? this.WETH : token;\n\n /**\n * Sorts an array of token addresses into ascending order to match the format expected by the Vault.\n *\n * Passing additional arrays will result in each being sorted to maintain relative ordering to token addresses.\n *\n * The zero address (representing ETH) is sorted as if it were the WETH address.\n * This matches the behaviour expected by the Vault when receiving an array of addresses.\n *\n * @param tokens - an array of token addresses to be sorted in ascending order\n * @param others - a set of arrays to be sorted in the same order as the tokens, e.g. token weights or asset manager addresses\n * @returns an array of the form `[tokens, ...others]` where each subarray has been sorted to maintain its ordering relative to `tokens`\n *\n * @example\n * const [tokens] = sortTokens([tokenB, tokenC, tokenA])\n * const [tokens, weights] = sortTokens([tokenB, tokenC, tokenA], [weightB, weightC, weightA])\n * // where tokens = [tokenA, tokenB, tokenC], weights = [weightA, weightB, weightC]\n */\n sortTokens(\n tokens: string[],\n ...others: unknown[][]\n ): [string[], ...unknown[][]] {\n others.forEach((array) =>\n invariant(tokens.length === array.length, 'array length mismatch')\n );\n\n // We want to sort ETH as if were WETH so we translate to ERC20s\n const erc20Tokens = tokens.map(this.translateToERC20);\n\n const transpose = transposeMatrix([erc20Tokens, ...others]) as [\n string,\n ...unknown[]\n ][];\n const sortedTranspose = transpose.sort(([tokenA], [tokenB]) =>\n cmpTokens(tokenA, tokenB)\n );\n const [sortedErc20s, ...sortedOthers] = transposeMatrix(\n sortedTranspose\n ) as [string[], ...unknown[][]];\n\n // If one of the tokens was ETH, we need to translate back from WETH\n const sortedTokens = tokens.includes(this.ETH)\n ? sortedErc20s.map((token) => (this.isWETH(token) ? this.ETH : token))\n : sortedErc20s;\n return [sortedTokens, ...sortedOthers];\n }\n}\n","const balancerErrorCodes: Record = {\n '000': 'ADD_OVERFLOW',\n '001': 'SUB_OVERFLOW',\n '002': 'SUB_UNDERFLOW',\n '003': 'MUL_OVERFLOW',\n '004': 'ZERO_DIVISION',\n '005': 'DIV_INTERNAL',\n '006': 'X_OUT_OF_BOUNDS',\n '007': 'Y_OUT_OF_BOUNDS',\n '008': 'PRODUCT_OUT_OF_BOUNDS',\n '009': 'INVALID_EXPONENT',\n '100': 'OUT_OF_BOUNDS',\n '101': 'UNSORTED_ARRAY',\n '102': 'UNSORTED_TOKENS',\n '103': 'INPUT_LENGTH_MISMATCH',\n '104': 'ZERO_TOKEN',\n '200': 'MIN_TOKENS',\n '201': 'MAX_TOKENS',\n '202': 'MAX_SWAP_FEE_PERCENTAGE',\n '203': 'MIN_SWAP_FEE_PERCENTAGE',\n '204': 'MINIMUM_BPT',\n '205': 'CALLER_NOT_VAULT',\n '206': 'UNINITIALIZED',\n '207': 'BPT_IN_MAX_AMOUNT',\n '208': 'BPT_OUT_MIN_AMOUNT',\n '209': 'EXPIRED_PERMIT',\n '210': 'NOT_TWO_TOKENS',\n '211': 'DISABLED',\n '300': 'MIN_AMP',\n '301': 'MAX_AMP',\n '302': 'MIN_WEIGHT',\n '303': 'MAX_STABLE_TOKENS',\n '304': 'MAX_IN_RATIO',\n '305': 'MAX_OUT_RATIO',\n '306': 'MIN_BPT_IN_FOR_TOKEN_OUT',\n '307': 'MAX_OUT_BPT_FOR_TOKEN_IN',\n '308': 'NORMALIZED_WEIGHT_INVARIANT',\n '309': 'INVALID_TOKEN',\n '310': 'UNHANDLED_JOIN_KIND',\n '311': 'ZERO_INVARIANT',\n '312': 'ORACLE_INVALID_SECONDS_QUERY',\n '313': 'ORACLE_NOT_INITIALIZED',\n '314': 'ORACLE_QUERY_TOO_OLD',\n '315': 'ORACLE_INVALID_INDEX',\n '316': 'ORACLE_BAD_SECS',\n '317': 'AMP_END_TIME_TOO_CLOSE',\n '318': 'AMP_ONGOING_UPDATE',\n '319': 'AMP_RATE_TOO_HIGH',\n '320': 'AMP_NO_ONGOING_UPDATE',\n '321': 'STABLE_INVARIANT_DIDNT_CONVERGE',\n '322': 'STABLE_GET_BALANCE_DIDNT_CONVERGE',\n '323': 'RELAYER_NOT_CONTRACT',\n '324': 'BASE_POOL_RELAYER_NOT_CALLED',\n '325': 'REBALANCING_RELAYER_REENTERED',\n '326': 'GRADUAL_UPDATE_TIME_TRAVEL',\n '327': 'SWAPS_DISABLED',\n '328': 'CALLER_IS_NOT_LBP_OWNER',\n '329': 'PRICE_RATE_OVERFLOW',\n '330': 'INVALID_JOIN_EXIT_KIND_WHILE_SWAPS_DISABLED',\n '331': 'WEIGHT_CHANGE_TOO_FAST',\n '332': 'LOWER_GREATER_THAN_UPPER_TARGET',\n '333': 'UPPER_TARGET_TOO_HIGH',\n '334': 'UNHANDLED_BY_LINEAR_POOL',\n '335': 'OUT_OF_TARGET_RANGE',\n '336': 'UNHANDLED_EXIT_KIND ',\n '337': 'UNAUTHORIZED_EXIT',\n '338': 'MAX_MANAGEMENT_SWAP_FEE_PERCENTAGE',\n '339': 'UNHANDLED_BY_MANAGED_POOL',\n '340': 'UNHANDLED_BY_PHANTOM_POOL',\n '341': 'TOKEN_DOES_NOT_HAVE_RATE_PROVIDER',\n '342': 'INVALID_INITIALIZATION',\n '343': 'OUT_OF_NEW_TARGET_RANGE',\n '344': 'UNAUTHORIZED_OPERATION',\n '345': 'UNINITIALIZED_POOL_CONTROLLER',\n '400': 'REENTRANCY',\n '401': 'SENDER_NOT_ALLOWED',\n '402': 'PAUSED',\n '403': 'PAUSE_WINDOW_EXPIRED',\n '404': 'MAX_PAUSE_WINDOW_DURATION',\n '405': 'MAX_BUFFER_PERIOD_DURATION',\n '406': 'INSUFFICIENT_BALANCE',\n '407': 'INSUFFICIENT_ALLOWANCE',\n '408': 'ERC20_TRANSFER_FROM_ZERO_ADDRESS',\n '409': 'ERC20_TRANSFER_TO_ZERO_ADDRESS',\n '410': 'ERC20_MINT_TO_ZERO_ADDRESS',\n '411': 'ERC20_BURN_FROM_ZERO_ADDRESS',\n '412': 'ERC20_APPROVE_FROM_ZERO_ADDRESS',\n '413': 'ERC20_APPROVE_TO_ZERO_ADDRESS',\n '414': 'ERC20_TRANSFER_EXCEEDS_ALLOWANCE',\n '415': 'ERC20_DECREASED_ALLOWANCE_BELOW_ZERO',\n '416': 'ERC20_TRANSFER_EXCEEDS_BALANCE',\n '417': 'ERC20_BURN_EXCEEDS_ALLOWANCE',\n '418': 'SAFE_ERC20_CALL_FAILED',\n '419': 'ADDRESS_INSUFFICIENT_BALANCE',\n '420': 'ADDRESS_CANNOT_SEND_VALUE',\n '421': 'SAFE_CAST_VALUE_CANT_FIT_INT256',\n '422': 'GRANT_SENDER_NOT_ADMIN',\n '423': 'REVOKE_SENDER_NOT_ADMIN',\n '424': 'RENOUNCE_SENDER_NOT_ALLOWED',\n '425': 'BUFFER_PERIOD_EXPIRED',\n '426': 'CALLER_IS_NOT_OWNER',\n '427': 'NEW_OWNER_IS_ZERO',\n '428': 'CODE_DEPLOYMENT_FAILED',\n '429': 'CALL_TO_NON_CONTRACT',\n '430': 'LOW_LEVEL_CALL_FAILED',\n '431': 'NOT_PAUSED',\n '432': 'ADDRESS_ALREADY_ALLOWLISTED',\n '433': 'ADDRESS_NOT_ALLOWLISTED',\n '434': 'ERC20_BURN_EXCEEDS_BALANCE',\n '500': 'INVALID_POOL_ID',\n '501': 'CALLER_NOT_POOL',\n '502': 'SENDER_NOT_ASSET_MANAGER',\n '503': 'USER_DOESNT_ALLOW_RELAYER',\n '504': 'INVALID_SIGNATURE',\n '505': 'EXIT_BELOW_MIN',\n '506': 'JOIN_ABOVE_MAX',\n '507': 'SWAP_LIMIT',\n '508': 'SWAP_DEADLINE',\n '509': 'CANNOT_SWAP_SAME_TOKEN',\n '510': 'UNKNOWN_AMOUNT_IN_FIRST_SWAP',\n '511': 'MALCONSTRUCTED_MULTIHOP_SWAP',\n '512': 'INTERNAL_BALANCE_OVERFLOW',\n '513': 'INSUFFICIENT_INTERNAL_BALANCE',\n '514': 'INVALID_ETH_INTERNAL_BALANCE',\n '515': 'INVALID_POST_LOAN_BALANCE',\n '516': 'INSUFFICIENT_ETH',\n '517': 'UNALLOCATED_ETH',\n '518': 'ETH_TRANSFER',\n '519': 'CANNOT_USE_ETH_SENTINEL',\n '520': 'TOKENS_MISMATCH',\n '521': 'TOKEN_NOT_REGISTERED',\n '522': 'TOKEN_ALREADY_REGISTERED',\n '523': 'TOKENS_ALREADY_SET',\n '524': 'TOKENS_LENGTH_MUST_BE_2',\n '525': 'NONZERO_TOKEN_BALANCE',\n '526': 'BALANCE_TOTAL_OVERFLOW',\n '527': 'POOL_NO_TOKENS',\n '528': 'INSUFFICIENT_FLASH_LOAN_BALANCE',\n '600': 'SWAP_FEE_PERCENTAGE_TOO_HIGH',\n '601': 'FLASH_LOAN_FEE_PERCENTAGE_TOO_HIGH',\n '602': 'INSUFFICIENT_FLASH_LOAN_FEE_AMOUNT',\n};\n\nexport class BalancerErrors {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n static isErrorCode = (error: string): boolean => {\n if (!error.includes('BAL#')) return false;\n\n const errorCode = error.replace('BAL#', '');\n return Object.keys(balancerErrorCodes).includes(errorCode);\n };\n\n /**\n * Decodes a Balancer error code into the corresponding reason\n * @param error - a Balancer error code of the form `BAL#000`\n * @returns The decoded error reason\n */\n static parseErrorCode = (error: string): string => {\n if (!error.includes('BAL#')) throw new Error('Error code not found');\n const errorCode = error.replace('BAL#', '');\n\n const actualError = balancerErrorCodes[errorCode];\n\n if (!actualError) throw new Error('Error code not found');\n\n return actualError;\n };\n\n /**\n * Decodes a Balancer error code into the corresponding reason\n * @param error - a Balancer error code of the form `BAL#000`\n * @returns The decoded error reason if passed a valid error code, otherwise returns passed input\n */\n static tryParseErrorCode = (error: string): string => {\n try {\n return BalancerErrors.parseErrorCode(error);\n } catch {\n return error;\n }\n };\n\n /**\n * Tests whether a string is a known Balancer error message\n * @param error - a string to be checked verified as a Balancer error message\n */\n static isBalancerError = (error: string): boolean =>\n Object.values(balancerErrorCodes).includes(error);\n\n /**\n * Encodes an error string into the corresponding error code\n * @param error - a Balancer error message string\n * @returns a Balancer error code of the form `BAL#000`\n */\n static encodeError = (error: string): string => {\n const encodedError = Object.entries(balancerErrorCodes).find(\n ([, message]) => message === error\n );\n\n if (!encodedError) throw Error('Error message not found');\n\n return `BAL#${encodedError[0]}`;\n };\n}\n","import { MaxUint256 as MAX_DEADLINE } from '@ethersproject/constants';\nimport { Contract } from '@ethersproject/contracts';\nimport { hexValue, hexZeroPad, splitSignature } from '@ethersproject/bytes';\nimport { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { Signer, TypedDataSigner } from '@ethersproject/abstract-signer';\n\nexport type Account = string | Signer | Contract;\n\nexport async function accountToAddress(account: Account): Promise {\n if (typeof account == 'string') return account;\n if (Signer.isSigner(account)) return account.getAddress();\n if (account.address) return account.address;\n throw new Error('Could not read account address');\n}\n\nexport enum RelayerAction {\n JoinPool = 'JoinPool',\n ExitPool = 'ExitPool',\n Swap = 'Swap',\n BatchSwap = 'BatchSwap',\n SetRelayerApproval = 'SetRelayerApproval',\n}\n\nexport class RelayerAuthorization {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n static encodeCalldataAuthorization = (\n calldata: string,\n deadline: BigNumberish,\n signature: string\n ): string => {\n const encodedDeadline = hexZeroPad(hexValue(deadline), 32).slice(2);\n const { v, r, s } = splitSignature(signature);\n const encodedV = hexZeroPad(hexValue(v), 32).slice(2);\n const encodedR = r.slice(2);\n const encodedS = s.slice(2);\n return `${calldata}${encodedDeadline}${encodedV}${encodedR}${encodedS}`;\n };\n\n static signJoinAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.JoinPool,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signExitAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.ExitPool,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signSwapAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.Swap,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signBatchSwapAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.BatchSwap,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signSetRelayerApprovalAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.SetRelayerApproval,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signAuthorizationFor = async (\n type: RelayerAction,\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline: BigNumberish = MAX_DEADLINE,\n nonce?: BigNumberish\n ): Promise => {\n const { chainId } = await validator.provider.getNetwork();\n if (!nonce) {\n const userAddress = await user.getAddress();\n nonce = (await validator.getNextNonce(userAddress)) as BigNumberish;\n }\n\n const domain = {\n name: 'Balancer V2 Vault',\n version: '1',\n chainId,\n verifyingContract: validator.address,\n };\n\n const types = {\n [type]: [\n { name: 'calldata', type: 'bytes' },\n { name: 'sender', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n };\n\n const value = {\n calldata: allowedCalldata,\n sender: await accountToAddress(allowedSender),\n nonce: nonce.toString(),\n deadline: deadline.toString(),\n };\n\n return user._signTypedData(domain, types, value);\n };\n}\n\nexport class BalancerMinterAuthorization {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n static signSetMinterApproval = async (\n minterContract: Contract,\n minter: Account,\n approval: boolean,\n user: Signer & TypedDataSigner,\n deadline: BigNumberish = MAX_DEADLINE,\n nonce?: BigNumberish\n ): Promise<{ v: number; r: string; s: string; deadline: BigNumber }> => {\n const { chainId } = await minterContract.provider.getNetwork();\n if (!nonce) {\n const userAddress = await user.getAddress();\n nonce = (await minterContract.getNextNonce(userAddress)) as BigNumberish;\n }\n\n const domain = {\n name: 'Balancer Minter',\n version: '1',\n chainId,\n verifyingContract: minterContract.address,\n };\n\n const types = {\n SetMinterApproval: [\n { name: 'minter', type: 'address' },\n { name: 'approval', type: 'bool' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n };\n\n const value = {\n minter: await accountToAddress(minter),\n approval,\n nonce: nonce.toString(),\n deadline: deadline.toString(),\n };\n\n const signature = await user._signTypedData(domain, types, value);\n\n return {\n ...splitSignature(signature),\n deadline: BigNumber.from(deadline),\n };\n };\n}\n","import { Signer, TypedDataSigner } from '@ethersproject/abstract-signer';\nimport { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { splitSignature } from '@ethersproject/bytes';\nimport { MaxUint256 as MAX_DEADLINE } from '@ethersproject/constants';\nimport { Contract } from '@ethersproject/contracts';\nimport { Account, accountToAddress } from './signatures';\n\nexport const signPermit = async (\n token: Contract,\n owner: Signer & TypedDataSigner,\n spender: Account,\n amount: BigNumberish,\n deadline: BigNumberish = MAX_DEADLINE,\n nonce?: BigNumberish\n): Promise<{\n v: number;\n r: string;\n s: string;\n deadline: BigNumber;\n nonce: BigNumber;\n}> => {\n const { chainId } = await token.provider.getNetwork();\n const ownerAddress = await owner.getAddress();\n\n if (!nonce) nonce = (await token.nonces(ownerAddress)) as BigNumberish;\n\n const domain = {\n name: await token.name(),\n version: '1',\n chainId,\n verifyingContract: token.address,\n };\n\n const types = {\n Permit: [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n };\n\n const value = {\n owner: ownerAddress,\n spender: await accountToAddress(spender),\n value: amount,\n nonce,\n deadline,\n };\n\n const signature = await owner._signTypedData(domain, types, value);\n return {\n ...splitSignature(signature),\n deadline: BigNumber.from(deadline),\n nonce: BigNumber.from(nonce),\n };\n};\n","export const BZERO = BigInt(0);\nexport const BONE = BigInt(1);\nexport const ONE = BigInt('1000000000000000000'); // 18 decimal places\n\nconst _require = (b: boolean, message: string) => {\n if (!b) throw new Error(message);\n};\n\n/**\n * @dev Returns a scaling factor that, when multiplied to a token amount for `token`, normalizes its balance as if\n * it had 18 decimals.\n */\nexport function _computeScalingFactor(tokenDecimals: bigint): bigint {\n // Tokens with more than 18 decimals are not supported.\n const decimalsDifference = BigInt(18) - tokenDecimals;\n return ONE * BigInt(10) ** decimalsDifference;\n}\n\n/**\n * @dev Applies `scalingFactor` to `amount`, resulting in a larger or equal value depending on whether it needed\n * scaling or not.\n */\nexport function _upscale(amount: bigint, scalingFactor: bigint): bigint {\n // Upscale rounding wouldn't necessarily always go in the same direction: in a swap for example the balance of\n // token in should be rounded up, and that of token out rounded down. This is the only place where we round in\n // the same direction for all amounts, as the impact of this rounding is expected to be minimal (and there's no\n // rounding error unless `_scalingFactor()` is overriden).\n return SolidityMaths.mulDownFixed(amount, scalingFactor);\n}\n\n/**\n * @dev Same as `_upscale`, but for an entire array. This function does not return anything, but instead *mutates*\n * the `amounts` array.\n */\nexport function _upscaleArray(\n amounts: bigint[],\n scalingFactors: bigint[]\n): bigint[] {\n const upscaledAmounts = new Array(amounts.length);\n for (let i = 0; i < amounts.length; ++i) {\n upscaledAmounts[i] = SolidityMaths.mulDownFixed(\n amounts[i],\n scalingFactors[i]\n );\n }\n return upscaledAmounts;\n}\n\n/**\n * @dev Reverses the `scalingFactor` applied to `amount`, resulting in a smaller or equal value depending on\n * whether it needed scaling or not. The result is rounded down.\n */\nexport function _downscaleDown(amount: bigint, scalingFactor: bigint): bigint {\n return SolidityMaths.divDownFixed(amount, scalingFactor);\n}\n\n/**\n * @dev Same as `_downscaleDown`, but for an entire array. This function does not return anything, but instead\n * *mutates* the `amounts` array.\n */\nexport function _downscaleDownArray(\n amounts: bigint[],\n scalingFactors: bigint[]\n): bigint[] {\n const downscaledAmounts = new Array(amounts.length);\n for (let i = 0; i < amounts.length; ++i) {\n downscaledAmounts[i] = SolidityMaths.divDownFixed(\n amounts[i],\n scalingFactors[i]\n );\n }\n return downscaledAmounts;\n}\n\n/**\n * @dev Reverses the `scalingFactor` applied to `amount`, resulting in a smaller or equal value depending on\n * whether it needed scaling or not. The result is rounded up.\n */\nexport function _downscaleUp(amount: bigint, scalingFactor: bigint): bigint {\n return SolidityMaths.divUpFixed(amount, scalingFactor);\n}\n\nexport class SolidityMaths {\n /**\n * @dev Returns the addition of two unsigned integers of 256 bits, reverting on overflow.\n */\n // add(a: bigint, b: bigint): bigint {\n // const c = a + b;\n // // _require(c >= a, Errors.ADD_OVERFLOW);\n // return c;\n // }\n\n /**\n * @dev Returns the addition of two signed integers, reverting on overflow.\n */\n static add(a: bigint, b: bigint): bigint {\n const c = a + b;\n _require((b >= 0 && c >= a) || (b < 0 && c < a), 'Errors.ADD_OVERFLOW');\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers of 256 bits, reverting on overflow.\n */\n static sub(a: bigint, b: bigint): bigint {\n _require(b <= a, 'Errors.SUB_OVERFLOW');\n const c = a - b;\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two signed integers, reverting on overflow.\n */\n // sub(int256 a, int256 b) internal pure returns (int256) {\n // int256 c = a - b;\n // // _require((b >= 0 && c <= a) || (b < 0 && c > a), Errors.SUB_OVERFLOW);\n // return c;\n // }\n\n /**\n * @dev Returns the largest bigint in the array.\n */\n static max(args: bigint[]): bigint {\n if (args.length === 0) throw new Error('Errors.EMPTY_ARRAY');\n if (args.length === 1) return args[0];\n return args.reduce((previous, current) =>\n current > previous ? current : previous\n );\n }\n\n /**\n * @dev Returns the smallest of two numbers of 256 bits.\n */\n static min(a: bigint, b: bigint): bigint {\n return a < b ? a : b;\n }\n\n static mul(a: bigint, b: bigint): bigint {\n const c = a * b;\n _require(a == BZERO || c / a == b, 'Errors.MUL_OVERFLOW');\n return c;\n }\n\n static div(a: bigint, b: bigint, roundUp: boolean): bigint {\n return roundUp ? this.divUp(a, b) : this.divDown(a, b);\n }\n\n static divDown(a: bigint, b: bigint): bigint {\n _require(b != BZERO, 'Errors.ZERO_DIVISION');\n return a / b;\n }\n\n static divUp(a: bigint, b: bigint): bigint {\n _require(b != BZERO, 'Errors.ZERO_DIVISION');\n\n if (a == BZERO) {\n return BZERO;\n } else {\n return BONE + (a - BONE) / b;\n }\n }\n\n // Modification: Taken from the fixed point class\n static MAX_POW_RELATIVE_ERROR = BigInt(10000);\n\n static mulUpFixed(a: bigint, b: bigint): bigint {\n const product = a * b;\n _require(a == BZERO || product / a == b, 'Errors.MUL_OVERFLOW');\n\n if (product == BZERO) {\n return BZERO;\n } else {\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, which we already tested for.\n\n return (product - BONE) / ONE + BONE;\n }\n }\n\n // Modification: Taken from the fixed point class\n static divDownFixed(a: bigint, b: bigint): bigint {\n _require(b != BZERO, 'Errors.ZERO_DIVISION');\n if (a == BZERO) {\n return BZERO;\n } else {\n const aInflated = a * ONE;\n // _require(aInflated / a == ONE, Errors.DIV_INTERNAL); // mul overflow\n\n return aInflated / b;\n }\n }\n\n // Modification: Taken from the fixed point class\n static divUpFixed(a: bigint, b: bigint): bigint {\n _require(b != BZERO, 'Errors.ZERO_DIVISION');\n\n if (a == BZERO) {\n return BZERO;\n } else {\n const aInflated = a * ONE;\n _require(aInflated / a == ONE, 'Errors.DIV_INTERNAL'); // mul overflow\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, which we already tested for.\n\n return (aInflated - BONE) / b + BONE;\n }\n }\n\n // Modification: Taken from the fixed point class\n static powUpFixed(x: bigint, y: bigint): bigint {\n const raw = LogExpMath.pow(x, y);\n const maxError = this.add(\n this.mulUpFixed(raw, this.MAX_POW_RELATIVE_ERROR),\n BONE\n );\n\n return this.add(raw, maxError);\n }\n\n // Modification: Taken from the fixed point class\n static complementFixed(x: bigint): bigint {\n return x < ONE ? ONE - x : BZERO;\n }\n\n static mulDownFixed(a: bigint, b: bigint): bigint {\n const product = a * b;\n _require(a == BZERO || product / a == b, 'Errors.MUL_OVERFLOW');\n\n return product / ONE;\n }\n}\n\nclass LogExpMath {\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n static ONE_18 = BigInt('1000000000000000000');\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n static ONE_20 = BigInt('100000000000000000000');\n static ONE_36 = BigInt('1000000000000000000000000000000000000');\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n static MAX_NATURAL_EXPONENT = BigInt('130000000000000000000');\n static MIN_NATURAL_EXPONENT = BigInt('-41000000000000000000');\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n static LN_36_LOWER_BOUND: bigint =\n BigInt(LogExpMath.ONE_18) - BigInt('100000000000000000');\n static LN_36_UPPER_BOUND: bigint =\n BigInt(LogExpMath.ONE_18) + BigInt('100000000000000000');\n\n static MILD_EXPONENT_BOUND: bigint =\n BigInt(2) ** BigInt(254) / LogExpMath.ONE_20;\n\n // 18 decimal constants\n static x0 = BigInt('128000000000000000000'); // 2ˆ7\n static a0 = BigInt(\n '38877084059945950922200000000000000000000000000000000000'\n ); // eˆ(x0) (no decimals)\n static x1 = BigInt('64000000000000000000'); // 2ˆ6\n static a1 = BigInt('6235149080811616882910000000'); // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n static x2 = BigInt('3200000000000000000000'); // 2ˆ5\n static a2 = BigInt('7896296018268069516100000000000000'); // eˆ(x2)\n static x3 = BigInt('1600000000000000000000'); // 2ˆ4\n static a3 = BigInt('888611052050787263676000000'); // eˆ(x3)\n static x4 = BigInt('800000000000000000000'); // 2ˆ3\n static a4 = BigInt('298095798704172827474000'); // eˆ(x4)\n static x5 = BigInt('400000000000000000000'); // 2ˆ2\n static a5 = BigInt('5459815003314423907810'); // eˆ(x5)\n static x6 = BigInt('200000000000000000000'); // 2ˆ1\n static a6 = BigInt('738905609893065022723'); // eˆ(x6)\n static x7 = BigInt('100000000000000000000'); // 2ˆ0\n static a7 = BigInt('271828182845904523536'); // eˆ(x7)\n static x8 = BigInt('50000000000000000000'); // 2ˆ-1\n static a8 = BigInt('164872127070012814685'); // eˆ(x8)\n static x9 = BigInt('25000000000000000000'); // 2ˆ-2\n static a9 = BigInt('128402541668774148407'); // eˆ(x9)\n static x10 = BigInt('12500000000000000000'); // 2ˆ-3\n static a10 = BigInt('113314845306682631683'); // eˆ(x10)\n static x11 = BigInt('6250000000000000000'); // 2ˆ-4\n static a11 = BigInt('106449445891785942956'); // eˆ(x11)\n\n // All arguments and return values are 18 decimal fixed point numbers.\n static pow(x: bigint, y: bigint): bigint {\n if (y === BZERO) {\n // We solve the 0^0 indetermination by making it equal one.\n return this.ONE_18;\n }\n\n if (x == BZERO) {\n return BZERO;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n _require(\n x <\n BigInt(\n '57896044618658097711785492504343953926634992332820282019728792003956564819968'\n ),\n 'Errors.X_OUT_OF_BOUNDS'\n );\n const x_int256 = x;\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n _require(y < this.MILD_EXPONENT_BOUND, 'Errors.Y_OUT_OF_BOUNDS');\n const y_int256 = y;\n\n let logx_times_y;\n if (\n this.LN_36_LOWER_BOUND < x_int256 &&\n x_int256 < this.LN_36_UPPER_BOUND\n ) {\n const ln_36_x = this._ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y =\n (ln_36_x / this.ONE_18) * y_int256 +\n ((ln_36_x % this.ONE_18) * y_int256) / this.ONE_18;\n } else {\n logx_times_y = this._ln(x_int256) * y_int256;\n }\n logx_times_y /= this.ONE_18;\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n _require(\n this.MIN_NATURAL_EXPONENT <= logx_times_y &&\n logx_times_y <= this.MAX_NATURAL_EXPONENT,\n 'Errors.PRODUCT_OUT_OF_BOUNDS'\n );\n\n // return uint256(exp(logx_times_y));\n return this.exp(logx_times_y);\n }\n\n static exp(x: bigint): bigint {\n _require(\n x >= this.MIN_NATURAL_EXPONENT && x <= this.MAX_NATURAL_EXPONENT,\n 'Errors.INVALID_EXPONENT'\n );\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT).\n // Fixed point division requires multiplying by ONE_18.\n return (this.ONE_18 * this.ONE_18) / this.exp(BigInt(-1) * x);\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n let firstAN;\n if (x >= this.x0) {\n x -= this.x0;\n firstAN = this.a0;\n } else if (x >= this.x1) {\n x -= this.x1;\n firstAN = this.a1;\n } else {\n firstAN = BigInt(1); // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= BigInt(100);\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n let product = this.ONE_20;\n\n if (x >= this.x2) {\n x -= this.x2;\n product = (product * this.a2) / this.ONE_20;\n }\n if (x >= this.x3) {\n x -= this.x3;\n product = (product * this.a3) / this.ONE_20;\n }\n if (x >= this.x4) {\n x -= this.x4;\n product = (product * this.a4) / this.ONE_20;\n }\n if (x >= this.x5) {\n x -= this.x5;\n product = (product * this.a5) / this.ONE_20;\n }\n if (x >= this.x6) {\n x -= this.x6;\n product = (product * this.a6) / this.ONE_20;\n }\n if (x >= this.x7) {\n x -= this.x7;\n product = (product * this.a7) / this.ONE_20;\n }\n if (x >= this.x8) {\n x -= this.x8;\n product = (product * this.a8) / this.ONE_20;\n }\n if (x >= this.x9) {\n x -= this.x9;\n product = (product * this.a9) / this.ONE_20;\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n let seriesSum = this.ONE_20; // The initial one in the sum, with 20 decimal places.\n let term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by this.ONE_20, but dividing by the non-fixed point n values does not.\n\n term = (term * x) / this.ONE_20 / BigInt(2);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(3);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(4);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(5);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(6);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(7);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(8);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(9);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(10);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(11);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(12);\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by this.ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n return (((product * seriesSum) / this.ONE_20) * firstAN) / BigInt(100);\n }\n\n static _ln_36(x: bigint): bigint {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n x *= this.ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n const z = ((x - this.ONE_36) * this.ONE_36) / (x + this.ONE_36);\n const z_squared = (z * z) / this.ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n let num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n let seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(3);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(5);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(7);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(9);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(11);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(13);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(15);\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * BigInt(2);\n }\n\n /**\n * @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n */\n static _ln(a: bigint): bigint {\n if (a < this.ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, and this if statement will not be entered in the recursive call.\n // Fixed point division requires multiplying by this.ONE_18.\n return BigInt(-1) * this._ln((this.ONE_18 * this.ONE_18) / a);\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // this.ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n let sum = BZERO;\n if (a >= this.a0 * this.ONE_18) {\n a /= this.a0; // Integer, not fixed point division\n sum += this.x0;\n }\n\n if (a >= this.a1 * this.ONE_18) {\n a /= this.a1; // Integer, not fixed point division\n sum += this.x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= BigInt(100);\n a *= BigInt(100);\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= this.a2) {\n a = (a * this.ONE_20) / this.a2;\n sum += this.x2;\n }\n\n if (a >= this.a3) {\n a = (a * this.ONE_20) / this.a3;\n sum += this.x3;\n }\n\n if (a >= this.a4) {\n a = (a * this.ONE_20) / this.a4;\n sum += this.x4;\n }\n\n if (a >= this.a5) {\n a = (a * this.ONE_20) / this.a5;\n sum += this.x5;\n }\n\n if (a >= this.a6) {\n a = (a * this.ONE_20) / this.a6;\n sum += this.x6;\n }\n\n if (a >= this.a7) {\n a = (a * this.ONE_20) / this.a7;\n sum += this.x7;\n }\n\n if (a >= this.a8) {\n a = (a * this.ONE_20) / this.a8;\n sum += this.x8;\n }\n\n if (a >= this.a9) {\n a = (a * this.ONE_20) / this.a9;\n sum += this.x9;\n }\n\n if (a >= this.a10) {\n a = (a * this.ONE_20) / this.a10;\n sum += this.x10;\n }\n\n if (a >= this.a11) {\n a = (a * this.ONE_20) / this.a11;\n sum += this.x11;\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n const z = ((a - this.ONE_20) * this.ONE_20) / (a + this.ONE_20);\n const z_squared = (z * z) / this.ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n let num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n let seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(3);\n\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(5);\n\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(7);\n\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(9);\n\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(11);\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= BigInt(2);\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n return (sum + seriesSum) / BigInt(100);\n }\n}\n","import { parseFixed } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport { Pool } from '../../types';\nimport {\n SolidityMaths,\n _computeScalingFactor,\n _upscaleArray,\n} from '@/lib/utils/solidityMaths';\nimport { AssetHelpers } from '@/lib/utils/assetHelpers';\n\nexport const AMP_PRECISION = 3; // number of decimals -> precision 1000\n\ntype ParsedPoolInfo = {\n bptIndex: number;\n higherBalanceTokenIndex: number;\n ampWithPrecision: bigint;\n balancesEvm: bigint[];\n balancesEvmWithoutBpt: bigint[];\n priceRates: bigint[];\n priceRatesWithoutBpt: bigint[];\n swapFeeEvm: bigint;\n poolTokens: string[];\n poolTokensWithoutBpt: string[];\n weights: bigint[];\n scalingFactors: bigint[];\n scalingFactorsWithoutBpt: bigint[];\n scalingFactorsRaw: bigint[];\n scalingFactorsRawWithoutBpt: bigint[];\n upScaledBalances: bigint[];\n upScaledBalancesWithoutBpt: bigint[];\n totalSharesEvm: bigint;\n};\n\n/**\n * Parse pool info into EVM amounts. Sorts by token order if wrappedNativeAsset param passed.\n * @param pool Pool object to be parsed\n * @param wrappedNativeAsset e.g. wETH address\n * @param unwrapNativeAsset if true, changes wETH address to ETH address\n * @returns parsed pool info\n */\nexport const parsePoolInfo = (\n pool: Pool,\n wrappedNativeAsset?: string,\n unwrapNativeAsset?: boolean\n): ParsedPoolInfo => {\n let poolTokens = unwrapNativeAsset\n ? pool.tokens.map((token) =>\n token.address === wrappedNativeAsset ? AddressZero : token.address\n )\n : pool.tokens.map((token) => token.address);\n let decimals = pool.tokens.map((token) => {\n return token.decimals ?? 18;\n });\n let balancesEvm = pool.tokens.map((token) =>\n parseFixed(token.balance, token.decimals).toBigInt()\n );\n let weights = pool.tokens.map((token) => {\n return parseFixed(token.weight ?? '1', 18).toBigInt();\n });\n let priceRates = pool.tokens.map((token) => {\n return parseFixed(token.priceRate ?? '1', 18).toBigInt();\n });\n\n let scalingFactorsRaw = decimals.map((d) => _computeScalingFactor(BigInt(d)));\n let scalingFactors = scalingFactorsRaw.map((sf, i) =>\n SolidityMaths.mulDownFixed(sf, priceRates[i])\n );\n // This assumes token.balance is in human scale (e.g. from SG)\n let upScaledBalances = _upscaleArray(balancesEvm, scalingFactors);\n if (wrappedNativeAsset) {\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n [\n poolTokens,\n decimals,\n scalingFactors,\n scalingFactorsRaw,\n balancesEvm,\n upScaledBalances,\n weights,\n priceRates,\n ] = assetHelpers.sortTokens(\n poolTokens,\n decimals,\n scalingFactors,\n scalingFactorsRaw,\n balancesEvm,\n upScaledBalances,\n weights,\n priceRates\n ) as [\n string[],\n number[],\n bigint[],\n bigint[],\n bigint[],\n bigint[],\n bigint[],\n bigint[]\n ];\n }\n\n // Solidity maths uses precison method for amp that must be replicated\n const ampWithPrecision = parseFixed(\n pool.amp ?? '1',\n AMP_PRECISION\n ).toBigInt();\n\n const higherBalanceTokenIndex = upScaledBalances.indexOf(\n SolidityMaths.max(upScaledBalances)\n );\n\n const scalingFactorsWithoutBpt = [...scalingFactors];\n const scalingFactorsRawWithoutBpt = [...scalingFactorsRaw];\n const poolTokensWithoutBpt = [...poolTokens];\n const balancesEvmWithoutBpt = [...balancesEvm];\n const priceRatesWithoutBpt = [...priceRates];\n const upScaledBalancesWithoutBpt = [...upScaledBalances];\n\n const bptIndex = poolTokens.indexOf(pool.address);\n if (bptIndex !== -1) {\n scalingFactorsWithoutBpt.splice(bptIndex, 1);\n scalingFactorsRawWithoutBpt.splice(bptIndex, 1);\n poolTokensWithoutBpt.splice(bptIndex, 1);\n balancesEvmWithoutBpt.splice(bptIndex, 1);\n priceRatesWithoutBpt.splice(bptIndex, 1);\n upScaledBalancesWithoutBpt.splice(bptIndex, 1);\n }\n\n return {\n bptIndex,\n higherBalanceTokenIndex,\n ampWithPrecision,\n balancesEvm,\n balancesEvmWithoutBpt,\n priceRates,\n priceRatesWithoutBpt,\n swapFeeEvm: parseFixed(pool.swapFee, 18).toBigInt(),\n poolTokens,\n poolTokensWithoutBpt,\n weights,\n scalingFactors,\n scalingFactorsWithoutBpt,\n scalingFactorsRaw,\n scalingFactorsRawWithoutBpt,\n upScaledBalances,\n upScaledBalancesWithoutBpt,\n totalSharesEvm: parseFixed(pool.totalShares || '0', 18).toBigInt(),\n };\n};\n","import { Network } from '@/lib/constants/network';\n\n/**\n * TYPES\n */\ntype CommonTokens = {\n nativeAsset: string;\n wNativeAsset: string;\n WETH: string;\n BAL: string;\n bbaUSD?: string;\n bbaUSDv2?: string;\n};\n\ntype TokenConstants = {\n Popular: {\n Symbols: string[];\n };\n Addresses: CommonTokens;\n PriceChainMap?: Record;\n};\n\n/**\n * CONSTANTS\n */\nexport const DEFAULT_TOKEN_DECIMALS = 18;\n\nexport const TOKENS_MAINNET: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'AAVE', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n WETH: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n BAL: '0xba100000625a3754423978a60c9317c58a424e3d',\n bbaUSD: '0x7B50775383d3D6f0215A8F290f2C9e2eEBBEceb2',\n bbaUSDv2: '0xA13a9247ea42D743238089903570127DdA72fE44',\n },\n};\n\nexport const TOKENS_POLYGON: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'AAVE', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270',\n WETH: '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619',\n BAL: '0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3',\n },\n};\n\nexport const TOKENS_ARBITRUM: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'AAVE', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n WETH: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n BAL: '0x040d1EdC9569d4Bab2D15287Dc5A4F10F56a56B8',\n },\n};\n\nexport const TOKENS_GNOSIS: TokenConstants = {\n Popular: {\n Symbols: ['xDAI', 'WXDAI', 'WETH', 'BAL'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0xe91d153e0b41518a2ce8dd3d7944fa863463a97d',\n WETH: '0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1',\n BAL: '0x7eF541E2a22058048904fE5744f9c7E4C57AF717',\n },\n};\nexport const TOKENS_GOERLI: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'USDT', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1',\n WETH: '0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1',\n BAL: '0xfA8449189744799aD2AcE7e0EBAC8BB7575eff47',\n bbaUSD: '0x13ACD41C585d7EbB4a9460f7C8f50BE60DC080Cd',\n },\n PriceChainMap: {\n /**\n * Addresses must be lower case and map from goerli to mainnet, e.g\n * [goerli address]: mainnet address\n */\n '0xdfcea9088c8a88a76ff74892c1457c17dfeef9c1':\n '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n '0x37f03a12241e9fd3658ad6777d289c3fb8512bc9':\n '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599',\n '0xfa8449189744799ad2ace7e0ebac8bb7575eff47':\n '0xba100000625a3754423978a60c9317c58a424e3d',\n '0xe0c9275e44ea80ef17579d33c55136b7da269aeb':\n '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n '0x8c9e6c40d3402480ace624730524facc5482798c':\n '0x6b175474e89094c44da98b954eedeac495271d0f',\n '0x1f1f156e0317167c11aa412e3d1435ea29dc3cce':\n '0xdac17f958d2ee523a2206206994597c13d831ec7',\n '0x4cb1892fddf14f772b2e39e299f44b2e5da90d04':\n '0x3ed3b47dd13ec9a98b44e6204a523e766b225811',\n '0x811151066392fd641fe74a9b55a712670572d161':\n '0xbcca60bb61934080951369a648fb03df4f96263c',\n '0x89534a24450081aa267c79b07411e9617d984052':\n '0x028171bca77440897b824ca71d1c56cac55b68a3',\n '0x829f35cebbcd47d3c120793c12f7a232c903138b':\n '0x956f47f50a910163d8bf957cf5846d573e7f87ca',\n '0xff386a3d08f80ac38c77930d173fa56c6286dc8b':\n '0x6810e776880c02933d47db1b9fc05908e5386b96',\n },\n};\n\nexport const TOKENS_GENERIC: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'AAVE', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n WETH: '0x0000000000000000000000000000000000000000',\n BAL: '0x0000000000000000000000000000000000000000',\n },\n};\n\nexport const TOKENS_MAP = {\n [Network.GOERLI]: TOKENS_GOERLI,\n [Network.MAINNET]: TOKENS_MAINNET,\n [Network.POLYGON]: TOKENS_POLYGON,\n [Network.ARBITRUM]: TOKENS_ARBITRUM,\n [Network.GNOSIS]: TOKENS_GNOSIS,\n};\n\nexport function TOKENS(networkId: Network): TokenConstants {\n const id = networkId as keyof typeof TOKENS_MAP;\n return TOKENS_MAP[id] ? TOKENS_MAP[id] : TOKENS_GENERIC;\n}\n","\"use strict\";\nlet _permanentCensorErrors = false;\nlet _censorErrors = false;\nconst LogLevels = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nlet _logLevel = LogLevels[\"default\"];\nimport { version } from \"./_version\";\nlet _globalLogger = null;\nfunction _checkNormalize() {\n try {\n const missing = [];\n // Make sure all forms of normalization are supported\n [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].forEach((form) => {\n try {\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad normalize\");\n }\n ;\n }\n catch (error) {\n missing.push(form);\n }\n });\n if (missing.length) {\n throw new Error(\"missing \" + missing.join(\", \"));\n }\n if (String.fromCharCode(0xe9).normalize(\"NFD\") !== String.fromCharCode(0x65, 0x0301)) {\n throw new Error(\"broken implementation\");\n }\n }\n catch (error) {\n return error.message;\n }\n return null;\n}\nconst _normalizeError = _checkNormalize();\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[\"DEBUG\"] = \"DEBUG\";\n LogLevel[\"INFO\"] = \"INFO\";\n LogLevel[\"WARNING\"] = \"WARNING\";\n LogLevel[\"ERROR\"] = \"ERROR\";\n LogLevel[\"OFF\"] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\nexport var ErrorCode;\n(function (ErrorCode) {\n ///////////////////\n // Generic Errors\n // Unknown Error\n ErrorCode[\"UNKNOWN_ERROR\"] = \"UNKNOWN_ERROR\";\n // Not Implemented\n ErrorCode[\"NOT_IMPLEMENTED\"] = \"NOT_IMPLEMENTED\";\n // Unsupported Operation\n // - operation\n ErrorCode[\"UNSUPPORTED_OPERATION\"] = \"UNSUPPORTED_OPERATION\";\n // Network Error (i.e. Ethereum Network, such as an invalid chain ID)\n // - event (\"noNetwork\" is not re-thrown in provider.ready; otherwise thrown)\n ErrorCode[\"NETWORK_ERROR\"] = \"NETWORK_ERROR\";\n // Some sort of bad response from the server\n ErrorCode[\"SERVER_ERROR\"] = \"SERVER_ERROR\";\n // Timeout\n ErrorCode[\"TIMEOUT\"] = \"TIMEOUT\";\n ///////////////////\n // Operational Errors\n // Buffer Overrun\n ErrorCode[\"BUFFER_OVERRUN\"] = \"BUFFER_OVERRUN\";\n // Numeric Fault\n // - operation: the operation being executed\n // - fault: the reason this faulted\n ErrorCode[\"NUMERIC_FAULT\"] = \"NUMERIC_FAULT\";\n ///////////////////\n // Argument Errors\n // Missing new operator to an object\n // - name: The name of the class\n ErrorCode[\"MISSING_NEW\"] = \"MISSING_NEW\";\n // Invalid argument (e.g. value is incompatible with type) to a function:\n // - argument: The argument name that was invalid\n // - value: The value of the argument\n ErrorCode[\"INVALID_ARGUMENT\"] = \"INVALID_ARGUMENT\";\n // Missing argument to a function:\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n ErrorCode[\"MISSING_ARGUMENT\"] = \"MISSING_ARGUMENT\";\n // Too many arguments\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n ErrorCode[\"UNEXPECTED_ARGUMENT\"] = \"UNEXPECTED_ARGUMENT\";\n ///////////////////\n // Blockchain Errors\n // Call exception\n // - transaction: the transaction\n // - address?: the contract address\n // - args?: The arguments passed into the function\n // - method?: The Solidity method signature\n // - errorSignature?: The EIP848 error signature\n // - errorArgs?: The EIP848 error parameters\n // - reason: The reason (only for EIP848 \"Error(string)\")\n ErrorCode[\"CALL_EXCEPTION\"] = \"CALL_EXCEPTION\";\n // Insufficient funds (< value + gasLimit * gasPrice)\n // - transaction: the transaction attempted\n ErrorCode[\"INSUFFICIENT_FUNDS\"] = \"INSUFFICIENT_FUNDS\";\n // Nonce has already been used\n // - transaction: the transaction attempted\n ErrorCode[\"NONCE_EXPIRED\"] = \"NONCE_EXPIRED\";\n // The replacement fee for the transaction is too low\n // - transaction: the transaction attempted\n ErrorCode[\"REPLACEMENT_UNDERPRICED\"] = \"REPLACEMENT_UNDERPRICED\";\n // The gas limit could not be estimated\n // - transaction: the transaction passed to estimateGas\n ErrorCode[\"UNPREDICTABLE_GAS_LIMIT\"] = \"UNPREDICTABLE_GAS_LIMIT\";\n // The transaction was replaced by one with a higher gas price\n // - reason: \"cancelled\", \"replaced\" or \"repriced\"\n // - cancelled: true if reason == \"cancelled\" or reason == \"replaced\")\n // - hash: original transaction hash\n // - replacement: the full TransactionsResponse for the replacement\n // - receipt: the receipt of the replacement\n ErrorCode[\"TRANSACTION_REPLACED\"] = \"TRANSACTION_REPLACED\";\n ///////////////////\n // Interaction Errors\n // The user rejected the action, such as signing a message or sending\n // a transaction\n ErrorCode[\"ACTION_REJECTED\"] = \"ACTION_REJECTED\";\n})(ErrorCode || (ErrorCode = {}));\n;\nconst HEX = \"0123456789abcdef\";\nexport class Logger {\n constructor(version) {\n Object.defineProperty(this, \"version\", {\n enumerable: true,\n value: version,\n writable: false\n });\n }\n _log(logLevel, args) {\n const level = logLevel.toLowerCase();\n if (LogLevels[level] == null) {\n this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n }\n if (_logLevel > LogLevels[level]) {\n return;\n }\n console.log.apply(console, args);\n }\n debug(...args) {\n this._log(Logger.levels.DEBUG, args);\n }\n info(...args) {\n this._log(Logger.levels.INFO, args);\n }\n warn(...args) {\n this._log(Logger.levels.WARNING, args);\n }\n makeError(message, code, params) {\n // Errors are being censored\n if (_censorErrors) {\n return this.makeError(\"censored error\", code, {});\n }\n if (!code) {\n code = Logger.errors.UNKNOWN_ERROR;\n }\n if (!params) {\n params = {};\n }\n const messageDetails = [];\n Object.keys(params).forEach((key) => {\n const value = params[key];\n try {\n if (value instanceof Uint8Array) {\n let hex = \"\";\n for (let i = 0; i < value.length; i++) {\n hex += HEX[value[i] >> 4];\n hex += HEX[value[i] & 0x0f];\n }\n messageDetails.push(key + \"=Uint8Array(0x\" + hex + \")\");\n }\n else {\n messageDetails.push(key + \"=\" + JSON.stringify(value));\n }\n }\n catch (error) {\n messageDetails.push(key + \"=\" + JSON.stringify(params[key].toString()));\n }\n });\n messageDetails.push(`code=${code}`);\n messageDetails.push(`version=${this.version}`);\n const reason = message;\n let url = \"\";\n switch (code) {\n case ErrorCode.NUMERIC_FAULT: {\n url = \"NUMERIC_FAULT\";\n const fault = message;\n switch (fault) {\n case \"overflow\":\n case \"underflow\":\n case \"division-by-zero\":\n url += \"-\" + fault;\n break;\n case \"negative-power\":\n case \"negative-width\":\n url += \"-unsupported\";\n break;\n case \"unbound-bitwise-result\":\n url += \"-unbound-result\";\n break;\n }\n break;\n }\n case ErrorCode.CALL_EXCEPTION:\n case ErrorCode.INSUFFICIENT_FUNDS:\n case ErrorCode.MISSING_NEW:\n case ErrorCode.NONCE_EXPIRED:\n case ErrorCode.REPLACEMENT_UNDERPRICED:\n case ErrorCode.TRANSACTION_REPLACED:\n case ErrorCode.UNPREDICTABLE_GAS_LIMIT:\n url = code;\n break;\n }\n if (url) {\n message += \" [ See: https:/\\/links.ethers.org/v5-errors-\" + url + \" ]\";\n }\n if (messageDetails.length) {\n message += \" (\" + messageDetails.join(\", \") + \")\";\n }\n // @TODO: Any??\n const error = new Error(message);\n error.reason = reason;\n error.code = code;\n Object.keys(params).forEach(function (key) {\n error[key] = params[key];\n });\n return error;\n }\n throwError(message, code, params) {\n throw this.makeError(message, code, params);\n }\n throwArgumentError(message, name, value) {\n return this.throwError(message, Logger.errors.INVALID_ARGUMENT, {\n argument: name,\n value: value\n });\n }\n assert(condition, message, code, params) {\n if (!!condition) {\n return;\n }\n this.throwError(message, code, params);\n }\n assertArgument(condition, message, name, value) {\n if (!!condition) {\n return;\n }\n this.throwArgumentError(message, name, value);\n }\n checkNormalize(message) {\n if (message == null) {\n message = \"platform missing String.prototype.normalize\";\n }\n if (_normalizeError) {\n this.throwError(\"platform missing String.prototype.normalize\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"String.prototype.normalize\", form: _normalizeError\n });\n }\n }\n checkSafeUint53(value, message) {\n if (typeof (value) !== \"number\") {\n return;\n }\n if (message == null) {\n message = \"value not safe\";\n }\n if (value < 0 || value >= 0x1fffffffffffff) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"out-of-safe-range\",\n value: value\n });\n }\n if (value % 1) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"non-integer\",\n value: value\n });\n }\n }\n checkArgumentCount(count, expectedCount, message) {\n if (message) {\n message = \": \" + message;\n }\n else {\n message = \"\";\n }\n if (count < expectedCount) {\n this.throwError(\"missing argument\" + message, Logger.errors.MISSING_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n if (count > expectedCount) {\n this.throwError(\"too many arguments\" + message, Logger.errors.UNEXPECTED_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n }\n checkNew(target, kind) {\n if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n checkAbstract(target, kind) {\n if (target === kind) {\n this.throwError(\"cannot instantiate abstract class \" + JSON.stringify(kind.name) + \" directly; use a sub-class\", Logger.errors.UNSUPPORTED_OPERATION, { name: target.name, operation: \"new\" });\n }\n else if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n static globalLogger() {\n if (!_globalLogger) {\n _globalLogger = new Logger(version);\n }\n return _globalLogger;\n }\n static setCensorship(censorship, permanent) {\n if (!censorship && permanent) {\n this.globalLogger().throwError(\"cannot permanently disable censorship\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n if (_permanentCensorErrors) {\n if (!censorship) {\n return;\n }\n this.globalLogger().throwError(\"error censorship permanent\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n _censorErrors = !!censorship;\n _permanentCensorErrors = !!permanent;\n }\n static setLogLevel(logLevel) {\n const level = LogLevels[logLevel.toLowerCase()];\n if (level == null) {\n Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n return;\n }\n _logLevel = level;\n }\n static from(version) {\n return new Logger(version);\n }\n}\nLogger.errors = ErrorCode;\nLogger.levels = LogLevel;\n//# sourceMappingURL=index.js.map","export const version = \"logger/5.7.0\";\n//# sourceMappingURL=_version.js.map","export const version = \"units/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { formatFixed, parseFixed } from \"@ethersproject/bignumber\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nconst names = [\n \"wei\",\n \"kwei\",\n \"mwei\",\n \"gwei\",\n \"szabo\",\n \"finney\",\n \"ether\",\n];\n// Some environments have issues with RegEx that contain back-tracking, so we cannot\n// use them.\nexport function commify(value) {\n const comps = String(value).split(\".\");\n if (comps.length > 2 || !comps[0].match(/^-?[0-9]*$/) || (comps[1] && !comps[1].match(/^[0-9]*$/)) || value === \".\" || value === \"-.\") {\n logger.throwArgumentError(\"invalid value\", \"value\", value);\n }\n // Make sure we have at least one whole digit (0 if none)\n let whole = comps[0];\n let negative = \"\";\n if (whole.substring(0, 1) === \"-\") {\n negative = \"-\";\n whole = whole.substring(1);\n }\n // Make sure we have at least 1 whole digit with no leading zeros\n while (whole.substring(0, 1) === \"0\") {\n whole = whole.substring(1);\n }\n if (whole === \"\") {\n whole = \"0\";\n }\n let suffix = \"\";\n if (comps.length === 2) {\n suffix = \".\" + (comps[1] || \"0\");\n }\n while (suffix.length > 2 && suffix[suffix.length - 1] === \"0\") {\n suffix = suffix.substring(0, suffix.length - 1);\n }\n const formatted = [];\n while (whole.length) {\n if (whole.length <= 3) {\n formatted.unshift(whole);\n break;\n }\n else {\n const index = whole.length - 3;\n formatted.unshift(whole.substring(index));\n whole = whole.substring(0, index);\n }\n }\n return negative + formatted.join(\",\") + suffix;\n}\nexport function formatUnits(value, unitName) {\n if (typeof (unitName) === \"string\") {\n const index = names.indexOf(unitName);\n if (index !== -1) {\n unitName = 3 * index;\n }\n }\n return formatFixed(value, (unitName != null) ? unitName : 18);\n}\nexport function parseUnits(value, unitName) {\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(\"value must be a string\", \"value\", value);\n }\n if (typeof (unitName) === \"string\") {\n const index = names.indexOf(unitName);\n if (index !== -1) {\n unitName = 3 * index;\n }\n }\n return parseFixed(value, (unitName != null) ? unitName : 18);\n}\nexport function formatEther(wei) {\n return formatUnits(wei, 18);\n}\nexport function parseEther(ether) {\n return parseUnits(ether, 18);\n}\n//# sourceMappingURL=index.js.map","import { Interface } from '@ethersproject/abi';\nimport { formatUnits } from '@ethersproject/units';\nimport { Multicall } from '@/contracts';\nimport { Network } from '@/types';\n\nexport const yieldTokens = {\n [Network.MAINNET]: {\n waUSDT: '0xf8fd466f12e236f4c96f7cce6c79eadb819abf58',\n waUSDC: '0xd093fa4fb80d09bb30817fdcd442d4d02ed3e5de',\n waDAI: '0x02d60b84491589974263d922d9cc7a3152618ef6',\n },\n [Network.POLYGON]: {\n wamDAI: '0xee029120c72b0607344f35b17cdd90025e647b00',\n wamUSDC: '0x221836a597948dce8f3568e044ff123108acc42a',\n wamUSDT: '0x19c60a251e525fa88cd6f3768416a8024e98fc19',\n },\n};\n\nexport const wrappedTokensMap = {\n [Network.MAINNET]: {\n // USDT\n [yieldTokens[Network.MAINNET].waUSDT]: {\n aToken: '0x3ed3b47dd13ec9a98b44e6204a523e766b225811',\n underlying: '0xdac17f958d2ee523a2206206994597c13d831ec7',\n },\n // USDC\n [yieldTokens[Network.MAINNET].waUSDC]: {\n aToken: '0xbcca60bb61934080951369a648fb03df4f96263c',\n underlying: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n },\n // DAI\n [yieldTokens[Network.MAINNET].waDAI]: {\n aToken: '0x028171bca77440897b824ca71d1c56cac55b68a3',\n underlying: '0x6b175474e89094c44da98b954eedeac495271d0f',\n },\n },\n [Network.POLYGON]: {\n // USDT\n [yieldTokens[Network.POLYGON].wamUSDT]: {\n aToken: '0x60d55f02a771d515e077c9c2403a1ef324885cec',\n underlying: '0xc2132d05d31c914a87c6611c10748aeb04b58e8f',\n },\n // USDC\n [yieldTokens[Network.POLYGON].wamUSDC]: {\n aToken: '0x1a13f4ca1d028320a707d99520abfefca3998b7f',\n underlying: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174',\n },\n // DAI\n [yieldTokens[Network.POLYGON].wamDAI]: {\n aToken: '0x27f8d03b3a2196956ed754badc28d73be8830a6e',\n underlying: '0x8f3cf7ad23cd3cadbd9735aff958023239c6a063',\n },\n },\n};\n\nconst wrappedATokenInterface = new Interface([\n 'function rate() view returns (uint256)',\n]);\n\nexport interface IAaveRates {\n getRate: (address: string) => Promise;\n}\n\nexport class AaveRates implements IAaveRates {\n rates?: Promise<{ [wrappedATokenAddress: string]: number }>;\n\n constructor(private multicall: Multicall, private network: Network) {}\n\n private async fetch(\n network: Network.MAINNET | Network.POLYGON\n ): Promise<{ [wrappedATokenAddress: string]: number }> {\n console.time('Fetching aave rates');\n const addresses = Object.values(yieldTokens[network]);\n const payload = addresses.map((wrappedATokenAddress) => ({\n target: wrappedATokenAddress,\n callData: wrappedATokenInterface.encodeFunctionData('rate', []),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const rates = addresses.reduce((p: { [key: string]: number }, a, i) => {\n p[a] ||= res[i] == '0x' ? 0 : parseFloat(formatUnits(res[i], 27));\n return p;\n }, {});\n console.timeEnd('Fetching aave rates');\n\n return rates;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async getRate(wrappedAToken: string): Promise {\n //To prevent bricked linear pools from effecting this call\n /*if (this.network != Network.MAINNET && this.network != Network.POLYGON) {\n return 1;\n }\n if (!Object.values(yieldTokens[this.network]).includes(wrappedAToken)) {\n return 1;\n }\n if (!this.rates) {\n this.rates = this.fetch(this.network);\n }\n\n return (await this.rates)[wrappedAToken];*/\n\n return 1;\n }\n}\n","import { Token, TokenPrices, Network } from '@/types';\nimport { TOKENS } from '@/lib/constants/tokens';\nimport { wrappedTokensMap as aaveWrappedMap } from '@/modules/data/token-prices/aave-rates';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\n\nexport function tokensToTokenPrices(tokens: Token[]): TokenPrices {\n const tokenPrices: TokenPrices = {};\n tokens.forEach((token) => {\n if (token.price) {\n tokenPrices[token.address] = token.price;\n }\n });\n\n return tokenPrices;\n}\n\nexport function tokenAddressForPricing(\n address: string,\n chainId: Network\n): string {\n let a = address.toLowerCase();\n a = addressMapIn(a, chainId);\n a = unwrapToken(a, chainId);\n\n return a;\n}\n\n/**\n * Maps testnet tokens, eg: on Göreli to a mainnet one.\n * Used to get the pricing information on networks not supported by a price feed.\n *\n * @param address Address on a testnet network\n */\nexport const addressMapIn = (address: string, chainId: Network): string => {\n const addressMap = TOKENS(chainId).PriceChainMap;\n return (addressMap && addressMap[address.toLowerCase()]) || address;\n};\n\n/**\n * Finds an underlying token address for a wrapped one\n *\n * @param wrappedAddress\n * @param chainId\n * @returns underlying token address\n */\nexport const unwrapToken = (\n wrappedAddress: string,\n chainId: Network\n): string => {\n const lowercase = wrappedAddress.toLocaleLowerCase();\n\n const aaveChain = chainId as keyof typeof aaveWrappedMap;\n if (\n aaveWrappedMap[aaveChain] != undefined &&\n aaveWrappedMap[aaveChain] != null\n ) {\n // Double if to avoid skipping just to at after compile: Object.keys()?.includes\n if (Object.keys(aaveWrappedMap[aaveChain]).includes(lowercase)) {\n return aaveWrappedMap[aaveChain][\n lowercase as keyof (typeof aaveWrappedMap)[typeof aaveChain]\n ].aToken;\n } else {\n return lowercase;\n }\n } else {\n return lowercase;\n }\n};\n\n// filter native asset (e.g. ETH) amounts\nexport const getEthValue = (tokens: string[], amounts: string[]): BigNumber => {\n const values = amounts.filter((amount, i) => tokens[i] === AddressZero);\n return values[0] ? BigNumber.from(values[0]) : BigNumber.from(0);\n};\n","/* eslint-disable @typescript-eslint/no-empty-function */\n\n/**\n * Debouncer for different attributes requested over time, which need to be aggregated into a single resolving call\n *\n * Choosing deferred promise since we have setTimeout that returns a promise\n * Some reference for history buffs: https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns\n */\n\ninterface Promised {\n promise: Promise;\n resolve: (value: T) => void;\n reject: (reason: unknown) => void;\n}\n\nconst makePromise = (): Promised => {\n let resolve: (value: T) => void = () => {};\n let reject: (reason: unknown) => void = () => {};\n const promise = new Promise((res, rej) => {\n [resolve, reject] = [res, rej];\n });\n return { promise, reject, resolve };\n};\n\n/**\n * Aggregates attributes and exectutes a debounced call\n *\n * @param fn Function to debounce\n * @param wait Debouncing waiting time [ms]\n * @param limit Maximum number of attributes to execute in one promise\n * @returns Debouncer instance\n */\nexport class Debouncer {\n requestSets = []>[]; // new Set(); // collection of requested attributes\n promisedCalls: Promised[] = []; // When requesting a price we return a deferred promise\n promisedCount = 0; // New request coming when setTimeout is executing will make a new promise\n timeout?: ReturnType;\n debounceCancel = (): void => {}; // Allow to cancel mid-flight requests\n\n constructor(\n private fn: (attrs: A[]) => Promise,\n private wait = 200,\n private limit = 100\n ) {}\n\n fetch(attr?: A): Promise {\n this.requestSets[this.promisedCount] ||= new Set();\n\n // Accumulate attributes for debounced execution\n if (attr) {\n this.requestSets[this.promisedCount].add(attr);\n }\n\n // Execute immediately when limit is reached\n if (this.requestSets[this.promisedCount].size >= this.limit) {\n return this.execute(0);\n }\n\n // Return a running promise\n if (this.promisedCalls[this.promisedCount]) {\n return this.promisedCalls[this.promisedCount].promise;\n }\n\n // If no promise is running, start a new one\n return this.execute(this.wait);\n }\n\n execute(timeout = 0): Promise {\n // if no promise is running, start a new one\n if (!this.promisedCalls[this.promisedCount]) {\n this.promisedCalls[this.promisedCount] = makePromise();\n }\n\n const { promise, resolve, reject } = this.promisedCalls[this.promisedCount];\n\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n\n const call = () => {\n const requestAttrs = [...this.requestSets[this.promisedCount]];\n this.promisedCount++;\n this.fn(requestAttrs)\n .then((results) => {\n resolve(results);\n this.debounceCancel = () => {};\n })\n .catch((reason) => {\n if (\n reason.response &&\n reason.response.data &&\n reason.response.data.error\n ) {\n reason = reason.response.data.error;\n }\n reject(reason);\n });\n };\n\n if (timeout > 0) {\n this.timeout = setTimeout(call.bind(this), timeout);\n } else {\n call();\n }\n\n this.debounceCancel = () => {\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n reject('Cancelled');\n delete this.promisedCalls[this.promisedCount];\n };\n\n return promise;\n }\n}\n","import {\n BigNumber,\n BigNumberish,\n parseFixed as _parseFixed,\n formatFixed as _formatFixed,\n} from '@ethersproject/bignumber';\n\n/**\n * Scales a number up by 10 ^ decimals. Also ensures the returned value is an\n * integer, any additional decimals post scaling are removed.\n * @param value The value to be scaled up\n * @param decimals The total decimal places / order of magnitude to scale by\n * @returns The scaled value\n */\nexport function parseFixed(value: string, decimals?: BigNumberish): BigNumber {\n const valueWithTrimmedDecimals = new RegExp(`[0-9]+\\\\.?[0-9]{0,${decimals}}`);\n const result = value.match(valueWithTrimmedDecimals);\n let parsedValue = value;\n if (result) {\n parsedValue = result[0];\n }\n\n return _parseFixed(parsedValue, decimals);\n}\n\n/**\n * Scales a number down by 10 ^ decimals. Also ensures the returned value doesn't\n * have a .0 at the end, so integers are returned as integers.\n * @param value The value to be scaled down\n * @param decimals The total decimal places / order of magnitude to scale down by\n * @returns The scaled value\n */\nexport function formatFixed(\n value: BigNumberish,\n decimals: BigNumberish\n): string {\n const ethersFormat = _formatFixed(value, decimals);\n return ethersFormat.replace(/(.0$)/, '');\n}\n\nexport function parseToBigInt18(value: string): bigint {\n return parseFixed(value, 18).toBigInt();\n}\n\nexport function formatFromBigInt18(value: bigint): string {\n return _formatFixed(BigNumber.from(value), 18);\n}\n\n/**\n * Like parseEther but for numbers. Converts floating point to BigNumber using 18 decimals\n */\nexport const bn = (value: number): BigNumber => _parseFixed(`${value}`, 18);\n","import { BigNumber } from '@ethersproject/bignumber';\n\nconst bpsPerOne = BigNumber.from('10000'); // number of basis points in 100%\n\n/**\n * Multiplies input by slippage amount\n *\n * @param amount Input amount (not parsed)\n * @param slippage Slippage value in bps - i.e. 50 = 0.5%\n * @returns Result delta from multiplying amount and slippage\n */\nexport const mulSlippage = (\n amount: BigNumber,\n slippage: BigNumber\n): BigNumber => {\n const delta = amount.mul(slippage).div(bpsPerOne);\n return delta;\n};\n\n/**\n * Reduce input amount by slippage factor\n *\n * @param amount Input in EVM amounts\n * @param slippage Slippage value in bps - i.e. 50 = 0.5%\n * @returns Result amount subtracting slippage\n */\nexport const subSlippage = (\n amount: BigNumber,\n slippage: BigNumber\n): BigNumber => {\n const delta = mulSlippage(amount, slippage);\n return amount.sub(delta);\n};\n\n/**\n * Increase input amount by slippage factor\n *\n * @param amount Input in EVM amounts\n * @param slippage Slippage value in bps - i.e. 50 = 0.5%\n * @returns Result amount adding slippage\n */\nexport const addSlippage = (\n amount: BigNumber,\n slippage: BigNumber\n): BigNumber => {\n const delta = mulSlippage(amount, slippage);\n return amount.add(delta);\n};\n","import { Address, PoolType } from '@/types';\nimport { getAddress } from '@ethersproject/address';\nimport { Log, TransactionReceipt } from '@ethersproject/providers';\nimport { Interface, LogDescription } from '@ethersproject/abi';\nimport { Logger } from '@/lib/utils/logger';\n\nexport * from './assetHelpers';\nexport * from './errors';\nexport * from './permit';\nexport * from './poolHelper';\nexport * from './signatures';\nexport * from './tokens';\nexport * from './debouncer';\nexport * from './math';\nexport * from './slippageHelper';\n\nexport const isSameAddress = (address1: string, address2: string): boolean =>\n getAddress(address1) === getAddress(address2);\n\nexport function insert(arr: T[], index: number, newItem: T): T[] {\n if (index < 0 || index > arr.length) {\n return arr;\n }\n return [\n // part of the array before the specified index\n ...arr.slice(0, index),\n // inserted item\n newItem,\n // part of the array after the specified index\n ...arr.slice(index),\n ];\n}\n\n/**\n * Returns a new array with item on the specified index replaced by newItem\n * @param arr\n * @param index\n * @param newItem\n */\nexport function replace(arr: T[], index: number, newItem: T): T[] {\n if (index < 0 || index >= arr.length) {\n return arr;\n }\n return [\n // part of the array before the specified index\n ...arr.slice(0, index),\n // inserted item\n newItem,\n // part of the array after the specified index\n ...arr.slice(index + 1),\n ];\n}\n\n/**\n * Removes item from array at specified index and returns new array. (Does not mutate original)\n * @param arr Original array\n * @param index Index of item to be removed\n * @returns New array with item at index removed\n */\nexport function removeItem(arr: T[], index: number): T[] {\n const newArray = [...arr];\n if (index < 0 || index >= arr.length) {\n return newArray;\n }\n newArray.splice(index, 1);\n return newArray;\n}\n\n/**\n * REORDER ARRAYS USING A REFERENCE AND ORIGINAL ARRAY,\n * Example:\n * Input -> reference: [c,b,a], original: [a,b,c], others: [[1,2,3], [4,5,6]]\n * Sorts like -> [[c,b,a],[3,2,1],[6,5,4]]\n * Returns -> [6,5,4]\n * @param reference\n * @param original\n * @param others\n * @returns Sorted others\n */\nexport function reorderArrays(\n reference: T[],\n original: T[],\n ...others: unknown[][]\n): unknown[][] {\n if (\n reference.length !== original.length ||\n others.some((arr) => arr.length !== original.length)\n ) {\n throw new Error('Array length mismatch');\n }\n const indexesOfOriginal = reference.map((value) => original.indexOf(value));\n if (indexesOfOriginal.indexOf(-1) >= 0) {\n throw new Error('Invalid reference or original array');\n }\n const othersResorted: unknown[][] = [];\n indexesOfOriginal.forEach((indexOfOriginal, i) => {\n others.forEach((arr, arrIndex) => {\n if (!othersResorted[arrIndex]) {\n othersResorted[arrIndex] = [];\n }\n othersResorted[arrIndex][i] = arr[indexOfOriginal];\n });\n });\n return othersResorted;\n}\n\nexport function isLinearish(poolType: string): boolean {\n const supportedPoolTypes: string[] = Object.values(PoolType);\n if (poolType.includes('Linear') && supportedPoolTypes.includes(poolType))\n return true;\n else return false;\n}\n\nexport function truncateAddresses(addresses: string[]): string[] {\n return addresses.map((t) => `${t.slice(0, 6)}...${t.slice(38, 42)}`);\n}\n\nexport const findEventInReceiptLogs = ({\n receipt,\n to,\n contractInterface,\n logName,\n}: {\n receipt: TransactionReceipt;\n to: Address;\n contractInterface: Interface;\n logName: string;\n}): LogDescription => {\n const event = receipt.logs\n .filter((log: Log) => {\n return isSameAddress(log.address, to);\n })\n .map((log) => {\n try {\n return contractInterface.parseLog(log);\n } catch (error) {\n const logger = Logger.getInstance();\n logger.warn(error as string);\n return null;\n }\n })\n .find((parsedLog) => parsedLog?.name === logName);\n if (!event) {\n throw new Error('Event not found in logs');\n }\n return event;\n};\n\nexport const getRandomBytes32 = (): string => {\n const getRandomBytes8 = () => Math.random().toString(16).slice(2, 10);\n const randomBytes32 = Array(8).fill(null).map(getRandomBytes8).join('');\n return `0x${randomBytes32}`;\n};\n","import { GraphQLArgs, GraphQLArgsFormatter } from '../types';\n\nexport class BalancerAPIArgsFormatter implements GraphQLArgsFormatter {\n format(args: GraphQLArgs): GraphQLArgs {\n return args;\n }\n}\n","import { GraphQLArgs, GraphQLArgsFormatter, GraphQLFilter } from '../types';\n\nexport class SubgraphArgsFormatter implements GraphQLArgsFormatter {\n operatorMap: Record;\n\n constructor() {\n this.operatorMap = {\n gt: '_gt',\n lt: '_lt',\n eq: '',\n in: '_in',\n not_in: '_not_in',\n contains: '_contains',\n };\n }\n\n format(args: GraphQLArgs): GraphQLArgs {\n const whereQuery: Record = {};\n if (args.where) {\n Object.entries(args.where).forEach(([name, filter]) => {\n Object.entries(filter).forEach(([operator, value]) => {\n whereQuery[`${name}${this.operatorMap[operator]}`] = value;\n });\n });\n }\n\n return {\n ...args,\n ...{ where: whereQuery },\n };\n }\n}\n","import { mergeWith } from 'lodash';\nimport { GraphQLArgs, GraphQLArgsFormatter } from './types';\n\nexport * from './formatters';\n\nexport class GraphQLArgsBuilder {\n constructor(readonly args: GraphQLArgs) {}\n\n merge(other: GraphQLArgsBuilder): GraphQLArgsBuilder {\n const mergedArgs = mergeWith(\n this.args,\n other.args,\n (objValue: unknown, srcValue: unknown) => {\n if (Array.isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n );\n\n return new GraphQLArgsBuilder(mergedArgs);\n }\n\n format(formatter: GraphQLArgsFormatter): unknown {\n return formatter.format(this.args);\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n AaveLinearPool,\n AaveLinearPoolInterface,\n} from \"../AaveLinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct AaveLinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class AaveLinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): AaveLinearPoolInterface {\n return new utils.Interface(_abi) as AaveLinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): AaveLinearPool {\n return new Contract(address, _abi, signerOrProvider) as AaveLinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n AaveLinearPoolFactory,\n AaveLinearPoolFactoryInterface,\n} from \"../AaveLinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"AaveLinearPoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract AaveLinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class AaveLinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): AaveLinearPoolFactoryInterface {\n return new utils.Interface(_abi) as AaveLinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): AaveLinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as AaveLinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { AaveWrapping, AaveWrappingInterface } from \"../AaveWrapping\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approveVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStaticATokenLM\",\n name: \"staticToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"toUnderlying\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapAaveStaticToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStaticATokenLM\",\n name: \"staticToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"fromUnderlying\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapAaveDynamicToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n] as const;\n\nexport class AaveWrapping__factory {\n static readonly abi = _abi;\n static createInterface(): AaveWrappingInterface {\n return new utils.Interface(_abi) as AaveWrappingInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): AaveWrapping {\n return new Contract(address, _abi, signerOrProvider) as AaveWrapping;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { Authoriser, AuthoriserInterface } from \"../Authoriser\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"admin\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"previousAdminRole\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"newAdminRole\",\n type: \"bytes32\",\n },\n ],\n name: \"RoleAdminChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"RoleGranted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"RoleRevoked\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DEFAULT_ADMIN_ROLE\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"actionId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"canPerform\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n ],\n name: \"getRoleAdmin\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n ],\n name: \"getRoleMember\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n ],\n name: \"getRoleMemberCount\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"grantRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"roles\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"grantRoles\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"roles\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"address[]\",\n name: \"accounts\",\n type: \"address[]\",\n },\n ],\n name: \"grantRolesToMany\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"hasRole\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"renounceRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"revokeRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"roles\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"revokeRoles\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"roles\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"address[]\",\n name: \"accounts\",\n type: \"address[]\",\n },\n ],\n name: \"revokeRolesFromMany\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class Authoriser__factory {\n static readonly abi = _abi;\n static createInterface(): AuthoriserInterface {\n return new utils.Interface(_abi) as AuthoriserInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): Authoriser {\n return new Contract(address, _abi, signerOrProvider) as Authoriser;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BalancerHelpers,\n BalancerHelpersInterface,\n} from \"../BalancerHelpers\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"_vault\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"minAmountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.ExitPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"maxAmountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.JoinPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"vault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class BalancerHelpers__factory {\n static readonly abi = _abi;\n static createInterface(): BalancerHelpersInterface {\n return new utils.Interface(_abi) as BalancerHelpersInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BalancerHelpers {\n return new Contract(address, _abi, signerOrProvider) as BalancerHelpers;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BalancerMinter,\n BalancerMinterInterface,\n} from \"../BalancerMinter\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IBalancerTokenAdmin\",\n name: \"tokenAdmin\",\n type: \"address\",\n },\n {\n internalType: \"contract IGaugeController\",\n name: \"gaugeController\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minted\",\n type: \"uint256\",\n },\n ],\n name: \"Minted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approval\",\n type: \"bool\",\n },\n ],\n name: \"MinterApprovalSet\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"allowed_to_mint_for\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBalancerToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBalancerTokenAdmin\",\n outputs: [\n {\n internalType: \"contract IBalancerTokenAdmin\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getGaugeController\",\n outputs: [\n {\n internalType: \"contract IGaugeController\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"getMinterApproval\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n ],\n name: \"mint\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"mintFor\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n ],\n name: \"mintMany\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"mintManyFor\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"mint_for\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[8]\",\n name: \"gauges\",\n type: \"address[8]\",\n },\n ],\n name: \"mint_many\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n ],\n name: \"minted\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approval\",\n type: \"bool\",\n },\n ],\n name: \"setMinterApproval\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approval\",\n type: \"bool\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"setMinterApprovalWithSignature\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n ],\n name: \"toggle_approve_mint\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class BalancerMinter__factory {\n static readonly abi = _abi;\n static createInterface(): BalancerMinterInterface {\n return new utils.Interface(_abi) as BalancerMinterInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BalancerMinter {\n return new Contract(address, _abi, signerOrProvider) as BalancerMinter;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BalancerPoolDataQueries,\n BalancerPoolDataQueriesInterface,\n} from \"../BalancerPoolDataQueries\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"_vault\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getAmpForPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getInRecoveryModeForPools\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"\",\n type: \"bool[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getIsPausedForPools\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"\",\n type: \"bool[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getLinearTargetsForPools\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"\",\n type: \"uint256[][]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getNormalizedWeightsForPools\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"\",\n type: \"uint256[][]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"poolIds\",\n type: \"bytes32[]\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"loadTokenBalanceUpdatesAfterBlock\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadTotalSupply\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadSwapFees\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadLinearWrappedTokenRates\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadLinearTargets\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadNormalizedWeights\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadScalingFactors\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadAmps\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadRates\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"enum TotalSupplyType[]\",\n name: \"totalSupplyTypes\",\n type: \"uint8[]\",\n },\n {\n internalType: \"enum SwapFeeType[]\",\n name: \"swapFeeTypes\",\n type: \"uint8[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"linearPoolIdxs\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"weightedPoolIdxs\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"scalingFactorPoolIdxs\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ampPoolIdxs\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ratePoolIdxs\",\n type: \"uint256[]\",\n },\n ],\n internalType: \"struct PoolDataQueryConfig\",\n name: \"config\",\n type: \"tuple\",\n },\n ],\n name: \"getPoolData\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"balances\",\n type: \"uint256[][]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"totalSupplies\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"swapFees\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"linearWrappedTokenRates\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[][]\",\n name: \"linearTargets\",\n type: \"uint256[][]\",\n },\n {\n internalType: \"uint256[][]\",\n name: \"weights\",\n type: \"uint256[][]\",\n },\n {\n internalType: \"uint256[][]\",\n name: \"scalingFactors\",\n type: \"uint256[][]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amps\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"rates\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ignoreIdxs\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"poolIds\",\n type: \"bytes32[]\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"loadInRecoveryMode\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadIsPaused\",\n type: \"bool\",\n },\n ],\n internalType: \"struct PoolStatusQueryConfig\",\n name: \"config\",\n type: \"tuple\",\n },\n ],\n name: \"getPoolStatus\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"isPaused\",\n type: \"bool[]\",\n },\n {\n internalType: \"bool[]\",\n name: \"inRecoveryMode\",\n type: \"bool[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"poolIds\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n ],\n name: \"getPoolTokenBalancesWithUpdatesAfterBlock\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"\",\n type: \"uint256[][]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getRateForPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getScalingFactorsForPools\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"\",\n type: \"uint256[][]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n {\n internalType: \"enum SwapFeeType[]\",\n name: \"swapFeeTypes\",\n type: \"uint8[]\",\n },\n ],\n name: \"getSwapFeePercentageForPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n {\n internalType: \"enum TotalSupplyType[]\",\n name: \"totalSupplyTypes\",\n type: \"uint8[]\",\n },\n ],\n name: \"getTotalSupplyForPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getWrappedTokenRateForLinearPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"vault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class BalancerPoolDataQueries__factory {\n static readonly abi = _abi;\n static createInterface(): BalancerPoolDataQueriesInterface {\n return new utils.Interface(_abi) as BalancerPoolDataQueriesInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BalancerPoolDataQueries {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as BalancerPoolDataQueries;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BalancerRelayer,\n BalancerRelayerInterface,\n} from \"../BalancerRelayer\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"libraryAddress\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [],\n name: \"getLibrary\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n ],\n name: \"multicall\",\n outputs: [\n {\n internalType: \"bytes[]\",\n name: \"results\",\n type: \"bytes[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n] as const;\n\nexport class BalancerRelayer__factory {\n static readonly abi = _abi;\n static createInterface(): BalancerRelayerInterface {\n return new utils.Interface(_abi) as BalancerRelayerInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BalancerRelayer {\n return new Contract(address, _abi, signerOrProvider) as BalancerRelayer;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BatchRelayerLibrary,\n BatchRelayerLibraryInterface,\n} from \"../BatchRelayerLibrary\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wstETH\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerMinter\",\n name: \"minter\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approveVault\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"assetInIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"assetOutIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.BatchSwapStep[]\",\n name: \"swaps\",\n type: \"tuple[]\",\n },\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"int256[]\",\n name: \"limits\",\n type: \"int256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"key\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct VaultActions.OutputReference[]\",\n name: \"outputReferences\",\n type: \"tuple[]\",\n },\n ],\n name: \"batchSwap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum VaultActions.PoolKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"minAmountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.ExitPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"key\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct VaultActions.OutputReference[]\",\n name: \"outputReferences\",\n type: \"tuple[]\",\n },\n ],\n name: \"exitPool\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStakingLiquidityGauge[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n ],\n name: \"gaugeClaimRewards\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStakingLiquidityGauge\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"gaugeDeposit\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"gaugeMint\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"approval\",\n type: \"bool\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"gaugeSetMinterApproval\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStakingLiquidityGauge\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"gaugeWithdraw\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getEntrypoint\",\n outputs: [\n {\n internalType: \"contract IBalancerRelayer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum VaultActions.PoolKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"maxAmountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.JoinPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"joinPool\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.UserBalanceOpKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"asset\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct IVault.UserBalanceOp[]\",\n name: \"ops\",\n type: \"tuple[]\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"manageUserBalance\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"ref\",\n type: \"uint256\",\n },\n ],\n name: \"peekChainedReferenceValue\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"relayer\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"authorisation\",\n type: \"bytes\",\n },\n ],\n name: \"setRelayerApproval\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"stakeETH\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"stakeETHAndWrap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.SingleSwap\",\n name: \"singleSwap\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"limit\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"swap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStaticATokenLM\",\n name: \"staticToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"toUnderlying\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapAaveStaticToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract ICToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapCompoundV2\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC4626\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapERC4626\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IEulerToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapEuler\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IGearboxDieselToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"dieselAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapGearbox\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IReaperTokenVault\",\n name: \"vaultToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapReaperVaultToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IShareToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapShareToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract ITetuSmartVault\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapTetu\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IUnbuttonToken\",\n name: \"wrapperToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapUnbuttonToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapWstETH\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IYearnTokenVault\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapYearn\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20Permit\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"vaultPermit\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20PermitDAI\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"holder\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"expiry\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"allowed\",\n type: \"bool\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"vaultPermitDAI\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStaticATokenLM\",\n name: \"staticToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"fromUnderlying\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapAaveDynamicToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract ICToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapCompoundV2\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC4626\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapERC4626\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IEulerToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"eulerProtocol\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapEuler\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IGearboxDieselToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"mainAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapGearbox\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IReaperTokenVault\",\n name: \"vaultToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapReaperVaultToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IShareToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapShareToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapStETH\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract ITetuSmartVault\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapTetu\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IUnbuttonToken\",\n name: \"wrapperToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"uAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapUnbuttonToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IYearnTokenVault\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapYearn\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n] as const;\n\nexport class BatchRelayerLibrary__factory {\n static readonly abi = _abi;\n static createInterface(): BatchRelayerLibraryInterface {\n return new utils.Interface(_abi) as BatchRelayerLibraryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BatchRelayerLibrary {\n return new Contract(address, _abi, signerOrProvider) as BatchRelayerLibrary;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ComposableStablePool,\n ComposableStablePoolInterface,\n} from \"../ComposableStablePool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"contract IRateProvider[]\",\n name: \"rateProviders\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"tokenRateCacheDurations\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bool[]\",\n name: \"exemptFromYieldProtocolFeeFlags\",\n type: \"bool[]\",\n },\n {\n internalType: \"uint256\",\n name: \"amplificationParameter\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n internalType: \"struct ComposableStablePool.NewPoolParams\",\n name: \"params\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"startValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"endValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n ],\n name: \"AmpUpdateStarted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"currentValue\",\n type: \"uint256\",\n },\n ],\n name: \"AmpUpdateStopped\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"feeType\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"protocolFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"ProtocolFeePercentageCacheUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenIndex\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"rate\",\n type: \"uint256\",\n },\n ],\n name: \"TokenRateCacheUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenIndex\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"contract IRateProvider\",\n name: \"provider\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"cacheDuration\",\n type: \"uint256\",\n },\n ],\n name: \"TokenRateProviderSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getActualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAmplificationParameter\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"isUpdating\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"precision\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastJoinExitData\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lastJoinExitAmplification\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"lastPostJoinExitInvariant\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMinimumBpt\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"feeType\",\n type: \"uint256\",\n },\n ],\n name: \"getProtocolFeePercentageCache\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolSwapFeeDelegation\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRateProviders\",\n outputs: [\n {\n internalType: \"contract IRateProvider[]\",\n name: \"\",\n type: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"getTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"getTokenRateCache\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"rate\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"oldRate\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"isTokenExemptFromYieldProtocolFee\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"swapRequest\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"poolConfig\",\n type: \"bytes\",\n },\n ],\n name: \"setAssetManagerPoolConfig\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"setTokenRateCacheDuration\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"rawEndValue\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n ],\n name: \"startAmplificationParameterUpdate\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"stopAmplificationParameterUpdate\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"updateProtocolFeePercentageCache\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"updateTokenRateCache\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class ComposableStablePool__factory {\n static readonly abi = _abi;\n static createInterface(): ComposableStablePoolInterface {\n return new utils.Interface(_abi) as ComposableStablePoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ComposableStablePool {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as ComposableStablePool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ComposableStablePoolFactory,\n ComposableStablePoolFactoryInterface,\n} from \"../ComposableStablePoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"amplificationParameter\",\n type: \"uint256\",\n },\n {\n internalType: \"contract IRateProvider[]\",\n name: \"rateProviders\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"tokenRateCacheDurations\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bool[]\",\n name: \"exemptFromYieldProtocolFeeFlags\",\n type: \"bool[]\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract ComposableStablePool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class ComposableStablePoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): ComposableStablePoolFactoryInterface {\n return new utils.Interface(_abi) as ComposableStablePoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ComposableStablePoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as ComposableStablePoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ConvergentCurvePool,\n ConvergentCurvePoolInterface,\n} from \"../ConvergentCurvePool\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"_underlying\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"_bond\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_expiration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_unitSeconds\",\n type: \"uint256\",\n },\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_percentFee\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_percentFeeGov\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"_governance\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"collectedBase\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"collectedBond\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"remainingBase\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"remainingBond\",\n type: \"uint256\",\n },\n ],\n name: \"FeeCollection\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"FEE_BOUND\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"bond\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"bondDecimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseApproval\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"expiration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"feesBond\",\n outputs: [\n {\n internalType: \"uint128\",\n name: \"\",\n type: \"uint128\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"feesUnderlying\",\n outputs: [\n {\n internalType: \"uint128\",\n name: \"\",\n type: \"uint128\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"governance\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"increaseApproval\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"currentBalances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFee\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"currentBalances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFee\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"swapRequest\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"currentBalanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"currentBalanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"percentFee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"percentFeeGov\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"amountX\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"reserveX\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"reserveY\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"out\",\n type: \"bool\",\n },\n ],\n name: \"solveTradeInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"underlying\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"underlyingDecimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unitSeconds\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class ConvergentCurvePool__factory {\n static readonly abi = _abi;\n static createInterface(): ConvergentCurvePoolInterface {\n return new utils.Interface(_abi) as ConvergentCurvePoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ConvergentCurvePool {\n return new Contract(address, _abi, signerOrProvider) as ConvergentCurvePool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { ERC20, ERC20Interface } from \"../ERC20\";\n\nconst _abi = [\n {\n constant: true,\n inputs: [],\n name: \"name\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n },\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n name: \"\",\n type: \"uint8\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n name: \"balance\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n {\n name: \"_spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n payable: true,\n stateMutability: \"payable\",\n type: \"fallback\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n] as const;\n\nexport class ERC20__factory {\n static readonly abi = _abi;\n static createInterface(): ERC20Interface {\n return new utils.Interface(_abi) as ERC20Interface;\n }\n static connect(address: string, signerOrProvider: Signer | Provider): ERC20 {\n return new Contract(address, _abi, signerOrProvider) as ERC20;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ERC4626LinearPool,\n ERC4626LinearPoolInterface,\n} from \"../ERC4626LinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct ERC4626LinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class ERC4626LinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): ERC4626LinearPoolInterface {\n return new utils.Interface(_abi) as ERC4626LinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ERC4626LinearPool {\n return new Contract(address, _abi, signerOrProvider) as ERC4626LinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ERC4626LinearPoolFactory,\n ERC4626LinearPoolFactoryInterface,\n} from \"../ERC4626LinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"Erc4626LinearPoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract LinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class ERC4626LinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): ERC4626LinearPoolFactoryInterface {\n return new utils.Interface(_abi) as ERC4626LinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ERC4626LinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as ERC4626LinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n EulerLinearPool,\n EulerLinearPoolInterface,\n} from \"../EulerLinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct EulerLinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class EulerLinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): EulerLinearPoolInterface {\n return new utils.Interface(_abi) as EulerLinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): EulerLinearPool {\n return new Contract(address, _abi, signerOrProvider) as EulerLinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n EulerLinearPoolFactory,\n EulerLinearPoolFactoryInterface,\n} from \"../EulerLinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"_eulerProtocol\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"EulerLinearPoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract LinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"eulerProtocol\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class EulerLinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): EulerLinearPoolFactoryInterface {\n return new utils.Interface(_abi) as EulerLinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): EulerLinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as EulerLinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { FXPool, FXPoolInterface } from \"../FXPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"_assetsToRegister\",\n type: \"address[]\",\n },\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_protocolPercentFee\",\n type: \"uint256\",\n },\n {\n internalType: \"string\",\n name: \"_name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"_symbol\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"numeraire\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"reserve\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"weight\",\n type: \"uint256\",\n },\n ],\n name: \"AssetIncluded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"derivative\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"numeraire\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"reserve\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"assimilator\",\n type: \"address\",\n },\n ],\n name: \"AssimilatorIncluded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newCollector\",\n type: \"address\",\n },\n ],\n name: \"ChangeCollectorAddress\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"isEmergency\",\n type: \"bool\",\n },\n ],\n name: \"EmergencyAlarm\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lptAmountBurned\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"amountsWithdrawn\",\n type: \"uint256[]\",\n },\n ],\n name: \"EmergencyWithdraw\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"feesCollected\",\n type: \"uint256\",\n },\n ],\n name: \"FeesAccrued\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"feesCollected\",\n type: \"uint256\",\n },\n ],\n name: \"FeesCollected\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lptAmountBurned\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"amountsWithdrawn\",\n type: \"uint256[]\",\n },\n ],\n name: \"OnExitPool\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lptAmountMinted\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"amountsDeposited\",\n type: \"uint256[]\",\n },\n ],\n name: \"OnJoinPool\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"alpha\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"beta\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"delta\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"epsilon\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lambda\",\n type: \"uint256\",\n },\n ],\n name: \"ParametersSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Paused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"updater\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newProtocolPercentage\",\n type: \"uint256\",\n },\n ],\n name: \"ProtocolFeeShareUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"trader\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"origin\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"originAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"targetAmount\",\n type: \"uint256\",\n },\n ],\n name: \"Trade\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Unpaused\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_derivative\",\n type: \"address\",\n },\n ],\n name: \"assimilator\",\n outputs: [\n {\n internalType: \"address\",\n name: \"assimilator_\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"collectorAddress\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"curve\",\n outputs: [\n {\n internalType: \"int128\",\n name: \"alpha\",\n type: \"int128\",\n },\n {\n internalType: \"int128\",\n name: \"beta\",\n type: \"int128\",\n },\n {\n internalType: \"int128\",\n name: \"delta\",\n type: \"int128\",\n },\n {\n internalType: \"int128\",\n name: \"epsilon\",\n type: \"int128\",\n },\n {\n internalType: \"int128\",\n name: \"lambda\",\n type: \"int128\",\n },\n {\n internalType: \"uint256\",\n name: \"cap\",\n type: \"uint256\",\n },\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"fxPoolAddress\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"derivatives\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"emergency\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"_assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"_assetWeights\",\n type: \"uint256[]\",\n },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"liquidity\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"total_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"individual_\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"numeraires\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"swapRequest\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paused\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"protocolPercentFee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"reserves\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_cap\",\n type: \"uint256\",\n },\n ],\n name: \"setCap\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_collectorAddress\",\n type: \"address\",\n },\n ],\n name: \"setCollectorAddress\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"_emergency\",\n type: \"bool\",\n },\n ],\n name: \"setEmergency\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_alpha\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_beta\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_feeAtHalt\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_epsilon\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_lambda\",\n type: \"uint256\",\n },\n ],\n name: \"setParams\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_protocolPercentFee\",\n type: \"uint256\",\n },\n ],\n name: \"setProtocolPercentFee\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalUnclaimedFeesInNumeraire\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"totalDepositNumeraire\",\n type: \"uint256\",\n },\n ],\n name: \"viewDeposit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"viewParameters\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"alpha_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"beta_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"delta_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"epsilon_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"lambda_\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_curvesToBurn\",\n type: \"uint256\",\n },\n ],\n name: \"viewWithdraw\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class FXPool__factory {\n static readonly abi = _abi;\n static createInterface(): FXPoolInterface {\n return new utils.Interface(_abi) as FXPoolInterface;\n }\n static connect(address: string, signerOrProvider: Signer | Provider): FXPool {\n return new Contract(address, _abi, signerOrProvider) as FXPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n GaugeClaimHelper,\n GaugeClaimHelperInterface,\n} from \"../GaugeClaimHelper\";\n\nconst _abi = [\n {\n inputs: [],\n name: \"CLAIM_FREQUENCY\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IRewardsOnlyGauge\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"claimRewardsFromGauge\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IRewardsOnlyGauge[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"claimRewardsFromGauges\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IRewardsOnlyGauge\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"getPendingRewards\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class GaugeClaimHelper__factory {\n static readonly abi = _abi;\n static createInterface(): GaugeClaimHelperInterface {\n return new utils.Interface(_abi) as GaugeClaimHelperInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GaugeClaimHelper {\n return new Contract(address, _abi, signerOrProvider) as GaugeClaimHelper;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n GearboxLinearPool,\n GearboxLinearPoolInterface,\n} from \"../GearboxLinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct GearboxLinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class GearboxLinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): GearboxLinearPoolInterface {\n return new utils.Interface(_abi) as GearboxLinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GearboxLinearPool {\n return new Contract(address, _abi, signerOrProvider) as GearboxLinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n GearboxLinearPoolFactory,\n GearboxLinearPoolFactoryInterface,\n} from \"../GearboxLinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"GearboxLinearPoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract GearboxLinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class GearboxLinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): GearboxLinearPoolFactoryInterface {\n return new utils.Interface(_abi) as GearboxLinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GearboxLinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as GearboxLinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { GyroConfig, GyroConfigInterface } from \"../GyroConfig\";\n\nconst _abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"previousValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newValue\",\n type: \"uint256\",\n },\n ],\n name: \"ConfigChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"ConfigFrozen\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"ConfigUnset\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newGovernor\",\n type: \"address\",\n },\n ],\n name: \"GovernorChangeRequested\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"oldGovernor\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"newGovernor\",\n type: \"address\",\n },\n ],\n name: \"GovernorChanged\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"acceptGovernance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newGovernor\",\n type: \"address\",\n },\n ],\n name: \"changeGovernor\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"freeze\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"defaultValue\",\n type: \"address\",\n },\n ],\n name: \"getAddress\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"getAddress\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"getConfigMeta\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"getUint\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"governor\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"hasKey\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_governor\",\n type: \"address\",\n },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"listKeys\",\n outputs: [\n {\n internalType: \"bytes32[]\",\n name: \"\",\n type: \"bytes32[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pendingGovernor\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"newValue\",\n type: \"address\",\n },\n ],\n name: \"setAddress\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"newValue\",\n type: \"uint256\",\n },\n ],\n name: \"setUint\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"unset\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class GyroConfig__factory {\n static readonly abi = _abi;\n static createInterface(): GyroConfigInterface {\n return new utils.Interface(_abi) as GyroConfigInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GyroConfig {\n return new Contract(address, _abi, signerOrProvider) as GyroConfig;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { LidoRelayer, LidoRelayerInterface } from \"../LidoRelayer\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IwstETH\",\n name: \"wstETH\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"assetInIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"assetOutIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.BatchSwapStep[]\",\n name: \"swaps\",\n type: \"tuple[]\",\n },\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"int256[]\",\n name: \"limits\",\n type: \"int256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n ],\n name: \"batchSwap\",\n outputs: [\n {\n internalType: \"int256[]\",\n name: \"swapAmounts\",\n type: \"int256[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"minAmountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.ExitPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"exitPool\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getStETH\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWstETH\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"maxAmountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.JoinPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"joinPool\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.SingleSwap\",\n name: \"singleSwap\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"limit\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n ],\n name: \"swap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"swapAmount\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n] as const;\n\nexport class LidoRelayer__factory {\n static readonly abi = _abi;\n static createInterface(): LidoRelayerInterface {\n return new utils.Interface(_abi) as LidoRelayerInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): LidoRelayer {\n return new Contract(address, _abi, signerOrProvider) as LidoRelayer;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { LinearPool, LinearPoolInterface } from \"../LinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"poolConfig\",\n type: \"bytes\",\n },\n ],\n name: \"setAssetManagerPoolConfig\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class LinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): LinearPoolInterface {\n return new utils.Interface(_abi) as LinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): LinearPool {\n return new Contract(address, _abi, signerOrProvider) as LinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n LiquidityGaugeV5,\n LiquidityGaugeV5Interface,\n} from \"../LiquidityGaugeV5\";\n\nconst _abi = [\n {\n name: \"Deposit\",\n inputs: [\n {\n name: \"provider\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Withdraw\",\n inputs: [\n {\n name: \"provider\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"UpdateLiquidityLimit\",\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"original_balance\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"original_supply\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"working_balance\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"working_supply\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Transfer\",\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"_to\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"_value\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Approval\",\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"_spender\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"_value\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n inputs: [\n {\n name: \"minter\",\n type: \"address\",\n },\n {\n name: \"veBoostProxy\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_addr\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_claim_rewards\",\n type: \"bool\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"withdraw\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"withdraw\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_claim_rewards\",\n type: \"bool\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"claim_rewards\",\n inputs: [],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"claim_rewards\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"claim_rewards\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_receiver\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"transferFrom\",\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n },\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"transfer\",\n inputs: [\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"approve\",\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"permit\",\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_deadline\",\n type: \"uint256\",\n },\n {\n name: \"_v\",\n type: \"uint8\",\n },\n {\n name: \"_r\",\n type: \"bytes32\",\n },\n {\n name: \"_s\",\n type: \"bytes32\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"increaseAllowance\",\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_added_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"decreaseAllowance\",\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_subtracted_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"user_checkpoint\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"set_rewards_receiver\",\n inputs: [\n {\n name: \"_receiver\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"kick\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit_reward_token\",\n inputs: [\n {\n name: \"_reward_token\",\n type: \"address\",\n },\n {\n name: \"_amount\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"add_reward\",\n inputs: [\n {\n name: \"_reward_token\",\n type: \"address\",\n },\n {\n name: \"_distributor\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"set_reward_distributor\",\n inputs: [\n {\n name: \"_reward_token\",\n type: \"address\",\n },\n {\n name: \"_distributor\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"set_killed\",\n inputs: [\n {\n name: \"_is_killed\",\n type: \"bool\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"claimed_reward\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_token\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"claimable_reward\",\n inputs: [\n {\n name: \"_user\",\n type: \"address\",\n },\n {\n name: \"_reward_token\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"claimable_reward_write\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_token\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"claimable_tokens\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_checkpoint\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"future_epoch_time\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"inflation_rate\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"decimals\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"version\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"allowance\",\n inputs: [\n {\n name: \"owner\",\n type: \"address\",\n },\n {\n name: \"spender\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"initialize\",\n inputs: [\n {\n name: \"_lp_token\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"balanceOf\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"totalSupply\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"name\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"symbol\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"DOMAIN_SEPARATOR\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"bytes32\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"nonces\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"factory\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"lp_token\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"is_killed\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"reward_count\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"reward_data\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n {\n name: \"token\",\n type: \"address\",\n },\n {\n name: \"distributor\",\n type: \"address\",\n },\n {\n name: \"period_finish\",\n type: \"uint256\",\n },\n {\n name: \"rate\",\n type: \"uint256\",\n },\n {\n name: \"last_update\",\n type: \"uint256\",\n },\n {\n name: \"integral\",\n type: \"uint256\",\n },\n ],\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"rewards_receiver\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"reward_integral_for\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n {\n name: \"arg1\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"working_balances\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"working_supply\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_inv_supply_of\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_checkpoint_of\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_fraction\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"period\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"int128\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"reward_tokens\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"period_timestamp\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_inv_supply\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n] as const;\n\nexport class LiquidityGaugeV5__factory {\n static readonly abi = _abi;\n static createInterface(): LiquidityGaugeV5Interface {\n return new utils.Interface(_abi) as LiquidityGaugeV5Interface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): LiquidityGaugeV5 {\n return new Contract(address, _abi, signerOrProvider) as LiquidityGaugeV5;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { Multicall, MulticallInterface } from \"../Multicall\";\n\nconst _abi = [\n {\n constant: false,\n inputs: [\n {\n components: [\n {\n name: \"target\",\n type: \"address\",\n },\n {\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate\",\n outputs: [\n {\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n name: \"returnData\",\n type: \"bytes[]\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class Multicall__factory {\n static readonly abi = _abi;\n static createInterface(): MulticallInterface {\n return new utils.Interface(_abi) as MulticallInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): Multicall {\n return new Contract(address, _abi, signerOrProvider) as Multicall;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { Multicall3, Multicall3Interface } from \"../Multicall3\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes[]\",\n name: \"returnData\",\n type: \"bytes[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"allowFailure\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call3[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate3\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"allowFailure\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call3Value[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate3Value\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"blockAndAggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBasefee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"basefee\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n ],\n name: \"getBlockHash\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBlockNumber\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getChainId\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"chainid\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockCoinbase\",\n outputs: [\n {\n internalType: \"address\",\n name: \"coinbase\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockDifficulty\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"difficulty\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockGasLimit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"gaslimit\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockTimestamp\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"timestamp\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"addr\",\n type: \"address\",\n },\n ],\n name: \"getEthBalance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"balance\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastBlockHash\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"requireSuccess\",\n type: \"bool\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"tryAggregate\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"requireSuccess\",\n type: \"bool\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"tryBlockAndAggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n] as const;\n\nexport class Multicall3__factory {\n static readonly abi = _abi;\n static createInterface(): Multicall3Interface {\n return new utils.Interface(_abi) as Multicall3Interface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): Multicall3 {\n return new Contract(address, _abi, signerOrProvider) as Multicall3;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { StablePool, StablePoolInterface } from \"../StablePool\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"amplificationParameter\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"startValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"endValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n ],\n name: \"AmpUpdateStarted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"currentValue\",\n type: \"uint256\",\n },\n ],\n name: \"AmpUpdateStopped\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAmplificationParameter\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"isUpdating\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"precision\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"swapRequest\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"poolConfig\",\n type: \"bytes\",\n },\n ],\n name: \"setAssetManagerPoolConfig\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"rawEndValue\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n ],\n name: \"startAmplificationParameterUpdate\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"stopAmplificationParameterUpdate\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class StablePool__factory {\n static readonly abi = _abi;\n static createInterface(): StablePoolInterface {\n return new utils.Interface(_abi) as StablePoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): StablePool {\n return new Contract(address, _abi, signerOrProvider) as StablePool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n StaticATokenRateProvider,\n StaticATokenRateProviderInterface,\n} from \"../StaticATokenRateProvider\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IStaticAToken\",\n name: \"_waToken\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"waToken\",\n outputs: [\n {\n internalType: \"contract IStaticAToken\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class StaticATokenRateProvider__factory {\n static readonly abi = _abi;\n static createInterface(): StaticATokenRateProviderInterface {\n return new utils.Interface(_abi) as StaticATokenRateProviderInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): StaticATokenRateProvider {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as StaticATokenRateProvider;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { Vault, VaultInterface } from \"../Vault\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"authorizer\",\n type: \"address\",\n },\n {\n internalType: \"contract IWETH\",\n name: \"weth\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IAuthorizer\",\n name: \"newAuthorizer\",\n type: \"address\",\n },\n ],\n name: \"AuthorizerChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"ExternalBalanceTransfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IFlashLoanRecipient\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"feeAmount\",\n type: \"uint256\",\n },\n ],\n name: \"FlashLoan\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"int256\",\n name: \"delta\",\n type: \"int256\",\n },\n ],\n name: \"InternalBalanceChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"liquidityProvider\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n indexed: false,\n internalType: \"int256[]\",\n name: \"deltas\",\n type: \"int256[]\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"protocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n name: \"PoolBalanceChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"int256\",\n name: \"cashDelta\",\n type: \"int256\",\n },\n {\n indexed: false,\n internalType: \"int256\",\n name: \"managedDelta\",\n type: \"int256\",\n },\n ],\n name: \"PoolBalanceManaged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"poolAddress\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"enum IVault.PoolSpecialization\",\n name: \"specialization\",\n type: \"uint8\",\n },\n ],\n name: \"PoolRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"relayer\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"RelayerApprovalChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amountIn\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amountOut\",\n type: \"uint256\",\n },\n ],\n name: \"Swap\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n ],\n name: \"TokensDeregistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n indexed: false,\n internalType: \"address[]\",\n name: \"assetManagers\",\n type: \"address[]\",\n },\n ],\n name: \"TokensRegistered\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"WETH\",\n outputs: [\n {\n internalType: \"contract IWETH\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"assetInIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"assetOutIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.BatchSwapStep[]\",\n name: \"swaps\",\n type: \"tuple[]\",\n },\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"int256[]\",\n name: \"limits\",\n type: \"int256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n ],\n name: \"batchSwap\",\n outputs: [\n {\n internalType: \"int256[]\",\n name: \"assetDeltas\",\n type: \"int256[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n ],\n name: \"deregisterTokens\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"minAmountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.ExitPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"exitPool\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IFlashLoanRecipient\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amounts\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"flashLoan\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n ],\n name: \"getInternalBalance\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n ],\n name: \"getPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"enum IVault.PoolSpecialization\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"getPoolTokenInfo\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"cash\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"managed\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n ],\n name: \"getPoolTokens\",\n outputs: [\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract ProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"relayer\",\n type: \"address\",\n },\n ],\n name: \"hasApprovedRelayer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"maxAmountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.JoinPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"joinPool\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.PoolBalanceOpKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IVault.PoolBalanceOp[]\",\n name: \"ops\",\n type: \"tuple[]\",\n },\n ],\n name: \"managePoolBalance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.UserBalanceOpKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"asset\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct IVault.UserBalanceOp[]\",\n name: \"ops\",\n type: \"tuple[]\",\n },\n ],\n name: \"manageUserBalance\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"assetInIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"assetOutIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.BatchSwapStep[]\",\n name: \"swaps\",\n type: \"tuple[]\",\n },\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n ],\n name: \"queryBatchSwap\",\n outputs: [\n {\n internalType: \"int256[]\",\n name: \"\",\n type: \"int256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.PoolSpecialization\",\n name: \"specialization\",\n type: \"uint8\",\n },\n ],\n name: \"registerPool\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"address[]\",\n name: \"assetManagers\",\n type: \"address[]\",\n },\n ],\n name: \"registerTokens\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"newAuthorizer\",\n type: \"address\",\n },\n ],\n name: \"setAuthorizer\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"relayer\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"setRelayerApproval\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.SingleSwap\",\n name: \"singleSwap\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"limit\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n ],\n name: \"swap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"amountCalculated\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n] as const;\n\nexport class Vault__factory {\n static readonly abi = _abi;\n static createInterface(): VaultInterface {\n return new utils.Interface(_abi) as VaultInterface;\n }\n static connect(address: string, signerOrProvider: Signer | Provider): Vault {\n return new Contract(address, _abi, signerOrProvider) as Vault;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { WeightedPool, WeightedPoolInterface } from \"../WeightedPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"normalizedWeights\",\n type: \"uint256[]\",\n },\n {\n internalType: \"contract IRateProvider[]\",\n name: \"rateProviders\",\n type: \"address[]\",\n },\n {\n internalType: \"address[]\",\n name: \"assetManagers\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct WeightedPool.NewPoolParams\",\n name: \"params\",\n type: \"tuple\",\n },\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"feeType\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"protocolFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"ProtocolFeePercentageCacheUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getATHRateProduct\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getActualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastPostJoinExitInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getNormalizedWeights\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"feeType\",\n type: \"uint256\",\n },\n ],\n name: \"getProtocolFeePercentageCache\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolSwapFeeDelegation\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRateProviders\",\n outputs: [\n {\n internalType: \"contract IRateProvider[]\",\n name: \"\",\n type: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"poolConfig\",\n type: \"bytes\",\n },\n ],\n name: \"setAssetManagerPoolConfig\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"updateProtocolFeePercentageCache\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class WeightedPool__factory {\n static readonly abi = _abi;\n static createInterface(): WeightedPoolInterface {\n return new utils.Interface(_abi) as WeightedPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): WeightedPool {\n return new Contract(address, _abi, signerOrProvider) as WeightedPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n WeightedPoolFactory,\n WeightedPoolFactoryInterface,\n} from \"../WeightedPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"normalizedWeights\",\n type: \"uint256[]\",\n },\n {\n internalType: \"contract IRateProvider[]\",\n name: \"rateProviders\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class WeightedPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): WeightedPoolFactoryInterface {\n return new utils.Interface(_abi) as WeightedPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): WeightedPoolFactory {\n return new Contract(address, _abi, signerOrProvider) as WeightedPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n YearnLinearPool,\n YearnLinearPoolInterface,\n} from \"../YearnLinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct YearnLinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class YearnLinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): YearnLinearPoolInterface {\n return new utils.Interface(_abi) as YearnLinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): YearnLinearPool {\n return new Contract(address, _abi, signerOrProvider) as YearnLinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n YearnLinearPoolFactory,\n YearnLinearPoolFactoryInterface,\n} from \"../YearnLinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"YearnLinearPoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract LinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class YearnLinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): YearnLinearPoolFactoryInterface {\n return new utils.Interface(_abi) as YearnLinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): YearnLinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as YearnLinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { GyroEV2, GyroEV2Interface, GyroECLPPool } from \"../GyroEV2\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"token0\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"token1\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"oracleEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n internalType: \"struct ExtensibleWeightedPool2Tokens.NewPoolParams\",\n name: \"baseParams\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"int256\",\n name: \"alpha\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"beta\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"c\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"s\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"lambda\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Params\",\n name: \"eclpParams\",\n type: \"tuple\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"tauAlpha\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"tauBeta\",\n type: \"tuple\",\n },\n {\n internalType: \"int256\",\n name: \"u\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"v\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"w\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"z\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"dSq\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.DerivedParams\",\n name: \"derivedEclpParams\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"rateProvider0\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"rateProvider1\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"capManager\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"capEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint120\",\n name: \"perAddressCap\",\n type: \"uint120\",\n },\n {\n internalType: \"uint128\",\n name: \"globalCap\",\n type: \"uint128\",\n },\n ],\n internalType: \"struct ICappedLiquidity.CapParams\",\n name: \"capParams\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"pauseManager\",\n type: \"address\",\n },\n ],\n internalType: \"struct GyroECLPPool.GyroParams\",\n name: \"params\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"configAddress\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"capManager\",\n type: \"address\",\n },\n ],\n name: \"CapManagerUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"capEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint120\",\n name: \"perAddressCap\",\n type: \"uint120\",\n },\n {\n internalType: \"uint128\",\n name: \"globalCap\",\n type: \"uint128\",\n },\n ],\n indexed: false,\n internalType: \"struct ICappedLiquidity.CapParams\",\n name: \"params\",\n type: \"tuple\",\n },\n ],\n name: \"CapParamsUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"derivedParamsValidated\",\n type: \"bool\",\n },\n ],\n name: \"ECLPDerivedParamsValidated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paramsValidated\",\n type: \"bool\",\n },\n ],\n name: \"ECLPParamsValidated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"invariantAfterJoin\",\n type: \"uint256\",\n },\n ],\n name: \"InvariantAterInitializeJoin\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"oldInvariant\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newInvariant\",\n type: \"uint256\",\n },\n ],\n name: \"InvariantOldAndNew\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"OracleEnabledChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"oracleUpdatedIndex\",\n type: \"uint256\",\n },\n ],\n name: \"OracleIndexUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"oldPauseManager\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"newPauseManager\",\n type: \"address\",\n },\n ],\n name: \"PauseManagerChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"PausedLocally\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n indexed: false,\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"invariant\",\n type: \"tuple\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"SwapParams\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"UnpausedLocally\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_dSq\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsAlpha\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsBeta\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsC\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsLambda\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsS\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_tauAlphaX\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_tauAlphaY\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_tauBetaX\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_tauBetaY\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_u\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_v\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_w\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_z\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"capManager\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"capParams\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"capEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint120\",\n name: \"perAddressCap\",\n type: \"uint120\",\n },\n {\n internalType: \"uint128\",\n name: \"globalCap\",\n type: \"uint128\",\n },\n ],\n internalType: \"struct ICappedLiquidity.CapParams\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_pauseManager\",\n type: \"address\",\n },\n ],\n name: \"changePauseManager\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"startIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endIndex\",\n type: \"uint256\",\n },\n ],\n name: \"dirtyUninitializedOracleSamples\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableOracle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getECLPParams\",\n outputs: [\n {\n components: [\n {\n internalType: \"int256\",\n name: \"alpha\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"beta\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"c\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"s\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"lambda\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Params\",\n name: \"params\",\n type: \"tuple\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"tauAlpha\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"tauBeta\",\n type: \"tuple\",\n },\n {\n internalType: \"int256\",\n name: \"u\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"v\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"w\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"z\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"dSq\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.DerivedParams\",\n name: \"d\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLargestSafeQueryWindow\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IPriceOracle.Variable\",\n name: \"variable\",\n type: \"uint8\",\n },\n ],\n name: \"getLatest\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMiscData\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"logInvariant\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"logTotalSupply\",\n type: \"int256\",\n },\n {\n internalType: \"uint256\",\n name: \"oracleSampleCreationTimestamp\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"oracleIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"oracleEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getNormalizedWeights\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IPriceOracle.Variable\",\n name: \"variable\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"ago\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IPriceOracle.OracleAccumulatorQuery[]\",\n name: \"queries\",\n type: \"tuple[]\",\n },\n ],\n name: \"getPastAccumulators\",\n outputs: [\n {\n internalType: \"int256[]\",\n name: \"results\",\n type: \"int256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPrice\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"spotPrice\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n ],\n name: \"getSample\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"logPairPrice\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"accLogPairPrice\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"logBptPrice\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"accLogBptPrice\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"logInvariant\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"accLogInvariant\",\n type: \"int256\",\n },\n {\n internalType: \"uint256\",\n name: \"timestamp\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IPriceOracle.Variable\",\n name: \"variable\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"secs\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"ago\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IPriceOracle.OracleAverageQuery[]\",\n name: \"queries\",\n type: \"tuple[]\",\n },\n ],\n name: \"getTimeWeightedAverage\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"results\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTokenRates\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"rate0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"rate1\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTotalSamples\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"gyroConfig\",\n outputs: [\n {\n internalType: \"contract IGyroConfig\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pauseManager\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rateProvider0\",\n outputs: [\n {\n internalType: \"contract IRateProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rateProvider1\",\n outputs: [\n {\n internalType: \"contract IRateProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_capManager\",\n type: \"address\",\n },\n ],\n name: \"setCapManager\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"capEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint120\",\n name: \"perAddressCap\",\n type: \"uint120\",\n },\n {\n internalType: \"uint128\",\n name: \"globalCap\",\n type: \"uint128\",\n },\n ],\n internalType: \"struct ICappedLiquidity.CapParams\",\n name: \"params\",\n type: \"tuple\",\n },\n ],\n name: \"setCapParams\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class GyroEV2__factory {\n static readonly abi = _abi;\n static createInterface(): GyroEV2Interface {\n return new utils.Interface(_abi) as GyroEV2Interface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GyroEV2 {\n return new Contract(address, _abi, signerOrProvider) as GyroEV2;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { VeBal, VeBalInterface } from \"../VeBal\";\n\nconst _abi = [\n {\n name: \"Deposit\",\n inputs: [\n {\n name: \"provider\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"locktime\",\n type: \"uint256\",\n indexed: true,\n },\n {\n name: \"type\",\n type: \"int128\",\n indexed: false,\n },\n {\n name: \"ts\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Withdraw\",\n inputs: [\n {\n name: \"provider\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"ts\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Supply\",\n inputs: [\n {\n name: \"prevSupply\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"supply\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n inputs: [\n {\n name: \"token_addr\",\n type: \"address\",\n },\n {\n name: \"_name\",\n type: \"string\",\n },\n {\n name: \"_symbol\",\n type: \"string\",\n },\n {\n name: \"_authorizer_adaptor\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"token\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"name\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"symbol\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"decimals\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"admin\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"commit_smart_wallet_checker\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"apply_smart_wallet_checker\",\n inputs: [],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"get_last_user_slope\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"int128\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"user_point_history__ts\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_idx\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"locked__end\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"checkpoint\",\n inputs: [],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit_for\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"create_lock\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_unlock_time\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"increase_amount\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"increase_unlock_time\",\n inputs: [\n {\n name: \"_unlock_time\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"withdraw\",\n inputs: [],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"balanceOf\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"balanceOf\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n {\n name: \"_t\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"balanceOfAt\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n {\n name: \"_block\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"totalSupply\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"totalSupply\",\n inputs: [\n {\n name: \"t\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"totalSupplyAt\",\n inputs: [\n {\n name: \"_block\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"supply\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"locked\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n {\n name: \"amount\",\n type: \"int128\",\n },\n {\n name: \"end\",\n type: \"uint256\",\n },\n ],\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"epoch\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"point_history\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n {\n name: \"bias\",\n type: \"int128\",\n },\n {\n name: \"slope\",\n type: \"int128\",\n },\n {\n name: \"ts\",\n type: \"uint256\",\n },\n {\n name: \"blk\",\n type: \"uint256\",\n },\n ],\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"user_point_history\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n {\n name: \"arg1\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n {\n name: \"bias\",\n type: \"int128\",\n },\n {\n name: \"slope\",\n type: \"int128\",\n },\n {\n name: \"ts\",\n type: \"uint256\",\n },\n {\n name: \"blk\",\n type: \"uint256\",\n },\n ],\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"user_point_epoch\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"slope_changes\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"int128\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"future_smart_wallet_checker\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"smart_wallet_checker\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n] as const;\n\nexport class VeBal__factory {\n static readonly abi = _abi;\n static createInterface(): VeBalInterface {\n return new utils.Interface(_abi) as VeBalInterface;\n }\n static connect(address: string, signerOrProvider: Signer | Provider): VeBal {\n return new Contract(address, _abi, signerOrProvider) as VeBal;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n VeDelegationProxy,\n VeDelegationProxyInterface,\n} from \"../VeDelegationProxy\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"votingEscrow\",\n type: \"address\",\n },\n {\n internalType: \"contract IVeDelegation\",\n name: \"delegation\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"newImplementation\",\n type: \"address\",\n },\n ],\n name: \"DelegationImplementationUpdated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"adjustedBalanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"adjusted_balance_of\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDelegationImplementation\",\n outputs: [\n {\n internalType: \"contract IVeDelegation\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVotingEscrow\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"killDelegation\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IVeDelegation\",\n name: \"delegation\",\n type: \"address\",\n },\n ],\n name: \"setDelegation\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class VeDelegationProxy__factory {\n static readonly abi = _abi;\n static createInterface(): VeDelegationProxyInterface {\n return new utils.Interface(_abi) as VeDelegationProxyInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): VeDelegationProxy {\n return new Contract(address, _abi, signerOrProvider) as VeDelegationProxy;\n }\n}\n","import { SwapInfo } from '@balancer-labs/sor';\nimport { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { Vault } from '@/contracts/Vault';\n\nexport interface TokenAmounts {\n [token: string]: string;\n}\n\nexport interface SwapsOptions {\n maxPools?: number;\n gasPrice?: string;\n deadline?: string;\n maxSlippage?: number;\n}\n\nexport enum SwapType {\n SwapExactIn,\n SwapExactOut,\n}\n\nexport type FundManagement = {\n sender: string;\n recipient: string;\n fromInternalBalance: boolean;\n toInternalBalance: boolean;\n};\n\nexport type SingleSwap = {\n poolId: string;\n kind: SwapType;\n assetIn: string;\n assetOut: string;\n amount: BigNumberish;\n userData: string;\n};\n\nexport type Swap = {\n request: SingleSwap;\n funds: FundManagement;\n limit: BigNumberish;\n deadline: BigNumberish;\n value?: BigNumberish;\n outputReference?: BigNumberish;\n};\n\nexport type BatchSwapStep = {\n poolId: string;\n assetInIndex: number;\n assetOutIndex: number;\n amount: string;\n userData: string;\n};\n\nexport type BatchSwap = {\n kind: SwapType;\n swaps: BatchSwapStep[];\n assets: string[];\n funds: FundManagement;\n limits: BigNumberish[];\n deadline: BigNumberish;\n value?: BigNumberish;\n outputReferences?: { index: BigNumberish; key: BigNumberish }[];\n};\n\nexport interface SwapInput {\n tokenIn: string;\n tokenOut: string;\n swapType: SwapType;\n amount: string;\n}\n\nexport interface QuerySimpleFlashSwapParameters {\n poolIds: string[];\n assets: BatchSwap['assets'];\n flashLoanAmount: string;\n vaultContract: Vault;\n}\n\nexport interface SimpleFlashSwapParameters {\n poolIds: string[];\n assets: BatchSwap['assets'];\n flashLoanAmount: string;\n walletAddress: string;\n}\n\nexport interface QuerySimpleFlashSwapResponse {\n profits: Record;\n isProfitable: boolean;\n}\n\nexport interface FindRouteParameters {\n tokenIn: string;\n tokenOut: string;\n amount: BigNumber;\n gasPrice: BigNumber;\n maxPools?: number;\n}\n\nexport interface BuildTransactionParameters {\n userAddress: string;\n recipient?: string;\n swapInfo: SwapInfo;\n kind: SwapType;\n deadline: string;\n maxSlippage: number;\n}\n\nexport interface SwapTransactionRequest {\n to: string;\n data: string;\n value?: BigNumber;\n}\n\nexport interface SwapAttributes {\n to: string;\n functionName: string;\n attributes: Swap | BatchSwap;\n data: string;\n value?: BigNumber;\n}\n","import { BigNumberish, BigNumber } from '@ethersproject/bignumber';\nimport { Zero, WeiPerEther } from '@ethersproject/constants';\n\nimport { SwapType } from './types';\nimport { isSameAddress } from '@/lib/utils';\n\n/**\n * Helper to create limits using a defined slippage amount.\n * @param tokensIn - Array of token in addresses.\n * @param tokensOut - Array of token out addresses.\n * @param swapType - Type of swap - SwapExactIn or SwapExactOut\n * @param deltas - An array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at the same index in the `assets` array.\n * @param assets - array contains the addresses of all assets involved in the swaps.\n * @param slippage - Slippage to be applied. i.e. 5%=50000000000000000.\n * @returns Returns an array (same length as assets) with limits applied for each asset.\n */\nexport function getLimitsForSlippage(\n tokensIn: string[],\n tokensOut: string[],\n swapType: SwapType,\n deltas: BigNumberish[],\n assets: string[],\n slippage: BigNumberish\n): BigNumberish[] {\n // Limits:\n // +ve means max to send\n // -ve mean min to receive\n // For a multihop the intermediate tokens should be 0\n const limits: BigNumber[] = new Array(assets.length).fill(Zero);\n\n assets.forEach((token, i) => {\n if (tokensIn.some((tokenIn) => isSameAddress(token, tokenIn))) {\n // For SwapExactOut slippage is on tokenIn, i.e. amtIn + slippage\n const slippageAmount = BigNumber.from(slippage).add(WeiPerEther);\n limits[i] =\n swapType === SwapType.SwapExactOut\n ? limits[i].add(\n BigNumber.from(deltas[i]).mul(slippageAmount).div(WeiPerEther)\n )\n : limits[i].add(deltas[i]);\n }\n\n if (tokensOut.some((tokenOut) => isSameAddress(token, tokenOut))) {\n // For SwapExactIn slippage is on tokenOut, i.e. amtOut - slippage\n const slippageAmount = WeiPerEther.sub(BigNumber.from(slippage));\n limits[i] =\n swapType === SwapType.SwapExactIn\n ? limits[i].add(\n BigNumber.from(deltas[i]).mul(slippageAmount).div(WeiPerEther)\n )\n : limits[i].add(deltas[i]);\n }\n });\n\n return limits;\n}\n","import { Network } from './network';\nimport { BalancerNetworkConfig } from '@/types';\nimport addressesByNetwork from './addresses.json';\n\nexport const balancerVault = '0xBA12222222228d8Ba445958a75a0704d566BF2C8';\n\n// Info fetched using npm package slot20\nexport const BPT_SLOT = 0;\nexport const BPT_DECIMALS = 18;\n\nexport const BALANCER_NETWORK_CONFIG: Record = {\n [Network.MAINNET]: {\n chainId: Network.MAINNET, //1\n addresses: {\n //Mainnet deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/mainnet.html\n contracts: {\n multicall: '0xeefba1e63905ef1d7acba5a8513c70307c1ce441',\n poolDataQueries: '0xf5CDdF6feD9C589f1Be04899F48f9738531daD59',\n lidoRelayer: '0xdcdbf71A870cc60C6F9B621E28a7D3Ffd6Dd4965',\n veBal: '0xC128a9954e6c874eA3d62ce62B468bA073093F25',\n gaugeControllerCheckpointer:\n '0x8e5698dc4897dc12243c8642e77b4f21349db97c',\n veBalProxy: '0x6f5a2eE11E7a772AeB5114A20d0D7c0ff61EB8A0',\n gyroConfigProxy: '0xac89cc9d78bbad7eb3a02601b4d65daa1f908aa6',\n ...addressesByNetwork[Network.MAINNET].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.MAINNET].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.MAINNET].contracts.weth,\n bbaUsd: addressesByNetwork[Network.MAINNET].tokens.bb_a_usd,\n lbpRaisingTokens: [\n '0x6b175474e89094c44da98b954eedeac495271d0f', // DAI\n '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC\n '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', // WETH\n ],\n stETH: '0xae7ab96520de3a18e5e111b5eaab095312d7fe84',\n wstETH: '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',\n veBal: '0xC128a9954e6c874eA3d62ce62B468bA073093F25',\n ...addressesByNetwork[Network.MAINNET].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/blocklytics/ethereum-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'ethereum',\n },\n },\n pools: {\n wETHwstETH: {\n id: '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080',\n address: '0x32296969ef14eb0c6d29669c550d4a0449130230',\n },\n },\n poolsToIgnore: [\n '0xbd482ffb3e6e50dc1c437557c3bea2b68f3683ee0000000000000000000003c6', // a pool made by an external dev who was playing with a novel rate provider mechanism in production.\n '0x0afbd58beca09545e4fb67772faf3858e610bcd00000000000000000000004b9',\n '0xf22ff21e17157340575158ad7394e068048dd98b0000000000000000000004b8',\n '0xf71d0774b214c4cf51e33eb3d30ef98132e4dbaa00000000000000000000046e',\n ],\n sorConnectingTokens: [\n {\n symbol: 'wEth',\n address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n },\n {\n symbol: 'wstEth',\n address: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',\n },\n {\n symbol: 'DOLA',\n address: '0x865377367054516e17014CcdED1e7d814EDC9ce4',\n },\n {\n symbol: 'rEth',\n address: '0xae78736cd615f374d3085123a210448e74fc6393',\n },\n {\n symbol: 'ETHx',\n address: '0xa35b1b31ce002fbf2058d22f30f95d405200a15b',\n },\n ],\n sorTriPathMidPoolIds: [\n '0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112', // rETH/WETH\n ],\n },\n [Network.POLYGON]: {\n chainId: Network.POLYGON, //137\n addresses: {\n //Polygon deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/polygon.html\n contracts: {\n multicall: '0xa1B2b503959aedD81512C37e9dce48164ec6a94d',\n poolDataQueries: '0x84813aA3e079A665C0B80F944427eE83cBA63617',\n gaugeClaimHelper: '0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33',\n gyroConfigProxy: '0xfdc2e9e03f515804744a40d0f8d25c16e93fbe67',\n ...addressesByNetwork[Network.POLYGON].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.POLYGON].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.POLYGON].contracts.weth,\n lbpRaisingTokens: [\n '0x8f3cf7ad23cd3cadbd9735aff958023239c6a063', // DAI\n '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // USDC\n '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', // WMATIC\n ],\n ...addressesByNetwork[Network.POLYGON].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-polygon-prune-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-polygon',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/ianlapham/polygon-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: '',\n platformId: 'polygon-pos',\n },\n },\n pools: {},\n poolsToIgnore: [\n '0x600bd01b6526611079e12e1ff93aba7a3e34226f0000000000000000000009e4', // This pool has rateProviders with incorrect scaling\n '0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455', // Stable pool with Convergence issues\n ],\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270',\n },\n {\n symbol: 'bbrz2',\n address: '0xe22483774bd8611be2ad2f4194078dac9159f4ba',\n }, // Joins Stables<>BRZ via https://app.balancer.fi/#/polygon/pool/0x4a0b73f0d13ff6d43e304a174697e3d5cfd310a400020000000000000000091c\n ],\n },\n [Network.ARBITRUM]: {\n chainId: Network.ARBITRUM, //42161\n //Arbitrum deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/arbitrum.html\n addresses: {\n contracts: {\n multicall: '0x269ff446d9892c9e19082564df3f5e8741e190a1',\n poolDataQueries: '0x7Ba29fE8E83dd6097A7298075C4AFfdBda3121cC',\n gaugeClaimHelper: '0xa0dabebaad1b243bbb243f933013d560819eb66f',\n gyroConfigProxy: '0x9b683ca24b0e013512e2566b68704dbe9677413c',\n ...addressesByNetwork[Network.ARBITRUM].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.ARBITRUM].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.ARBITRUM].contracts.weth,\n lbpRaisingTokens: [\n '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', // DAI\n '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', // USDC\n '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', // WETH\n ],\n ...addressesByNetwork[Network.ARBITRUM].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-arbitrum-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-arbitrum',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-one-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'arbitrum-one',\n },\n },\n pools: {},\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n },\n ],\n sorTriPathMidPoolIds: [\n '0x178e029173417b1f9c8bc16dcec6f697bc323746000200000000000000000158', // wstEth/USDC.e to open up auraBAL/USDC\n '0x0052688295413b32626d226a205b95cdb337de860002000000000000000003d1', // arb/USDC.e to open up aura/USDC\n '0xa1a8bf131571a2139feb79401aa4a2e9482df6270002000000000000000004b4', // wstEth/Stable4Pool\n ],\n },\n [Network.GOERLI]: {\n chainId: Network.GOERLI, //5\n //Goerli deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/goerli.html\n addresses: {\n contracts: {\n multicall: '0x77dCa2C955b15e9dE4dbBCf1246B4B85b651e50e',\n poolDataQueries: '0x6d3197d069F8F9f1Fe7e23665Bc64CB77ED8b089',\n veBal: '0x33A99Dcc4C85C014cf12626959111D5898bbCAbF',\n veBalProxy: '0xA1F107D1cD709514AE8A914eCB757E95f9cedB31',\n erc4626LinearPoolFactory: '0xba240c856498e2d7a70af4911aafae0d6b565a5b',\n aaveLinearPoolFactory: '0x76578ecf9a141296ec657847fb45b0585bcda3a6',\n ...addressesByNetwork[Network.GOERLI].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.GOERLI].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.GOERLI].contracts.weth,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-goerli-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-goerli',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/blocklytics/goerli-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'ethereum',\n },\n },\n pools: {},\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1',\n },\n ],\n },\n [Network.OPTIMISM]: {\n chainId: Network.OPTIMISM, //10\n // Optimism deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/optimism.html\n addresses: {\n contracts: {\n multicall: '0x2dc0e2aa608532da689e89e237df582b783e552c',\n poolDataQueries: '0x6B5dA774890Db7B7b96C6f44e6a4b0F657399E2e',\n gyroConfigProxy: '0x32acb44fc929339b9f16f0449525cc590d2a23f3',\n ...addressesByNetwork[Network.OPTIMISM].contracts,\n },\n tokens: {\n bal: '0xfe8b128ba8c78aabc59d4c64cee7ff28e9379921',\n wrappedNativeAsset: addressesByNetwork[Network.OPTIMISM].contracts.weth,\n lbpRaisingTokens: [\n '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', // DAI\n '0x7f5c764cbc14f9669b88837ca1490cca17c31607', // USDC\n '0x4200000000000000000000000000000000000006', // WETH\n ],\n ...addressesByNetwork[Network.OPTIMISM].tokens,\n },\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'optimistic-ethereum',\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-optimism',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-optimism',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/lyra-finance/optimism-mainnet-blocks',\n },\n pools: {},\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x4200000000000000000000000000000000000006',\n },\n ],\n },\n [Network.GNOSIS]: {\n chainId: Network.GNOSIS, //100\n // Gnosis deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/gnosis.html\n addresses: {\n contracts: {\n multicall: '0xbb6fab6b627947dae0a75808250d8b2652952cb5',\n poolDataQueries: '0x3f170631ed9821Ca51A59D996aB095162438DC10',\n ...addressesByNetwork[Network.GNOSIS].contracts,\n },\n tokens: {\n wrappedNativeAsset: addressesByNetwork[Network.GNOSIS].contracts.weth,\n bal: addressesByNetwork[Network.GNOSIS].contracts.bal,\n ...addressesByNetwork[Network.GNOSIS].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gnosis-chain-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-gnosis-chain',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'xdai',\n platformId: 'xdai',\n },\n },\n averageBlockTime: 5,\n pools: {},\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d',\n },\n {\n symbol: 'wsEth',\n address: '0x6C76971f98945AE98dD7d4DFcA8711ebea946eA6',\n },\n ],\n sorTriPathMidPoolIds: [\n '0xeb30c85cc528537f5350cf5684ce6a4538e13394000200000000000000000059', // 3POOL_BPT/wstETH\n '0x7644fa5d0ea14fcf3e813fdf93ca9544f8567655000000000000000000000066', // sBAL3\n ],\n },\n [Network.FANTOM]: {\n chainId: Network.FANTOM, //250\n //Fantom deployment addresses: https://docs.beets.fi/technicals/deployments\n addresses: {\n contracts: {\n vault: '0x20dd72Ed959b6147912C2e529F0a0C651c33c9ce',\n multicall: '0x66335d7ad8011f6aa3f48aadcb523b62b38ed961',\n poolDataQueries: '0xb132F1E145DcC085980C531e2dA81f2b84efc14F',\n gaugeClaimHelper: '0x0000000000000000000000000000000000000000', // no guages on fantom\n balancerRelayer: '0x419f7925b8c9e409b6ee8792242556fa210a7a09',\n balancerHelpers: '0xfE18C7C70b0a2c6541bEde0367124278BC345Dc8',\n weightedPoolFactory: '0x60467cb225092cE0c989361934311175f437Cf53',\n composableStablePoolFactory:\n '0x44814E3A603bb7F1198617995c5696C232F6e8Ed',\n yearnLinearPoolFactory: '0x1f73ae6ed391a2b1e84ff988a1bb5394b78a4a71',\n },\n tokens: {\n bal: '0xF24Bcf4d1e507740041C9cFd2DddB29585aDCe1e', //beets\n wrappedNativeAsset: '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83',\n lbpRaisingTokens: [\n '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83', // WFTM\n '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75', // USDC\n '0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E', // DAI\n ],\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-v2-fantom',\n gaugesSubgraph: '', // no guages on fantom\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/beethovenxfi/fantom-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'ftm',\n platformId: 'fantom',\n },\n },\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [\n {\n symbol: 'wftm',\n address: '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83',\n },\n ],\n },\n [Network.SEPOLIA]: {\n chainId: Network.SEPOLIA, //11155111\n addresses: {\n contracts: {\n multicall: '0xcA11bde05977b3631167028862bE2a173976CA11',\n poolDataQueries: '0x9805dcfD25e6De36bad8fe9D3Fe2c9b44B764102',\n ...addressesByNetwork[Network.SEPOLIA].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.SEPOLIA].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.SEPOLIA].contracts.weth,\n ...addressesByNetwork[Network.SEPOLIA].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-sepolia-v2/version/latest',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'ethereum',\n },\n },\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [],\n },\n [Network.ZKEVM]: {\n chainId: Network.ZKEVM, //1101\n addresses: {\n contracts: {\n balancerMinter: '0x475D18169BE8a89357A9ee3Ab00ca386d20fA229',\n multicall: '0xcA11bde05977b3631167028862bE2a173976CA11',\n poolDataQueries: '0xF24917fB88261a37Cc57F686eBC831a5c0B9fD39',\n ...addressesByNetwork[Network.ZKEVM].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.ZKEVM].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.ZKEVM].contracts.weth,\n ...addressesByNetwork[Network.ZKEVM].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-polygon-zk-v2/version/latest',\n gaugesSubgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-gauges-polygon-zk/version/latest',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'polygon-zkevm',\n },\n },\n averageBlockTime: 4,\n multicallBatchSize: 128,\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9',\n },\n {\n symbol: 'wsEth',\n address: '0x5D8cfF95D7A57c0BF50B30b43c7CC0D52825D4a9',\n },\n ],\n },\n [Network.AVALANCHE]: {\n chainId: Network.AVALANCHE, //43114\n addresses: {\n contracts: {\n balancerMinter: '0xEa924b45a3fcDAAdf4E5cFB1665823B8F8F2039B',\n multicall: '0xcA11bde05977b3631167028862bE2a173976CA11',\n poolDataQueries: '0x67af5D428d38C5176a286a2371Df691cDD914Fb8',\n ...addressesByNetwork[Network.AVALANCHE].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.AVALANCHE].contracts.bal,\n wrappedNativeAsset:\n addressesByNetwork[Network.AVALANCHE].contracts.weth,\n ...addressesByNetwork[Network.AVALANCHE].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-avalanche-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-avalanche',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/iliaazhel/avalanche-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'avalanche-2',\n platformId: 'avalanche',\n },\n },\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [\n {\n symbol: 'WAVAX',\n address: '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7',\n },\n {\n symbol: 'sAVAX',\n address: '0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be',\n },\n ],\n },\n [Network.BASE]: {\n chainId: Network.BASE, //8453\n addresses: {\n contracts: {\n balancerMinter: '0xc7E5ED1054A24Ef31D827E6F86caA58B3Bc168d7',\n multicall: '0xcA11bde05977b3631167028862bE2a173976CA11',\n poolDataQueries: '',\n ...addressesByNetwork[Network.BASE].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.BASE].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.BASE].contracts.weth,\n ...addressesByNetwork[Network.BASE].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest',\n gaugesSubgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-gauges-base/version/latest',\n blockNumberSubgraph:\n 'https://api.studio.thegraph.com/query/48427/bleu-base-blocks/version/latest',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'base',\n },\n },\n averageBlockTime: 2,\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x4200000000000000000000000000000000000006',\n },\n ],\n sorTriPathMidPoolIds: [\n '0x2db50a0e0310723ef0c2a165cb9a9f80d772ba2f00020000000000000000000d', // weth/staBal\n ],\n },\n};\n\nexport const networkAddresses = (\n chainId: number\n): BalancerNetworkConfig['addresses'] =>\n BALANCER_NETWORK_CONFIG[chainId as Network].addresses;\n","export enum BalancerErrorCode {\n ABOVE_MAX_TOKENS = 'ABOVE_MAX_TOKENS',\n BELOW_MIN_TOKENS = 'BELOW_MIN_TOKENS',\n EXIT_DELTA_AMOUNTS = 'EXIT_DELTA_AMOUNTS',\n FEE_PROVIDER_NOT_PROVIDED = 'FEE_PROVIDER_NOT_PROVIDED',\n GAUGES_HELPER_ADDRESS_NOT_PROVIDED = 'GAUGES_HELPER_ADDRESS_NOT_PROVIDED',\n GAUGES_NOT_FOUND = 'GAUGES_NOT_FOUND',\n GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED = 'GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED',\n GAUGES_REWARD_TOKEN_EMPTY = 'GAUGES_REWARD_TOKEN_EMPTY',\n ILLEGAL_PARAMETER = 'ILLEGAL_PARAMETER',\n INTERNAL_ERROR_INVALID_ABI = 'INTERNAL_ERROR_INVALID_ABI',\n INPUT_LENGTH_MISMATCH = 'INPUT_LENGTH_MISMATCH',\n INPUT_OUT_OF_BOUNDS = 'INPUT_OUT_OF_BOUNDS',\n INPUT_TOKEN_INVALID = 'INPUT_TOKEN_INVALID',\n INVALID_PROTOCOL_ID = 'INVALID_PROTOCOL_ID',\n INVALID_SWAP_FEE_PERCENTAGE = 'INVALID_SWAP_FEE_PERCENTAGE',\n INVALID_WEIGHTS = 'INVALID_WEIGHTS',\n JOIN_DELTA_AMOUNTS = 'JOIN_DELTA_AMOUNTS',\n JOIN_WITH_ZERO_AMOUNT = 'JOIN_WITH_ZERO_AMOUNT',\n MISSING_AMP = 'MISSING_AMP',\n MISSING_DECIMALS = 'MISSING_DECIMALS',\n MISSING_PRICE_RATE = 'MISSING_PRICE_RATE',\n MISSING_TOKENS = 'MISSING_TOKENS',\n MISSING_WEIGHT = 'MISSING_WEIGHT',\n NO_POOL_DATA = 'NO_POOL_DATA',\n NO_VALUE_PARAMETER = 'NO_VALUE_PARAMETER',\n POOL_DOESNT_EXIST = 'POOL_DOESNT_EXIST',\n QUERY_BATCH_SWAP = 'QUERY_BATCH_SWAP',\n RELAY_SWAP_AMOUNTS = 'RELAY_SWAP_AMOUNTS',\n REWARD_TOKEN_ZERO = 'REWARD_TOKEN_ZERO',\n TIMESTAMP_IN_THE_FUTURE = 'TIMESTAMP_IN_THE_FUTURE',\n TOKEN_MISMATCH = 'TOKEN_MISMATCH',\n UNSUPPORTED_PAIR = 'UNSUPPORTED_PAIR',\n UNSUPPORTED_POOL_TYPE = 'UNSUPPORTED_POOL_TYPE',\n UNSUPPORTED_POOL_TYPE_VERSION = 'UNSUPPORTED_POOL_TYPE_VERSION',\n}\n\nexport class BalancerError extends Error {\n constructor(public code: BalancerErrorCode) {\n super(BalancerError.getMessage(code));\n this.name = 'BalancerError';\n }\n\n static getMessage(code: BalancerErrorCode): string {\n switch (code) {\n case BalancerErrorCode.ABOVE_MAX_TOKENS:\n return 'the array contains more tokens than the maximum allowed';\n case BalancerErrorCode.BELOW_MIN_TOKENS:\n return 'the array does not contain the minimum quantity of tokens';\n case BalancerErrorCode.EXIT_DELTA_AMOUNTS:\n return 'Error when checking exit call deltas';\n case BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED:\n return 'Fee Provider Repository has not been provided';\n case BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED:\n return 'Liquidity Gauges Helper Contract address has not been provided';\n case BalancerErrorCode.GAUGES_NOT_FOUND:\n return 'Liquidity Gauges not found with given addresses';\n case BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED:\n return 'Liquidity Gauges Reward Minter Contract address has not been provided';\n case BalancerErrorCode.GAUGES_REWARD_TOKEN_EMPTY:\n return 'No Reward Tokens for Liquidity Gauges provided';\n case BalancerErrorCode.INPUT_LENGTH_MISMATCH:\n return 'input length mismatch';\n case BalancerErrorCode.INPUT_OUT_OF_BOUNDS:\n return 'input out of bounds';\n case BalancerErrorCode.INPUT_TOKEN_INVALID:\n return 'input token invalid';\n case BalancerErrorCode.INVALID_PROTOCOL_ID:\n return 'The provided protocol id does not correspond to a protocol';\n case BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE:\n return 'The swap fee needs to be greater than zero and less than 1e17(10%)';\n case BalancerErrorCode.INVALID_WEIGHTS:\n return 'The sum of the weights needs to be equal to 1e18(100%)';\n case BalancerErrorCode.JOIN_DELTA_AMOUNTS:\n return 'Error when checking join call deltas';\n case BalancerErrorCode.JOIN_WITH_ZERO_AMOUNT:\n return 'Cant join pool with 0 amount of token in';\n case BalancerErrorCode.MISSING_AMP:\n return 'missing amp';\n case BalancerErrorCode.MISSING_DECIMALS:\n return 'missing decimals';\n case BalancerErrorCode.MISSING_PRICE_RATE:\n return 'missing price rate';\n case BalancerErrorCode.MISSING_TOKENS:\n return 'missing tokens';\n case BalancerErrorCode.MISSING_WEIGHT:\n return 'missing weight';\n case BalancerErrorCode.NO_POOL_DATA:\n return 'no pool data';\n case BalancerErrorCode.NO_VALUE_PARAMETER:\n return 'Illegal value passed as parameter';\n case BalancerErrorCode.POOL_DOESNT_EXIST:\n return 'balancer pool does not exist';\n case BalancerErrorCode.RELAY_SWAP_AMOUNTS:\n return 'Error when checking swap amounts';\n case BalancerErrorCode.REWARD_TOKEN_ZERO:\n return 'All Zero Values for Reward Tokens';\n case BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE:\n return 'Timestamp cannot be in the future';\n case BalancerErrorCode.TOKEN_MISMATCH:\n return 'token mismatch';\n case BalancerErrorCode.UNSUPPORTED_PAIR:\n return 'unsupported token pair';\n case BalancerErrorCode.UNSUPPORTED_POOL_TYPE:\n return 'unsupported pool type';\n default:\n return 'Unknown error';\n }\n }\n}\n","import { ONE, SolidityMaths } from '@/lib/utils/solidityMaths';\n\nexport function calcPriceImpact(\n bptAmount: bigint,\n bptZeroPriceImpact: bigint,\n isJoin: boolean\n): bigint {\n if (isJoin) return calcPriceImpactJoin(bptAmount, bptZeroPriceImpact);\n else return calcPriceImpactExit(bptAmount, bptZeroPriceImpact);\n}\n\nfunction calcPriceImpactJoin(\n bptAmount: bigint,\n bptZeroPriceImpact: bigint\n): bigint {\n // 1 - (bptAmount/bptZeroPI)\n const pi = ONE - SolidityMaths.divDownFixed(bptAmount, bptZeroPriceImpact);\n return pi < 0 ? BigInt(0) : pi;\n}\nfunction calcPriceImpactExit(\n bptAmount: bigint,\n bptZeroPriceImpact: bigint\n): bigint {\n // (bptAmount/bptZeroPI) - 1\n const pi = SolidityMaths.divDownFixed(bptAmount, bptZeroPriceImpact) - ONE;\n return pi < 0 ? BigInt(0) : pi;\n}\n","import { BZERO, SolidityMaths } from './solidityMaths';\n\nconst AMP_PRECISION = BigInt(1e3);\n\nexport function bptSpotPrice(\n amp: bigint,\n balances: bigint[],\n bptSupply: bigint,\n tokenIndexIn: number\n): bigint {\n const totalCoins = balances.length;\n const D = _calculateInvariant(amp, balances, true);\n let S = BZERO;\n let D_P = D / BigInt(totalCoins);\n for (let i = 0; i < totalCoins; i++) {\n if (i != tokenIndexIn) {\n S = S + balances[i];\n D_P = (D_P * D) / (BigInt(totalCoins) * balances[i]);\n }\n }\n const x = balances[tokenIndexIn];\n const alpha = amp * BigInt(totalCoins);\n const beta = alpha * S; // units: 10 ** 21\n const gamma = BigInt(AMP_PRECISION) - alpha;\n const partial_x = BigInt(2) * alpha * x + beta + gamma * D;\n const minus_partial_D =\n D_P * BigInt(totalCoins + 1) * AMP_PRECISION - gamma * x;\n const ans = SolidityMaths.divUpFixed(\n (partial_x * bptSupply) / minus_partial_D,\n D\n );\n return ans;\n}\n\nfunction _calculateInvariant(\n amp: bigint,\n balances: bigint[],\n roundUp: boolean\n): bigint {\n /**********************************************************************************************\n // invariant //\n // D = invariant D^(n+1) //\n // A = amplification coefficient A n^n S + D = A D n^n + ----------- //\n // S = sum of balances n^n P //\n // P = product of balances //\n // n = number of tokens //\n *********x************************************************************************************/\n\n // We support rounding up or down.\n\n let sum = BZERO;\n const numTokens = balances.length;\n for (let i = 0; i < numTokens; i++) {\n sum = sum + balances[i];\n }\n if (sum == BZERO) {\n return BZERO;\n }\n\n let prevInvariant = BZERO;\n let invariant = sum;\n const ampTimesTotal = amp * BigInt(numTokens);\n\n for (let i = 0; i < 255; i++) {\n let P_D = balances[0] * BigInt(numTokens);\n for (let j = 1; j < numTokens; j++) {\n P_D = SolidityMaths.div(\n SolidityMaths.mul(\n SolidityMaths.mul(P_D, balances[j]),\n BigInt(numTokens)\n ),\n invariant,\n roundUp\n );\n }\n prevInvariant = invariant;\n invariant = SolidityMaths.div(\n SolidityMaths.mul(\n SolidityMaths.mul(BigInt(numTokens), invariant),\n invariant\n ) +\n SolidityMaths.div(\n SolidityMaths.mul(SolidityMaths.mul(ampTimesTotal, sum), P_D),\n AMP_PRECISION,\n roundUp\n ),\n SolidityMaths.mul(BigInt(numTokens + 1), invariant) +\n // No need to use checked arithmetic for the amp precision, the amp is guaranteed to be at least 1\n SolidityMaths.div(\n SolidityMaths.mul(ampTimesTotal - AMP_PRECISION, P_D),\n AMP_PRECISION,\n !roundUp\n ),\n roundUp\n );\n\n if (invariant > prevInvariant) {\n if (invariant - prevInvariant <= 1) {\n return invariant;\n }\n } else if (prevInvariant - invariant <= 1) {\n return invariant;\n }\n }\n\n throw new Error('Errors.STABLE_INVARIANT_DIDNT_CONVERGE');\n}\n","import { PriceImpactConcern } from '@/modules/pools/pool-types/concerns/types';\nimport { ONE, BZERO, _upscale } from '@/lib/utils/solidityMaths';\nimport { calcPriceImpact } from '@/modules/pricing/priceImpact';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Pool } from '@/types';\nimport { bptSpotPrice } from '@/lib/utils/stableMathHelpers';\nimport { parsePoolInfo } from '@/lib/utils';\n\n// Note: this concern is used by Stable, MetaStable and StablePhantom pools\nexport class StablePoolPriceImpact implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n // upscales amp, swapfee, totalshares\n const {\n ampWithPrecision,\n scalingFactorsWithoutBpt,\n totalSharesEvm,\n upScaledBalancesWithoutBpt,\n } = parsePoolInfo(pool);\n\n // Check against array without BPT because concern is being reused by stablePhantom pools\n // Stable and MetaStable pools don't have BPT in the token list, so array without BPT is the same as the original array\n if (tokenAmounts.length !== upScaledBalancesWithoutBpt.length)\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n\n let bptZeroPriceImpact = BZERO;\n for (let i = 0; i < upScaledBalancesWithoutBpt.length; i++) {\n const price = bptSpotPrice(\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n totalSharesEvm,\n i\n );\n const amountUpscaled = _upscale(\n tokenAmounts[i],\n scalingFactorsWithoutBpt[i]\n );\n const newTerm = (price * amountUpscaled) / ONE;\n bptZeroPriceImpact += newTerm;\n }\n return bptZeroPriceImpact;\n }\n\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n const bptZeroPriceImpact = this.bptZeroPriceImpact(pool, tokenAmounts);\n return calcPriceImpact(bptAmount, bptZeroPriceImpact, isJoin).toString();\n }\n}\n","import { BigNumber, parseFixed } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport * as SOR from '@balancer-labs/sor';\nimport {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n ExitExactBPTInParameters,\n ExitExactTokensOutParameters,\n ExitPool,\n ExitPoolAttributes,\n} from '../types';\nimport { AssetHelpers, isSameAddress, parsePoolInfo } from '@/lib/utils';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { addSlippage, subSlippage } from '@/lib/utils/slippageHelper';\nimport { balancerVault } from '@/lib/constants/config';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport {\n _downscaleDown,\n _downscaleDownArray,\n _upscaleArray,\n} from '@/lib/utils/solidityMaths';\nimport { Pool } from '@/types';\nimport { BasePoolEncoder } from '@/pool-base';\nimport { StablePoolPriceImpact } from '../stable/priceImpact.concern';\n\ninterface SortedValues {\n poolTokens: string[];\n ampWithPrecision: bigint;\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n}\n\ntype ExactBPTInSortedValues = SortedValues & {\n scalingFactors: bigint[];\n singleTokenOutIndex: number;\n};\n\ntype ExactTokensOutSortedValues = SortedValues & {\n upScaledAmountsOut: bigint[];\n downScaledAmountsOut: string[];\n};\ntype CalcBptInGivenExactTokensOutParams = ExactTokensOutSortedValues &\n Pick;\n\ntype SortValuesParams = {\n pool: Pool;\n wrappedNativeAsset: string;\n shouldUnwrapNativeAsset?: boolean;\n};\n\ntype SortValuesExactBptInParams = SortValuesParams & {\n singleTokenOut?: string;\n};\n\ntype SortValuesExactTokensOutParams = SortValuesParams & {\n amountsOut: string[];\n tokensOut: string[];\n};\n\ntype EncodeExitParams = Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'toInternalBalance'\n> & {\n poolTokens: string[];\n poolId: string;\n userData: string;\n minAmountsOut: string[];\n};\n\nexport class StablePoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n });\n const sortedValues = this.sortValuesExitExactBptIn({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n });\n const { minAmountsOut, expectedAmountsOut } =\n sortedValues.singleTokenOutIndex >= 0\n ? this.calcTokenOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n })\n : this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData =\n sortedValues.singleTokenOutIndex >= 0\n ? StablePoolEncoder.exitExactBPTInForOneTokenOut(\n bptIn,\n sortedValues.singleTokenOutIndex\n )\n : StablePoolEncoder.exitExactBPTInForTokensOut(bptIn);\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n this.checkInputsExactTokensOut(amountsOut, tokensOut, pool);\n\n const sortedValues = this.sortValuesExitExactTokensOut({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n });\n const { expectedBPTIn, maxBPTIn } = this.calcBptInGivenExactTokensOut({\n ...sortedValues,\n slippage,\n });\n\n const { downScaledAmountsOut, poolTokens } = sortedValues;\n const userData = StablePoolEncoder.exitBPTInForExactTokensOut(\n downScaledAmountsOut,\n maxBPTIn\n );\n const encodedData = this.encodeExitPool({\n poolId: pool.id,\n userData,\n poolTokens,\n minAmountsOut: downScaledAmountsOut,\n exiter,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n downScaledAmountsOut.map(BigInt),\n BigInt(expectedBPTIn),\n false\n );\n\n return {\n ...encodedData,\n expectedBPTIn,\n maxBPTIn,\n priceImpact,\n };\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut: undefined,\n pool,\n shouldUnwrapNativeAsset: false,\n });\n const sortedValues = parsePoolInfo(pool);\n const { minAmountsOut, expectedAmountsOut } =\n this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n singleTokenOutIndex: -1,\n bptIn,\n slippage,\n });\n\n const userData = BasePoolEncoder.recoveryModeExit(bptIn);\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt inserted in the transaction\n * @param singleTokenOut (optional) the address of the single token that will be withdrawn, if null|undefined, all tokens will be withdrawn proportionally.\n * @param pool the pool that is being exited\n * @param shouldUnwrapNativeAsset Set true if the weth should be unwrapped to Eth\n */\n checkInputsExactBPTIn = ({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n }: Pick<\n ExitExactBPTInParameters,\n 'bptIn' | 'singleTokenOut' | 'pool' | 'shouldUnwrapNativeAsset'\n >): void => {\n if (!bptIn.length || parseFixed(bptIn, 18).isNegative()) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n if (\n singleTokenOut &&\n singleTokenOut !== AddressZero &&\n !pool.tokens\n .map((t) => t.address)\n .some((a) => isSameAddress(a, singleTokenOut))\n ) {\n throw new BalancerError(BalancerErrorCode.TOKEN_MISMATCH);\n }\n\n if (!shouldUnwrapNativeAsset && singleTokenOut === AddressZero)\n throw new Error(\n 'shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values'\n );\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n /**\n * Checks if the input of buildExitExactTokensOut is valid\n * @param amountsOut Must have an amount for each token, if the user will not withdraw any amount for a token, the value shall be '0'\n * @param tokensOut Must contain all the tokens of the pool\n * @param pool The pool that is being exited\n */\n checkInputsExactTokensOut = (\n amountsOut: string[],\n tokensOut: string[],\n pool: Pool\n ): void => {\n if (\n tokensOut.length != amountsOut.length ||\n tokensOut.length != pool.tokensList.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n sortValuesExitExactBptIn = ({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n }: SortValuesExactBptInParams): ExactBPTInSortedValues => {\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n // Parse pool info into EVM amounts in order to match amountsIn scalling\n const { poolTokens } = parsedPoolInfo;\n let singleTokenOutIndex = -1;\n if (singleTokenOut) {\n singleTokenOutIndex = poolTokens.indexOf(singleTokenOut);\n }\n return {\n ...parsedPoolInfo,\n singleTokenOutIndex,\n };\n };\n sortValuesExitExactTokensOut = ({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n }: SortValuesExactTokensOutParams): ExactTokensOutSortedValues => {\n const shouldUnwrapNativeAsset = tokensOut.some((a) => a === AddressZero);\n // Parse pool info into EVM amounts in order to match amountsOut scaling\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n const { scalingFactors } = parsedPoolInfo;\n\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts in into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, downScaledAmountsOut] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n // Maths should use upscaled amounts, e.g. 1USDC => 1e18 not 1e6\n const upScaledAmountsOut = _upscaleArray(\n downScaledAmountsOut.map((a) => BigInt(a)),\n scalingFactors.map((a) => BigInt(a))\n );\n\n return {\n ...parsedPoolInfo,\n upScaledAmountsOut,\n downScaledAmountsOut,\n };\n };\n calcTokenOutGivenExactBptIn = ({\n poolTokens,\n ampWithPrecision,\n upScaledBalances,\n totalSharesEvm,\n swapFeeEvm,\n singleTokenOutIndex,\n bptIn,\n slippage,\n scalingFactors,\n }: Pick<\n ExactBPTInSortedValues,\n | 'poolTokens'\n | 'ampWithPrecision'\n | 'upScaledBalances'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n | 'singleTokenOutIndex'\n | 'scalingFactors'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n // Calculate amount out given BPT in\n const amountOut = SOR.StableMathBigInt._calcTokenOutGivenExactBptIn(\n ampWithPrecision,\n upScaledBalances,\n singleTokenOutIndex,\n BigInt(bptIn),\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n const downscaledAmountOut = _downscaleDown(\n BigInt(amountOut) - BigInt(1), // The -1 is to solve rounding errors, sometimes the amount comes 1 point lower than expected\n scalingFactors[singleTokenOutIndex]\n ).toString();\n\n const expectedAmountsOut = Array(poolTokens.length).fill('0');\n const minAmountsOut = Array(poolTokens.length).fill('0');\n\n expectedAmountsOut[singleTokenOutIndex] = downscaledAmountOut;\n // Apply slippage tolerance\n minAmountsOut[singleTokenOutIndex] = subSlippage(\n BigNumber.from(downscaledAmountOut),\n BigNumber.from(slippage)\n ).toString();\n\n return { minAmountsOut, expectedAmountsOut };\n };\n\n calcTokensOutGivenExactBptIn = ({\n upScaledBalances,\n totalSharesEvm,\n scalingFactors,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n | 'upScaledBalances'\n | 'totalSharesEvm'\n | 'scalingFactors'\n | 'singleTokenOutIndex'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n const amountsOut = SOR.StableMathBigInt._calcTokensOutGivenExactBptIn(\n upScaledBalances,\n BigInt(bptIn),\n totalSharesEvm\n );\n // Maths return numbers scaled to 18 decimals. Must scale down to token decimals.\n const amountsOutScaledDown = _downscaleDownArray(\n amountsOut,\n scalingFactors\n );\n\n const expectedAmountsOut = amountsOutScaledDown.map((amount) =>\n amount.toString()\n );\n // Apply slippage tolerance\n const minAmountsOut = amountsOutScaledDown.map((amount) => {\n const minAmount = subSlippage(\n BigNumber.from(amount),\n BigNumber.from(slippage)\n );\n return minAmount.toString();\n });\n return { minAmountsOut, expectedAmountsOut };\n };\n calcBptInGivenExactTokensOut = ({\n ampWithPrecision,\n upScaledBalances,\n upScaledAmountsOut,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: CalcBptInGivenExactTokensOutParams): {\n maxBPTIn: string;\n expectedBPTIn: string;\n } => {\n // Calculate expected BPT in given tokens out\n const bptIn = SOR.StableMathBigInt._calcBptInGivenExactTokensOut(\n ampWithPrecision,\n upScaledBalances,\n upScaledAmountsOut,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n // Apply slippage tolerance\n const maxBPTIn = addSlippage(\n BigNumber.from(bptIn),\n BigNumber.from(slippage)\n ).toString();\n return { maxBPTIn, expectedBPTIn: bptIn };\n };\n\n encodeExitPool = ({\n poolId,\n exiter,\n poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n }: EncodeExitParams): ExitPoolAttributes => {\n const to = balancerVault;\n const functionName = 'exitPool';\n const attributes: ExitPool = {\n poolId,\n sender: exiter,\n recipient: exiter,\n exitPoolRequest: {\n assets: poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n },\n };\n // Encode transaction data into an ABI byte string which can be sent to the network to be executed\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.exitPoolRequest,\n ]);\n return { data, to, functionName, attributes };\n };\n}\n","import * as SOR from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { balancerVault } from '@/lib/constants/config';\nimport { AssetHelpers, getEthValue, parsePoolInfo } from '@/lib/utils';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { _upscaleArray } from '@/lib/utils/solidityMaths';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport { Pool } from '@/types';\n\nimport { StablePoolPriceImpact } from '../stable/priceImpact.concern';\nimport {\n JoinConcern,\n JoinPool,\n JoinPoolAttributes,\n JoinPoolParameters,\n} from '../types';\nimport { AddressZero } from '@ethersproject/constants';\n\ntype SortedValues = {\n poolTokens: string[];\n ampWithPrecision: bigint;\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n upScaledAmountsIn: bigint[];\n sortedAmountsIn: string[];\n};\n\ntype EncodeJoinPoolParams = {\n joiner: string;\n poolId: string;\n minBPTOut: string;\n} & Pick &\n Pick;\n\nexport class StablePoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n this.checkInputs(tokensIn, amountsIn, pool);\n const sortedValues = this.sortValues({\n pool,\n wrappedNativeAsset,\n tokensIn,\n amountsIn,\n });\n\n const { expectedBPTOut, minBPTOut } = this.calcBptOutGivenExactTokensIn({\n ...sortedValues,\n slippage,\n });\n\n const encodedData = this.encodeJoinPool({\n joiner,\n amountsIn,\n tokensIn,\n poolId: pool.id,\n minBPTOut,\n ...sortedValues,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n sortedValues.sortedAmountsIn.map(BigInt),\n BigInt(expectedBPTOut),\n true\n );\n\n return {\n ...encodedData,\n minBPTOut,\n expectedBPTOut,\n priceImpact,\n };\n };\n\n /**\n * Check if the input parameters of the buildJoin function are right\n * @param amountsIn Must have an amount for each token, if the user will not deposit any amount for a token, the value shall be '0'\n * @param tokensIn Must contain all the tokens of the pool\n * @param pool The pool that is being joined\n */\n checkInputs = (amountsIn: string[], tokensIn: string[], pool: Pool): void => {\n if (\n tokensIn.length != amountsIn.length ||\n tokensIn.length != pool.tokensList.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n\n sortValues = ({\n pool,\n wrappedNativeAsset,\n amountsIn,\n tokensIn,\n }: Pick<\n JoinPoolParameters,\n 'pool' | 'wrappedNativeAsset' | 'amountsIn' | 'tokensIn'\n >): SortedValues => {\n // Parse pool info into EVM amounts in order to match amountsIn scalling\n const {\n poolTokens,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n scalingFactors,\n upScaledBalances,\n } = parsePoolInfo(pool, wrappedNativeAsset, tokensIn.includes(AddressZero));\n\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts in into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, sortedAmountsIn] = assetHelpers.sortTokens(\n tokensIn,\n amountsIn\n ) as [string[], string[]];\n\n // Maths should use upscaled amounts, e.g. 1USDC => 1e18 not 1e6\n const upScaledAmountsIn = _upscaleArray(\n sortedAmountsIn.map((a) => BigInt(a)),\n scalingFactors.map((a) => BigInt(a))\n );\n return {\n poolTokens,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n upScaledBalances,\n upScaledAmountsIn,\n sortedAmountsIn,\n };\n };\n\n calcBptOutGivenExactTokensIn = ({\n ampWithPrecision,\n upScaledBalances,\n upScaledAmountsIn,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: Pick &\n Pick<\n SortedValues,\n | 'ampWithPrecision'\n | 'upScaledBalances'\n | 'upScaledAmountsIn'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n >): { expectedBPTOut: string; minBPTOut: string } => {\n const expectedBPTOut = SOR.StableMathBigInt._calcBptOutGivenExactTokensIn(\n ampWithPrecision,\n upScaledBalances,\n upScaledAmountsIn,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n const minBPTOut = subSlippage(\n BigNumber.from(expectedBPTOut),\n BigNumber.from(slippage)\n ).toString();\n\n return {\n expectedBPTOut,\n minBPTOut,\n };\n };\n\n encodeJoinPool = ({\n poolId,\n joiner,\n poolTokens,\n sortedAmountsIn,\n amountsIn,\n tokensIn,\n minBPTOut,\n }: EncodeJoinPoolParams): Pick<\n JoinPoolAttributes,\n 'value' | 'data' | 'to' | 'functionName' | 'attributes'\n > => {\n const userData = StablePoolEncoder.joinExactTokensInForBPTOut(\n sortedAmountsIn,\n minBPTOut\n );\n\n const to = balancerVault;\n const functionName = 'joinPool';\n const attributes: JoinPool = {\n poolId,\n sender: joiner,\n recipient: joiner,\n joinPoolRequest: {\n assets: poolTokens,\n maxAmountsIn: sortedAmountsIn,\n userData,\n fromInternalBalance: false,\n },\n };\n const vaultInterface = Vault__factory.createInterface();\n // encode transaction data into an ABI byte string which can be sent to the network to be executed\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ]);\n\n // If joining with a native asset value must be set in call\n const value = getEthValue(tokensIn, amountsIn);\n\n return {\n attributes,\n data,\n functionName,\n to,\n value,\n };\n };\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { parseFixed } from '@/lib/utils/math';\n\nconst SCALING_FACTOR = 18;\n\nexport class StablePoolLiquidity implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = BigNumber.from(0);\n let sumValue = BigNumber.from(0);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(token.price.usd.toString(), SCALING_FACTOR);\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n\n const value = balance.mul(price);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance.gt(0)) {\n const avgPrice = sumValue.div(sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n\n const value = balance.mul(avgPrice);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n }\n\n return formatFixed(sumValue, SCALING_FACTOR * 2).toString();\n }\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, StablePool, ZERO } from '@balancer-labs/sor';\nimport { Pool } from '@/types';\n\nexport class StablePoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const stablePool = StablePool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = stablePool.parsePoolPairData(tokenIn, tokenOut);\n return stablePool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n }\n}\n","import { StablePoolExit } from './concerns/stable/exit.concern';\nimport { StablePoolJoin } from './concerns/stable/join.concern';\nimport { StablePoolLiquidity } from './concerns/stable/liquidity.concern';\nimport { StablePoolSpotPrice } from './concerns/stable/spotPrice.concern';\nimport { StablePoolPriceImpact } from './concerns/stable/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class Stable implements PoolType {\n constructor(\n public exit: ExitConcern = new StablePoolExit(),\n public join: JoinConcern = new StablePoolJoin(),\n public liquidity: LiquidityConcern = new StablePoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new StablePoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new StablePoolPriceImpact()\n ) {}\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, PhantomStablePool, ZERO } from '@balancer-labs/sor';\nimport { Pool } from '@/types';\n\nexport class PhantomStablePoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const metaStablePool = PhantomStablePool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = metaStablePool.parsePoolPairData(tokenIn, tokenOut);\n return metaStablePool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n }\n}\n","import { StableMathBigInt } from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { balancerVault } from '@/lib/constants/config';\nimport {\n AssetHelpers,\n parsePoolInfo,\n insert,\n reorderArrays,\n getEthValue,\n} from '@/lib/utils';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { _upscaleArray } from '@/lib/utils/solidityMaths';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { Pool } from '@/types';\n\nimport { StablePoolPriceImpact } from '../stable/priceImpact.concern';\nimport {\n JoinPoolParameters,\n JoinConcern,\n JoinPoolAttributes,\n JoinPool,\n} from '../types';\nimport { AddressZero } from '@ethersproject/constants';\n\ninterface SortedValues {\n sortedAmountsIn: string[];\n scalingFactorsWithoutBpt: bigint[];\n upScaledBalancesWithoutBpt: bigint[];\n ampWithPrecision: bigint;\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n bptIndex: number;\n poolTokens: string[];\n}\n\ntype SortedInputs = SortedValues &\n Pick & {\n poolId: string;\n };\n\nexport class ComposableStablePoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n this.checkInputs(tokensIn, amountsIn, pool.tokensList);\n\n const sortedValues = this.sortValuesBasedOnPoolVersion({\n pool,\n wrappedNativeAsset,\n amountsIn,\n tokensIn,\n });\n\n const encodedData = this.buildExactTokensInForBPTOut({\n ...sortedValues,\n slippage,\n joiner,\n poolId: pool.id,\n });\n\n // If joining with a native asset value must be set in call\n const value = getEthValue(tokensIn, amountsIn);\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n sortedValues.sortedAmountsIn.map(BigInt),\n BigInt(encodedData.expectedBPTOut),\n true\n );\n\n return {\n ...encodedData,\n to: balancerVault,\n value,\n priceImpact,\n };\n };\n\n /**\n * Sorts inputs and pool value to be correct order and scale for maths and Vault interaction.\n * @param pool Pool data\n * @param wrappedNativeAsset (Used for sorting)\n * @param amountsIn Downscaled amounts in\n * @param tokensIn Addresses of token in\n * @returns Sorted values\n */\n sortValuesBasedOnPoolVersion({\n pool,\n wrappedNativeAsset,\n amountsIn,\n tokensIn,\n }: Pick<\n JoinPoolParameters,\n 'pool' | 'wrappedNativeAsset' | 'amountsIn' | 'tokensIn'\n >): SortedValues {\n /**\n * V1: Does not have proportional exits.\n * V2: Reintroduced proportional exits. Has vulnerability.\n * V3: Fixed vulnerability. Functionally the same as V2.\n * V4: Update to use new create method with new salt parameter\n * V5: Fixed vulnerability. Functionally the same as V4.\n */\n return this.sortV1(wrappedNativeAsset, tokensIn, amountsIn, pool);\n // Not release yet and needs tests to confirm\n // else if (values.pool.poolTypeVersion === 5)\n // sortedValues = this.sortV4(\n // values.tokensIn,\n // values.amountsIn,\n // values.pool\n // );\n }\n\n /**\n * Ensure tokensIn and amountsIn match pool tokens length\n * @param tokensIn\n * @param amountsIn\n * @param poolTokens\n */\n checkInputs(\n tokensIn: string[],\n amountsIn: string[],\n poolTokens: string[]\n ): void {\n if (\n tokensIn.length != amountsIn.length ||\n tokensIn.length != poolTokens.length - 1\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n }\n\n /**\n * Encodes user data with slippage applied to expected BPT out.\n * @param expectedBPTOut\n * @param slippage\n * @param amountsIn\n * @returns\n */\n encodeUserDataExactTokensInForBPTOut(\n expectedBPTOut: bigint,\n slippage: string,\n amountsIn: string[]\n ): { userData: string; minBPTOut: string } {\n const minBPTOut = subSlippage(\n BigNumber.from(expectedBPTOut),\n BigNumber.from(slippage)\n ).toString();\n\n //NEEDS TO ENCODE USER DATA WITHOUT BPT AMOUNT\n return {\n userData: ComposableStablePoolEncoder.joinExactTokensInForBPTOut(\n amountsIn, // No BPT amount\n minBPTOut\n ),\n minBPTOut,\n };\n }\n\n /**\n * Encode transaction data into an ABI byte string which can be sent to the network to be executed\n * @param poolId\n * @param sender\n * @param recipient\n * @param assetsWithBpt\n * @param encodedUserData\n * @param maxAmountsInWithBpt\n * @returns\n */\n encodeJoinPool(\n poolId: string,\n sender: string,\n recipient: string,\n assetsWithBpt: string[],\n encodedUserData: string,\n maxAmountsInWithBpt: string[]\n ): Pick {\n const functionName = 'joinPool';\n //assets AND maxAmountsIn NEEDS THE BPT VALUE IN THE ARRAY\n const attributes: JoinPool = {\n poolId,\n sender,\n recipient,\n joinPoolRequest: {\n assets: assetsWithBpt,\n maxAmountsIn: maxAmountsInWithBpt,\n userData: encodedUserData,\n fromInternalBalance: false,\n },\n };\n\n const vaultInterface = Vault__factory.createInterface();\n\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ]);\n\n return {\n functionName,\n attributes,\n data,\n };\n }\n\n /**\n * Sorts and scales values correctly for V1-V3 ComposableStable pool.\n * @param wrappedNativeAsset (Used for sorting)\n * @param tokensIn Addresses of token in\n * @param amountsIn Downscaled amounts in\n * @param pool Pool data\n * @returns Sorted values\n */\n sortV1(\n wrappedNativeAsset: string,\n tokensIn: string[],\n amountsIn: string[],\n pool: Pool\n ): SortedValues {\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts in into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, sortedAmountsIn] = assetHelpers.sortTokens(\n tokensIn,\n amountsIn\n ) as [string[], string[]];\n\n const {\n poolTokens,\n ampWithPrecision,\n swapFeeEvm,\n totalSharesEvm,\n bptIndex,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n } = parsePoolInfo(pool, wrappedNativeAsset, tokensIn.includes(AddressZero));\n return {\n sortedAmountsIn,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n bptIndex,\n poolTokens,\n };\n }\n\n buildExactTokensInForBPTOut(\n sortedValues: SortedInputs\n ): Pick<\n JoinPoolAttributes,\n 'minBPTOut' | 'functionName' | 'attributes' | 'data' | 'expectedBPTOut'\n > {\n const {\n sortedAmountsIn,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n bptIndex,\n poolTokens,\n slippage,\n poolId,\n joiner,\n } = sortedValues;\n // BPT out will be in correct scale and price rate is always 1e18 do doesn't need to be considered\n // Maths needs to have BPT values removed\n const expectedBPTOut = this.calcBptOutGivenExactTokensIn(\n sortedAmountsIn,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm\n );\n\n const userData = this.encodeUserDataExactTokensInForBPTOut(\n expectedBPTOut,\n slippage,\n sortedAmountsIn\n );\n\n const { functionName, data, attributes } = this.encodeJoinPool(\n poolId,\n joiner,\n joiner,\n poolTokens,\n userData.userData,\n insert(sortedAmountsIn, bptIndex, '0') // Adds value for BPT\n );\n\n return {\n functionName,\n data,\n attributes,\n minBPTOut: userData.minBPTOut,\n expectedBPTOut: expectedBPTOut.toString(),\n };\n }\n\n calcBptOutGivenExactTokensIn(\n amountsIn: string[],\n scalingFactorsWithoutBpt: bigint[],\n upScaledBalancesWithoutBpt: bigint[],\n ampWithPrecision: bigint,\n totalSharesEvm: bigint,\n swapFeeEvm: bigint\n ): bigint {\n /*\n Maths should use: \n - upscaled amounts, e.g. 1USDC = 1e18\n - rates (scaling factors should include these)\n */\n const upScaledAmountsIn = _upscaleArray(\n amountsIn.map(BigInt),\n scalingFactorsWithoutBpt.map(BigInt)\n );\n const expectedBPTOut = StableMathBigInt._calcBptOutGivenExactTokensIn(\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n upScaledAmountsIn, // Should not have BPT\n totalSharesEvm,\n swapFeeEvm\n );\n // BPT out will be in correct scale and price rate is always 1e18 do doesn't need to be considered\n return expectedBPTOut;\n }\n\n // This uses sorting where BPT is always at index 0.\n // Not currently released but keep for when it is.\n sortV4(tokensIn: string[], amountsIn: string[], pool: Pool): SortedValues {\n // This will keep ordering as read from Pool\n const {\n poolTokens,\n poolTokensWithoutBpt,\n ampWithPrecision,\n swapFeeEvm,\n totalSharesEvm,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n } = parsePoolInfo(pool);\n\n // Reorder amountsIn to match pool token order TODO - May have issues when adding native tokens to this mix.\n const [sortedAmountsIn] = reorderArrays(\n poolTokensWithoutBpt,\n tokensIn,\n amountsIn\n ) as [string[]];\n return {\n sortedAmountsIn,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n bptIndex: 0,\n poolTokens,\n };\n }\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\n\nimport * as SOR from '@balancer-labs/sor';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport {\n AssetHelpers,\n insert,\n isSameAddress,\n parsePoolInfo,\n} from '@/lib/utils';\nimport { addSlippage, subSlippage } from '@/lib/utils/slippageHelper';\nimport {\n _downscaleDown,\n _downscaleDownArray,\n _upscaleArray,\n} from '@/lib/utils/solidityMaths';\nimport { balancerVault } from '@/lib/constants/config';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { Pool } from '@/types';\nimport {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactBPTInParameters,\n ExitExactTokensOutAttributes,\n ExitExactTokensOutParameters,\n ExitPool,\n ExitPoolAttributes,\n} from '../types';\nimport { BasePoolEncoder } from '@/pool-base';\nimport { StablePoolPriceImpact } from '../stable/priceImpact.concern';\n\ninterface SortedValues {\n poolTokens: string[];\n ampWithPrecision: bigint;\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n bptIndex: number;\n upScaledBalancesWithoutBpt: bigint[];\n scalingFactors: bigint[];\n scalingFactorsWithoutBpt: bigint[];\n}\n\ntype ExactBPTInSortedValues = SortedValues & {\n singleTokenOutIndexWithoutBpt: number;\n};\ntype ExactTokensOutSortedValues = SortedValues & {\n upScaledAmountsOutWithoutBpt: bigint[];\n downscaledAmountsOutWithoutBpt: string[];\n downscaledAmountsOutWithBpt: string[];\n};\n\ntype CalcBptInGivenExactTokensOutParams = ExactTokensOutSortedValues &\n Pick;\n\ntype SortValuesParams = {\n pool: Pool;\n wrappedNativeAsset: string;\n shouldUnwrapNativeAsset?: boolean;\n};\n\ntype SortValuesExactBptInParams = SortValuesParams & {\n singleTokenOut?: string;\n};\n\ntype SortValuesExactTokensOutParams = SortValuesParams & {\n amountsOut: string[];\n tokensOut: string[];\n};\n\ntype EncodeExitParams = Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'toInternalBalance'\n> & {\n poolTokens: string[];\n poolId: string;\n userData: string;\n minAmountsOut: string[];\n};\n\nexport class ComposableStablePoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n });\n\n const sortedValues = this.sortValuesExitExactBptIn({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n });\n\n const { minAmountsOut, expectedAmountsOut } =\n sortedValues.singleTokenOutIndexWithoutBpt >= 0\n ? this.calcTokenOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n })\n : this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData =\n sortedValues.singleTokenOutIndexWithoutBpt >= 0\n ? ComposableStablePoolEncoder.exitExactBPTInForOneTokenOut(\n bptIn,\n sortedValues.singleTokenOutIndexWithoutBpt\n )\n : ComposableStablePoolEncoder.exitExactBPTInForAllTokensOut(bptIn);\n\n // MinAmounts needs a value for BPT for encoding\n const minAmountsOutWithBpt = insert(\n minAmountsOut,\n sortedValues.bptIndex,\n '0'\n );\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n userData,\n minAmountsOut: minAmountsOutWithBpt,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n this.checkInputsExactTokensOut(tokensOut, amountsOut, pool);\n const sortedValues = this.sortValuesExitExactTokensOut({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n });\n\n const { bptIn, maxBPTIn } = this.calcBptInGivenExactTokensOut({\n ...sortedValues,\n slippage,\n });\n\n // Have to make sure amountsOut does not have value for BPT index\n const userData = ComposableStablePoolEncoder.exitBPTInForExactTokensOut(\n sortedValues.downscaledAmountsOutWithoutBpt,\n maxBPTIn\n );\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n minAmountsOut: sortedValues.downscaledAmountsOutWithBpt,\n userData,\n exiter,\n poolId: pool.id,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n sortedValues.downscaledAmountsOutWithoutBpt.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n maxBPTIn,\n expectedBPTIn: bptIn,\n priceImpact,\n };\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n this.checkInputsRecoveryExit({\n bptIn,\n pool,\n });\n // Recovery exits don't use rates. We use them as part of scalingFactor so default to 1 incase of issues\n pool.tokens.forEach((t) => (t.priceRate = '1'));\n\n const sortedValues = parsePoolInfo(pool);\n\n const { minAmountsOut, expectedAmountsOut } =\n this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData = BasePoolEncoder.recoveryModeExit(bptIn);\n\n // MinAmounts needs a value for BPT for encoding\n const minAmountsOutWithBpt = insert(\n minAmountsOut,\n sortedValues.bptIndex,\n '0'\n );\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n userData,\n minAmountsOut: minAmountsOutWithBpt,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt amoun in EVM scale\n * @param singleTokenOut (optional) the address of the single token that will be withdrawn, if null|undefined, all tokens will be withdrawn proportionally.\n * @param pool the pool that is being exited\n * @param shouldUnwrapNativeAsset Set true if the weth should be unwrapped to Eth\n */\n checkInputsExactBPTIn = ({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n }: Pick<\n ExitExactBPTInParameters,\n 'bptIn' | 'singleTokenOut' | 'pool' | 'shouldUnwrapNativeAsset'\n >): void => {\n if (BigNumber.from(bptIn).lte(0)) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n if (!singleTokenOut && pool.poolTypeVersion < 2) {\n throw new Error('Unsupported Exit Type For Pool');\n }\n if (\n singleTokenOut &&\n singleTokenOut !== AddressZero &&\n !pool.tokens\n .map((t) => t.address)\n .some((a) => isSameAddress(a, singleTokenOut))\n ) {\n throw new BalancerError(BalancerErrorCode.TOKEN_MISMATCH);\n }\n\n if (!shouldUnwrapNativeAsset && singleTokenOut === AddressZero)\n throw new Error(\n 'shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values'\n );\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n\n /**\n * Checks if the input of buildExitExactTokensOut is valid\n */\n checkInputsExactTokensOut = (\n tokensOut: string[],\n amountsOut: string[],\n pool: Pool\n ): void => {\n // Should have a token for input for each non-BPT pool token\n // Should be an amount out for each token out\n if (\n tokensOut.length != amountsOut.length ||\n tokensOut.length != pool.tokensList.length - 1\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt amount in EVM scale\n * @param pool the pool that is being exited\n */\n checkInputsRecoveryExit = ({\n bptIn,\n pool,\n }: Pick): void => {\n if (BigNumber.from(bptIn).lte(0)) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n if (!pool.isInRecoveryMode) {\n throw new Error(\n 'Exit type not supported because pool is not in Recovery Mode'\n );\n }\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n\n /**\n * Sorts and returns the values of amounts, tokens, balances, indexes, that are necessary to do the maths and build the exit transactions\n * @param pool\n * @param singleTokenOut\n * @param wrappedNativeAsset\n * @param shouldUnwrapNativeAsset\n * @param amountsOut\n * @param tokensOut\n */\n sortValuesExitExactBptIn = ({\n pool,\n singleTokenOut,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n }: SortValuesExactBptInParams): ExactBPTInSortedValues => {\n const parsedValues = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n let singleTokenOutIndexWithoutBpt = -1;\n if (singleTokenOut) {\n singleTokenOutIndexWithoutBpt =\n parsedValues.poolTokensWithoutBpt.indexOf(singleTokenOut);\n }\n return {\n ...parsedValues,\n singleTokenOutIndexWithoutBpt,\n };\n };\n /**\n * Sorts and returns the values of amounts, tokens, balances, indexes, that are necessary to do the maths and build the exit transactions\n * @param pool\n * @param singleTokenOut\n * @param wrappedNativeAsset\n * @param amountsOut\n * @param tokensOut\n */\n sortValuesExitExactTokensOut = ({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n }: SortValuesExactTokensOutParams): ExactTokensOutSortedValues => {\n const shouldUnwrapNativeAsset = tokensOut.some((a) => a === AddressZero);\n const parsedValues = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts out into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, downscaledAmountsOutWithoutBpt] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n const downscaledAmountsOutWithBpt = insert(\n downscaledAmountsOutWithoutBpt,\n parsedValues.bptIndex,\n '0'\n );\n\n // This should not be required but there is currently a rounding issue with maths and this will ensure tx\n const downscaledAmountsOutWithBptWithRounding =\n downscaledAmountsOutWithBpt.map((a) => {\n const value = BigNumber.from(a);\n return value.isZero() ? a : value.sub(1).toString();\n });\n\n // Maths should use upscaled amounts with rates, e.g. 1USDC => 1e18 not 1e6\n const upScaledAmountsOutWithoutBpt = _upscaleArray(\n downscaledAmountsOutWithoutBpt.map((a) => BigInt(a)),\n parsedValues.scalingFactorsWithoutBpt\n );\n\n return {\n ...parsedValues,\n upScaledAmountsOutWithoutBpt,\n downscaledAmountsOutWithBpt: downscaledAmountsOutWithBptWithRounding,\n downscaledAmountsOutWithoutBpt,\n };\n };\n /**\n * Calculate the minimum and expect amountOut of the exit with exact bpt in transaction, and passes it to minAmountsOut and expectedAmountsOut arrays passed as parameters;\n * @param sortedValues\n * @param expectedAmountsOut\n * @param minAmountsOut\n * @param bptIn\n * @param slippage\n */\n calcTokenOutGivenExactBptIn = ({\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n singleTokenOutIndexWithoutBpt,\n scalingFactorsWithoutBpt,\n totalSharesEvm,\n swapFeeEvm,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n | 'ampWithPrecision'\n | 'upScaledBalancesWithoutBpt'\n | 'singleTokenOutIndexWithoutBpt'\n | 'scalingFactorsWithoutBpt'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n // Calculate amount out given BPT in\n const amountOut = SOR.StableMathBigInt._calcTokenOutGivenExactBptIn(\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n singleTokenOutIndexWithoutBpt,\n BigInt(bptIn),\n totalSharesEvm,\n swapFeeEvm\n );\n const expectedAmountsOut = Array(upScaledBalancesWithoutBpt.length).fill(\n '0'\n );\n const minAmountsOut = Array(upScaledBalancesWithoutBpt.length).fill('0');\n // Downscales to token decimals and removes priceRate\n const downscaledAmountOut = _downscaleDown(\n amountOut,\n scalingFactorsWithoutBpt[singleTokenOutIndexWithoutBpt]\n );\n\n expectedAmountsOut[singleTokenOutIndexWithoutBpt] =\n downscaledAmountOut.toString();\n // Apply slippage tolerance\n minAmountsOut[singleTokenOutIndexWithoutBpt] = subSlippage(\n BigNumber.from(downscaledAmountOut),\n BigNumber.from(slippage)\n ).toString();\n\n return { minAmountsOut, expectedAmountsOut };\n };\n\n calcTokensOutGivenExactBptIn = ({\n upScaledBalancesWithoutBpt,\n totalSharesEvm,\n scalingFactorsWithoutBpt,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n 'upScaledBalancesWithoutBpt' | 'totalSharesEvm' | 'scalingFactorsWithoutBpt'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n const amountsOut = SOR.StableMathBigInt._calcTokensOutGivenExactBptIn(\n upScaledBalancesWithoutBpt,\n BigInt(bptIn),\n totalSharesEvm\n );\n // Maths return numbers scaled to 18 decimals. Must scale down to token decimals.\n const amountsOutScaledDown = _downscaleDownArray(\n amountsOut,\n scalingFactorsWithoutBpt\n );\n\n const expectedAmountsOut = amountsOutScaledDown.map((amount) =>\n amount.toString()\n );\n // Apply slippage tolerance\n const minAmountsOut = amountsOutScaledDown.map((amount) => {\n const minAmount = subSlippage(\n BigNumber.from(amount),\n BigNumber.from(slippage)\n );\n return minAmount.toString();\n });\n return { minAmountsOut, expectedAmountsOut };\n };\n\n /**\n * Calculate the bptIn and maxBPTIn of the exit with exact tokens out transaction and returns them;\n * @param ampWithPrecision\n * @param upScaledBalancesWithoutBpt\n * @param upScaledAmountsOut\n * @param totalSharesEvm\n * @param swapFeeEvm\n * @param slippage\n */\n calcBptInGivenExactTokensOut = ({\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n upScaledAmountsOutWithoutBpt,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: CalcBptInGivenExactTokensOutParams): {\n bptIn: string;\n maxBPTIn: string;\n } => {\n const bptIn = SOR.StableMathBigInt._calcBptInGivenExactTokensOut(\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n upScaledAmountsOutWithoutBpt,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n // Apply slippage tolerance\n const maxBPTIn = addSlippage(\n BigNumber.from(bptIn),\n BigNumber.from(slippage)\n ).toString();\n\n return { bptIn, maxBPTIn };\n };\n\n /**\n * Encodes the function data and does the final building of the exit(with exact tokens out) transaction\n * @param params\n */\n encodeExitPool = (params: EncodeExitParams): ExitPoolAttributes => {\n const {\n exiter,\n poolId,\n minAmountsOut,\n userData,\n poolTokens,\n toInternalBalance,\n } = params;\n\n const to = balancerVault;\n const functionName = 'exitPool';\n const attributes: ExitPool = {\n poolId: poolId,\n sender: exiter,\n recipient: exiter,\n exitPoolRequest: {\n assets: poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n },\n };\n\n // encode transaction data into an ABI byte string which can be sent to the network to be executed\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.exitPoolRequest,\n ]);\n\n return {\n to,\n functionName,\n attributes,\n data,\n };\n };\n}\n","import { StablePoolLiquidity } from './concerns/stable/liquidity.concern';\nimport { PhantomStablePoolSpotPrice } from './concerns/stablePhantom/spotPrice.concern';\nimport { StablePoolPriceImpact } from './concerns/stable/priceImpact.concern';\nimport { ComposableStablePoolJoin } from './concerns/composableStable/join.concern';\nimport { ComposableStablePoolExit } from './concerns/composableStable/exit.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class ComposableStable implements PoolType {\n constructor(\n public exit: ExitConcern = new ComposableStablePoolExit(),\n public liquidity: LiquidityConcern = new StablePoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new PhantomStablePoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new StablePoolPriceImpact(),\n public join: JoinConcern = new ComposableStablePoolJoin()\n ) {}\n}\n","import { PriceImpactConcern } from '@/modules/pools/pool-types/concerns/types';\nimport { calcPriceImpact } from '@/modules/pricing/priceImpact';\nimport { ONE, BZERO, _upscale } from '@/lib/utils/solidityMaths';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Pool } from '@/types';\nimport { parsePoolInfo } from '@/lib/utils';\n\nexport class WeightedPoolPriceImpact implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n if (tokenAmounts.length !== pool.tokensList.length)\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n\n // totalShares, balances and weights all scaled up to 18 decimals\n const { scalingFactorsRaw, totalSharesEvm, upScaledBalances, weights } =\n parsePoolInfo(pool);\n\n let bptZeroPriceImpact = BZERO;\n for (let i = 0; i < tokenAmounts.length; i++) {\n const price = (weights[i] * totalSharesEvm) / upScaledBalances[i];\n const amountUpscaled = _upscale(tokenAmounts[i], scalingFactorsRaw[i]);\n const newTerm = (price * amountUpscaled) / ONE;\n bptZeroPriceImpact += newTerm;\n }\n return bptZeroPriceImpact;\n }\n\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n const bptZeroPriceImpact = this.bptZeroPriceImpact(pool, tokenAmounts);\n return calcPriceImpact(bptAmount, bptZeroPriceImpact, isJoin).toString();\n }\n}\n","import { BigNumber, parseFixed } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport * as SOR from '@balancer-labs/sor';\nimport {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n ExitExactBPTInParameters,\n ExitExactTokensOutParameters,\n ExitPool,\n ExitPoolAttributes,\n} from '../types';\nimport { AssetHelpers, isSameAddress, parsePoolInfo } from '@/lib/utils';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { addSlippage, subSlippage } from '@/lib/utils/slippageHelper';\nimport { balancerVault } from '@/lib/constants/config';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport {\n _downscaleDown,\n _downscaleDownArray,\n _upscaleArray,\n} from '@/lib/utils/solidityMaths';\nimport { Pool } from '@/types';\nimport { BasePoolEncoder } from '@/pool-base';\nimport { WeightedPoolPriceImpact } from '../weighted/priceImpact.concern';\n\ninterface SortedValues {\n poolTokens: string[];\n weights: bigint[];\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n}\n\ntype ExactBPTInSortedValues = SortedValues & {\n scalingFactors: bigint[];\n singleTokenOutIndex: number;\n};\n\ntype ExactTokensOutSortedValues = SortedValues & {\n upScaledAmountsOut: bigint[];\n downScaledAmountsOut: string[];\n};\ntype CalcBptInGivenExactTokensOutParams = ExactTokensOutSortedValues &\n Pick;\n\ntype SortValuesParams = {\n pool: Pool;\n wrappedNativeAsset: string;\n shouldUnwrapNativeAsset?: boolean;\n};\n\ntype SortValuesExactBptInParams = SortValuesParams & {\n singleTokenOut?: string;\n};\n\ntype SortValuesExactTokensOutParams = SortValuesParams & {\n amountsOut: string[];\n tokensOut: string[];\n};\n\ntype EncodeExitParams = Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'toInternalBalance'\n> & {\n poolTokens: string[];\n poolId: string;\n userData: string;\n minAmountsOut: string[];\n};\n\nexport class WeightedPoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n });\n const sortedValues = this.sortValuesExitExactBptIn({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n });\n const { minAmountsOut, expectedAmountsOut } =\n sortedValues.singleTokenOutIndex >= 0\n ? this.calcTokenOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n })\n : this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData =\n sortedValues.singleTokenOutIndex >= 0\n ? WeightedPoolEncoder.exitExactBPTInForOneTokenOut(\n bptIn,\n sortedValues.singleTokenOutIndex\n )\n : WeightedPoolEncoder.exitExactBPTInForTokensOut(bptIn);\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new WeightedPoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n this.checkInputsExactTokensOut(amountsOut, tokensOut, pool);\n\n const sortedValues = this.sortValuesExitExactTokensOut({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n });\n const { expectedBPTIn, maxBPTIn } = this.calcBptInGivenExactTokensOut({\n ...sortedValues,\n slippage,\n });\n\n const { downScaledAmountsOut, poolTokens } = sortedValues;\n const userData = WeightedPoolEncoder.exitBPTInForExactTokensOut(\n downScaledAmountsOut,\n maxBPTIn\n );\n const encodedData = this.encodeExitPool({\n poolId: pool.id,\n userData,\n poolTokens,\n minAmountsOut: downScaledAmountsOut,\n exiter,\n toInternalBalance,\n });\n\n const priceImpactConcern = new WeightedPoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n downScaledAmountsOut.map(BigInt),\n BigInt(expectedBPTIn),\n false\n );\n\n return {\n ...encodedData,\n expectedBPTIn,\n maxBPTIn,\n priceImpact,\n };\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut: undefined,\n pool,\n shouldUnwrapNativeAsset: false,\n });\n // Recovery exits don't use rates. We use them as part of scalingFactor so default to 1 incase of issues\n pool.tokens.forEach((t) => (t.priceRate = '1'));\n const sortedValues = parsePoolInfo(pool);\n const { minAmountsOut, expectedAmountsOut } =\n this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n singleTokenOutIndex: -1,\n });\n\n const userData = BasePoolEncoder.recoveryModeExit(bptIn);\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new WeightedPoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt inserted in the transaction\n * @param singleTokenOut (optional) the address of the single token that will be withdrawn, if null|undefined, all tokens will be withdrawn proportionally.\n * @param pool the pool that is being exited\n * @param shouldUnwrapNativeAsset Set true if the weth should be unwrapped to Eth\n */\n checkInputsExactBPTIn = ({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n }: Pick<\n ExitExactBPTInParameters,\n 'bptIn' | 'singleTokenOut' | 'pool' | 'shouldUnwrapNativeAsset'\n >): void => {\n if (!bptIn.length || parseFixed(bptIn, 18).isNegative()) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n if (\n singleTokenOut &&\n singleTokenOut !== AddressZero &&\n !pool.tokens\n .map((t) => t.address)\n .some((a) => isSameAddress(a, singleTokenOut))\n ) {\n throw new BalancerError(BalancerErrorCode.TOKEN_MISMATCH);\n }\n\n if (!shouldUnwrapNativeAsset && singleTokenOut === AddressZero)\n throw new Error(\n 'shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values'\n );\n\n // Check if there's any relevant weighted pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n };\n /**\n * Checks if the input of buildExitExactTokensOut is valid\n * @param amountsOut Must have an amount for each token, if the user will not withdraw any amount for a token, the value shall be '0'\n * @param tokensOut Must contain all the tokens of the pool\n * @param pool The pool that is being exited\n */\n checkInputsExactTokensOut = (\n amountsOut: string[],\n tokensOut: string[],\n pool: Pool\n ): void => {\n if (\n tokensOut.length != amountsOut.length ||\n tokensOut.length != pool.tokensList.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n // Check if there's any important weighted pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n };\n sortValuesExitExactBptIn = ({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n }: SortValuesExactBptInParams): ExactBPTInSortedValues => {\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n // Parse pool info into EVM amounts in order to match amountsIn scalling\n const { poolTokens } = parsedPoolInfo;\n let singleTokenOutIndex = -1;\n if (singleTokenOut) {\n singleTokenOutIndex = poolTokens.indexOf(singleTokenOut.toLowerCase());\n }\n return {\n ...parsedPoolInfo,\n singleTokenOutIndex,\n };\n };\n sortValuesExitExactTokensOut = ({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n }: SortValuesExactTokensOutParams): ExactTokensOutSortedValues => {\n const shouldUnwrapNativeAsset = tokensOut.some((a) => a === AddressZero);\n // Parse pool info into EVM amounts in order to match amountsOut scaling\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n const { scalingFactors } = parsedPoolInfo;\n\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts in into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, downScaledAmountsOut] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n // Maths should use upscaled amounts, e.g. 1USDC => 1e18 not 1e6\n const upScaledAmountsOut = _upscaleArray(\n downScaledAmountsOut.map((a) => BigInt(a)),\n scalingFactors.map((a) => BigInt(a))\n );\n\n return {\n ...parsedPoolInfo,\n upScaledAmountsOut,\n downScaledAmountsOut,\n };\n };\n calcTokenOutGivenExactBptIn = ({\n poolTokens,\n weights,\n upScaledBalances,\n totalSharesEvm,\n swapFeeEvm,\n singleTokenOutIndex,\n bptIn,\n slippage,\n scalingFactors,\n }: Pick<\n ExactBPTInSortedValues,\n | 'poolTokens'\n | 'weights'\n | 'upScaledBalances'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n | 'singleTokenOutIndex'\n | 'scalingFactors'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n // Calculate amount out given BPT in\n const amountOut = SOR.WeightedMaths._calcTokenOutGivenExactBptIn(\n upScaledBalances[singleTokenOutIndex],\n weights[singleTokenOutIndex],\n BigInt(bptIn),\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n const downscaledAmountOut = _downscaleDown(\n BigInt(amountOut) - BigInt(1), // The -1 is to solve rounding errors, sometimes the amount comes 1 point lower than expected\n scalingFactors[singleTokenOutIndex]\n ).toString();\n\n const expectedAmountsOut = Array(poolTokens.length).fill('0');\n const minAmountsOut = Array(poolTokens.length).fill('0');\n\n expectedAmountsOut[singleTokenOutIndex] = downscaledAmountOut;\n // Apply slippage tolerance\n minAmountsOut[singleTokenOutIndex] = subSlippage(\n BigNumber.from(downscaledAmountOut),\n BigNumber.from(slippage)\n ).toString();\n\n return { minAmountsOut, expectedAmountsOut };\n };\n\n calcTokensOutGivenExactBptIn = ({\n upScaledBalances,\n totalSharesEvm,\n scalingFactors,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n | 'upScaledBalances'\n | 'totalSharesEvm'\n | 'scalingFactors'\n | 'singleTokenOutIndex'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n // Calculate amounts out given BPT in\n const amountsOut = SOR.WeightedMaths._calcTokensOutGivenExactBptIn(\n upScaledBalances,\n BigInt(bptIn),\n totalSharesEvm\n ).map((amount) => amount.toString());\n // Maths return numbers scaled to 18 decimals. Must scale down to token decimals.\n const amountsOutScaledDown = _downscaleDownArray(\n amountsOut.map((a) => BigInt(a)),\n scalingFactors\n );\n\n const expectedAmountsOut = amountsOutScaledDown.map((amount) =>\n amount.toString()\n );\n // Apply slippage tolerance\n const minAmountsOut = amountsOutScaledDown.map((amount) => {\n const minAmount = subSlippage(\n BigNumber.from(amount),\n BigNumber.from(slippage)\n );\n return minAmount.toString();\n });\n return { minAmountsOut, expectedAmountsOut };\n };\n calcBptInGivenExactTokensOut = ({\n weights,\n upScaledBalances,\n upScaledAmountsOut,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: CalcBptInGivenExactTokensOutParams): {\n maxBPTIn: string;\n expectedBPTIn: string;\n } => {\n // Calculate expected BPT in given tokens out\n const bptIn = SOR.WeightedMaths._calcBptInGivenExactTokensOut(\n upScaledBalances,\n weights,\n upScaledAmountsOut,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n // Apply slippage tolerance\n const maxBPTIn = addSlippage(\n BigNumber.from(bptIn),\n BigNumber.from(slippage)\n ).toString();\n return { maxBPTIn, expectedBPTIn: bptIn };\n };\n\n encodeExitPool = ({\n poolId,\n exiter,\n poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n }: EncodeExitParams): ExitPoolAttributes => {\n const to = balancerVault;\n const functionName = 'exitPool';\n const attributes: ExitPool = {\n poolId,\n sender: exiter,\n recipient: exiter,\n exitPoolRequest: {\n assets: poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n },\n };\n // Encode transaction data into an ABI byte string which can be sent to the network to be executed\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.exitPoolRequest,\n ]);\n return { data, to, functionName, attributes };\n };\n}\n","import { WeightedMaths } from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { balancerVault } from '@/lib/constants/config';\nimport { AssetHelpers, getEthValue, parsePoolInfo } from '@/lib/utils';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { _upscaleArray } from '@/lib/utils/solidityMaths';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { Address, Pool } from '@/types';\nimport {\n JoinConcern,\n JoinPool,\n JoinPoolAttributes,\n JoinPoolParameters,\n} from '../types';\nimport { WeightedPoolPriceImpact } from '../weighted/priceImpact.concern';\n\ntype SortedValues = {\n poolTokens: string[];\n weights: bigint[];\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n upScaledAmountsIn: bigint[];\n sortedAmountsIn: string[];\n};\n\nexport class WeightedPoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n this.checkInputs(amountsIn, tokensIn, pool);\n\n const sortedValues = this.sortValues({\n pool,\n wrappedNativeAsset,\n tokensIn,\n amountsIn,\n });\n\n const { expectedBPTOut, minBPTOut } = this.calcBptOutGivenExactTokensIn({\n ...sortedValues,\n slippage,\n });\n\n const encodedFunctionData = this.encodeJoinPool({\n ...sortedValues,\n poolId: pool.id,\n joiner,\n minBPTOut,\n tokensIn,\n amountsIn,\n });\n\n const priceImpactConcern = new WeightedPoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n sortedValues.sortedAmountsIn.map(BigInt),\n BigInt(expectedBPTOut),\n true\n );\n\n return {\n ...encodedFunctionData,\n minBPTOut,\n expectedBPTOut,\n priceImpact,\n };\n };\n\n /**\n * Check if the input parameters of the buildJoin function are right\n * @param amountsIn Must have an amount for each token, if the user will not deposit any amount for a token, the value shall be '0'\n * @param tokensIn Must contain all the tokens of the pool\n * @param pool The pool that is being joined\n */\n checkInputs = (tokensIn: string[], amountsIn: string[], pool: Pool): void => {\n if (\n tokensIn.length != amountsIn.length ||\n tokensIn.length != pool.tokensList.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n\n // Check if there's any relevant weighted pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (pool.tokens.some((token) => !token.weight))\n throw new BalancerError(BalancerErrorCode.MISSING_WEIGHT);\n };\n\n sortValues = ({\n pool,\n tokensIn,\n amountsIn,\n wrappedNativeAsset,\n }: Pick<\n JoinPoolParameters,\n 'pool' | 'wrappedNativeAsset' | 'amountsIn' | 'tokensIn'\n >): SortedValues => {\n const shouldUnwrapNativeAsset = tokensIn.some((a) => a === AddressZero);\n // Parse pool info into EVM amounts in order to match amountsIn scalling\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // sort inputs\n const [, sortedAmountsIn] = assetHelpers.sortTokens(\n tokensIn,\n amountsIn\n ) as [string[], string[]];\n const upScaledAmountsIn = _upscaleArray(\n sortedAmountsIn.map(BigInt),\n parsedPoolInfo.scalingFactors\n );\n // sort pool info\n return {\n ...parsedPoolInfo,\n sortedAmountsIn,\n upScaledAmountsIn,\n };\n };\n\n calcBptOutGivenExactTokensIn = ({\n upScaledBalances,\n weights,\n upScaledAmountsIn,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: Pick &\n Pick<\n SortedValues,\n | 'upScaledBalances'\n | 'weights'\n | 'upScaledAmountsIn'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n >): { expectedBPTOut: string; minBPTOut: string } => {\n const expectedBPTOut = WeightedMaths._calcBptOutGivenExactTokensIn(\n upScaledBalances,\n weights,\n upScaledAmountsIn,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n const minBPTOut = subSlippage(\n BigNumber.from(expectedBPTOut),\n BigNumber.from(slippage)\n ).toString();\n\n return {\n expectedBPTOut,\n minBPTOut,\n };\n };\n encodeJoinPool = ({\n sortedAmountsIn,\n poolTokens,\n poolId,\n joiner,\n minBPTOut,\n amountsIn,\n tokensIn,\n }: Pick &\n Pick & {\n joiner: Address;\n poolId: string;\n minBPTOut: string;\n }): Pick<\n JoinPoolAttributes,\n 'value' | 'data' | 'to' | 'functionName' | 'attributes'\n > => {\n const userData = WeightedPoolEncoder.joinExactTokensInForBPTOut(\n sortedAmountsIn,\n minBPTOut\n );\n const to = balancerVault;\n const functionName = 'joinPool';\n const attributes: JoinPool = {\n poolId,\n sender: joiner,\n recipient: joiner,\n joinPoolRequest: {\n assets: poolTokens,\n maxAmountsIn: sortedAmountsIn,\n userData,\n fromInternalBalance: false,\n },\n };\n const vaultInterface = Vault__factory.createInterface();\n // encode transaction data into an ABI byte string which can be sent to the network to be executed\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ]);\n\n const value = getEthValue(tokensIn, amountsIn);\n\n return {\n to,\n functionName,\n data,\n attributes,\n value,\n };\n };\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { parseFixed, formatFixed } from '@/lib/utils/math';\n\nconst SCALING_FACTOR = 18;\n\nexport class WeightedPoolLiquidity implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumWeight = BigNumber.from(0);\n let sumValue = BigNumber.from(0);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (!token.price?.usd) {\n continue;\n }\n\n let price: BigNumber;\n if (parseFloat(token.price.usd) < 1) {\n price = parseFixed(parseFloat(token.price.usd).toFixed(10), 10).mul(\n 1e8\n );\n } else {\n price = parseFixed(token.price.usd, SCALING_FACTOR);\n }\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n const weight = parseFixed(token.weight || '0', SCALING_FACTOR);\n\n const value = balance.mul(price);\n sumValue = sumValue.add(value);\n sumWeight = sumWeight.add(weight);\n }\n\n // Scale the known prices of x% of the pool to get value of 100% of the pool.\n const totalWeight = tokens.reduce(\n (total: BigNumber, token) =>\n total.add(parseFixed(token.weight || '0', SCALING_FACTOR)),\n BigNumber.from(0)\n );\n if (sumWeight.gt(0)) {\n const liquidity = sumValue.mul(totalWeight).div(sumWeight);\n return formatFixed(liquidity, SCALING_FACTOR * 2);\n }\n\n return '0';\n }\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, WeightedPool, ZERO } from '@balancer-labs/sor';\nimport { Pool, PoolToken } from '@/types';\n\nexport class WeightedPoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const isBPTAsToken = tokenIn === pool.address || tokenOut === pool.address;\n if (isBPTAsToken) {\n const bptAsToken: PoolToken = {\n address: pool.address,\n balance: pool.totalShares,\n decimals: 18,\n priceRate: '1',\n weight: '0',\n };\n pool.tokens.push(bptAsToken);\n pool.tokensList.push(pool.address);\n }\n const weightedPool = WeightedPool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = weightedPool.parsePoolPairData(tokenIn, tokenOut);\n const spotPrice = weightedPool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n if (isBPTAsToken) {\n pool.tokens.pop();\n pool.tokensList.pop();\n }\n return spotPrice;\n }\n}\n","import { WeightedPoolExit } from './concerns/weighted/exit.concern';\nimport { WeightedPoolJoin } from './concerns/weighted/join.concern';\nimport { WeightedPoolLiquidity } from './concerns/weighted/liquidity.concern';\nimport { WeightedPoolSpotPrice } from './concerns/weighted/spotPrice.concern';\nimport { WeightedPoolPriceImpact } from './concerns/weighted/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class Weighted implements PoolType {\n constructor(\n public exit: ExitConcern = new WeightedPoolExit(),\n public join: JoinConcern = new WeightedPoolJoin(),\n public liquidity: LiquidityConcern = new WeightedPoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new WeightedPoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new WeightedPoolPriceImpact()\n ) {}\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { formatFixed } from '@ethersproject/bignumber';\nimport { parseFixed } from '@/lib/utils/math';\nimport { Zero } from '@ethersproject/constants';\n\nconst SCALING_FACTOR = 18;\n\nexport class MetaStablePoolLiquidity implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = Zero;\n let sumValue = Zero;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(token.price.usd.toString(), SCALING_FACTOR);\n\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n\n const value = balance.mul(price);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance.gt(0)) {\n const avgPrice = sumValue.div(sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n\n const value = balance.mul(avgPrice);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n }\n\n return formatFixed(sumValue, SCALING_FACTOR * 2).toString();\n }\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, MetaStablePool, ZERO } from '@balancer-labs/sor';\nimport { Pool } from '@/types';\n\nexport class MetaStablePoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const metaStablePool = MetaStablePool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = metaStablePool.parsePoolPairData(tokenIn, tokenOut);\n return metaStablePool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n }\n}\n","import { MetaStablePoolLiquidity } from './concerns/metaStable/liquidity.concern';\nimport { MetaStablePoolSpotPrice } from './concerns/metaStable/spotPrice.concern';\nimport { StablePoolPriceImpact } from './concerns/stable/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n SpotPriceConcern,\n PriceImpactConcern,\n} from './concerns/types';\nimport { StablePoolExit } from '@/modules/pools/pool-types/concerns/stable/exit.concern';\nimport { StablePoolJoin } from '@/modules/pools/pool-types/concerns/stable/join.concern';\n\nexport class MetaStable implements PoolType {\n constructor(\n public exit: ExitConcern = new StablePoolExit(),\n public join: JoinConcern = new StablePoolJoin(),\n public liquidity: LiquidityConcern = new MetaStablePoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new MetaStablePoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new StablePoolPriceImpact()\n ) {}\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {\n ExitConcern,\n ExitExactBPTInParameters,\n ExitExactTokensOutParameters,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n} from '../types';\n\nexport class StablePhantomPoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n /**\n * Exit type only supported when pool is in paused state and pause window\n * has expired, so this type of exit will not be supported.\n */\n throw new Error('Exit type not supported');\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n throw new Error('Exit type not supported');\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n throw new Error('Exit type not supported');\n };\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { JoinPoolParameters, JoinConcern, JoinPoolAttributes } from '../types';\n\nexport class StablePhantomPoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n throw new Error('Join type not supported');\n };\n}\n","import { StablePhantomPoolExit } from './concerns/stablePhantom/exit.concern';\nimport { StablePhantomPoolJoin } from './concerns/stablePhantom/join.concern';\nimport { StablePoolLiquidity } from './concerns/stable/liquidity.concern';\nimport { PhantomStablePoolSpotPrice } from './concerns/stablePhantom/spotPrice.concern';\nimport { StablePoolPriceImpact } from './concerns/stable/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n PriceImpactConcern,\n LiquidityConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class StablePhantom implements PoolType {\n constructor(\n public exit: ExitConcern = new StablePhantomPoolExit(),\n public join: JoinConcern = new StablePhantomPoolJoin(),\n public liquidity: LiquidityConcern = new StablePoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new PhantomStablePoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new StablePoolPriceImpact()\n ) {}\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { PriceImpactConcern } from '../types';\nimport { Pool } from '@/types';\n\nexport class LinearPriceImpact implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n throw new Error('Linear Pool bptZeroPriceImpact Not Implented');\n }\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n // Linear pools don't have price impact\n return '0';\n }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport * as SOR from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts';\nimport { balancerVault } from '@/lib/constants/config';\nimport { insert, parsePoolInfo, removeItem } from '@/lib/utils';\nimport { _downscaleDownArray } from '@/lib/utils/solidityMaths';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { BasePoolEncoder } from '@/pool-base';\n\nimport {\n ExitConcern,\n ExitExactBPTInParameters,\n ExitExactTokensOutParameters,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n ExitPoolAttributes,\n ExitPool,\n} from '../types';\nimport { LinearPriceImpact } from '../linear/priceImpact.concern';\n\ninterface SortedValues {\n bptIndex: number;\n poolTokens: string[];\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n}\n\ntype ExactBPTInSortedValues = SortedValues & {\n scalingFactors: bigint[];\n};\n\ntype EncodeExitParams = Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'toInternalBalance'\n> & {\n poolTokens: string[];\n poolId: string;\n userData: string;\n minAmountsOut: string[];\n};\n\nexport class LinearPoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n throw new Error('Exit type not supported');\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n throw new Error('Exit type not supported');\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut: undefined,\n pool,\n shouldUnwrapNativeAsset: false,\n });\n // Recovery exits don't use rates. We use them as part of scalingFactor so default to 1 incase of issues\n pool.tokens.forEach((t) => (t.priceRate = '1'));\n const sortedValues = parsePoolInfo(pool);\n const { minAmountsOut, expectedAmountsOut } =\n this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData = BasePoolEncoder.recoveryModeExit(bptIn);\n\n // MinAmounts needs a value for BPT for encoding\n const minAmountsOutWithBpt = insert(\n minAmountsOut,\n sortedValues.bptIndex,\n '0'\n );\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut: minAmountsOutWithBpt,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new LinearPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt amount in EVM scale\n * @param pool the pool that is being exited\n */\n checkInputsExactBPTIn = ({\n bptIn,\n pool,\n }: Pick<\n ExitExactBPTInParameters,\n 'bptIn' | 'singleTokenOut' | 'pool' | 'shouldUnwrapNativeAsset'\n >): void => {\n if (BigNumber.from(bptIn).lte(0)) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n };\n\n calcTokensOutGivenExactBptIn = ({\n bptIndex,\n upScaledBalances,\n totalSharesEvm,\n scalingFactors,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n 'bptIndex' | 'upScaledBalances' | 'totalSharesEvm' | 'scalingFactors'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n const amountsOut = SOR.LinearMaths._calcTokensOutGivenExactBptIn(\n upScaledBalances,\n BigInt(bptIn),\n totalSharesEvm,\n bptIndex\n );\n // Maths return numbers scaled to 18 decimals. Must scale down to token decimals.\n const amountsOutScaledDown = _downscaleDownArray(\n amountsOut,\n scalingFactors\n );\n\n const expectedAmountsOut = removeItem(amountsOutScaledDown, bptIndex).map(\n (amount) => amount.toString()\n );\n // Apply slippage tolerance\n const minAmountsOut = expectedAmountsOut.map((amount) => {\n const minAmount = subSlippage(\n BigNumber.from(amount),\n BigNumber.from(slippage)\n );\n return minAmount.toString();\n });\n return { minAmountsOut, expectedAmountsOut };\n };\n\n /**\n * Encodes the function data and does the final building of the exit(with exact tokens out) transaction\n * @param params\n */\n encodeExitPool = (params: EncodeExitParams): ExitPoolAttributes => {\n const {\n exiter,\n poolId,\n minAmountsOut,\n userData,\n poolTokens,\n toInternalBalance,\n } = params;\n\n const to = balancerVault;\n const functionName = 'exitPool';\n const attributes: ExitPool = {\n poolId: poolId,\n sender: exiter,\n recipient: exiter,\n exitPoolRequest: {\n assets: poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n },\n };\n\n // encode transaction data into an ABI byte string which can be sent to the network to be executed\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.exitPoolRequest,\n ]);\n\n return {\n to,\n functionName,\n attributes,\n data,\n };\n };\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { JoinPoolParameters, JoinConcern, JoinPoolAttributes } from '../types';\n\nexport class LinearPoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n throw new Error('Join type not supported');\n };\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { parseFixed, formatFixed } from '@/lib/utils/math';\nimport { Zero } from '@ethersproject/constants';\n\nconst SCALING_FACTOR = 18;\nconst ONE = parseFixed('1', SCALING_FACTOR);\n\nexport class LinearPoolLiquidity implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = Zero;\n let sumValue = Zero;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(token.price.usd.toString(), SCALING_FACTOR);\n\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n const value = balance.mul(price);\n\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance.gt(0)) {\n const avgPrice = sumValue.div(sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const priceRate = parseFixed(token.priceRate || '1', SCALING_FACTOR);\n\n // Apply priceRate to scale the balance correctly\n const balance = parseFixed(token.balance, SCALING_FACTOR)\n .mul(priceRate)\n .div(ONE);\n\n const value = balance.mul(avgPrice);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n }\n\n return formatFixed(sumValue, SCALING_FACTOR * 2);\n }\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, LinearPool, ZERO } from '@balancer-labs/sor';\nimport { Pool } from '@/types';\n\nexport class LinearPoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const linearPool = LinearPool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = linearPool.parsePoolPairData(tokenIn, tokenOut);\n return linearPool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n }\n}\n","import { LinearPoolExit } from './concerns/linear/exit.concern';\nimport { LinearPoolJoin } from './concerns/linear/join.concern';\nimport { LinearPoolLiquidity } from './concerns/linear/liquidity.concern';\nimport { LinearPoolSpotPrice } from './concerns/linear/spotPrice.concern';\nimport { LinearPriceImpact } from './concerns/linear/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class Linear implements PoolType {\n constructor(\n public exit: ExitConcern = new LinearPoolExit(),\n public join: JoinConcern = new LinearPoolJoin(),\n public liquidity: LiquidityConcern = new LinearPoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new LinearPoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new LinearPriceImpact()\n ) {}\n}\n","import {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n} from '@/modules/pools/pool-types/concerns/types';\n\nexport class FXExitConcern implements ExitConcern {\n buildExitExactTokensOut(): ExitExactTokensOutAttributes {\n throw new Error('FXExitConcern Not implemented');\n }\n\n buildRecoveryExit(): ExitExactBPTInAttributes {\n throw new Error('FXExitConcern Not implemented');\n }\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { formatFixed } from '@ethersproject/bignumber';\nimport { parseFixed } from '@/lib/utils/math';\nimport { SolidityMaths } from '@/lib/utils/solidityMaths';\n\nconst SCALING_FACTOR = 18;\n\nexport class FXLiquidityConcern implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = BigInt(0);\n let sumValue = BigInt(0);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(\n token.price.usd.toString(),\n SCALING_FACTOR\n ).toBigInt();\n const balance = parseFixed(token.balance, SCALING_FACTOR).toBigInt();\n\n const value = SolidityMaths.mulDownFixed(balance, price);\n sumValue = SolidityMaths.add(sumValue, value);\n sumBalance = SolidityMaths.add(sumBalance, balance);\n }\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance > BigInt(0)) {\n const avgPrice = SolidityMaths.divDownFixed(sumValue, sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const balance = parseFixed(token.balance, SCALING_FACTOR).toBigInt();\n\n const value = SolidityMaths.mulDownFixed(balance, avgPrice);\n sumValue = SolidityMaths.add(sumValue, value);\n sumBalance = SolidityMaths.add(sumBalance, balance);\n }\n }\n return formatFixed(sumValue.toString(), SCALING_FACTOR).toString();\n }\n}\n","import { SpotPriceConcern } from '@/modules/pools/pool-types/concerns/types';\n\nexport class FXSpotPriceConcern implements SpotPriceConcern {\n calcPoolSpotPrice(): string {\n throw new Error('FXSpotPriceConcern Not implemented');\n }\n}\n","import { PriceImpactConcern } from '@/modules/pools/pool-types/concerns/types';\nimport { Pool } from '@/types';\n\nexport class FXPriceImpactConcern implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n console.log(pool, tokenAmounts);\n throw new Error('Not implemented');\n }\n\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n console.log(pool, tokenAmounts, bptAmount, isJoin);\n throw new Error('Not implemented');\n }\n}\n","import {\n JoinConcern,\n JoinPoolAttributes,\n} from '@/modules/pools/pool-types/concerns/types';\n\nexport class FXJoinConcern implements JoinConcern {\n buildJoin(): JoinPoolAttributes {\n throw new Error('FXJoinConcern Not implemented');\n }\n}\n","import { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from '@/modules/pools/pool-types/concerns/types';\nimport { FXExitConcern } from '@/modules/pools/pool-types/concerns/fx/exit.concern';\nimport { FXLiquidityConcern } from '@/modules/pools/pool-types/concerns/fx/liquidity.concern';\nimport { FXSpotPriceConcern } from '@/modules/pools/pool-types/concerns/fx/spotPrice.concern';\nimport { FXPriceImpactConcern } from '@/modules/pools/pool-types/concerns/fx/priceImpact.concern';\nimport { FXJoinConcern } from '@/modules/pools/pool-types/concerns/fx/join.concern';\n\nexport class FX implements PoolType {\n constructor(\n public exit: ExitConcern = new FXExitConcern(),\n public liquidity: LiquidityConcern = new FXLiquidityConcern(),\n public spotPriceCalculator: SpotPriceConcern = new FXSpotPriceConcern(),\n public priceImpactCalculator: PriceImpactConcern = new FXPriceImpactConcern(),\n public join: JoinConcern = new FXJoinConcern()\n ) {}\n}\n","import {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactBPTInParameters,\n ExitExactTokensOutAttributes,\n ExitExactTokensOutParameters,\n} from '@/modules/pools/pool-types/concerns/types';\n\nexport class GyroExitConcern implements ExitConcern {\n buildExitExactTokensOut({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes {\n console.log(\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset\n );\n throw new Error('Not implemented');\n }\n\n buildRecoveryExit({\n exiter,\n pool,\n bptIn,\n slippage,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage'\n >): ExitExactBPTInAttributes {\n console.log(exiter, pool, bptIn, slippage);\n throw new Error('Not implemented');\n }\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { formatFixed } from '@ethersproject/bignumber';\nimport { parseFixed } from '@/lib/utils/math';\nimport { SolidityMaths } from '@/lib/utils/solidityMaths';\n\nconst SCALING_FACTOR = 18;\n\nexport class GyroLiquidityConcern implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = BigInt(0);\n let sumValue = BigInt(0);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(\n token.price.usd.toString(),\n SCALING_FACTOR\n ).toBigInt();\n const balance = parseFixed(token.balance, SCALING_FACTOR).toBigInt();\n\n const value = SolidityMaths.mulDownFixed(balance, price);\n sumValue = SolidityMaths.add(sumValue, value);\n sumBalance = SolidityMaths.add(sumBalance, balance);\n }\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance > BigInt(0)) {\n const avgPrice = SolidityMaths.divDownFixed(sumValue, sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const balance = parseFixed(token.balance, SCALING_FACTOR).toBigInt();\n\n const value = SolidityMaths.mulDownFixed(balance, avgPrice);\n sumValue = SolidityMaths.add(sumValue, value);\n sumBalance = SolidityMaths.add(sumBalance, balance);\n }\n }\n return formatFixed(sumValue.toString(), SCALING_FACTOR).toString();\n }\n}\n","import { SpotPriceConcern } from '@/modules/pools/pool-types/concerns/types';\n\nexport class GyroSpotPriceConcern implements SpotPriceConcern {\n calcPoolSpotPrice(): string {\n throw new Error('GyroSpotPriceConcern Not implemented');\n }\n}\n","import { PriceImpactConcern } from '@/modules/pools/pool-types/concerns/types';\nimport { Pool } from '@/types';\n\nexport class GyroPriceImpactConcern implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n console.log(pool, tokenAmounts);\n throw new Error('Not implemented');\n }\n\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n console.log(pool, tokenAmounts, bptAmount, isJoin);\n throw new Error('Not implemented');\n }\n}\n","import {\n JoinConcern,\n JoinPoolAttributes,\n} from '@/modules/pools/pool-types/concerns/types';\n\nexport class GyroJoinConcern implements JoinConcern {\n buildJoin(): JoinPoolAttributes {\n throw new Error('GyroJoinConcern Not implemented');\n }\n}\n","import { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from '@/modules/pools/pool-types/concerns/types';\nimport { GyroExitConcern } from '@/modules/pools/pool-types/concerns/gyro/exit.concern';\nimport { GyroLiquidityConcern } from '@/modules/pools/pool-types/concerns/gyro/liquidity.concern';\nimport { GyroSpotPriceConcern } from '@/modules/pools/pool-types/concerns/gyro/spotPrice.concern';\nimport { GyroPriceImpactConcern } from '@/modules/pools/pool-types/concerns/gyro/priceImpact.concern';\nimport { GyroJoinConcern } from '@/modules/pools/pool-types/concerns/gyro/join.concern';\n\nexport class Gyro implements PoolType {\n constructor(\n public exit: ExitConcern = new GyroExitConcern(),\n public liquidity: LiquidityConcern = new GyroLiquidityConcern(),\n public spotPriceCalculator: SpotPriceConcern = new GyroSpotPriceConcern(),\n public priceImpactCalculator: PriceImpactConcern = new GyroPriceImpactConcern(),\n public join: JoinConcern = new GyroJoinConcern()\n ) {}\n}\n","import { BalancerSdkConfig, PoolType } from '@/types';\nimport { Stable } from './pool-types/stable.module';\nimport { ComposableStable } from './pool-types/composableStable.module';\nimport { Weighted } from './pool-types/weighted.module';\nimport { MetaStable } from './pool-types/metaStable.module';\nimport { StablePhantom } from './pool-types/stablePhantom.module';\nimport { Linear } from './pool-types/linear.module';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { isLinearish } from '@/lib/utils';\nimport { FX } from '@/modules/pools/pool-types/fx.module';\nimport { Gyro } from '@/modules/pools/pool-types/gyro.module';\n\n/**\n * Wrapper around pool type specific methods.\n *\n * Returns a class instance of a type specific method handlers.\n */\nexport class PoolTypeConcerns {\n constructor(\n config: BalancerSdkConfig,\n public weighted = new Weighted(),\n public stable = new Stable(),\n public composableStable = new ComposableStable(),\n public metaStable = new MetaStable(),\n public stablePhantom = new StablePhantom(),\n public linear = new Linear()\n ) {}\n\n static from(\n poolType: PoolType\n ):\n | Weighted\n | Stable\n | ComposableStable\n | MetaStable\n | StablePhantom\n | Linear {\n // Calculate spot price using pool type\n switch (poolType) {\n case 'ComposableStable': {\n return new ComposableStable();\n }\n case 'FX': {\n return new FX();\n }\n case 'GyroE':\n case 'Gyro2':\n case 'Gyro3': {\n return new Gyro();\n }\n case 'MetaStable': {\n return new MetaStable();\n }\n case 'Stable': {\n return new Stable();\n }\n case 'StablePhantom': {\n return new StablePhantom();\n }\n case 'Investment':\n case 'LiquidityBootstrapping':\n case 'Weighted': {\n return new Weighted();\n }\n default: {\n // Handles all Linear pool types\n if (isLinearish(poolType)) return new Linear();\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n }\n }\n}\n","import { Findable, Pool, PoolToken, Price } from '@/types';\nimport { PoolAttribute } from '../data';\nimport { PoolTypeConcerns } from '../pools/pool-type-concerns';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { formatFixed, parseFixed } from '@/lib/utils/math';\n\nconst SCALE = 18;\n\nexport interface PoolBPTValue {\n address: string;\n liquidity: string;\n}\n\nexport class Liquidity {\n constructor(\n private pools: Findable,\n private tokenPrices: Findable\n ) {}\n\n async getLiquidity(pool: Pool): Promise {\n // Remove any tokens with same address as pool as they are pre-printed BPT\n const parsedTokens = pool.tokens.filter((token) => {\n return token.address !== pool.address;\n });\n\n // For all tokens that are pools (BPT), recurse into them and fetch their liquidity\n const subPoolLiquidity = await Promise.all(\n parsedTokens.map(async (token) => {\n const pool = await this.pools.findBy('address', token.address);\n if (!pool) return;\n\n const liquidity = parseFixed(await this.getLiquidity(pool), SCALE);\n const totalBPT = parseFixed(pool.totalShares, SCALE);\n const bptInParentPool = parseFixed(token.balance, SCALE);\n const liquidityInParentPool = totalBPT.eq(0)\n ? 0\n : liquidity.mul(bptInParentPool).div(totalBPT);\n\n return {\n address: pool.address,\n liquidity: liquidityInParentPool.toString(),\n };\n })\n );\n\n const totalSubPoolLiquidity = subPoolLiquidity.reduce(\n (totalLiquidity, subPool) => {\n return totalLiquidity.add(\n subPool ? subPool.liquidity : BigNumber.from(0)\n );\n },\n BigNumber.from(0)\n );\n\n // Filter tokens within pool that are not BPT themselves\n const nonPoolTokens = parsedTokens.filter((token) => {\n return !subPoolLiquidity.find((pool) => pool?.address === token.address);\n });\n\n // Update price using tokenPrices repository\n const nonPoolTokensWithUpdatedPrice: PoolToken[] = await Promise.all(\n nonPoolTokens.map(async (token) => {\n const tokenPrice = await this.tokenPrices.find(token.address);\n const poolToken: PoolToken = {\n address: token.address,\n decimals: token.decimals,\n priceRate: token.priceRate,\n price: (tokenPrice?.usd && tokenPrice) || {\n usd: token.token?.latestUSDPrice,\n },\n balance: token.balance,\n weight: token.weight,\n };\n return poolToken;\n })\n );\n\n // TODO: Just in case we need it soon. Otherwise remove without mercy.\n // Any of the tokens is missing the price, use subgraph totalLiquidity\n // if(nonPoolTokensWithUpdatedPrice.map((t) => t.price?.usd).indexOf(undefined) > -1) {\n // return pool.totalLiquidity\n // }\n\n const tokenLiquidity = PoolTypeConcerns.from(\n pool.poolType\n ).liquidity.calcTotal(nonPoolTokensWithUpdatedPrice);\n\n const parsedTokenLiquidity = parseFixed(tokenLiquidity, SCALE);\n\n const totalLiquidity = totalSubPoolLiquidity.add(parsedTokenLiquidity);\n\n return formatFixed(totalLiquidity, SCALE);\n }\n\n async getBptPrice(pool: Pool): Promise {\n const liquidity = await this.getLiquidity(pool);\n return (parseFloat(liquidity) / parseFloat(pool.totalShares)).toString();\n }\n}\n","import { LiquidityGauge } from '@/modules/data';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nexport interface Tokens {\n [tokenAddress: string]: BigNumber;\n}\n\nexport interface GaugeTokens {\n [gaugeAddress: string]: Tokens;\n}\n\nexport interface ReduceGaugeTokens {\n (p: GaugeTokens, address: string, index: number): GaugeTokens;\n}\n\nexport interface ReduceGaugeRewards {\n (\n rewards: GaugeTokens,\n path: { gauge: string; token: string },\n index: number\n ): GaugeTokens;\n}\n\nexport const ZERO = BigNumber.from('0');\n\nexport const filterTokens = (tokens: Tokens): Tokens => {\n if (!tokens) return {};\n return Object.keys(tokens)\n .filter((token) => tokens[token].gt(ZERO))\n .reduce((obj: Tokens, token) => {\n obj[token] = tokens[token];\n return obj;\n }, {});\n};\n\nexport const populateGauge = (\n gauge: LiquidityGauge,\n rewards: GaugeTokens,\n tokens: GaugeTokens\n): LiquidityGauge => {\n if (!rewards[gauge.address] && !tokens[gauge.address]) return gauge;\n const claimableRewards = filterTokens(rewards[gauge.address]);\n const claimableTokens = filterTokens(tokens[gauge.address]);\n gauge.claimableTokens ||= {\n ...claimableRewards,\n ...claimableTokens,\n };\n return gauge;\n};\n\nexport const populateGauges = (\n gauges: LiquidityGauge[],\n claimableRewards: GaugeTokens,\n claimableTokens: GaugeTokens\n): LiquidityGauge[] => {\n return gauges\n .map((gauge) => populateGauge(gauge, claimableRewards, claimableTokens))\n .filter(\n (it) => it.claimableTokens && Object.keys(it.claimableTokens).length\n );\n};\n\nexport const reduceClaimableRewards = (res0x: string[]): ReduceGaugeRewards => {\n return (\n rewards: GaugeTokens,\n path: { gauge: string; token: string },\n index: number\n ): GaugeTokens => {\n const value = BigNumber.from(`${res0x[index]}`);\n if (value.gt(ZERO)) {\n rewards[path.gauge] ||= {};\n rewards[path.gauge][path.token] = value;\n }\n return rewards;\n };\n};\n\nexport const reduceClaimableTokens = (\n res0x: string[],\n balAddress: string\n): ReduceGaugeTokens => {\n return (p: GaugeTokens, address: string, index: number): GaugeTokens => {\n const value = BigNumber.from(`${res0x[index]}`);\n if (value.gt(ZERO)) {\n p[address] ||= {};\n p[address][balAddress] = value;\n }\n return p;\n };\n};\n\nexport const reduceRewardTokens = (\n result: { [gaugeAddress: string]: string[] },\n gauge: LiquidityGauge\n): { [gaugeAddress: string]: string[] } => {\n if (gauge.rewardTokens) {\n for (const key of Object.keys(gauge.rewardTokens)) {\n result[gauge.id] ||= [];\n result[gauge.id].push(key);\n }\n }\n return result;\n};\n","import { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Network } from '@/lib/constants';\nimport { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { Multicall } from '@/contracts';\nimport {\n FeeDistributorRepository,\n LiquidityGauge,\n LiquidityGaugeSubgraphRPCProvider,\n} from '@/modules/data';\nimport { Interface } from '@ethersproject/abi';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport {\n GaugeTokens,\n populateGauges,\n reduceClaimableRewards,\n reduceClaimableTokens,\n reduceRewardTokens,\n ZERO,\n} from './helper';\n\nconst liquidityGaugeV5Interface = new Interface([\n 'function claim_rewards(address sender, address receiver) returns (uint256)',\n 'function claimable_tokens(address addr) view returns (uint256)',\n 'function claimable_reward(address addr, address token) view returns (uint256)',\n]);\n\nconst balancerMinterInterface = new Interface([\n 'function mintMany(address[] gauges) returns (uint256)',\n]);\n\nconst gaugeClaimHelperInterface = new Interface([\n 'function getPendingRewards(address gauge, address user, address token) view returns (uint256)',\n 'function claimRewardsFromGauges(address[] gauges, address user)',\n]);\n\nexport interface TransactionData {\n to: string;\n from: string;\n callData: string;\n tokensOut: string[];\n expectedTokensValue: BigNumber[];\n functionName: string;\n}\n\nexport interface TokenBalance {\n [token: string]: BigNumber;\n}\n\nexport interface IClaimService {\n getClaimableRewardTokens(userAddress: string): Promise;\n buildClaimRewardTokensRequest(\n gaugeAddresses: string[],\n userAddress: string\n ): Promise;\n getClaimableVeBalTokens(\n userAddress: string,\n claimableTokens: string[]\n ): Promise;\n buildClaimVeBalTokensRequest(\n userAddress: string,\n claimableTokens: string[]\n ): Promise;\n}\n\nexport class ClaimService implements IClaimService {\n private readonly liquidityGauges: LiquidityGaugeSubgraphRPCProvider;\n private readonly gaugeClaimHelperAddress?: string;\n private readonly balancerMinterAddress?: string;\n private readonly chainId: Network;\n private readonly feeDistributor: FeeDistributorRepository | undefined;\n\n constructor(\n liquidityGauges: LiquidityGaugeSubgraphRPCProvider,\n feeDistributor: FeeDistributorRepository | undefined,\n chainId: Network,\n private multicall: Multicall,\n gaugeClaimHelperAddress?: string,\n balancerMinterAddress?: string\n ) {\n this.liquidityGauges = liquidityGauges;\n this.feeDistributor = feeDistributor;\n this.chainId = chainId;\n this.gaugeClaimHelperAddress = gaugeClaimHelperAddress;\n this.balancerMinterAddress = balancerMinterAddress;\n }\n\n /**\n * Get a list of liquidity gauges populated with the claimable tokens for the user.\n *\n * @param userAddress the user's account address\n */\n async getClaimableRewardTokens(\n userAddress: string\n ): Promise {\n const gauges = await this.getGauges();\n if (!gauges.length)\n throw new BalancerError(BalancerErrorCode.GAUGES_NOT_FOUND);\n\n const gaugeAddresses = gauges.map((it) => it.address);\n const rewardTokens = this.getRewardTokens(gauges);\n\n const claimableTokens = await this.retrieveClaimableTokens(\n gaugeAddresses,\n userAddress\n );\n const claimableRewards = await this.retrieveClaimableRewards(\n rewardTokens,\n userAddress\n );\n return populateGauges(gauges, claimableRewards, claimableTokens);\n }\n\n /**\n * Returns the data to be signed to claim the tokens on a list of liquidity gauges.\n * Only the tokens with balance will be claimed.\n *\n * @param gaugeAddresses the liquidity gauges' addresses\n * @param userAddress the user's account address\n * @throws error if no claimable token is found\n */\n async buildClaimRewardTokensRequest(\n gaugeAddresses: string[],\n userAddress: string\n ): Promise {\n if (this.chainId === 1 || this.chainId === 5) {\n if (!this.balancerMinterAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED\n );\n } else {\n if (!this.gaugeClaimHelperAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED\n );\n }\n const allGauges = await this.getClaimableRewardTokens(userAddress);\n const gauges = allGauges\n .filter((it) =>\n gaugeAddresses\n .map((it) => it.toLowerCase())\n .includes(it.address.toLowerCase())\n )\n .filter(\n (it) => it.claimableTokens && Object.keys(it.claimableTokens).length\n );\n const claimableTokens = Array.from(\n new Set(\n gauges\n .map((gauge) => gauge.claimableTokens)\n .map((tokens) => Object.keys(tokens || {}))\n .flatMap((it) => it)\n )\n );\n if (!claimableTokens.length)\n throw new BalancerError(BalancerErrorCode.GAUGES_REWARD_TOKEN_EMPTY);\n const expectedValues = claimableTokens.map((tokenAddress) => {\n return gauges.reduce((value: BigNumber, gauge) => {\n if (\n gauge.claimableTokens &&\n gauge.claimableTokens[tokenAddress] &&\n gauge.claimableTokens[tokenAddress] !== ZERO\n )\n value = gauge.claimableTokens[tokenAddress].add(value);\n return value;\n }, BigNumber.from(0));\n });\n if (!expectedValues.length || expectedValues.every((it) => it.eq(ZERO)))\n throw new BalancerError(BalancerErrorCode.REWARD_TOKEN_ZERO);\n if (this.chainId === 1 || this.chainId === 5) {\n if (!this.balancerMinterAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED\n );\n const callData = balancerMinterInterface.encodeFunctionData('mintMany', [\n gaugeAddresses,\n ]);\n return {\n to: this.balancerMinterAddress,\n from: userAddress,\n callData: callData,\n tokensOut: claimableTokens,\n expectedTokensValue: expectedValues,\n functionName: 'mintMany',\n };\n } else {\n if (!this.gaugeClaimHelperAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED\n );\n const callData = gaugeClaimHelperInterface.encodeFunctionData(\n 'claimRewardsFromGauges',\n [gaugeAddresses, userAddress]\n );\n return {\n to: this.gaugeClaimHelperAddress,\n from: userAddress,\n callData: callData,\n tokensOut: claimableTokens,\n expectedTokensValue: expectedValues,\n functionName: 'claimRewardsFromGauges',\n };\n }\n }\n\n /**\n * returns all the tokens' balance for protocol revenue and veBal incentives.\n *\n * @param userAddress the user's account address\n * @param claimableTokens the list of tokens for which the balance is desired\n */\n async getClaimableVeBalTokens(\n userAddress: string,\n claimableTokens: string[]\n ): Promise {\n if (!this.feeDistributor)\n throw new BalancerError(BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED);\n return this.feeDistributor?.getClaimableBalances(\n userAddress,\n claimableTokens\n );\n }\n\n /**\n * Returns the data to be signed to claim the tokens for protocol revenue and veBal incentives.\n *\n * @param userAddress the user's account address\n * @param claimableTokens the list of tokens to be claimed\n * @throws error if no claimable token is found\n */\n async buildClaimVeBalTokensRequest(\n userAddress: string,\n claimableTokens: string[]\n ): Promise {\n if (!this.feeDistributor)\n throw new BalancerError(BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED);\n const tokenBalance = await this.feeDistributor.getClaimableBalances(\n userAddress,\n claimableTokens\n );\n const expectedTokensValue = claimableTokens.map(\n (it) => tokenBalance[it] ?? ZERO\n );\n if (expectedTokensValue.every((it) => it.eq(ZERO)))\n throw new BalancerError(BalancerErrorCode.REWARD_TOKEN_ZERO);\n const callData = this.feeDistributor.claimBalances(\n userAddress,\n claimableTokens\n );\n return {\n to: this.feeDistributor.feeDistributor.address,\n from: userAddress,\n callData: callData,\n tokensOut: claimableTokens,\n expectedTokensValue: expectedTokensValue,\n functionName: 'claimTokens',\n };\n }\n\n // Private Functions\n\n private async getGauges(): Promise {\n return await this.liquidityGauges.fetch();\n }\n\n private getRewardTokens(gauges: LiquidityGauge[]): {\n [gaugeAddress: string]: string[];\n } {\n return gauges.reduce(reduceRewardTokens, {});\n }\n\n private async retrieveClaimableRewards(\n rewardTokens: { [address: string]: string[] },\n userAddress: string\n ): Promise {\n const gaugeAddresses = Object.keys(rewardTokens);\n const { payload, paths } = this.getPayload(\n gaugeAddresses,\n rewardTokens,\n userAddress\n );\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n return paths.reduce(reduceClaimableRewards(res0x), {});\n }\n\n private getPayload(\n gaugeAddresses: string[],\n rewardTokens: { [address: string]: string[] },\n userAddress: string\n ): {\n payload: { target: string; callData: string }[];\n paths: { gauge: string; token: string }[];\n } {\n const payload = [];\n const paths: { gauge: string; token: string }[] = [];\n for (const gaugeAddress of gaugeAddresses) {\n for (const tokenAddress of rewardTokens[gaugeAddress]) {\n paths.push({ gauge: gaugeAddress, token: tokenAddress });\n payload.push(\n this.getArguments(userAddress, gaugeAddress, tokenAddress)\n );\n }\n }\n return { payload, paths };\n }\n\n private getArguments(\n userAddress: string,\n gaugeAddress: string,\n tokenAddress: string\n ): { target: string; callData: string } {\n if (this.chainId === 1 || this.chainId === 5) {\n return {\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'claimable_reward',\n [userAddress, tokenAddress]\n ),\n };\n }\n if (!this.gaugeClaimHelperAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED\n );\n return {\n target: this.gaugeClaimHelperAddress,\n callData: gaugeClaimHelperInterface.encodeFunctionData(\n 'getPendingRewards',\n [gaugeAddress, userAddress, tokenAddress]\n ),\n };\n }\n\n private async retrieveClaimableTokens(\n gaugeAddresses: string[],\n userAddress: string\n ): Promise {\n if (this.chainId === Network.MAINNET || this.chainId === Network.GOERLI) {\n const balAddress = BALANCER_NETWORK_CONFIG[this.chainId].addresses.tokens\n .bal as string;\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'claimable_tokens',\n [userAddress]\n ),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n return gaugeAddresses.reduce(\n reduceClaimableTokens(res0x, balAddress),\n {}\n );\n }\n return {};\n }\n}\n","import { BigNumberish } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport { SOR, SwapTypes, SwapInfo } from '@balancer-labs/sor';\nimport { SwapType, BatchSwapStep, FundManagement } from './types';\nimport { Vault } from '@/contracts/Vault';\n\n/*\n * queryBatchSwap simulates a call to `batchSwap`, returning an array of Vault asset deltas. Calls to `swap` cannot be\n * simulated directly, but an equivalent `batchSwap` call can and will yield the exact same result.\n *\n * Each element in the array corresponds to the asset at the same index, and indicates the number of tokens (or ETH)\n * the Vault would take from the sender (if positive) or send to the recipient (if negative). The arguments it\n * receives are the same that an equivalent `batchSwap` call would receive.\n */\nexport async function queryBatchSwap(\n vaultContract: Vault,\n swapType: SwapType,\n swaps: BatchSwapStep[],\n assets: string[]\n): Promise {\n const funds: FundManagement = {\n sender: AddressZero,\n recipient: AddressZero,\n fromInternalBalance: false,\n toInternalBalance: false,\n };\n\n try {\n const deltas = await vaultContract.callStatic.queryBatchSwap(\n swapType,\n swaps,\n assets,\n funds\n );\n return deltas.map((d: BigNumberish) => d.toString());\n } catch (err) {\n throw `queryBatchSwap call error: ${err}`;\n }\n}\n\n/*\nUse SOR to get swapInfo for tokenIn>tokenOut.\nSwapInfos.swaps has path information.\n*/\nexport async function getSorSwapInfo(\n tokenIn: string,\n tokenOut: string,\n swapType: SwapType,\n amount: string,\n sor: SOR\n): Promise {\n const swapTypeSOR: SwapTypes =\n swapType === SwapType.SwapExactIn\n ? SwapTypes.SwapExactIn\n : SwapTypes.SwapExactOut;\n const swapInfo = await sor.getSwaps(\n tokenIn.toLowerCase(),\n tokenOut.toLowerCase(),\n swapTypeSOR,\n amount\n );\n return swapInfo;\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { __assign } from \"tslib\";\nimport { parse } from 'graphql';\nvar docCache = new Map();\nvar fragmentSourceMap = new Map();\nvar printFragmentWarnings = true;\nvar experimentalFragmentVariables = false;\nfunction normalize(string) {\n return string.replace(/[\\s,]+/g, ' ').trim();\n}\nfunction cacheKeyFromLoc(loc) {\n return normalize(loc.source.body.substring(loc.start, loc.end));\n}\nfunction processFragments(ast) {\n var seenKeys = new Set();\n var definitions = [];\n ast.definitions.forEach(function (fragmentDefinition) {\n if (fragmentDefinition.kind === 'FragmentDefinition') {\n var fragmentName = fragmentDefinition.name.value;\n var sourceKey = cacheKeyFromLoc(fragmentDefinition.loc);\n var sourceKeySet = fragmentSourceMap.get(fragmentName);\n if (sourceKeySet && !sourceKeySet.has(sourceKey)) {\n if (printFragmentWarnings) {\n console.warn(\"Warning: fragment with name \" + fragmentName + \" already exists.\\n\"\n + \"graphql-tag enforces all fragment names across your application to be unique; read more about\\n\"\n + \"this in the docs: http://dev.apollodata.com/core/fragments.html#unique-names\");\n }\n }\n else if (!sourceKeySet) {\n fragmentSourceMap.set(fragmentName, sourceKeySet = new Set);\n }\n sourceKeySet.add(sourceKey);\n if (!seenKeys.has(sourceKey)) {\n seenKeys.add(sourceKey);\n definitions.push(fragmentDefinition);\n }\n }\n else {\n definitions.push(fragmentDefinition);\n }\n });\n return __assign(__assign({}, ast), { definitions: definitions });\n}\nfunction stripLoc(doc) {\n var workSet = new Set(doc.definitions);\n workSet.forEach(function (node) {\n if (node.loc)\n delete node.loc;\n Object.keys(node).forEach(function (key) {\n var value = node[key];\n if (value && typeof value === 'object') {\n workSet.add(value);\n }\n });\n });\n var loc = doc.loc;\n if (loc) {\n delete loc.startToken;\n delete loc.endToken;\n }\n return doc;\n}\nfunction parseDocument(source) {\n var cacheKey = normalize(source);\n if (!docCache.has(cacheKey)) {\n var parsed = parse(source, {\n experimentalFragmentVariables: experimentalFragmentVariables,\n allowLegacyFragmentVariables: experimentalFragmentVariables\n });\n if (!parsed || parsed.kind !== 'Document') {\n throw new Error('Not a valid GraphQL document.');\n }\n docCache.set(cacheKey, stripLoc(processFragments(parsed)));\n }\n return docCache.get(cacheKey);\n}\nexport function gql(literals) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (typeof literals === 'string') {\n literals = [literals];\n }\n var result = literals[0];\n args.forEach(function (arg, i) {\n if (arg && arg.kind === 'Document') {\n result += arg.loc.source.body;\n }\n else {\n result += arg;\n }\n result += literals[i + 1];\n });\n return parseDocument(result);\n}\nexport function resetCaches() {\n docCache.clear();\n fragmentSourceMap.clear();\n}\nexport function disableFragmentWarnings() {\n printFragmentWarnings = false;\n}\nexport function enableExperimentalFragmentVariables() {\n experimentalFragmentVariables = true;\n}\nexport function disableExperimentalFragmentVariables() {\n experimentalFragmentVariables = false;\n}\nvar extras = {\n gql: gql,\n resetCaches: resetCaches,\n disableFragmentWarnings: disableFragmentWarnings,\n enableExperimentalFragmentVariables: enableExperimentalFragmentVariables,\n disableExperimentalFragmentVariables: disableExperimentalFragmentVariables\n};\n(function (gql_1) {\n gql_1.gql = extras.gql, gql_1.resetCaches = extras.resetCaches, gql_1.disableFragmentWarnings = extras.disableFragmentWarnings, gql_1.enableExperimentalFragmentVariables = extras.enableExperimentalFragmentVariables, gql_1.disableExperimentalFragmentVariables = extras.disableExperimentalFragmentVariables;\n})(gql || (gql = {}));\ngql[\"default\"] = gql;\nexport default gql;\n//# sourceMappingURL=index.js.map","import { GraphQLClient } from 'graphql-request';\nimport * as Dom from 'graphql-request/dist/types.dom';\nimport gql from 'graphql-tag';\nexport type Maybe = T | null;\nexport type InputMaybe = Maybe;\nexport type Exact = { [K in keyof T]: T[K] };\nexport type MakeOptional = Omit & { [SubKey in K]?: Maybe };\nexport type MakeMaybe = Omit & { [SubKey in K]: Maybe };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n BigDecimal: string;\n BigInt: string;\n Bytes: string;\n Int8: any;\n};\n\nexport type AmpUpdate = {\n __typename?: 'AmpUpdate';\n endAmp: Scalars['BigInt'];\n endTimestamp: Scalars['BigInt'];\n id: Scalars['ID'];\n poolId: Pool;\n scheduledTimestamp: Scalars['Int'];\n startAmp: Scalars['BigInt'];\n startTimestamp: Scalars['BigInt'];\n};\n\nexport type AmpUpdate_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n endAmp?: InputMaybe;\n endAmp_gt?: InputMaybe;\n endAmp_gte?: InputMaybe;\n endAmp_in?: InputMaybe>;\n endAmp_lt?: InputMaybe;\n endAmp_lte?: InputMaybe;\n endAmp_not?: InputMaybe;\n endAmp_not_in?: InputMaybe>;\n endTimestamp?: InputMaybe;\n endTimestamp_gt?: InputMaybe;\n endTimestamp_gte?: InputMaybe;\n endTimestamp_in?: InputMaybe>;\n endTimestamp_lt?: InputMaybe;\n endTimestamp_lte?: InputMaybe;\n endTimestamp_not?: InputMaybe;\n endTimestamp_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n scheduledTimestamp?: InputMaybe;\n scheduledTimestamp_gt?: InputMaybe;\n scheduledTimestamp_gte?: InputMaybe;\n scheduledTimestamp_in?: InputMaybe>;\n scheduledTimestamp_lt?: InputMaybe;\n scheduledTimestamp_lte?: InputMaybe;\n scheduledTimestamp_not?: InputMaybe;\n scheduledTimestamp_not_in?: InputMaybe>;\n startAmp?: InputMaybe;\n startAmp_gt?: InputMaybe;\n startAmp_gte?: InputMaybe;\n startAmp_in?: InputMaybe>;\n startAmp_lt?: InputMaybe;\n startAmp_lte?: InputMaybe;\n startAmp_not?: InputMaybe;\n startAmp_not_in?: InputMaybe>;\n startTimestamp?: InputMaybe;\n startTimestamp_gt?: InputMaybe;\n startTimestamp_gte?: InputMaybe;\n startTimestamp_in?: InputMaybe>;\n startTimestamp_lt?: InputMaybe;\n startTimestamp_lte?: InputMaybe;\n startTimestamp_not?: InputMaybe;\n startTimestamp_not_in?: InputMaybe>;\n};\n\nexport enum AmpUpdate_OrderBy {\n EndAmp = 'endAmp',\n EndTimestamp = 'endTimestamp',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n ScheduledTimestamp = 'scheduledTimestamp',\n StartAmp = 'startAmp',\n StartTimestamp = 'startTimestamp'\n}\n\nexport type Balancer = {\n __typename?: 'Balancer';\n id: Scalars['ID'];\n poolCount: Scalars['Int'];\n pools?: Maybe>;\n protocolFeesCollector?: Maybe;\n totalLiquidity: Scalars['BigDecimal'];\n totalProtocolFee?: Maybe;\n totalSwapCount: Scalars['BigInt'];\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n};\n\n\nexport type BalancerPoolsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type BalancerSnapshot = {\n __typename?: 'BalancerSnapshot';\n id: Scalars['ID'];\n poolCount: Scalars['Int'];\n timestamp: Scalars['Int'];\n totalLiquidity: Scalars['BigDecimal'];\n totalProtocolFee?: Maybe;\n totalSwapCount: Scalars['BigInt'];\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n vault: Balancer;\n};\n\nexport type BalancerSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolCount?: InputMaybe;\n poolCount_gt?: InputMaybe;\n poolCount_gte?: InputMaybe;\n poolCount_in?: InputMaybe>;\n poolCount_lt?: InputMaybe;\n poolCount_lte?: InputMaybe;\n poolCount_not?: InputMaybe;\n poolCount_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n totalLiquidity?: InputMaybe;\n totalLiquidity_gt?: InputMaybe;\n totalLiquidity_gte?: InputMaybe;\n totalLiquidity_in?: InputMaybe>;\n totalLiquidity_lt?: InputMaybe;\n totalLiquidity_lte?: InputMaybe;\n totalLiquidity_not?: InputMaybe;\n totalLiquidity_not_in?: InputMaybe>;\n totalProtocolFee?: InputMaybe;\n totalProtocolFee_gt?: InputMaybe;\n totalProtocolFee_gte?: InputMaybe;\n totalProtocolFee_in?: InputMaybe>;\n totalProtocolFee_lt?: InputMaybe;\n totalProtocolFee_lte?: InputMaybe;\n totalProtocolFee_not?: InputMaybe;\n totalProtocolFee_not_in?: InputMaybe>;\n totalSwapCount?: InputMaybe;\n totalSwapCount_gt?: InputMaybe;\n totalSwapCount_gte?: InputMaybe;\n totalSwapCount_in?: InputMaybe>;\n totalSwapCount_lt?: InputMaybe;\n totalSwapCount_lte?: InputMaybe;\n totalSwapCount_not?: InputMaybe;\n totalSwapCount_not_in?: InputMaybe>;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n vault?: InputMaybe;\n vault_?: InputMaybe;\n vault_contains?: InputMaybe;\n vault_contains_nocase?: InputMaybe;\n vault_ends_with?: InputMaybe;\n vault_ends_with_nocase?: InputMaybe;\n vault_gt?: InputMaybe;\n vault_gte?: InputMaybe;\n vault_in?: InputMaybe>;\n vault_lt?: InputMaybe;\n vault_lte?: InputMaybe;\n vault_not?: InputMaybe;\n vault_not_contains?: InputMaybe;\n vault_not_contains_nocase?: InputMaybe;\n vault_not_ends_with?: InputMaybe;\n vault_not_ends_with_nocase?: InputMaybe;\n vault_not_in?: InputMaybe>;\n vault_not_starts_with?: InputMaybe;\n vault_not_starts_with_nocase?: InputMaybe;\n vault_starts_with?: InputMaybe;\n vault_starts_with_nocase?: InputMaybe;\n};\n\nexport enum BalancerSnapshot_OrderBy {\n Id = 'id',\n PoolCount = 'poolCount',\n Timestamp = 'timestamp',\n TotalLiquidity = 'totalLiquidity',\n TotalProtocolFee = 'totalProtocolFee',\n TotalSwapCount = 'totalSwapCount',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume',\n Vault = 'vault',\n VaultId = 'vault__id',\n VaultPoolCount = 'vault__poolCount',\n VaultProtocolFeesCollector = 'vault__protocolFeesCollector',\n VaultTotalLiquidity = 'vault__totalLiquidity',\n VaultTotalProtocolFee = 'vault__totalProtocolFee',\n VaultTotalSwapCount = 'vault__totalSwapCount',\n VaultTotalSwapFee = 'vault__totalSwapFee',\n VaultTotalSwapVolume = 'vault__totalSwapVolume'\n}\n\nexport type Balancer_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolCount?: InputMaybe;\n poolCount_gt?: InputMaybe;\n poolCount_gte?: InputMaybe;\n poolCount_in?: InputMaybe>;\n poolCount_lt?: InputMaybe;\n poolCount_lte?: InputMaybe;\n poolCount_not?: InputMaybe;\n poolCount_not_in?: InputMaybe>;\n pools_?: InputMaybe;\n protocolFeesCollector?: InputMaybe;\n protocolFeesCollector_contains?: InputMaybe;\n protocolFeesCollector_gt?: InputMaybe;\n protocolFeesCollector_gte?: InputMaybe;\n protocolFeesCollector_in?: InputMaybe>;\n protocolFeesCollector_lt?: InputMaybe;\n protocolFeesCollector_lte?: InputMaybe;\n protocolFeesCollector_not?: InputMaybe;\n protocolFeesCollector_not_contains?: InputMaybe;\n protocolFeesCollector_not_in?: InputMaybe>;\n totalLiquidity?: InputMaybe;\n totalLiquidity_gt?: InputMaybe;\n totalLiquidity_gte?: InputMaybe;\n totalLiquidity_in?: InputMaybe>;\n totalLiquidity_lt?: InputMaybe;\n totalLiquidity_lte?: InputMaybe;\n totalLiquidity_not?: InputMaybe;\n totalLiquidity_not_in?: InputMaybe>;\n totalProtocolFee?: InputMaybe;\n totalProtocolFee_gt?: InputMaybe;\n totalProtocolFee_gte?: InputMaybe;\n totalProtocolFee_in?: InputMaybe>;\n totalProtocolFee_lt?: InputMaybe;\n totalProtocolFee_lte?: InputMaybe;\n totalProtocolFee_not?: InputMaybe;\n totalProtocolFee_not_in?: InputMaybe>;\n totalSwapCount?: InputMaybe;\n totalSwapCount_gt?: InputMaybe;\n totalSwapCount_gte?: InputMaybe;\n totalSwapCount_in?: InputMaybe>;\n totalSwapCount_lt?: InputMaybe;\n totalSwapCount_lte?: InputMaybe;\n totalSwapCount_not?: InputMaybe;\n totalSwapCount_not_in?: InputMaybe>;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n};\n\nexport enum Balancer_OrderBy {\n Id = 'id',\n PoolCount = 'poolCount',\n Pools = 'pools',\n ProtocolFeesCollector = 'protocolFeesCollector',\n TotalLiquidity = 'totalLiquidity',\n TotalProtocolFee = 'totalProtocolFee',\n TotalSwapCount = 'totalSwapCount',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume'\n}\n\nexport type BlockChangedFilter = {\n number_gte: Scalars['Int'];\n};\n\nexport type Block_Height = {\n hash?: InputMaybe;\n number?: InputMaybe;\n number_gte?: InputMaybe;\n};\n\nexport type CircuitBreaker = {\n __typename?: 'CircuitBreaker';\n bptPrice: Scalars['BigDecimal'];\n id: Scalars['ID'];\n lowerBoundPercentage: Scalars['BigDecimal'];\n pool: Pool;\n token: PoolToken;\n upperBoundPercentage: Scalars['BigDecimal'];\n};\n\nexport type CircuitBreaker_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n bptPrice?: InputMaybe;\n bptPrice_gt?: InputMaybe;\n bptPrice_gte?: InputMaybe;\n bptPrice_in?: InputMaybe>;\n bptPrice_lt?: InputMaybe;\n bptPrice_lte?: InputMaybe;\n bptPrice_not?: InputMaybe;\n bptPrice_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n lowerBoundPercentage?: InputMaybe;\n lowerBoundPercentage_gt?: InputMaybe;\n lowerBoundPercentage_gte?: InputMaybe;\n lowerBoundPercentage_in?: InputMaybe>;\n lowerBoundPercentage_lt?: InputMaybe;\n lowerBoundPercentage_lte?: InputMaybe;\n lowerBoundPercentage_not?: InputMaybe;\n lowerBoundPercentage_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n token?: InputMaybe;\n token_?: InputMaybe;\n token_contains?: InputMaybe;\n token_contains_nocase?: InputMaybe;\n token_ends_with?: InputMaybe;\n token_ends_with_nocase?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_contains_nocase?: InputMaybe;\n token_not_ends_with?: InputMaybe;\n token_not_ends_with_nocase?: InputMaybe;\n token_not_in?: InputMaybe>;\n token_not_starts_with?: InputMaybe;\n token_not_starts_with_nocase?: InputMaybe;\n token_starts_with?: InputMaybe;\n token_starts_with_nocase?: InputMaybe;\n upperBoundPercentage?: InputMaybe;\n upperBoundPercentage_gt?: InputMaybe;\n upperBoundPercentage_gte?: InputMaybe;\n upperBoundPercentage_in?: InputMaybe>;\n upperBoundPercentage_lt?: InputMaybe;\n upperBoundPercentage_lte?: InputMaybe;\n upperBoundPercentage_not?: InputMaybe;\n upperBoundPercentage_not_in?: InputMaybe>;\n};\n\nexport enum CircuitBreaker_OrderBy {\n BptPrice = 'bptPrice',\n Id = 'id',\n LowerBoundPercentage = 'lowerBoundPercentage',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n Token = 'token',\n TokenAddress = 'token__address',\n TokenAssetManager = 'token__assetManager',\n TokenBalance = 'token__balance',\n TokenCashBalance = 'token__cashBalance',\n TokenDecimals = 'token__decimals',\n TokenId = 'token__id',\n TokenIndex = 'token__index',\n TokenIsExemptFromYieldProtocolFee = 'token__isExemptFromYieldProtocolFee',\n TokenManagedBalance = 'token__managedBalance',\n TokenName = 'token__name',\n TokenOldPriceRate = 'token__oldPriceRate',\n TokenPaidProtocolFees = 'token__paidProtocolFees',\n TokenPriceRate = 'token__priceRate',\n TokenSymbol = 'token__symbol',\n TokenWeight = 'token__weight',\n UpperBoundPercentage = 'upperBoundPercentage'\n}\n\nexport type GradualWeightUpdate = {\n __typename?: 'GradualWeightUpdate';\n endTimestamp: Scalars['BigInt'];\n endWeights: Array;\n id: Scalars['ID'];\n poolId: Pool;\n scheduledTimestamp: Scalars['Int'];\n startTimestamp: Scalars['BigInt'];\n startWeights: Array;\n};\n\nexport type GradualWeightUpdate_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n endTimestamp?: InputMaybe;\n endTimestamp_gt?: InputMaybe;\n endTimestamp_gte?: InputMaybe;\n endTimestamp_in?: InputMaybe>;\n endTimestamp_lt?: InputMaybe;\n endTimestamp_lte?: InputMaybe;\n endTimestamp_not?: InputMaybe;\n endTimestamp_not_in?: InputMaybe>;\n endWeights?: InputMaybe>;\n endWeights_contains?: InputMaybe>;\n endWeights_contains_nocase?: InputMaybe>;\n endWeights_not?: InputMaybe>;\n endWeights_not_contains?: InputMaybe>;\n endWeights_not_contains_nocase?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n scheduledTimestamp?: InputMaybe;\n scheduledTimestamp_gt?: InputMaybe;\n scheduledTimestamp_gte?: InputMaybe;\n scheduledTimestamp_in?: InputMaybe>;\n scheduledTimestamp_lt?: InputMaybe;\n scheduledTimestamp_lte?: InputMaybe;\n scheduledTimestamp_not?: InputMaybe;\n scheduledTimestamp_not_in?: InputMaybe>;\n startTimestamp?: InputMaybe;\n startTimestamp_gt?: InputMaybe;\n startTimestamp_gte?: InputMaybe;\n startTimestamp_in?: InputMaybe>;\n startTimestamp_lt?: InputMaybe;\n startTimestamp_lte?: InputMaybe;\n startTimestamp_not?: InputMaybe;\n startTimestamp_not_in?: InputMaybe>;\n startWeights?: InputMaybe>;\n startWeights_contains?: InputMaybe>;\n startWeights_contains_nocase?: InputMaybe>;\n startWeights_not?: InputMaybe>;\n startWeights_not_contains?: InputMaybe>;\n startWeights_not_contains_nocase?: InputMaybe>;\n};\n\nexport enum GradualWeightUpdate_OrderBy {\n EndTimestamp = 'endTimestamp',\n EndWeights = 'endWeights',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n ScheduledTimestamp = 'scheduledTimestamp',\n StartTimestamp = 'startTimestamp',\n StartWeights = 'startWeights'\n}\n\nexport enum InvestType {\n Exit = 'Exit',\n Join = 'Join'\n}\n\nexport type JoinExit = {\n __typename?: 'JoinExit';\n amounts: Array;\n id: Scalars['ID'];\n pool: Pool;\n sender: Scalars['Bytes'];\n timestamp: Scalars['Int'];\n tx: Scalars['Bytes'];\n type: InvestType;\n user: User;\n valueUSD?: Maybe;\n};\n\nexport type JoinExit_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n amounts?: InputMaybe>;\n amounts_contains?: InputMaybe>;\n amounts_contains_nocase?: InputMaybe>;\n amounts_not?: InputMaybe>;\n amounts_not_contains?: InputMaybe>;\n amounts_not_contains_nocase?: InputMaybe>;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n sender?: InputMaybe;\n sender_contains?: InputMaybe;\n sender_gt?: InputMaybe;\n sender_gte?: InputMaybe;\n sender_in?: InputMaybe>;\n sender_lt?: InputMaybe;\n sender_lte?: InputMaybe;\n sender_not?: InputMaybe;\n sender_not_contains?: InputMaybe;\n sender_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n tx?: InputMaybe;\n tx_contains?: InputMaybe;\n tx_gt?: InputMaybe;\n tx_gte?: InputMaybe;\n tx_in?: InputMaybe>;\n tx_lt?: InputMaybe;\n tx_lte?: InputMaybe;\n tx_not?: InputMaybe;\n tx_not_contains?: InputMaybe;\n tx_not_in?: InputMaybe>;\n type?: InputMaybe;\n type_in?: InputMaybe>;\n type_not?: InputMaybe;\n type_not_in?: InputMaybe>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n valueUSD?: InputMaybe;\n valueUSD_gt?: InputMaybe;\n valueUSD_gte?: InputMaybe;\n valueUSD_in?: InputMaybe>;\n valueUSD_lt?: InputMaybe;\n valueUSD_lte?: InputMaybe;\n valueUSD_not?: InputMaybe;\n valueUSD_not_in?: InputMaybe>;\n};\n\nexport enum JoinExit_OrderBy {\n Amounts = 'amounts',\n Id = 'id',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n Sender = 'sender',\n Timestamp = 'timestamp',\n Tx = 'tx',\n Type = 'type',\n User = 'user',\n UserId = 'user__id',\n ValueUsd = 'valueUSD'\n}\n\nexport type LatestPrice = {\n __typename?: 'LatestPrice';\n asset: Scalars['Bytes'];\n block: Scalars['BigInt'];\n id: Scalars['ID'];\n poolId: Pool;\n price: Scalars['BigDecimal'];\n pricingAsset: Scalars['Bytes'];\n};\n\nexport type LatestPrice_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n asset?: InputMaybe;\n asset_contains?: InputMaybe;\n asset_gt?: InputMaybe;\n asset_gte?: InputMaybe;\n asset_in?: InputMaybe>;\n asset_lt?: InputMaybe;\n asset_lte?: InputMaybe;\n asset_not?: InputMaybe;\n asset_not_contains?: InputMaybe;\n asset_not_in?: InputMaybe>;\n block?: InputMaybe;\n block_gt?: InputMaybe;\n block_gte?: InputMaybe;\n block_in?: InputMaybe>;\n block_lt?: InputMaybe;\n block_lte?: InputMaybe;\n block_not?: InputMaybe;\n block_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n price?: InputMaybe;\n price_gt?: InputMaybe;\n price_gte?: InputMaybe;\n price_in?: InputMaybe>;\n price_lt?: InputMaybe;\n price_lte?: InputMaybe;\n price_not?: InputMaybe;\n price_not_in?: InputMaybe>;\n pricingAsset?: InputMaybe;\n pricingAsset_contains?: InputMaybe;\n pricingAsset_gt?: InputMaybe;\n pricingAsset_gte?: InputMaybe;\n pricingAsset_in?: InputMaybe>;\n pricingAsset_lt?: InputMaybe;\n pricingAsset_lte?: InputMaybe;\n pricingAsset_not?: InputMaybe;\n pricingAsset_not_contains?: InputMaybe;\n pricingAsset_not_in?: InputMaybe>;\n};\n\nexport enum LatestPrice_OrderBy {\n Asset = 'asset',\n Block = 'block',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n Price = 'price',\n PricingAsset = 'pricingAsset'\n}\n\nexport type ManagementOperation = {\n __typename?: 'ManagementOperation';\n cashDelta: Scalars['BigDecimal'];\n id: Scalars['ID'];\n managedDelta: Scalars['BigDecimal'];\n poolTokenId: PoolToken;\n timestamp: Scalars['Int'];\n type: OperationType;\n};\n\nexport type ManagementOperation_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n cashDelta?: InputMaybe;\n cashDelta_gt?: InputMaybe;\n cashDelta_gte?: InputMaybe;\n cashDelta_in?: InputMaybe>;\n cashDelta_lt?: InputMaybe;\n cashDelta_lte?: InputMaybe;\n cashDelta_not?: InputMaybe;\n cashDelta_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n managedDelta?: InputMaybe;\n managedDelta_gt?: InputMaybe;\n managedDelta_gte?: InputMaybe;\n managedDelta_in?: InputMaybe>;\n managedDelta_lt?: InputMaybe;\n managedDelta_lte?: InputMaybe;\n managedDelta_not?: InputMaybe;\n managedDelta_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolTokenId?: InputMaybe;\n poolTokenId_?: InputMaybe;\n poolTokenId_contains?: InputMaybe;\n poolTokenId_contains_nocase?: InputMaybe;\n poolTokenId_ends_with?: InputMaybe;\n poolTokenId_ends_with_nocase?: InputMaybe;\n poolTokenId_gt?: InputMaybe;\n poolTokenId_gte?: InputMaybe;\n poolTokenId_in?: InputMaybe>;\n poolTokenId_lt?: InputMaybe;\n poolTokenId_lte?: InputMaybe;\n poolTokenId_not?: InputMaybe;\n poolTokenId_not_contains?: InputMaybe;\n poolTokenId_not_contains_nocase?: InputMaybe;\n poolTokenId_not_ends_with?: InputMaybe;\n poolTokenId_not_ends_with_nocase?: InputMaybe;\n poolTokenId_not_in?: InputMaybe>;\n poolTokenId_not_starts_with?: InputMaybe;\n poolTokenId_not_starts_with_nocase?: InputMaybe;\n poolTokenId_starts_with?: InputMaybe;\n poolTokenId_starts_with_nocase?: InputMaybe;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n type?: InputMaybe;\n type_in?: InputMaybe>;\n type_not?: InputMaybe;\n type_not_in?: InputMaybe>;\n};\n\nexport enum ManagementOperation_OrderBy {\n CashDelta = 'cashDelta',\n Id = 'id',\n ManagedDelta = 'managedDelta',\n PoolTokenId = 'poolTokenId',\n PoolTokenIdAddress = 'poolTokenId__address',\n PoolTokenIdAssetManager = 'poolTokenId__assetManager',\n PoolTokenIdBalance = 'poolTokenId__balance',\n PoolTokenIdCashBalance = 'poolTokenId__cashBalance',\n PoolTokenIdDecimals = 'poolTokenId__decimals',\n PoolTokenIdId = 'poolTokenId__id',\n PoolTokenIdIndex = 'poolTokenId__index',\n PoolTokenIdIsExemptFromYieldProtocolFee = 'poolTokenId__isExemptFromYieldProtocolFee',\n PoolTokenIdManagedBalance = 'poolTokenId__managedBalance',\n PoolTokenIdName = 'poolTokenId__name',\n PoolTokenIdOldPriceRate = 'poolTokenId__oldPriceRate',\n PoolTokenIdPaidProtocolFees = 'poolTokenId__paidProtocolFees',\n PoolTokenIdPriceRate = 'poolTokenId__priceRate',\n PoolTokenIdSymbol = 'poolTokenId__symbol',\n PoolTokenIdWeight = 'poolTokenId__weight',\n Timestamp = 'timestamp',\n Type = 'type'\n}\n\nexport enum OperationType {\n Deposit = 'Deposit',\n Update = 'Update',\n Withdraw = 'Withdraw'\n}\n\n/** Defines the order direction, either ascending or descending */\nexport enum OrderDirection {\n Asc = 'asc',\n Desc = 'desc'\n}\n\nexport type Pool = {\n __typename?: 'Pool';\n address: Scalars['Bytes'];\n alpha?: Maybe;\n amp?: Maybe;\n ampUpdates?: Maybe>;\n baseToken?: Maybe;\n beta?: Maybe;\n c?: Maybe;\n circuitBreakers?: Maybe>;\n createTime: Scalars['Int'];\n dSq?: Maybe;\n delta?: Maybe;\n epsilon?: Maybe;\n expiryTime?: Maybe;\n factory?: Maybe;\n historicalValues?: Maybe>;\n holdersCount: Scalars['BigInt'];\n id: Scalars['ID'];\n isInRecoveryMode?: Maybe;\n isPaused?: Maybe;\n joinExitEnabled?: Maybe;\n lambda?: Maybe;\n lastJoinExitAmp?: Maybe;\n lastPostJoinExitInvariant?: Maybe;\n latestAmpUpdate?: Maybe;\n lowerTarget?: Maybe;\n mainIndex?: Maybe;\n managementAumFee?: Maybe;\n managementFee?: Maybe;\n mustAllowlistLPs?: Maybe;\n name?: Maybe;\n oracleEnabled: Scalars['Boolean'];\n owner?: Maybe;\n poolType?: Maybe;\n poolTypeVersion?: Maybe;\n priceRateProviders?: Maybe>;\n principalToken?: Maybe;\n protocolAumFeeCache?: Maybe;\n protocolId?: Maybe;\n protocolIdData?: Maybe;\n protocolSwapFeeCache?: Maybe;\n protocolYieldFeeCache?: Maybe;\n root3Alpha?: Maybe;\n s?: Maybe;\n shares?: Maybe>;\n snapshots?: Maybe>;\n sqrtAlpha?: Maybe;\n sqrtBeta?: Maybe;\n strategyType: Scalars['Int'];\n /** Indicates if a pool can be swapped against. Combines multiple sources, including offchain curation */\n swapEnabled: Scalars['Boolean'];\n /** External indication from an offchain permissioned actor */\n swapEnabledCurationSignal?: Maybe;\n /** The native swapEnabled boolean. internal to the pool. Only applies to Gyro, LBPs and InvestmentPools */\n swapEnabledInternal?: Maybe;\n swapFee: Scalars['BigDecimal'];\n swaps?: Maybe>;\n swapsCount: Scalars['BigInt'];\n symbol?: Maybe;\n tauAlphaX?: Maybe;\n tauAlphaY?: Maybe;\n tauBetaX?: Maybe;\n tauBetaY?: Maybe;\n tokens?: Maybe>;\n tokensList: Array;\n totalAumFeeCollectedInBPT?: Maybe;\n totalLiquidity: Scalars['BigDecimal'];\n totalLiquiditySansBPT?: Maybe;\n totalProtocolFee?: Maybe;\n totalProtocolFeePaidInBPT?: Maybe;\n totalShares: Scalars['BigDecimal'];\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n totalWeight?: Maybe;\n tx?: Maybe;\n u?: Maybe;\n unitSeconds?: Maybe;\n upperTarget?: Maybe;\n v?: Maybe;\n vaultID: Balancer;\n w?: Maybe;\n weightUpdates?: Maybe>;\n wrappedIndex?: Maybe;\n z?: Maybe;\n};\n\n\nexport type PoolAmpUpdatesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolCircuitBreakersArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolHistoricalValuesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolPriceRateProvidersArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolSharesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolSnapshotsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolSwapsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolTokensArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolWeightUpdatesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type PoolContract = {\n __typename?: 'PoolContract';\n id: Scalars['ID'];\n pool: Pool;\n};\n\nexport type PoolContract_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n};\n\nexport enum PoolContract_OrderBy {\n Id = 'id',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z'\n}\n\nexport type PoolHistoricalLiquidity = {\n __typename?: 'PoolHistoricalLiquidity';\n block: Scalars['BigInt'];\n id: Scalars['ID'];\n poolId: Pool;\n poolLiquidity: Scalars['BigDecimal'];\n poolShareValue: Scalars['BigDecimal'];\n poolTotalShares: Scalars['BigDecimal'];\n pricingAsset: Scalars['Bytes'];\n};\n\nexport type PoolHistoricalLiquidity_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n block?: InputMaybe;\n block_gt?: InputMaybe;\n block_gte?: InputMaybe;\n block_in?: InputMaybe>;\n block_lt?: InputMaybe;\n block_lte?: InputMaybe;\n block_not?: InputMaybe;\n block_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n poolLiquidity?: InputMaybe;\n poolLiquidity_gt?: InputMaybe;\n poolLiquidity_gte?: InputMaybe;\n poolLiquidity_in?: InputMaybe>;\n poolLiquidity_lt?: InputMaybe;\n poolLiquidity_lte?: InputMaybe;\n poolLiquidity_not?: InputMaybe;\n poolLiquidity_not_in?: InputMaybe>;\n poolShareValue?: InputMaybe;\n poolShareValue_gt?: InputMaybe;\n poolShareValue_gte?: InputMaybe;\n poolShareValue_in?: InputMaybe>;\n poolShareValue_lt?: InputMaybe;\n poolShareValue_lte?: InputMaybe;\n poolShareValue_not?: InputMaybe;\n poolShareValue_not_in?: InputMaybe>;\n poolTotalShares?: InputMaybe;\n poolTotalShares_gt?: InputMaybe;\n poolTotalShares_gte?: InputMaybe;\n poolTotalShares_in?: InputMaybe>;\n poolTotalShares_lt?: InputMaybe;\n poolTotalShares_lte?: InputMaybe;\n poolTotalShares_not?: InputMaybe;\n poolTotalShares_not_in?: InputMaybe>;\n pricingAsset?: InputMaybe;\n pricingAsset_contains?: InputMaybe;\n pricingAsset_gt?: InputMaybe;\n pricingAsset_gte?: InputMaybe;\n pricingAsset_in?: InputMaybe>;\n pricingAsset_lt?: InputMaybe;\n pricingAsset_lte?: InputMaybe;\n pricingAsset_not?: InputMaybe;\n pricingAsset_not_contains?: InputMaybe;\n pricingAsset_not_in?: InputMaybe>;\n};\n\nexport enum PoolHistoricalLiquidity_OrderBy {\n Block = 'block',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n PoolLiquidity = 'poolLiquidity',\n PoolShareValue = 'poolShareValue',\n PoolTotalShares = 'poolTotalShares',\n PricingAsset = 'pricingAsset'\n}\n\nexport type PoolShare = {\n __typename?: 'PoolShare';\n balance: Scalars['BigDecimal'];\n id: Scalars['ID'];\n poolId: Pool;\n userAddress: User;\n};\n\nexport type PoolShare_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n balance?: InputMaybe;\n balance_gt?: InputMaybe;\n balance_gte?: InputMaybe;\n balance_in?: InputMaybe>;\n balance_lt?: InputMaybe;\n balance_lte?: InputMaybe;\n balance_not?: InputMaybe;\n balance_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n userAddress?: InputMaybe;\n userAddress_?: InputMaybe;\n userAddress_contains?: InputMaybe;\n userAddress_contains_nocase?: InputMaybe;\n userAddress_ends_with?: InputMaybe;\n userAddress_ends_with_nocase?: InputMaybe;\n userAddress_gt?: InputMaybe;\n userAddress_gte?: InputMaybe;\n userAddress_in?: InputMaybe>;\n userAddress_lt?: InputMaybe;\n userAddress_lte?: InputMaybe;\n userAddress_not?: InputMaybe;\n userAddress_not_contains?: InputMaybe;\n userAddress_not_contains_nocase?: InputMaybe;\n userAddress_not_ends_with?: InputMaybe;\n userAddress_not_ends_with_nocase?: InputMaybe;\n userAddress_not_in?: InputMaybe>;\n userAddress_not_starts_with?: InputMaybe;\n userAddress_not_starts_with_nocase?: InputMaybe;\n userAddress_starts_with?: InputMaybe;\n userAddress_starts_with_nocase?: InputMaybe;\n};\n\nexport enum PoolShare_OrderBy {\n Balance = 'balance',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n UserAddress = 'userAddress',\n UserAddressId = 'userAddress__id'\n}\n\nexport type PoolSnapshot = {\n __typename?: 'PoolSnapshot';\n amounts: Array;\n holdersCount: Scalars['BigInt'];\n id: Scalars['ID'];\n liquidity: Scalars['BigDecimal'];\n pool: Pool;\n protocolFee?: Maybe;\n swapFees: Scalars['BigDecimal'];\n swapVolume: Scalars['BigDecimal'];\n swapsCount: Scalars['BigInt'];\n timestamp: Scalars['Int'];\n totalShares: Scalars['BigDecimal'];\n};\n\nexport type PoolSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n amounts?: InputMaybe>;\n amounts_contains?: InputMaybe>;\n amounts_contains_nocase?: InputMaybe>;\n amounts_not?: InputMaybe>;\n amounts_not_contains?: InputMaybe>;\n amounts_not_contains_nocase?: InputMaybe>;\n and?: InputMaybe>>;\n holdersCount?: InputMaybe;\n holdersCount_gt?: InputMaybe;\n holdersCount_gte?: InputMaybe;\n holdersCount_in?: InputMaybe>;\n holdersCount_lt?: InputMaybe;\n holdersCount_lte?: InputMaybe;\n holdersCount_not?: InputMaybe;\n holdersCount_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n liquidity?: InputMaybe;\n liquidity_gt?: InputMaybe;\n liquidity_gte?: InputMaybe;\n liquidity_in?: InputMaybe>;\n liquidity_lt?: InputMaybe;\n liquidity_lte?: InputMaybe;\n liquidity_not?: InputMaybe;\n liquidity_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n protocolFee?: InputMaybe;\n protocolFee_gt?: InputMaybe;\n protocolFee_gte?: InputMaybe;\n protocolFee_in?: InputMaybe>;\n protocolFee_lt?: InputMaybe;\n protocolFee_lte?: InputMaybe;\n protocolFee_not?: InputMaybe;\n protocolFee_not_in?: InputMaybe>;\n swapFees?: InputMaybe;\n swapFees_gt?: InputMaybe;\n swapFees_gte?: InputMaybe;\n swapFees_in?: InputMaybe>;\n swapFees_lt?: InputMaybe;\n swapFees_lte?: InputMaybe;\n swapFees_not?: InputMaybe;\n swapFees_not_in?: InputMaybe>;\n swapVolume?: InputMaybe;\n swapVolume_gt?: InputMaybe;\n swapVolume_gte?: InputMaybe;\n swapVolume_in?: InputMaybe>;\n swapVolume_lt?: InputMaybe;\n swapVolume_lte?: InputMaybe;\n swapVolume_not?: InputMaybe;\n swapVolume_not_in?: InputMaybe>;\n swapsCount?: InputMaybe;\n swapsCount_gt?: InputMaybe;\n swapsCount_gte?: InputMaybe;\n swapsCount_in?: InputMaybe>;\n swapsCount_lt?: InputMaybe;\n swapsCount_lte?: InputMaybe;\n swapsCount_not?: InputMaybe;\n swapsCount_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n totalShares?: InputMaybe;\n totalShares_gt?: InputMaybe;\n totalShares_gte?: InputMaybe;\n totalShares_in?: InputMaybe>;\n totalShares_lt?: InputMaybe;\n totalShares_lte?: InputMaybe;\n totalShares_not?: InputMaybe;\n totalShares_not_in?: InputMaybe>;\n};\n\nexport enum PoolSnapshot_OrderBy {\n Amounts = 'amounts',\n HoldersCount = 'holdersCount',\n Id = 'id',\n Liquidity = 'liquidity',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n ProtocolFee = 'protocolFee',\n SwapFees = 'swapFees',\n SwapVolume = 'swapVolume',\n SwapsCount = 'swapsCount',\n Timestamp = 'timestamp',\n TotalShares = 'totalShares'\n}\n\nexport type PoolToken = {\n __typename?: 'PoolToken';\n address: Scalars['String'];\n assetManager: Scalars['Bytes'];\n balance: Scalars['BigDecimal'];\n cashBalance: Scalars['BigDecimal'];\n circuitBreaker?: Maybe;\n decimals: Scalars['Int'];\n id: Scalars['ID'];\n index?: Maybe;\n isExemptFromYieldProtocolFee?: Maybe;\n managedBalance: Scalars['BigDecimal'];\n managements?: Maybe>;\n name: Scalars['String'];\n oldPriceRate?: Maybe;\n paidProtocolFees?: Maybe;\n poolId?: Maybe;\n priceRate: Scalars['BigDecimal'];\n symbol: Scalars['String'];\n token: Token;\n weight?: Maybe;\n};\n\n\nexport type PoolTokenManagementsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type PoolToken_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_contains_nocase?: InputMaybe;\n address_ends_with?: InputMaybe;\n address_ends_with_nocase?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_contains_nocase?: InputMaybe;\n address_not_ends_with?: InputMaybe;\n address_not_ends_with_nocase?: InputMaybe;\n address_not_in?: InputMaybe>;\n address_not_starts_with?: InputMaybe;\n address_not_starts_with_nocase?: InputMaybe;\n address_starts_with?: InputMaybe;\n address_starts_with_nocase?: InputMaybe;\n and?: InputMaybe>>;\n assetManager?: InputMaybe;\n assetManager_contains?: InputMaybe;\n assetManager_gt?: InputMaybe;\n assetManager_gte?: InputMaybe;\n assetManager_in?: InputMaybe>;\n assetManager_lt?: InputMaybe;\n assetManager_lte?: InputMaybe;\n assetManager_not?: InputMaybe;\n assetManager_not_contains?: InputMaybe;\n assetManager_not_in?: InputMaybe>;\n balance?: InputMaybe;\n balance_gt?: InputMaybe;\n balance_gte?: InputMaybe;\n balance_in?: InputMaybe>;\n balance_lt?: InputMaybe;\n balance_lte?: InputMaybe;\n balance_not?: InputMaybe;\n balance_not_in?: InputMaybe>;\n cashBalance?: InputMaybe;\n cashBalance_gt?: InputMaybe;\n cashBalance_gte?: InputMaybe;\n cashBalance_in?: InputMaybe>;\n cashBalance_lt?: InputMaybe;\n cashBalance_lte?: InputMaybe;\n cashBalance_not?: InputMaybe;\n cashBalance_not_in?: InputMaybe>;\n circuitBreaker?: InputMaybe;\n circuitBreaker_?: InputMaybe;\n circuitBreaker_contains?: InputMaybe;\n circuitBreaker_contains_nocase?: InputMaybe;\n circuitBreaker_ends_with?: InputMaybe;\n circuitBreaker_ends_with_nocase?: InputMaybe;\n circuitBreaker_gt?: InputMaybe;\n circuitBreaker_gte?: InputMaybe;\n circuitBreaker_in?: InputMaybe>;\n circuitBreaker_lt?: InputMaybe;\n circuitBreaker_lte?: InputMaybe;\n circuitBreaker_not?: InputMaybe;\n circuitBreaker_not_contains?: InputMaybe;\n circuitBreaker_not_contains_nocase?: InputMaybe;\n circuitBreaker_not_ends_with?: InputMaybe;\n circuitBreaker_not_ends_with_nocase?: InputMaybe;\n circuitBreaker_not_in?: InputMaybe>;\n circuitBreaker_not_starts_with?: InputMaybe;\n circuitBreaker_not_starts_with_nocase?: InputMaybe;\n circuitBreaker_starts_with?: InputMaybe;\n circuitBreaker_starts_with_nocase?: InputMaybe;\n decimals?: InputMaybe;\n decimals_gt?: InputMaybe;\n decimals_gte?: InputMaybe;\n decimals_in?: InputMaybe>;\n decimals_lt?: InputMaybe;\n decimals_lte?: InputMaybe;\n decimals_not?: InputMaybe;\n decimals_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n index?: InputMaybe;\n index_gt?: InputMaybe;\n index_gte?: InputMaybe;\n index_in?: InputMaybe>;\n index_lt?: InputMaybe;\n index_lte?: InputMaybe;\n index_not?: InputMaybe;\n index_not_in?: InputMaybe>;\n isExemptFromYieldProtocolFee?: InputMaybe;\n isExemptFromYieldProtocolFee_in?: InputMaybe>;\n isExemptFromYieldProtocolFee_not?: InputMaybe;\n isExemptFromYieldProtocolFee_not_in?: InputMaybe>;\n managedBalance?: InputMaybe;\n managedBalance_gt?: InputMaybe;\n managedBalance_gte?: InputMaybe;\n managedBalance_in?: InputMaybe>;\n managedBalance_lt?: InputMaybe;\n managedBalance_lte?: InputMaybe;\n managedBalance_not?: InputMaybe;\n managedBalance_not_in?: InputMaybe>;\n managements_?: InputMaybe;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n oldPriceRate?: InputMaybe;\n oldPriceRate_gt?: InputMaybe;\n oldPriceRate_gte?: InputMaybe;\n oldPriceRate_in?: InputMaybe>;\n oldPriceRate_lt?: InputMaybe;\n oldPriceRate_lte?: InputMaybe;\n oldPriceRate_not?: InputMaybe;\n oldPriceRate_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n paidProtocolFees?: InputMaybe;\n paidProtocolFees_gt?: InputMaybe;\n paidProtocolFees_gte?: InputMaybe;\n paidProtocolFees_in?: InputMaybe>;\n paidProtocolFees_lt?: InputMaybe;\n paidProtocolFees_lte?: InputMaybe;\n paidProtocolFees_not?: InputMaybe;\n paidProtocolFees_not_in?: InputMaybe>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n priceRate?: InputMaybe;\n priceRate_gt?: InputMaybe;\n priceRate_gte?: InputMaybe;\n priceRate_in?: InputMaybe>;\n priceRate_lt?: InputMaybe;\n priceRate_lte?: InputMaybe;\n priceRate_not?: InputMaybe;\n priceRate_not_in?: InputMaybe>;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n token?: InputMaybe;\n token_?: InputMaybe;\n token_contains?: InputMaybe;\n token_contains_nocase?: InputMaybe;\n token_ends_with?: InputMaybe;\n token_ends_with_nocase?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_contains_nocase?: InputMaybe;\n token_not_ends_with?: InputMaybe;\n token_not_ends_with_nocase?: InputMaybe;\n token_not_in?: InputMaybe>;\n token_not_starts_with?: InputMaybe;\n token_not_starts_with_nocase?: InputMaybe;\n token_starts_with?: InputMaybe;\n token_starts_with_nocase?: InputMaybe;\n weight?: InputMaybe;\n weight_gt?: InputMaybe;\n weight_gte?: InputMaybe;\n weight_in?: InputMaybe>;\n weight_lt?: InputMaybe;\n weight_lte?: InputMaybe;\n weight_not?: InputMaybe;\n weight_not_in?: InputMaybe>;\n};\n\nexport enum PoolToken_OrderBy {\n Address = 'address',\n AssetManager = 'assetManager',\n Balance = 'balance',\n CashBalance = 'cashBalance',\n CircuitBreaker = 'circuitBreaker',\n CircuitBreakerBptPrice = 'circuitBreaker__bptPrice',\n CircuitBreakerId = 'circuitBreaker__id',\n CircuitBreakerLowerBoundPercentage = 'circuitBreaker__lowerBoundPercentage',\n CircuitBreakerUpperBoundPercentage = 'circuitBreaker__upperBoundPercentage',\n Decimals = 'decimals',\n Id = 'id',\n Index = 'index',\n IsExemptFromYieldProtocolFee = 'isExemptFromYieldProtocolFee',\n ManagedBalance = 'managedBalance',\n Managements = 'managements',\n Name = 'name',\n OldPriceRate = 'oldPriceRate',\n PaidProtocolFees = 'paidProtocolFees',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n PriceRate = 'priceRate',\n Symbol = 'symbol',\n Token = 'token',\n TokenAddress = 'token__address',\n TokenDecimals = 'token__decimals',\n TokenFxOracleDecimals = 'token__fxOracleDecimals',\n TokenId = 'token__id',\n TokenLatestFxPrice = 'token__latestFXPrice',\n TokenLatestUsdPrice = 'token__latestUSDPrice',\n TokenLatestUsdPriceTimestamp = 'token__latestUSDPriceTimestamp',\n TokenName = 'token__name',\n TokenSymbol = 'token__symbol',\n TokenTotalBalanceNotional = 'token__totalBalanceNotional',\n TokenTotalBalanceUsd = 'token__totalBalanceUSD',\n TokenTotalSwapCount = 'token__totalSwapCount',\n TokenTotalVolumeNotional = 'token__totalVolumeNotional',\n TokenTotalVolumeUsd = 'token__totalVolumeUSD',\n Weight = 'weight'\n}\n\nexport type Pool_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_in?: InputMaybe>;\n alpha?: InputMaybe;\n alpha_gt?: InputMaybe;\n alpha_gte?: InputMaybe;\n alpha_in?: InputMaybe>;\n alpha_lt?: InputMaybe;\n alpha_lte?: InputMaybe;\n alpha_not?: InputMaybe;\n alpha_not_in?: InputMaybe>;\n amp?: InputMaybe;\n ampUpdates_?: InputMaybe;\n amp_gt?: InputMaybe;\n amp_gte?: InputMaybe;\n amp_in?: InputMaybe>;\n amp_lt?: InputMaybe;\n amp_lte?: InputMaybe;\n amp_not?: InputMaybe;\n amp_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n baseToken?: InputMaybe;\n baseToken_contains?: InputMaybe;\n baseToken_gt?: InputMaybe;\n baseToken_gte?: InputMaybe;\n baseToken_in?: InputMaybe>;\n baseToken_lt?: InputMaybe;\n baseToken_lte?: InputMaybe;\n baseToken_not?: InputMaybe;\n baseToken_not_contains?: InputMaybe;\n baseToken_not_in?: InputMaybe>;\n beta?: InputMaybe;\n beta_gt?: InputMaybe;\n beta_gte?: InputMaybe;\n beta_in?: InputMaybe>;\n beta_lt?: InputMaybe;\n beta_lte?: InputMaybe;\n beta_not?: InputMaybe;\n beta_not_in?: InputMaybe>;\n c?: InputMaybe;\n c_gt?: InputMaybe;\n c_gte?: InputMaybe;\n c_in?: InputMaybe>;\n c_lt?: InputMaybe;\n c_lte?: InputMaybe;\n c_not?: InputMaybe;\n c_not_in?: InputMaybe>;\n circuitBreakers_?: InputMaybe;\n createTime?: InputMaybe;\n createTime_gt?: InputMaybe;\n createTime_gte?: InputMaybe;\n createTime_in?: InputMaybe>;\n createTime_lt?: InputMaybe;\n createTime_lte?: InputMaybe;\n createTime_not?: InputMaybe;\n createTime_not_in?: InputMaybe>;\n dSq?: InputMaybe;\n dSq_gt?: InputMaybe;\n dSq_gte?: InputMaybe;\n dSq_in?: InputMaybe>;\n dSq_lt?: InputMaybe;\n dSq_lte?: InputMaybe;\n dSq_not?: InputMaybe;\n dSq_not_in?: InputMaybe>;\n delta?: InputMaybe;\n delta_gt?: InputMaybe;\n delta_gte?: InputMaybe;\n delta_in?: InputMaybe>;\n delta_lt?: InputMaybe;\n delta_lte?: InputMaybe;\n delta_not?: InputMaybe;\n delta_not_in?: InputMaybe>;\n epsilon?: InputMaybe;\n epsilon_gt?: InputMaybe;\n epsilon_gte?: InputMaybe;\n epsilon_in?: InputMaybe>;\n epsilon_lt?: InputMaybe;\n epsilon_lte?: InputMaybe;\n epsilon_not?: InputMaybe;\n epsilon_not_in?: InputMaybe>;\n expiryTime?: InputMaybe;\n expiryTime_gt?: InputMaybe;\n expiryTime_gte?: InputMaybe;\n expiryTime_in?: InputMaybe>;\n expiryTime_lt?: InputMaybe;\n expiryTime_lte?: InputMaybe;\n expiryTime_not?: InputMaybe;\n expiryTime_not_in?: InputMaybe>;\n factory?: InputMaybe;\n factory_contains?: InputMaybe;\n factory_gt?: InputMaybe;\n factory_gte?: InputMaybe;\n factory_in?: InputMaybe>;\n factory_lt?: InputMaybe;\n factory_lte?: InputMaybe;\n factory_not?: InputMaybe;\n factory_not_contains?: InputMaybe;\n factory_not_in?: InputMaybe>;\n historicalValues_?: InputMaybe;\n holdersCount?: InputMaybe;\n holdersCount_gt?: InputMaybe;\n holdersCount_gte?: InputMaybe;\n holdersCount_in?: InputMaybe>;\n holdersCount_lt?: InputMaybe;\n holdersCount_lte?: InputMaybe;\n holdersCount_not?: InputMaybe;\n holdersCount_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n isInRecoveryMode?: InputMaybe;\n isInRecoveryMode_in?: InputMaybe>;\n isInRecoveryMode_not?: InputMaybe;\n isInRecoveryMode_not_in?: InputMaybe>;\n isPaused?: InputMaybe;\n isPaused_in?: InputMaybe>;\n isPaused_not?: InputMaybe;\n isPaused_not_in?: InputMaybe>;\n joinExitEnabled?: InputMaybe;\n joinExitEnabled_in?: InputMaybe>;\n joinExitEnabled_not?: InputMaybe;\n joinExitEnabled_not_in?: InputMaybe>;\n lambda?: InputMaybe;\n lambda_gt?: InputMaybe;\n lambda_gte?: InputMaybe;\n lambda_in?: InputMaybe>;\n lambda_lt?: InputMaybe;\n lambda_lte?: InputMaybe;\n lambda_not?: InputMaybe;\n lambda_not_in?: InputMaybe>;\n lastJoinExitAmp?: InputMaybe;\n lastJoinExitAmp_gt?: InputMaybe;\n lastJoinExitAmp_gte?: InputMaybe;\n lastJoinExitAmp_in?: InputMaybe>;\n lastJoinExitAmp_lt?: InputMaybe;\n lastJoinExitAmp_lte?: InputMaybe;\n lastJoinExitAmp_not?: InputMaybe;\n lastJoinExitAmp_not_in?: InputMaybe>;\n lastPostJoinExitInvariant?: InputMaybe;\n lastPostJoinExitInvariant_gt?: InputMaybe;\n lastPostJoinExitInvariant_gte?: InputMaybe;\n lastPostJoinExitInvariant_in?: InputMaybe>;\n lastPostJoinExitInvariant_lt?: InputMaybe;\n lastPostJoinExitInvariant_lte?: InputMaybe;\n lastPostJoinExitInvariant_not?: InputMaybe;\n lastPostJoinExitInvariant_not_in?: InputMaybe>;\n latestAmpUpdate?: InputMaybe;\n latestAmpUpdate_?: InputMaybe;\n latestAmpUpdate_contains?: InputMaybe;\n latestAmpUpdate_contains_nocase?: InputMaybe;\n latestAmpUpdate_ends_with?: InputMaybe;\n latestAmpUpdate_ends_with_nocase?: InputMaybe;\n latestAmpUpdate_gt?: InputMaybe;\n latestAmpUpdate_gte?: InputMaybe;\n latestAmpUpdate_in?: InputMaybe>;\n latestAmpUpdate_lt?: InputMaybe;\n latestAmpUpdate_lte?: InputMaybe;\n latestAmpUpdate_not?: InputMaybe;\n latestAmpUpdate_not_contains?: InputMaybe;\n latestAmpUpdate_not_contains_nocase?: InputMaybe;\n latestAmpUpdate_not_ends_with?: InputMaybe;\n latestAmpUpdate_not_ends_with_nocase?: InputMaybe;\n latestAmpUpdate_not_in?: InputMaybe>;\n latestAmpUpdate_not_starts_with?: InputMaybe;\n latestAmpUpdate_not_starts_with_nocase?: InputMaybe;\n latestAmpUpdate_starts_with?: InputMaybe;\n latestAmpUpdate_starts_with_nocase?: InputMaybe;\n lowerTarget?: InputMaybe;\n lowerTarget_gt?: InputMaybe;\n lowerTarget_gte?: InputMaybe;\n lowerTarget_in?: InputMaybe>;\n lowerTarget_lt?: InputMaybe;\n lowerTarget_lte?: InputMaybe;\n lowerTarget_not?: InputMaybe;\n lowerTarget_not_in?: InputMaybe>;\n mainIndex?: InputMaybe;\n mainIndex_gt?: InputMaybe;\n mainIndex_gte?: InputMaybe;\n mainIndex_in?: InputMaybe>;\n mainIndex_lt?: InputMaybe;\n mainIndex_lte?: InputMaybe;\n mainIndex_not?: InputMaybe;\n mainIndex_not_in?: InputMaybe>;\n managementAumFee?: InputMaybe;\n managementAumFee_gt?: InputMaybe;\n managementAumFee_gte?: InputMaybe;\n managementAumFee_in?: InputMaybe>;\n managementAumFee_lt?: InputMaybe;\n managementAumFee_lte?: InputMaybe;\n managementAumFee_not?: InputMaybe;\n managementAumFee_not_in?: InputMaybe>;\n managementFee?: InputMaybe;\n managementFee_gt?: InputMaybe;\n managementFee_gte?: InputMaybe;\n managementFee_in?: InputMaybe>;\n managementFee_lt?: InputMaybe;\n managementFee_lte?: InputMaybe;\n managementFee_not?: InputMaybe;\n managementFee_not_in?: InputMaybe>;\n mustAllowlistLPs?: InputMaybe;\n mustAllowlistLPs_in?: InputMaybe>;\n mustAllowlistLPs_not?: InputMaybe;\n mustAllowlistLPs_not_in?: InputMaybe>;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n oracleEnabled?: InputMaybe;\n oracleEnabled_in?: InputMaybe>;\n oracleEnabled_not?: InputMaybe;\n oracleEnabled_not_in?: InputMaybe>;\n owner?: InputMaybe;\n owner_contains?: InputMaybe;\n owner_gt?: InputMaybe;\n owner_gte?: InputMaybe;\n owner_in?: InputMaybe>;\n owner_lt?: InputMaybe;\n owner_lte?: InputMaybe;\n owner_not?: InputMaybe;\n owner_not_contains?: InputMaybe;\n owner_not_in?: InputMaybe>;\n poolType?: InputMaybe;\n poolTypeVersion?: InputMaybe;\n poolTypeVersion_gt?: InputMaybe;\n poolTypeVersion_gte?: InputMaybe;\n poolTypeVersion_in?: InputMaybe>;\n poolTypeVersion_lt?: InputMaybe;\n poolTypeVersion_lte?: InputMaybe;\n poolTypeVersion_not?: InputMaybe;\n poolTypeVersion_not_in?: InputMaybe>;\n poolType_contains?: InputMaybe;\n poolType_contains_nocase?: InputMaybe;\n poolType_ends_with?: InputMaybe;\n poolType_ends_with_nocase?: InputMaybe;\n poolType_gt?: InputMaybe;\n poolType_gte?: InputMaybe;\n poolType_in?: InputMaybe>;\n poolType_lt?: InputMaybe;\n poolType_lte?: InputMaybe;\n poolType_not?: InputMaybe;\n poolType_not_contains?: InputMaybe;\n poolType_not_contains_nocase?: InputMaybe;\n poolType_not_ends_with?: InputMaybe;\n poolType_not_ends_with_nocase?: InputMaybe;\n poolType_not_in?: InputMaybe>;\n poolType_not_starts_with?: InputMaybe;\n poolType_not_starts_with_nocase?: InputMaybe;\n poolType_starts_with?: InputMaybe;\n poolType_starts_with_nocase?: InputMaybe;\n priceRateProviders_?: InputMaybe;\n principalToken?: InputMaybe;\n principalToken_contains?: InputMaybe;\n principalToken_gt?: InputMaybe;\n principalToken_gte?: InputMaybe;\n principalToken_in?: InputMaybe>;\n principalToken_lt?: InputMaybe;\n principalToken_lte?: InputMaybe;\n principalToken_not?: InputMaybe;\n principalToken_not_contains?: InputMaybe;\n principalToken_not_in?: InputMaybe>;\n protocolAumFeeCache?: InputMaybe;\n protocolAumFeeCache_gt?: InputMaybe;\n protocolAumFeeCache_gte?: InputMaybe;\n protocolAumFeeCache_in?: InputMaybe>;\n protocolAumFeeCache_lt?: InputMaybe;\n protocolAumFeeCache_lte?: InputMaybe;\n protocolAumFeeCache_not?: InputMaybe;\n protocolAumFeeCache_not_in?: InputMaybe>;\n protocolId?: InputMaybe;\n protocolIdData?: InputMaybe;\n protocolIdData_?: InputMaybe;\n protocolIdData_contains?: InputMaybe;\n protocolIdData_contains_nocase?: InputMaybe;\n protocolIdData_ends_with?: InputMaybe;\n protocolIdData_ends_with_nocase?: InputMaybe;\n protocolIdData_gt?: InputMaybe;\n protocolIdData_gte?: InputMaybe;\n protocolIdData_in?: InputMaybe>;\n protocolIdData_lt?: InputMaybe;\n protocolIdData_lte?: InputMaybe;\n protocolIdData_not?: InputMaybe;\n protocolIdData_not_contains?: InputMaybe;\n protocolIdData_not_contains_nocase?: InputMaybe;\n protocolIdData_not_ends_with?: InputMaybe;\n protocolIdData_not_ends_with_nocase?: InputMaybe;\n protocolIdData_not_in?: InputMaybe>;\n protocolIdData_not_starts_with?: InputMaybe;\n protocolIdData_not_starts_with_nocase?: InputMaybe;\n protocolIdData_starts_with?: InputMaybe;\n protocolIdData_starts_with_nocase?: InputMaybe;\n protocolId_gt?: InputMaybe;\n protocolId_gte?: InputMaybe;\n protocolId_in?: InputMaybe>;\n protocolId_lt?: InputMaybe;\n protocolId_lte?: InputMaybe;\n protocolId_not?: InputMaybe;\n protocolId_not_in?: InputMaybe>;\n protocolSwapFeeCache?: InputMaybe;\n protocolSwapFeeCache_gt?: InputMaybe;\n protocolSwapFeeCache_gte?: InputMaybe;\n protocolSwapFeeCache_in?: InputMaybe>;\n protocolSwapFeeCache_lt?: InputMaybe;\n protocolSwapFeeCache_lte?: InputMaybe;\n protocolSwapFeeCache_not?: InputMaybe;\n protocolSwapFeeCache_not_in?: InputMaybe>;\n protocolYieldFeeCache?: InputMaybe;\n protocolYieldFeeCache_gt?: InputMaybe;\n protocolYieldFeeCache_gte?: InputMaybe;\n protocolYieldFeeCache_in?: InputMaybe>;\n protocolYieldFeeCache_lt?: InputMaybe;\n protocolYieldFeeCache_lte?: InputMaybe;\n protocolYieldFeeCache_not?: InputMaybe;\n protocolYieldFeeCache_not_in?: InputMaybe>;\n root3Alpha?: InputMaybe;\n root3Alpha_gt?: InputMaybe;\n root3Alpha_gte?: InputMaybe;\n root3Alpha_in?: InputMaybe>;\n root3Alpha_lt?: InputMaybe;\n root3Alpha_lte?: InputMaybe;\n root3Alpha_not?: InputMaybe;\n root3Alpha_not_in?: InputMaybe>;\n s?: InputMaybe;\n s_gt?: InputMaybe;\n s_gte?: InputMaybe;\n s_in?: InputMaybe>;\n s_lt?: InputMaybe;\n s_lte?: InputMaybe;\n s_not?: InputMaybe;\n s_not_in?: InputMaybe>;\n shares_?: InputMaybe;\n snapshots_?: InputMaybe;\n sqrtAlpha?: InputMaybe;\n sqrtAlpha_gt?: InputMaybe;\n sqrtAlpha_gte?: InputMaybe;\n sqrtAlpha_in?: InputMaybe>;\n sqrtAlpha_lt?: InputMaybe;\n sqrtAlpha_lte?: InputMaybe;\n sqrtAlpha_not?: InputMaybe;\n sqrtAlpha_not_in?: InputMaybe>;\n sqrtBeta?: InputMaybe;\n sqrtBeta_gt?: InputMaybe;\n sqrtBeta_gte?: InputMaybe;\n sqrtBeta_in?: InputMaybe>;\n sqrtBeta_lt?: InputMaybe;\n sqrtBeta_lte?: InputMaybe;\n sqrtBeta_not?: InputMaybe;\n sqrtBeta_not_in?: InputMaybe>;\n strategyType?: InputMaybe;\n strategyType_gt?: InputMaybe;\n strategyType_gte?: InputMaybe;\n strategyType_in?: InputMaybe>;\n strategyType_lt?: InputMaybe;\n strategyType_lte?: InputMaybe;\n strategyType_not?: InputMaybe;\n strategyType_not_in?: InputMaybe>;\n swapEnabled?: InputMaybe;\n swapEnabledCurationSignal?: InputMaybe;\n swapEnabledCurationSignal_in?: InputMaybe>;\n swapEnabledCurationSignal_not?: InputMaybe;\n swapEnabledCurationSignal_not_in?: InputMaybe>;\n swapEnabledInternal?: InputMaybe;\n swapEnabledInternal_in?: InputMaybe>;\n swapEnabledInternal_not?: InputMaybe;\n swapEnabledInternal_not_in?: InputMaybe>;\n swapEnabled_in?: InputMaybe>;\n swapEnabled_not?: InputMaybe;\n swapEnabled_not_in?: InputMaybe>;\n swapFee?: InputMaybe;\n swapFee_gt?: InputMaybe;\n swapFee_gte?: InputMaybe;\n swapFee_in?: InputMaybe>;\n swapFee_lt?: InputMaybe;\n swapFee_lte?: InputMaybe;\n swapFee_not?: InputMaybe;\n swapFee_not_in?: InputMaybe>;\n swapsCount?: InputMaybe;\n swapsCount_gt?: InputMaybe;\n swapsCount_gte?: InputMaybe;\n swapsCount_in?: InputMaybe>;\n swapsCount_lt?: InputMaybe;\n swapsCount_lte?: InputMaybe;\n swapsCount_not?: InputMaybe;\n swapsCount_not_in?: InputMaybe>;\n swaps_?: InputMaybe;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n tauAlphaX?: InputMaybe;\n tauAlphaX_gt?: InputMaybe;\n tauAlphaX_gte?: InputMaybe;\n tauAlphaX_in?: InputMaybe>;\n tauAlphaX_lt?: InputMaybe;\n tauAlphaX_lte?: InputMaybe;\n tauAlphaX_not?: InputMaybe;\n tauAlphaX_not_in?: InputMaybe>;\n tauAlphaY?: InputMaybe;\n tauAlphaY_gt?: InputMaybe;\n tauAlphaY_gte?: InputMaybe;\n tauAlphaY_in?: InputMaybe>;\n tauAlphaY_lt?: InputMaybe;\n tauAlphaY_lte?: InputMaybe;\n tauAlphaY_not?: InputMaybe;\n tauAlphaY_not_in?: InputMaybe>;\n tauBetaX?: InputMaybe;\n tauBetaX_gt?: InputMaybe;\n tauBetaX_gte?: InputMaybe;\n tauBetaX_in?: InputMaybe>;\n tauBetaX_lt?: InputMaybe;\n tauBetaX_lte?: InputMaybe;\n tauBetaX_not?: InputMaybe;\n tauBetaX_not_in?: InputMaybe>;\n tauBetaY?: InputMaybe;\n tauBetaY_gt?: InputMaybe;\n tauBetaY_gte?: InputMaybe;\n tauBetaY_in?: InputMaybe>;\n tauBetaY_lt?: InputMaybe;\n tauBetaY_lte?: InputMaybe;\n tauBetaY_not?: InputMaybe;\n tauBetaY_not_in?: InputMaybe>;\n tokensList?: InputMaybe>;\n tokensList_contains?: InputMaybe>;\n tokensList_contains_nocase?: InputMaybe>;\n tokensList_not?: InputMaybe>;\n tokensList_not_contains?: InputMaybe>;\n tokensList_not_contains_nocase?: InputMaybe>;\n tokens_?: InputMaybe;\n totalAumFeeCollectedInBPT?: InputMaybe;\n totalAumFeeCollectedInBPT_gt?: InputMaybe;\n totalAumFeeCollectedInBPT_gte?: InputMaybe;\n totalAumFeeCollectedInBPT_in?: InputMaybe>;\n totalAumFeeCollectedInBPT_lt?: InputMaybe;\n totalAumFeeCollectedInBPT_lte?: InputMaybe;\n totalAumFeeCollectedInBPT_not?: InputMaybe;\n totalAumFeeCollectedInBPT_not_in?: InputMaybe>;\n totalLiquidity?: InputMaybe;\n totalLiquiditySansBPT?: InputMaybe;\n totalLiquiditySansBPT_gt?: InputMaybe;\n totalLiquiditySansBPT_gte?: InputMaybe;\n totalLiquiditySansBPT_in?: InputMaybe>;\n totalLiquiditySansBPT_lt?: InputMaybe;\n totalLiquiditySansBPT_lte?: InputMaybe;\n totalLiquiditySansBPT_not?: InputMaybe;\n totalLiquiditySansBPT_not_in?: InputMaybe>;\n totalLiquidity_gt?: InputMaybe;\n totalLiquidity_gte?: InputMaybe;\n totalLiquidity_in?: InputMaybe>;\n totalLiquidity_lt?: InputMaybe;\n totalLiquidity_lte?: InputMaybe;\n totalLiquidity_not?: InputMaybe;\n totalLiquidity_not_in?: InputMaybe>;\n totalProtocolFee?: InputMaybe;\n totalProtocolFeePaidInBPT?: InputMaybe;\n totalProtocolFeePaidInBPT_gt?: InputMaybe;\n totalProtocolFeePaidInBPT_gte?: InputMaybe;\n totalProtocolFeePaidInBPT_in?: InputMaybe>;\n totalProtocolFeePaidInBPT_lt?: InputMaybe;\n totalProtocolFeePaidInBPT_lte?: InputMaybe;\n totalProtocolFeePaidInBPT_not?: InputMaybe;\n totalProtocolFeePaidInBPT_not_in?: InputMaybe>;\n totalProtocolFee_gt?: InputMaybe;\n totalProtocolFee_gte?: InputMaybe;\n totalProtocolFee_in?: InputMaybe>;\n totalProtocolFee_lt?: InputMaybe;\n totalProtocolFee_lte?: InputMaybe;\n totalProtocolFee_not?: InputMaybe;\n totalProtocolFee_not_in?: InputMaybe>;\n totalShares?: InputMaybe;\n totalShares_gt?: InputMaybe;\n totalShares_gte?: InputMaybe;\n totalShares_in?: InputMaybe>;\n totalShares_lt?: InputMaybe;\n totalShares_lte?: InputMaybe;\n totalShares_not?: InputMaybe;\n totalShares_not_in?: InputMaybe>;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n totalWeight?: InputMaybe;\n totalWeight_gt?: InputMaybe;\n totalWeight_gte?: InputMaybe;\n totalWeight_in?: InputMaybe>;\n totalWeight_lt?: InputMaybe;\n totalWeight_lte?: InputMaybe;\n totalWeight_not?: InputMaybe;\n totalWeight_not_in?: InputMaybe>;\n tx?: InputMaybe;\n tx_contains?: InputMaybe;\n tx_gt?: InputMaybe;\n tx_gte?: InputMaybe;\n tx_in?: InputMaybe>;\n tx_lt?: InputMaybe;\n tx_lte?: InputMaybe;\n tx_not?: InputMaybe;\n tx_not_contains?: InputMaybe;\n tx_not_in?: InputMaybe>;\n u?: InputMaybe;\n u_gt?: InputMaybe;\n u_gte?: InputMaybe;\n u_in?: InputMaybe>;\n u_lt?: InputMaybe;\n u_lte?: InputMaybe;\n u_not?: InputMaybe;\n u_not_in?: InputMaybe>;\n unitSeconds?: InputMaybe;\n unitSeconds_gt?: InputMaybe;\n unitSeconds_gte?: InputMaybe;\n unitSeconds_in?: InputMaybe>;\n unitSeconds_lt?: InputMaybe;\n unitSeconds_lte?: InputMaybe;\n unitSeconds_not?: InputMaybe;\n unitSeconds_not_in?: InputMaybe>;\n upperTarget?: InputMaybe;\n upperTarget_gt?: InputMaybe;\n upperTarget_gte?: InputMaybe;\n upperTarget_in?: InputMaybe>;\n upperTarget_lt?: InputMaybe;\n upperTarget_lte?: InputMaybe;\n upperTarget_not?: InputMaybe;\n upperTarget_not_in?: InputMaybe>;\n v?: InputMaybe;\n v_gt?: InputMaybe;\n v_gte?: InputMaybe;\n v_in?: InputMaybe>;\n v_lt?: InputMaybe;\n v_lte?: InputMaybe;\n v_not?: InputMaybe;\n v_not_in?: InputMaybe>;\n vaultID?: InputMaybe;\n vaultID_?: InputMaybe;\n vaultID_contains?: InputMaybe;\n vaultID_contains_nocase?: InputMaybe;\n vaultID_ends_with?: InputMaybe;\n vaultID_ends_with_nocase?: InputMaybe;\n vaultID_gt?: InputMaybe;\n vaultID_gte?: InputMaybe;\n vaultID_in?: InputMaybe>;\n vaultID_lt?: InputMaybe;\n vaultID_lte?: InputMaybe;\n vaultID_not?: InputMaybe;\n vaultID_not_contains?: InputMaybe;\n vaultID_not_contains_nocase?: InputMaybe;\n vaultID_not_ends_with?: InputMaybe;\n vaultID_not_ends_with_nocase?: InputMaybe;\n vaultID_not_in?: InputMaybe>;\n vaultID_not_starts_with?: InputMaybe;\n vaultID_not_starts_with_nocase?: InputMaybe;\n vaultID_starts_with?: InputMaybe;\n vaultID_starts_with_nocase?: InputMaybe;\n w?: InputMaybe;\n w_gt?: InputMaybe;\n w_gte?: InputMaybe;\n w_in?: InputMaybe>;\n w_lt?: InputMaybe;\n w_lte?: InputMaybe;\n w_not?: InputMaybe;\n w_not_in?: InputMaybe>;\n weightUpdates_?: InputMaybe;\n wrappedIndex?: InputMaybe;\n wrappedIndex_gt?: InputMaybe;\n wrappedIndex_gte?: InputMaybe;\n wrappedIndex_in?: InputMaybe>;\n wrappedIndex_lt?: InputMaybe;\n wrappedIndex_lte?: InputMaybe;\n wrappedIndex_not?: InputMaybe;\n wrappedIndex_not_in?: InputMaybe>;\n z?: InputMaybe;\n z_gt?: InputMaybe;\n z_gte?: InputMaybe;\n z_in?: InputMaybe>;\n z_lt?: InputMaybe;\n z_lte?: InputMaybe;\n z_not?: InputMaybe;\n z_not_in?: InputMaybe>;\n};\n\nexport enum Pool_OrderBy {\n Address = 'address',\n Alpha = 'alpha',\n Amp = 'amp',\n AmpUpdates = 'ampUpdates',\n BaseToken = 'baseToken',\n Beta = 'beta',\n C = 'c',\n CircuitBreakers = 'circuitBreakers',\n CreateTime = 'createTime',\n DSq = 'dSq',\n Delta = 'delta',\n Epsilon = 'epsilon',\n ExpiryTime = 'expiryTime',\n Factory = 'factory',\n HistoricalValues = 'historicalValues',\n HoldersCount = 'holdersCount',\n Id = 'id',\n IsInRecoveryMode = 'isInRecoveryMode',\n IsPaused = 'isPaused',\n JoinExitEnabled = 'joinExitEnabled',\n Lambda = 'lambda',\n LastJoinExitAmp = 'lastJoinExitAmp',\n LastPostJoinExitInvariant = 'lastPostJoinExitInvariant',\n LatestAmpUpdate = 'latestAmpUpdate',\n LatestAmpUpdateEndAmp = 'latestAmpUpdate__endAmp',\n LatestAmpUpdateEndTimestamp = 'latestAmpUpdate__endTimestamp',\n LatestAmpUpdateId = 'latestAmpUpdate__id',\n LatestAmpUpdateScheduledTimestamp = 'latestAmpUpdate__scheduledTimestamp',\n LatestAmpUpdateStartAmp = 'latestAmpUpdate__startAmp',\n LatestAmpUpdateStartTimestamp = 'latestAmpUpdate__startTimestamp',\n LowerTarget = 'lowerTarget',\n MainIndex = 'mainIndex',\n ManagementAumFee = 'managementAumFee',\n ManagementFee = 'managementFee',\n MustAllowlistLPs = 'mustAllowlistLPs',\n Name = 'name',\n OracleEnabled = 'oracleEnabled',\n Owner = 'owner',\n PoolType = 'poolType',\n PoolTypeVersion = 'poolTypeVersion',\n PriceRateProviders = 'priceRateProviders',\n PrincipalToken = 'principalToken',\n ProtocolAumFeeCache = 'protocolAumFeeCache',\n ProtocolId = 'protocolId',\n ProtocolIdData = 'protocolIdData',\n ProtocolIdDataId = 'protocolIdData__id',\n ProtocolIdDataName = 'protocolIdData__name',\n ProtocolSwapFeeCache = 'protocolSwapFeeCache',\n ProtocolYieldFeeCache = 'protocolYieldFeeCache',\n Root3Alpha = 'root3Alpha',\n S = 's',\n Shares = 'shares',\n Snapshots = 'snapshots',\n SqrtAlpha = 'sqrtAlpha',\n SqrtBeta = 'sqrtBeta',\n StrategyType = 'strategyType',\n SwapEnabled = 'swapEnabled',\n SwapEnabledCurationSignal = 'swapEnabledCurationSignal',\n SwapEnabledInternal = 'swapEnabledInternal',\n SwapFee = 'swapFee',\n Swaps = 'swaps',\n SwapsCount = 'swapsCount',\n Symbol = 'symbol',\n TauAlphaX = 'tauAlphaX',\n TauAlphaY = 'tauAlphaY',\n TauBetaX = 'tauBetaX',\n TauBetaY = 'tauBetaY',\n Tokens = 'tokens',\n TokensList = 'tokensList',\n TotalAumFeeCollectedInBpt = 'totalAumFeeCollectedInBPT',\n TotalLiquidity = 'totalLiquidity',\n TotalLiquiditySansBpt = 'totalLiquiditySansBPT',\n TotalProtocolFee = 'totalProtocolFee',\n TotalProtocolFeePaidInBpt = 'totalProtocolFeePaidInBPT',\n TotalShares = 'totalShares',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume',\n TotalWeight = 'totalWeight',\n Tx = 'tx',\n U = 'u',\n UnitSeconds = 'unitSeconds',\n UpperTarget = 'upperTarget',\n V = 'v',\n VaultId = 'vaultID',\n VaultIdId = 'vaultID__id',\n VaultIdPoolCount = 'vaultID__poolCount',\n VaultIdProtocolFeesCollector = 'vaultID__protocolFeesCollector',\n VaultIdTotalLiquidity = 'vaultID__totalLiquidity',\n VaultIdTotalProtocolFee = 'vaultID__totalProtocolFee',\n VaultIdTotalSwapCount = 'vaultID__totalSwapCount',\n VaultIdTotalSwapFee = 'vaultID__totalSwapFee',\n VaultIdTotalSwapVolume = 'vaultID__totalSwapVolume',\n W = 'w',\n WeightUpdates = 'weightUpdates',\n WrappedIndex = 'wrappedIndex',\n Z = 'z'\n}\n\nexport type PriceRateProvider = {\n __typename?: 'PriceRateProvider';\n address: Scalars['Bytes'];\n cacheDuration?: Maybe;\n cacheExpiry?: Maybe;\n id: Scalars['ID'];\n lastCached?: Maybe;\n poolId: Pool;\n rate?: Maybe;\n token: PoolToken;\n};\n\nexport type PriceRateProvider_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n cacheDuration?: InputMaybe;\n cacheDuration_gt?: InputMaybe;\n cacheDuration_gte?: InputMaybe;\n cacheDuration_in?: InputMaybe>;\n cacheDuration_lt?: InputMaybe;\n cacheDuration_lte?: InputMaybe;\n cacheDuration_not?: InputMaybe;\n cacheDuration_not_in?: InputMaybe>;\n cacheExpiry?: InputMaybe;\n cacheExpiry_gt?: InputMaybe;\n cacheExpiry_gte?: InputMaybe;\n cacheExpiry_in?: InputMaybe>;\n cacheExpiry_lt?: InputMaybe;\n cacheExpiry_lte?: InputMaybe;\n cacheExpiry_not?: InputMaybe;\n cacheExpiry_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n lastCached?: InputMaybe;\n lastCached_gt?: InputMaybe;\n lastCached_gte?: InputMaybe;\n lastCached_in?: InputMaybe>;\n lastCached_lt?: InputMaybe;\n lastCached_lte?: InputMaybe;\n lastCached_not?: InputMaybe;\n lastCached_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n rate?: InputMaybe;\n rate_gt?: InputMaybe;\n rate_gte?: InputMaybe;\n rate_in?: InputMaybe>;\n rate_lt?: InputMaybe;\n rate_lte?: InputMaybe;\n rate_not?: InputMaybe;\n rate_not_in?: InputMaybe>;\n token?: InputMaybe;\n token_?: InputMaybe;\n token_contains?: InputMaybe;\n token_contains_nocase?: InputMaybe;\n token_ends_with?: InputMaybe;\n token_ends_with_nocase?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_contains_nocase?: InputMaybe;\n token_not_ends_with?: InputMaybe;\n token_not_ends_with_nocase?: InputMaybe;\n token_not_in?: InputMaybe>;\n token_not_starts_with?: InputMaybe;\n token_not_starts_with_nocase?: InputMaybe;\n token_starts_with?: InputMaybe;\n token_starts_with_nocase?: InputMaybe;\n};\n\nexport enum PriceRateProvider_OrderBy {\n Address = 'address',\n CacheDuration = 'cacheDuration',\n CacheExpiry = 'cacheExpiry',\n Id = 'id',\n LastCached = 'lastCached',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n Rate = 'rate',\n Token = 'token',\n TokenAddress = 'token__address',\n TokenAssetManager = 'token__assetManager',\n TokenBalance = 'token__balance',\n TokenCashBalance = 'token__cashBalance',\n TokenDecimals = 'token__decimals',\n TokenId = 'token__id',\n TokenIndex = 'token__index',\n TokenIsExemptFromYieldProtocolFee = 'token__isExemptFromYieldProtocolFee',\n TokenManagedBalance = 'token__managedBalance',\n TokenName = 'token__name',\n TokenOldPriceRate = 'token__oldPriceRate',\n TokenPaidProtocolFees = 'token__paidProtocolFees',\n TokenPriceRate = 'token__priceRate',\n TokenSymbol = 'token__symbol',\n TokenWeight = 'token__weight'\n}\n\nexport type ProtocolIdData = {\n __typename?: 'ProtocolIdData';\n id: Scalars['ID'];\n name: Scalars['String'];\n};\n\nexport type ProtocolIdData_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n};\n\nexport enum ProtocolIdData_OrderBy {\n Id = 'id',\n Name = 'name'\n}\n\nexport type Query = {\n __typename?: 'Query';\n /** Access to subgraph metadata */\n _meta?: Maybe<_Meta_>;\n ampUpdate?: Maybe;\n ampUpdates: Array;\n balancer?: Maybe;\n balancerSnapshot?: Maybe;\n balancerSnapshots: Array;\n balancers: Array;\n circuitBreaker?: Maybe;\n circuitBreakers: Array;\n gradualWeightUpdate?: Maybe;\n gradualWeightUpdates: Array;\n joinExit?: Maybe;\n joinExits: Array;\n latestPrice?: Maybe;\n latestPrices: Array;\n managementOperation?: Maybe;\n managementOperations: Array;\n pool?: Maybe;\n poolContract?: Maybe;\n poolContracts: Array;\n poolHistoricalLiquidities: Array;\n poolHistoricalLiquidity?: Maybe;\n poolShare?: Maybe;\n poolShares: Array;\n poolSnapshot?: Maybe;\n poolSnapshots: Array;\n poolToken?: Maybe;\n poolTokens: Array;\n pools: Array;\n priceRateProvider?: Maybe;\n priceRateProviders: Array;\n protocolIdData?: Maybe;\n protocolIdDatas: Array;\n swap?: Maybe;\n swapFeeUpdate?: Maybe;\n swapFeeUpdates: Array;\n swaps: Array;\n token?: Maybe;\n tokenPrice?: Maybe;\n tokenPrices: Array;\n tokenSnapshot?: Maybe;\n tokenSnapshots: Array;\n tokens: Array;\n tradePair?: Maybe;\n tradePairSnapshot?: Maybe;\n tradePairSnapshots: Array;\n tradePairs: Array;\n user?: Maybe;\n userInternalBalance?: Maybe;\n userInternalBalances: Array;\n users: Array;\n};\n\n\nexport type Query_MetaArgs = {\n block?: InputMaybe;\n};\n\n\nexport type QueryAmpUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryAmpUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryBalancerArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryBalancerSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryBalancerSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryBalancersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryCircuitBreakerArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryCircuitBreakersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGradualWeightUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGradualWeightUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryJoinExitArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryJoinExitsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryLatestPriceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryLatestPricesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryManagementOperationArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryManagementOperationsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolContractArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolContractsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolHistoricalLiquiditiesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolHistoricalLiquidityArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolShareArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolSharesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPriceRateProviderArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPriceRateProvidersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryProtocolIdDataArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryProtocolIdDatasArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QuerySwapArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QuerySwapFeeUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QuerySwapFeeUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QuerySwapsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenPriceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenPricesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTokenSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTradePairArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTradePairSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTradePairSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTradePairsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryUserArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUserInternalBalanceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUserInternalBalancesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryUsersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\nexport type Subscription = {\n __typename?: 'Subscription';\n /** Access to subgraph metadata */\n _meta?: Maybe<_Meta_>;\n ampUpdate?: Maybe;\n ampUpdates: Array;\n balancer?: Maybe;\n balancerSnapshot?: Maybe;\n balancerSnapshots: Array;\n balancers: Array;\n circuitBreaker?: Maybe;\n circuitBreakers: Array;\n gradualWeightUpdate?: Maybe;\n gradualWeightUpdates: Array;\n joinExit?: Maybe;\n joinExits: Array;\n latestPrice?: Maybe;\n latestPrices: Array;\n managementOperation?: Maybe;\n managementOperations: Array;\n pool?: Maybe;\n poolContract?: Maybe;\n poolContracts: Array;\n poolHistoricalLiquidities: Array;\n poolHistoricalLiquidity?: Maybe;\n poolShare?: Maybe;\n poolShares: Array;\n poolSnapshot?: Maybe;\n poolSnapshots: Array;\n poolToken?: Maybe;\n poolTokens: Array;\n pools: Array;\n priceRateProvider?: Maybe;\n priceRateProviders: Array;\n protocolIdData?: Maybe;\n protocolIdDatas: Array;\n swap?: Maybe;\n swapFeeUpdate?: Maybe;\n swapFeeUpdates: Array;\n swaps: Array;\n token?: Maybe;\n tokenPrice?: Maybe;\n tokenPrices: Array;\n tokenSnapshot?: Maybe;\n tokenSnapshots: Array;\n tokens: Array;\n tradePair?: Maybe;\n tradePairSnapshot?: Maybe;\n tradePairSnapshots: Array;\n tradePairs: Array;\n user?: Maybe;\n userInternalBalance?: Maybe;\n userInternalBalances: Array;\n users: Array;\n};\n\n\nexport type Subscription_MetaArgs = {\n block?: InputMaybe;\n};\n\n\nexport type SubscriptionAmpUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionAmpUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionBalancerArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionBalancerSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionBalancerSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionBalancersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionCircuitBreakerArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionCircuitBreakersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGradualWeightUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGradualWeightUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionJoinExitArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionJoinExitsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionLatestPriceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionLatestPricesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionManagementOperationArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionManagementOperationsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolContractArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolContractsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolHistoricalLiquiditiesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolHistoricalLiquidityArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolShareArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolSharesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPriceRateProviderArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPriceRateProvidersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionProtocolIdDataArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionProtocolIdDatasArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionSwapArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionSwapFeeUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionSwapFeeUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionSwapsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenPriceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenPricesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTokenSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTradePairArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTradePairSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTradePairSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTradePairsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionUserArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUserInternalBalanceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUserInternalBalancesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionUsersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\nexport type Swap = {\n __typename?: 'Swap';\n caller: Scalars['Bytes'];\n id: Scalars['ID'];\n poolId: Pool;\n timestamp: Scalars['Int'];\n tokenAmountIn: Scalars['BigDecimal'];\n tokenAmountOut: Scalars['BigDecimal'];\n tokenIn: Scalars['Bytes'];\n tokenInSym: Scalars['String'];\n tokenOut: Scalars['Bytes'];\n tokenOutSym: Scalars['String'];\n tx: Scalars['Bytes'];\n userAddress: User;\n valueUSD: Scalars['BigDecimal'];\n};\n\nexport type SwapFeeUpdate = {\n __typename?: 'SwapFeeUpdate';\n endSwapFeePercentage: Scalars['BigDecimal'];\n endTimestamp: Scalars['BigInt'];\n id: Scalars['ID'];\n pool: Pool;\n scheduledTimestamp: Scalars['Int'];\n startSwapFeePercentage: Scalars['BigDecimal'];\n startTimestamp: Scalars['BigInt'];\n};\n\nexport type SwapFeeUpdate_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n endSwapFeePercentage?: InputMaybe;\n endSwapFeePercentage_gt?: InputMaybe;\n endSwapFeePercentage_gte?: InputMaybe;\n endSwapFeePercentage_in?: InputMaybe>;\n endSwapFeePercentage_lt?: InputMaybe;\n endSwapFeePercentage_lte?: InputMaybe;\n endSwapFeePercentage_not?: InputMaybe;\n endSwapFeePercentage_not_in?: InputMaybe>;\n endTimestamp?: InputMaybe;\n endTimestamp_gt?: InputMaybe;\n endTimestamp_gte?: InputMaybe;\n endTimestamp_in?: InputMaybe>;\n endTimestamp_lt?: InputMaybe;\n endTimestamp_lte?: InputMaybe;\n endTimestamp_not?: InputMaybe;\n endTimestamp_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n scheduledTimestamp?: InputMaybe;\n scheduledTimestamp_gt?: InputMaybe;\n scheduledTimestamp_gte?: InputMaybe;\n scheduledTimestamp_in?: InputMaybe>;\n scheduledTimestamp_lt?: InputMaybe;\n scheduledTimestamp_lte?: InputMaybe;\n scheduledTimestamp_not?: InputMaybe;\n scheduledTimestamp_not_in?: InputMaybe>;\n startSwapFeePercentage?: InputMaybe;\n startSwapFeePercentage_gt?: InputMaybe;\n startSwapFeePercentage_gte?: InputMaybe;\n startSwapFeePercentage_in?: InputMaybe>;\n startSwapFeePercentage_lt?: InputMaybe;\n startSwapFeePercentage_lte?: InputMaybe;\n startSwapFeePercentage_not?: InputMaybe;\n startSwapFeePercentage_not_in?: InputMaybe>;\n startTimestamp?: InputMaybe;\n startTimestamp_gt?: InputMaybe;\n startTimestamp_gte?: InputMaybe;\n startTimestamp_in?: InputMaybe>;\n startTimestamp_lt?: InputMaybe;\n startTimestamp_lte?: InputMaybe;\n startTimestamp_not?: InputMaybe;\n startTimestamp_not_in?: InputMaybe>;\n};\n\nexport enum SwapFeeUpdate_OrderBy {\n EndSwapFeePercentage = 'endSwapFeePercentage',\n EndTimestamp = 'endTimestamp',\n Id = 'id',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n ScheduledTimestamp = 'scheduledTimestamp',\n StartSwapFeePercentage = 'startSwapFeePercentage',\n StartTimestamp = 'startTimestamp'\n}\n\nexport type Swap_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n caller?: InputMaybe;\n caller_contains?: InputMaybe;\n caller_gt?: InputMaybe;\n caller_gte?: InputMaybe;\n caller_in?: InputMaybe>;\n caller_lt?: InputMaybe;\n caller_lte?: InputMaybe;\n caller_not?: InputMaybe;\n caller_not_contains?: InputMaybe;\n caller_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n tokenAmountIn?: InputMaybe;\n tokenAmountIn_gt?: InputMaybe;\n tokenAmountIn_gte?: InputMaybe;\n tokenAmountIn_in?: InputMaybe>;\n tokenAmountIn_lt?: InputMaybe;\n tokenAmountIn_lte?: InputMaybe;\n tokenAmountIn_not?: InputMaybe;\n tokenAmountIn_not_in?: InputMaybe>;\n tokenAmountOut?: InputMaybe;\n tokenAmountOut_gt?: InputMaybe;\n tokenAmountOut_gte?: InputMaybe;\n tokenAmountOut_in?: InputMaybe>;\n tokenAmountOut_lt?: InputMaybe;\n tokenAmountOut_lte?: InputMaybe;\n tokenAmountOut_not?: InputMaybe;\n tokenAmountOut_not_in?: InputMaybe>;\n tokenIn?: InputMaybe;\n tokenInSym?: InputMaybe;\n tokenInSym_contains?: InputMaybe;\n tokenInSym_contains_nocase?: InputMaybe;\n tokenInSym_ends_with?: InputMaybe;\n tokenInSym_ends_with_nocase?: InputMaybe;\n tokenInSym_gt?: InputMaybe;\n tokenInSym_gte?: InputMaybe;\n tokenInSym_in?: InputMaybe>;\n tokenInSym_lt?: InputMaybe;\n tokenInSym_lte?: InputMaybe;\n tokenInSym_not?: InputMaybe;\n tokenInSym_not_contains?: InputMaybe;\n tokenInSym_not_contains_nocase?: InputMaybe;\n tokenInSym_not_ends_with?: InputMaybe;\n tokenInSym_not_ends_with_nocase?: InputMaybe;\n tokenInSym_not_in?: InputMaybe>;\n tokenInSym_not_starts_with?: InputMaybe;\n tokenInSym_not_starts_with_nocase?: InputMaybe;\n tokenInSym_starts_with?: InputMaybe;\n tokenInSym_starts_with_nocase?: InputMaybe;\n tokenIn_contains?: InputMaybe;\n tokenIn_gt?: InputMaybe;\n tokenIn_gte?: InputMaybe;\n tokenIn_in?: InputMaybe>;\n tokenIn_lt?: InputMaybe;\n tokenIn_lte?: InputMaybe;\n tokenIn_not?: InputMaybe;\n tokenIn_not_contains?: InputMaybe;\n tokenIn_not_in?: InputMaybe>;\n tokenOut?: InputMaybe;\n tokenOutSym?: InputMaybe;\n tokenOutSym_contains?: InputMaybe;\n tokenOutSym_contains_nocase?: InputMaybe;\n tokenOutSym_ends_with?: InputMaybe;\n tokenOutSym_ends_with_nocase?: InputMaybe;\n tokenOutSym_gt?: InputMaybe;\n tokenOutSym_gte?: InputMaybe;\n tokenOutSym_in?: InputMaybe>;\n tokenOutSym_lt?: InputMaybe;\n tokenOutSym_lte?: InputMaybe;\n tokenOutSym_not?: InputMaybe;\n tokenOutSym_not_contains?: InputMaybe;\n tokenOutSym_not_contains_nocase?: InputMaybe;\n tokenOutSym_not_ends_with?: InputMaybe;\n tokenOutSym_not_ends_with_nocase?: InputMaybe;\n tokenOutSym_not_in?: InputMaybe>;\n tokenOutSym_not_starts_with?: InputMaybe;\n tokenOutSym_not_starts_with_nocase?: InputMaybe;\n tokenOutSym_starts_with?: InputMaybe;\n tokenOutSym_starts_with_nocase?: InputMaybe;\n tokenOut_contains?: InputMaybe;\n tokenOut_gt?: InputMaybe;\n tokenOut_gte?: InputMaybe;\n tokenOut_in?: InputMaybe>;\n tokenOut_lt?: InputMaybe;\n tokenOut_lte?: InputMaybe;\n tokenOut_not?: InputMaybe;\n tokenOut_not_contains?: InputMaybe;\n tokenOut_not_in?: InputMaybe>;\n tx?: InputMaybe;\n tx_contains?: InputMaybe;\n tx_gt?: InputMaybe;\n tx_gte?: InputMaybe;\n tx_in?: InputMaybe>;\n tx_lt?: InputMaybe;\n tx_lte?: InputMaybe;\n tx_not?: InputMaybe;\n tx_not_contains?: InputMaybe;\n tx_not_in?: InputMaybe>;\n userAddress?: InputMaybe;\n userAddress_?: InputMaybe;\n userAddress_contains?: InputMaybe;\n userAddress_contains_nocase?: InputMaybe;\n userAddress_ends_with?: InputMaybe;\n userAddress_ends_with_nocase?: InputMaybe;\n userAddress_gt?: InputMaybe;\n userAddress_gte?: InputMaybe;\n userAddress_in?: InputMaybe>;\n userAddress_lt?: InputMaybe;\n userAddress_lte?: InputMaybe;\n userAddress_not?: InputMaybe;\n userAddress_not_contains?: InputMaybe;\n userAddress_not_contains_nocase?: InputMaybe;\n userAddress_not_ends_with?: InputMaybe;\n userAddress_not_ends_with_nocase?: InputMaybe;\n userAddress_not_in?: InputMaybe>;\n userAddress_not_starts_with?: InputMaybe;\n userAddress_not_starts_with_nocase?: InputMaybe;\n userAddress_starts_with?: InputMaybe;\n userAddress_starts_with_nocase?: InputMaybe;\n valueUSD?: InputMaybe;\n valueUSD_gt?: InputMaybe;\n valueUSD_gte?: InputMaybe;\n valueUSD_in?: InputMaybe>;\n valueUSD_lt?: InputMaybe;\n valueUSD_lte?: InputMaybe;\n valueUSD_not?: InputMaybe;\n valueUSD_not_in?: InputMaybe>;\n};\n\nexport enum Swap_OrderBy {\n Caller = 'caller',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n Timestamp = 'timestamp',\n TokenAmountIn = 'tokenAmountIn',\n TokenAmountOut = 'tokenAmountOut',\n TokenIn = 'tokenIn',\n TokenInSym = 'tokenInSym',\n TokenOut = 'tokenOut',\n TokenOutSym = 'tokenOutSym',\n Tx = 'tx',\n UserAddress = 'userAddress',\n UserAddressId = 'userAddress__id',\n ValueUsd = 'valueUSD'\n}\n\nexport type Token = {\n __typename?: 'Token';\n address: Scalars['String'];\n decimals: Scalars['Int'];\n fxOracleDecimals?: Maybe;\n id: Scalars['ID'];\n latestFXPrice?: Maybe;\n latestPrice?: Maybe;\n latestUSDPrice?: Maybe;\n latestUSDPriceTimestamp?: Maybe;\n name?: Maybe;\n pool?: Maybe;\n symbol?: Maybe;\n totalBalanceNotional: Scalars['BigDecimal'];\n totalBalanceUSD: Scalars['BigDecimal'];\n totalSwapCount: Scalars['BigInt'];\n totalVolumeNotional: Scalars['BigDecimal'];\n totalVolumeUSD: Scalars['BigDecimal'];\n};\n\nexport type TokenPrice = {\n __typename?: 'TokenPrice';\n amount: Scalars['BigDecimal'];\n asset: Scalars['Bytes'];\n block: Scalars['BigInt'];\n id: Scalars['ID'];\n poolId: Pool;\n price: Scalars['BigDecimal'];\n pricingAsset: Scalars['Bytes'];\n timestamp: Scalars['Int'];\n};\n\nexport type TokenPrice_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n amount?: InputMaybe;\n amount_gt?: InputMaybe;\n amount_gte?: InputMaybe;\n amount_in?: InputMaybe>;\n amount_lt?: InputMaybe;\n amount_lte?: InputMaybe;\n amount_not?: InputMaybe;\n amount_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n asset?: InputMaybe;\n asset_contains?: InputMaybe;\n asset_gt?: InputMaybe;\n asset_gte?: InputMaybe;\n asset_in?: InputMaybe>;\n asset_lt?: InputMaybe;\n asset_lte?: InputMaybe;\n asset_not?: InputMaybe;\n asset_not_contains?: InputMaybe;\n asset_not_in?: InputMaybe>;\n block?: InputMaybe;\n block_gt?: InputMaybe;\n block_gte?: InputMaybe;\n block_in?: InputMaybe>;\n block_lt?: InputMaybe;\n block_lte?: InputMaybe;\n block_not?: InputMaybe;\n block_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n price?: InputMaybe;\n price_gt?: InputMaybe;\n price_gte?: InputMaybe;\n price_in?: InputMaybe>;\n price_lt?: InputMaybe;\n price_lte?: InputMaybe;\n price_not?: InputMaybe;\n price_not_in?: InputMaybe>;\n pricingAsset?: InputMaybe;\n pricingAsset_contains?: InputMaybe;\n pricingAsset_gt?: InputMaybe;\n pricingAsset_gte?: InputMaybe;\n pricingAsset_in?: InputMaybe>;\n pricingAsset_lt?: InputMaybe;\n pricingAsset_lte?: InputMaybe;\n pricingAsset_not?: InputMaybe;\n pricingAsset_not_contains?: InputMaybe;\n pricingAsset_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n};\n\nexport enum TokenPrice_OrderBy {\n Amount = 'amount',\n Asset = 'asset',\n Block = 'block',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n Price = 'price',\n PricingAsset = 'pricingAsset',\n Timestamp = 'timestamp'\n}\n\nexport type TokenSnapshot = {\n __typename?: 'TokenSnapshot';\n id: Scalars['ID'];\n timestamp: Scalars['Int'];\n token: Token;\n totalBalanceNotional: Scalars['BigDecimal'];\n totalBalanceUSD: Scalars['BigDecimal'];\n totalSwapCount: Scalars['BigInt'];\n totalVolumeNotional: Scalars['BigDecimal'];\n totalVolumeUSD: Scalars['BigDecimal'];\n};\n\nexport type TokenSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n token?: InputMaybe;\n token_?: InputMaybe;\n token_contains?: InputMaybe;\n token_contains_nocase?: InputMaybe;\n token_ends_with?: InputMaybe;\n token_ends_with_nocase?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_contains_nocase?: InputMaybe;\n token_not_ends_with?: InputMaybe;\n token_not_ends_with_nocase?: InputMaybe;\n token_not_in?: InputMaybe>;\n token_not_starts_with?: InputMaybe;\n token_not_starts_with_nocase?: InputMaybe;\n token_starts_with?: InputMaybe;\n token_starts_with_nocase?: InputMaybe;\n totalBalanceNotional?: InputMaybe;\n totalBalanceNotional_gt?: InputMaybe;\n totalBalanceNotional_gte?: InputMaybe;\n totalBalanceNotional_in?: InputMaybe>;\n totalBalanceNotional_lt?: InputMaybe;\n totalBalanceNotional_lte?: InputMaybe;\n totalBalanceNotional_not?: InputMaybe;\n totalBalanceNotional_not_in?: InputMaybe>;\n totalBalanceUSD?: InputMaybe;\n totalBalanceUSD_gt?: InputMaybe;\n totalBalanceUSD_gte?: InputMaybe;\n totalBalanceUSD_in?: InputMaybe>;\n totalBalanceUSD_lt?: InputMaybe;\n totalBalanceUSD_lte?: InputMaybe;\n totalBalanceUSD_not?: InputMaybe;\n totalBalanceUSD_not_in?: InputMaybe>;\n totalSwapCount?: InputMaybe;\n totalSwapCount_gt?: InputMaybe;\n totalSwapCount_gte?: InputMaybe;\n totalSwapCount_in?: InputMaybe>;\n totalSwapCount_lt?: InputMaybe;\n totalSwapCount_lte?: InputMaybe;\n totalSwapCount_not?: InputMaybe;\n totalSwapCount_not_in?: InputMaybe>;\n totalVolumeNotional?: InputMaybe;\n totalVolumeNotional_gt?: InputMaybe;\n totalVolumeNotional_gte?: InputMaybe;\n totalVolumeNotional_in?: InputMaybe>;\n totalVolumeNotional_lt?: InputMaybe;\n totalVolumeNotional_lte?: InputMaybe;\n totalVolumeNotional_not?: InputMaybe;\n totalVolumeNotional_not_in?: InputMaybe>;\n totalVolumeUSD?: InputMaybe;\n totalVolumeUSD_gt?: InputMaybe;\n totalVolumeUSD_gte?: InputMaybe;\n totalVolumeUSD_in?: InputMaybe>;\n totalVolumeUSD_lt?: InputMaybe;\n totalVolumeUSD_lte?: InputMaybe;\n totalVolumeUSD_not?: InputMaybe;\n totalVolumeUSD_not_in?: InputMaybe>;\n};\n\nexport enum TokenSnapshot_OrderBy {\n Id = 'id',\n Timestamp = 'timestamp',\n Token = 'token',\n TokenAddress = 'token__address',\n TokenDecimals = 'token__decimals',\n TokenFxOracleDecimals = 'token__fxOracleDecimals',\n TokenId = 'token__id',\n TokenLatestFxPrice = 'token__latestFXPrice',\n TokenLatestUsdPrice = 'token__latestUSDPrice',\n TokenLatestUsdPriceTimestamp = 'token__latestUSDPriceTimestamp',\n TokenName = 'token__name',\n TokenSymbol = 'token__symbol',\n TokenTotalBalanceNotional = 'token__totalBalanceNotional',\n TokenTotalBalanceUsd = 'token__totalBalanceUSD',\n TokenTotalSwapCount = 'token__totalSwapCount',\n TokenTotalVolumeNotional = 'token__totalVolumeNotional',\n TokenTotalVolumeUsd = 'token__totalVolumeUSD',\n TotalBalanceNotional = 'totalBalanceNotional',\n TotalBalanceUsd = 'totalBalanceUSD',\n TotalSwapCount = 'totalSwapCount',\n TotalVolumeNotional = 'totalVolumeNotional',\n TotalVolumeUsd = 'totalVolumeUSD'\n}\n\nexport type Token_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_contains_nocase?: InputMaybe;\n address_ends_with?: InputMaybe;\n address_ends_with_nocase?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_contains_nocase?: InputMaybe;\n address_not_ends_with?: InputMaybe;\n address_not_ends_with_nocase?: InputMaybe;\n address_not_in?: InputMaybe>;\n address_not_starts_with?: InputMaybe;\n address_not_starts_with_nocase?: InputMaybe;\n address_starts_with?: InputMaybe;\n address_starts_with_nocase?: InputMaybe;\n and?: InputMaybe>>;\n decimals?: InputMaybe;\n decimals_gt?: InputMaybe;\n decimals_gte?: InputMaybe;\n decimals_in?: InputMaybe>;\n decimals_lt?: InputMaybe;\n decimals_lte?: InputMaybe;\n decimals_not?: InputMaybe;\n decimals_not_in?: InputMaybe>;\n fxOracleDecimals?: InputMaybe;\n fxOracleDecimals_gt?: InputMaybe;\n fxOracleDecimals_gte?: InputMaybe;\n fxOracleDecimals_in?: InputMaybe>;\n fxOracleDecimals_lt?: InputMaybe;\n fxOracleDecimals_lte?: InputMaybe;\n fxOracleDecimals_not?: InputMaybe;\n fxOracleDecimals_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n latestFXPrice?: InputMaybe;\n latestFXPrice_gt?: InputMaybe;\n latestFXPrice_gte?: InputMaybe;\n latestFXPrice_in?: InputMaybe>;\n latestFXPrice_lt?: InputMaybe;\n latestFXPrice_lte?: InputMaybe;\n latestFXPrice_not?: InputMaybe;\n latestFXPrice_not_in?: InputMaybe>;\n latestPrice?: InputMaybe;\n latestPrice_?: InputMaybe;\n latestPrice_contains?: InputMaybe;\n latestPrice_contains_nocase?: InputMaybe;\n latestPrice_ends_with?: InputMaybe;\n latestPrice_ends_with_nocase?: InputMaybe;\n latestPrice_gt?: InputMaybe;\n latestPrice_gte?: InputMaybe;\n latestPrice_in?: InputMaybe>;\n latestPrice_lt?: InputMaybe;\n latestPrice_lte?: InputMaybe;\n latestPrice_not?: InputMaybe;\n latestPrice_not_contains?: InputMaybe;\n latestPrice_not_contains_nocase?: InputMaybe;\n latestPrice_not_ends_with?: InputMaybe;\n latestPrice_not_ends_with_nocase?: InputMaybe;\n latestPrice_not_in?: InputMaybe>;\n latestPrice_not_starts_with?: InputMaybe;\n latestPrice_not_starts_with_nocase?: InputMaybe;\n latestPrice_starts_with?: InputMaybe;\n latestPrice_starts_with_nocase?: InputMaybe;\n latestUSDPrice?: InputMaybe;\n latestUSDPriceTimestamp?: InputMaybe;\n latestUSDPriceTimestamp_gt?: InputMaybe;\n latestUSDPriceTimestamp_gte?: InputMaybe;\n latestUSDPriceTimestamp_in?: InputMaybe>;\n latestUSDPriceTimestamp_lt?: InputMaybe;\n latestUSDPriceTimestamp_lte?: InputMaybe;\n latestUSDPriceTimestamp_not?: InputMaybe;\n latestUSDPriceTimestamp_not_in?: InputMaybe>;\n latestUSDPrice_gt?: InputMaybe;\n latestUSDPrice_gte?: InputMaybe;\n latestUSDPrice_in?: InputMaybe>;\n latestUSDPrice_lt?: InputMaybe;\n latestUSDPrice_lte?: InputMaybe;\n latestUSDPrice_not?: InputMaybe;\n latestUSDPrice_not_in?: InputMaybe>;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n totalBalanceNotional?: InputMaybe;\n totalBalanceNotional_gt?: InputMaybe;\n totalBalanceNotional_gte?: InputMaybe;\n totalBalanceNotional_in?: InputMaybe>;\n totalBalanceNotional_lt?: InputMaybe;\n totalBalanceNotional_lte?: InputMaybe;\n totalBalanceNotional_not?: InputMaybe;\n totalBalanceNotional_not_in?: InputMaybe>;\n totalBalanceUSD?: InputMaybe;\n totalBalanceUSD_gt?: InputMaybe;\n totalBalanceUSD_gte?: InputMaybe;\n totalBalanceUSD_in?: InputMaybe>;\n totalBalanceUSD_lt?: InputMaybe;\n totalBalanceUSD_lte?: InputMaybe;\n totalBalanceUSD_not?: InputMaybe;\n totalBalanceUSD_not_in?: InputMaybe>;\n totalSwapCount?: InputMaybe;\n totalSwapCount_gt?: InputMaybe;\n totalSwapCount_gte?: InputMaybe;\n totalSwapCount_in?: InputMaybe>;\n totalSwapCount_lt?: InputMaybe;\n totalSwapCount_lte?: InputMaybe;\n totalSwapCount_not?: InputMaybe;\n totalSwapCount_not_in?: InputMaybe>;\n totalVolumeNotional?: InputMaybe;\n totalVolumeNotional_gt?: InputMaybe;\n totalVolumeNotional_gte?: InputMaybe;\n totalVolumeNotional_in?: InputMaybe>;\n totalVolumeNotional_lt?: InputMaybe;\n totalVolumeNotional_lte?: InputMaybe;\n totalVolumeNotional_not?: InputMaybe;\n totalVolumeNotional_not_in?: InputMaybe>;\n totalVolumeUSD?: InputMaybe;\n totalVolumeUSD_gt?: InputMaybe;\n totalVolumeUSD_gte?: InputMaybe;\n totalVolumeUSD_in?: InputMaybe>;\n totalVolumeUSD_lt?: InputMaybe;\n totalVolumeUSD_lte?: InputMaybe;\n totalVolumeUSD_not?: InputMaybe;\n totalVolumeUSD_not_in?: InputMaybe>;\n};\n\nexport enum Token_OrderBy {\n Address = 'address',\n Decimals = 'decimals',\n FxOracleDecimals = 'fxOracleDecimals',\n Id = 'id',\n LatestFxPrice = 'latestFXPrice',\n LatestPrice = 'latestPrice',\n LatestPriceAsset = 'latestPrice__asset',\n LatestPriceBlock = 'latestPrice__block',\n LatestPriceId = 'latestPrice__id',\n LatestPricePrice = 'latestPrice__price',\n LatestPricePricingAsset = 'latestPrice__pricingAsset',\n LatestUsdPrice = 'latestUSDPrice',\n LatestUsdPriceTimestamp = 'latestUSDPriceTimestamp',\n Name = 'name',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n Symbol = 'symbol',\n TotalBalanceNotional = 'totalBalanceNotional',\n TotalBalanceUsd = 'totalBalanceUSD',\n TotalSwapCount = 'totalSwapCount',\n TotalVolumeNotional = 'totalVolumeNotional',\n TotalVolumeUsd = 'totalVolumeUSD'\n}\n\nexport type TradePair = {\n __typename?: 'TradePair';\n /** Token Address - Token Address */\n id: Scalars['ID'];\n token0: Token;\n token1: Token;\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n};\n\nexport type TradePairSnapshot = {\n __typename?: 'TradePairSnapshot';\n id: Scalars['ID'];\n pair: TradePair;\n timestamp: Scalars['Int'];\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n};\n\nexport type TradePairSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pair?: InputMaybe;\n pair_?: InputMaybe;\n pair_contains?: InputMaybe;\n pair_contains_nocase?: InputMaybe;\n pair_ends_with?: InputMaybe;\n pair_ends_with_nocase?: InputMaybe;\n pair_gt?: InputMaybe;\n pair_gte?: InputMaybe;\n pair_in?: InputMaybe>;\n pair_lt?: InputMaybe;\n pair_lte?: InputMaybe;\n pair_not?: InputMaybe;\n pair_not_contains?: InputMaybe;\n pair_not_contains_nocase?: InputMaybe;\n pair_not_ends_with?: InputMaybe;\n pair_not_ends_with_nocase?: InputMaybe;\n pair_not_in?: InputMaybe>;\n pair_not_starts_with?: InputMaybe;\n pair_not_starts_with_nocase?: InputMaybe;\n pair_starts_with?: InputMaybe;\n pair_starts_with_nocase?: InputMaybe;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n};\n\nexport enum TradePairSnapshot_OrderBy {\n Id = 'id',\n Pair = 'pair',\n PairId = 'pair__id',\n PairTotalSwapFee = 'pair__totalSwapFee',\n PairTotalSwapVolume = 'pair__totalSwapVolume',\n Timestamp = 'timestamp',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume'\n}\n\nexport type TradePair_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n token0?: InputMaybe;\n token0_?: InputMaybe;\n token0_contains?: InputMaybe;\n token0_contains_nocase?: InputMaybe;\n token0_ends_with?: InputMaybe;\n token0_ends_with_nocase?: InputMaybe;\n token0_gt?: InputMaybe;\n token0_gte?: InputMaybe;\n token0_in?: InputMaybe>;\n token0_lt?: InputMaybe;\n token0_lte?: InputMaybe;\n token0_not?: InputMaybe;\n token0_not_contains?: InputMaybe;\n token0_not_contains_nocase?: InputMaybe;\n token0_not_ends_with?: InputMaybe;\n token0_not_ends_with_nocase?: InputMaybe;\n token0_not_in?: InputMaybe>;\n token0_not_starts_with?: InputMaybe;\n token0_not_starts_with_nocase?: InputMaybe;\n token0_starts_with?: InputMaybe;\n token0_starts_with_nocase?: InputMaybe;\n token1?: InputMaybe;\n token1_?: InputMaybe;\n token1_contains?: InputMaybe;\n token1_contains_nocase?: InputMaybe;\n token1_ends_with?: InputMaybe;\n token1_ends_with_nocase?: InputMaybe;\n token1_gt?: InputMaybe;\n token1_gte?: InputMaybe;\n token1_in?: InputMaybe>;\n token1_lt?: InputMaybe;\n token1_lte?: InputMaybe;\n token1_not?: InputMaybe;\n token1_not_contains?: InputMaybe;\n token1_not_contains_nocase?: InputMaybe;\n token1_not_ends_with?: InputMaybe;\n token1_not_ends_with_nocase?: InputMaybe;\n token1_not_in?: InputMaybe>;\n token1_not_starts_with?: InputMaybe;\n token1_not_starts_with_nocase?: InputMaybe;\n token1_starts_with?: InputMaybe;\n token1_starts_with_nocase?: InputMaybe;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n};\n\nexport enum TradePair_OrderBy {\n Id = 'id',\n Token0 = 'token0',\n Token0Address = 'token0__address',\n Token0Decimals = 'token0__decimals',\n Token0FxOracleDecimals = 'token0__fxOracleDecimals',\n Token0Id = 'token0__id',\n Token0LatestFxPrice = 'token0__latestFXPrice',\n Token0LatestUsdPrice = 'token0__latestUSDPrice',\n Token0LatestUsdPriceTimestamp = 'token0__latestUSDPriceTimestamp',\n Token0Name = 'token0__name',\n Token0Symbol = 'token0__symbol',\n Token0TotalBalanceNotional = 'token0__totalBalanceNotional',\n Token0TotalBalanceUsd = 'token0__totalBalanceUSD',\n Token0TotalSwapCount = 'token0__totalSwapCount',\n Token0TotalVolumeNotional = 'token0__totalVolumeNotional',\n Token0TotalVolumeUsd = 'token0__totalVolumeUSD',\n Token1 = 'token1',\n Token1Address = 'token1__address',\n Token1Decimals = 'token1__decimals',\n Token1FxOracleDecimals = 'token1__fxOracleDecimals',\n Token1Id = 'token1__id',\n Token1LatestFxPrice = 'token1__latestFXPrice',\n Token1LatestUsdPrice = 'token1__latestUSDPrice',\n Token1LatestUsdPriceTimestamp = 'token1__latestUSDPriceTimestamp',\n Token1Name = 'token1__name',\n Token1Symbol = 'token1__symbol',\n Token1TotalBalanceNotional = 'token1__totalBalanceNotional',\n Token1TotalBalanceUsd = 'token1__totalBalanceUSD',\n Token1TotalSwapCount = 'token1__totalSwapCount',\n Token1TotalVolumeNotional = 'token1__totalVolumeNotional',\n Token1TotalVolumeUsd = 'token1__totalVolumeUSD',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume'\n}\n\nexport type User = {\n __typename?: 'User';\n id: Scalars['ID'];\n sharesOwned?: Maybe>;\n swaps?: Maybe>;\n userInternalBalances?: Maybe>;\n};\n\n\nexport type UserSharesOwnedArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserSwapsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserUserInternalBalancesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type UserInternalBalance = {\n __typename?: 'UserInternalBalance';\n balance: Scalars['BigDecimal'];\n id: Scalars['ID'];\n token: Scalars['Bytes'];\n tokenInfo?: Maybe;\n userAddress?: Maybe;\n};\n\nexport type UserInternalBalance_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n balance?: InputMaybe;\n balance_gt?: InputMaybe;\n balance_gte?: InputMaybe;\n balance_in?: InputMaybe>;\n balance_lt?: InputMaybe;\n balance_lte?: InputMaybe;\n balance_not?: InputMaybe;\n balance_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n token?: InputMaybe;\n tokenInfo?: InputMaybe;\n tokenInfo_?: InputMaybe;\n tokenInfo_contains?: InputMaybe;\n tokenInfo_contains_nocase?: InputMaybe;\n tokenInfo_ends_with?: InputMaybe;\n tokenInfo_ends_with_nocase?: InputMaybe;\n tokenInfo_gt?: InputMaybe;\n tokenInfo_gte?: InputMaybe;\n tokenInfo_in?: InputMaybe>;\n tokenInfo_lt?: InputMaybe;\n tokenInfo_lte?: InputMaybe;\n tokenInfo_not?: InputMaybe;\n tokenInfo_not_contains?: InputMaybe;\n tokenInfo_not_contains_nocase?: InputMaybe;\n tokenInfo_not_ends_with?: InputMaybe;\n tokenInfo_not_ends_with_nocase?: InputMaybe;\n tokenInfo_not_in?: InputMaybe>;\n tokenInfo_not_starts_with?: InputMaybe;\n tokenInfo_not_starts_with_nocase?: InputMaybe;\n tokenInfo_starts_with?: InputMaybe;\n tokenInfo_starts_with_nocase?: InputMaybe;\n token_contains?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_in?: InputMaybe>;\n userAddress?: InputMaybe;\n userAddress_?: InputMaybe;\n userAddress_contains?: InputMaybe;\n userAddress_contains_nocase?: InputMaybe;\n userAddress_ends_with?: InputMaybe;\n userAddress_ends_with_nocase?: InputMaybe;\n userAddress_gt?: InputMaybe;\n userAddress_gte?: InputMaybe;\n userAddress_in?: InputMaybe>;\n userAddress_lt?: InputMaybe;\n userAddress_lte?: InputMaybe;\n userAddress_not?: InputMaybe;\n userAddress_not_contains?: InputMaybe;\n userAddress_not_contains_nocase?: InputMaybe;\n userAddress_not_ends_with?: InputMaybe;\n userAddress_not_ends_with_nocase?: InputMaybe;\n userAddress_not_in?: InputMaybe>;\n userAddress_not_starts_with?: InputMaybe;\n userAddress_not_starts_with_nocase?: InputMaybe;\n userAddress_starts_with?: InputMaybe;\n userAddress_starts_with_nocase?: InputMaybe;\n};\n\nexport enum UserInternalBalance_OrderBy {\n Balance = 'balance',\n Id = 'id',\n Token = 'token',\n TokenInfo = 'tokenInfo',\n TokenInfoAddress = 'tokenInfo__address',\n TokenInfoDecimals = 'tokenInfo__decimals',\n TokenInfoFxOracleDecimals = 'tokenInfo__fxOracleDecimals',\n TokenInfoId = 'tokenInfo__id',\n TokenInfoLatestFxPrice = 'tokenInfo__latestFXPrice',\n TokenInfoLatestUsdPrice = 'tokenInfo__latestUSDPrice',\n TokenInfoLatestUsdPriceTimestamp = 'tokenInfo__latestUSDPriceTimestamp',\n TokenInfoName = 'tokenInfo__name',\n TokenInfoSymbol = 'tokenInfo__symbol',\n TokenInfoTotalBalanceNotional = 'tokenInfo__totalBalanceNotional',\n TokenInfoTotalBalanceUsd = 'tokenInfo__totalBalanceUSD',\n TokenInfoTotalSwapCount = 'tokenInfo__totalSwapCount',\n TokenInfoTotalVolumeNotional = 'tokenInfo__totalVolumeNotional',\n TokenInfoTotalVolumeUsd = 'tokenInfo__totalVolumeUSD',\n UserAddress = 'userAddress',\n UserAddressId = 'userAddress__id'\n}\n\nexport type User_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n sharesOwned_?: InputMaybe;\n swaps_?: InputMaybe;\n userInternalBalances_?: InputMaybe;\n};\n\nexport enum User_OrderBy {\n Id = 'id',\n SharesOwned = 'sharesOwned',\n Swaps = 'swaps',\n UserInternalBalances = 'userInternalBalances'\n}\n\nexport type _Block_ = {\n __typename?: '_Block_';\n /** The hash of the block */\n hash?: Maybe;\n /** The block number */\n number: Scalars['Int'];\n /** Integer representation of the timestamp stored in blocks for the chain */\n timestamp?: Maybe;\n};\n\n/** The type for the top-level _meta field */\nexport type _Meta_ = {\n __typename?: '_Meta_';\n /**\n * Information about a specific subgraph block. The hash of the block\n * will be null if the _meta field has a block constraint that asks for\n * a block number. It will be filled if the _meta field has no block constraint\n * and therefore asks for the latest block\n *\n */\n block: _Block_;\n /** The deployment ID */\n deployment: Scalars['String'];\n /** If `true`, the subgraph encountered indexing errors at some past block */\n hasIndexingErrors: Scalars['Boolean'];\n};\n\nexport enum _SubgraphErrorPolicy_ {\n /** Data will be returned even if the subgraph has indexing errors */\n Allow = 'allow',\n /** If the subgraph has indexing errors, data will be omitted. The default. */\n Deny = 'deny'\n}\n\nexport type PoolShareQueryVariables = Exact<{\n id: Scalars['ID'];\n block?: InputMaybe;\n}>;\n\n\nexport type PoolShareQuery = { __typename?: 'Query', poolShare?: { __typename?: 'PoolShare', id: string, balance: string, userAddress: { __typename?: 'User', id: string }, poolId: { __typename?: 'Pool', id: string, address: string } } | null };\n\nexport type PoolSharesQueryVariables = Exact<{\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolSharesQuery = { __typename?: 'Query', poolShares: Array<{ __typename?: 'PoolShare', id: string, balance: string, userAddress: { __typename?: 'User', id: string }, poolId: { __typename?: 'Pool', id: string, address: string } }> };\n\nexport type SubgraphPoolShareFragment = { __typename?: 'PoolShare', id: string, balance: string, userAddress: { __typename?: 'User', id: string }, poolId: { __typename?: 'Pool', id: string, address: string } };\n\nexport type PoolsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolsQuery = { __typename?: 'Query', pools: Array<{ __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null }> };\n\nexport type AllPoolsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type AllPoolsQuery = { __typename?: 'Query', pool0: Array<{ __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null }>, pool1000: Array<{ __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null }>, pool2000: Array<{ __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null }> };\n\nexport type PoolQueryVariables = Exact<{\n id: Scalars['ID'];\n block?: InputMaybe;\n}>;\n\n\nexport type PoolQuery = { __typename?: 'Query', pool?: { __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null } | null };\n\nexport type SubgraphPoolFragment = { __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null };\n\nexport type SubgraphPoolTokenFragment = { __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } };\n\nexport type SubgraphSubPoolTokenFragment = { __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null };\n\nexport type TokenAttrsFragment = { __typename?: 'Token', address: string, symbol?: string | null, decimals: number };\n\nexport type SubgraphSubPoolFragment = { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null };\n\nexport type TokenTreeFragment = { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null };\n\nexport type SubgraphPriceRateProviderFragment = { __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } };\n\nexport type PoolHistoricalLiquiditiesQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolHistoricalLiquiditiesQuery = { __typename?: 'Query', poolHistoricalLiquidities: Array<{ __typename?: 'PoolHistoricalLiquidity', id: string, poolTotalShares: string, poolLiquidity: string, poolShareValue: string, pricingAsset: string, block: string, poolId: { __typename?: 'Pool', id: string } }> };\n\nexport type PoolSnapshotsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolSnapshotsQuery = { __typename?: 'Query', poolSnapshots: Array<{ __typename?: 'PoolSnapshot', id: string, totalShares: string, swapVolume: string, swapFees: string, timestamp: number, pool: { __typename?: 'Pool', id: string } }> };\n\nexport type SubgraphPoolSnapshotFragment = { __typename?: 'PoolSnapshot', id: string, totalShares: string, swapVolume: string, swapFees: string, timestamp: number, pool: { __typename?: 'Pool', id: string } };\n\nexport type JoinExitsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type JoinExitsQuery = { __typename?: 'Query', joinExits: Array<{ __typename?: 'JoinExit', amounts: Array, id: string, sender: string, timestamp: number, tx: string, type: InvestType, user: { __typename?: 'User', id: string }, pool: { __typename?: 'Pool', id: string, tokensList: Array } }> };\n\nexport type SubgraphJoinExitFragment = { __typename?: 'JoinExit', amounts: Array, id: string, sender: string, timestamp: number, tx: string, type: InvestType, user: { __typename?: 'User', id: string }, pool: { __typename?: 'Pool', id: string, tokensList: Array } };\n\nexport type BalancersQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type BalancersQuery = { __typename?: 'Query', balancers: Array<{ __typename?: 'Balancer', id: string, totalLiquidity: string, totalSwapVolume: string, totalSwapFee: string, totalSwapCount: string, poolCount: number }> };\n\nexport type SubgraphBalancerFragment = { __typename?: 'Balancer', id: string, totalLiquidity: string, totalSwapVolume: string, totalSwapFee: string, totalSwapCount: string, poolCount: number };\n\nexport type TokenPricesQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type TokenPricesQuery = { __typename?: 'Query', tokenPrices: Array<{ __typename?: 'TokenPrice', id: string, asset: string, amount: string, pricingAsset: string, price: string, block: string, timestamp: number, poolId: { __typename?: 'Pool', id: string } }> };\n\nexport type SubgraphTokenPriceFragment = { __typename?: 'TokenPrice', id: string, asset: string, amount: string, pricingAsset: string, price: string, block: string, timestamp: number, poolId: { __typename?: 'Pool', id: string } };\n\nexport type TokenLatestPricesQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type TokenLatestPricesQuery = { __typename?: 'Query', latestPrices: Array<{ __typename?: 'LatestPrice', id: string, asset: string, price: string, pricingAsset: string, poolId: { __typename?: 'Pool', id: string } }> };\n\nexport type TokenLatestPriceQueryVariables = Exact<{\n id: Scalars['ID'];\n}>;\n\n\nexport type TokenLatestPriceQuery = { __typename?: 'Query', latestPrice?: { __typename?: 'LatestPrice', id: string, asset: string, price: string, pricingAsset: string, poolId: { __typename?: 'Pool', id: string } } | null };\n\nexport type SubgraphTokenLatestPriceFragment = { __typename?: 'LatestPrice', id: string, asset: string, price: string, pricingAsset: string, poolId: { __typename?: 'Pool', id: string } };\n\nexport type UserQueryVariables = Exact<{\n id: Scalars['ID'];\n block?: InputMaybe;\n}>;\n\n\nexport type UserQuery = { __typename?: 'Query', user?: { __typename?: 'User', id: string, sharesOwned?: Array<{ __typename?: 'PoolShare', balance: string, poolId: { __typename?: 'Pool', id: string } }> | null } | null };\n\nexport type UsersQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type UsersQuery = { __typename?: 'Query', users: Array<{ __typename?: 'User', id: string, sharesOwned?: Array<{ __typename?: 'PoolShare', balance: string, poolId: { __typename?: 'Pool', id: string } }> | null }> };\n\nexport type SubgraphUserFragment = { __typename?: 'User', id: string, sharesOwned?: Array<{ __typename?: 'PoolShare', balance: string, poolId: { __typename?: 'Pool', id: string } }> | null };\n\nexport const SubgraphPoolShareFragmentDoc = gql`\n fragment SubgraphPoolShare on PoolShare {\n id\n balance\n userAddress {\n id\n }\n poolId {\n id\n address\n }\n}\n `;\nexport const SubgraphSubPoolFragmentDoc = gql`\n fragment SubgraphSubPool on Pool {\n id\n totalShares\n address\n poolType\n mainIndex\n}\n `;\nexport const SubgraphSubPoolTokenFragmentDoc = gql`\n fragment SubgraphSubPoolToken on PoolToken {\n address\n balance\n weight\n priceRate\n symbol\n decimals\n isExemptFromYieldProtocolFee\n}\n `;\nexport const TokenTreeFragmentDoc = gql`\n fragment TokenTree on Token {\n latestUSDPrice\n latestFXPrice\n pool {\n ...SubgraphSubPool\n tokens(first: 100, orderBy: index) {\n ...SubgraphSubPoolToken\n token {\n latestUSDPrice\n pool {\n ...SubgraphSubPool\n tokens(first: 100, orderBy: index) {\n ...SubgraphSubPoolToken\n token {\n latestUSDPrice\n pool {\n ...SubgraphSubPool\n }\n }\n }\n }\n }\n }\n }\n}\n ${SubgraphSubPoolFragmentDoc}\n${SubgraphSubPoolTokenFragmentDoc}`;\nexport const SubgraphPoolTokenFragmentDoc = gql`\n fragment SubgraphPoolToken on PoolToken {\n id\n symbol\n name\n decimals\n address\n balance\n managedBalance\n weight\n priceRate\n isExemptFromYieldProtocolFee\n token {\n ...TokenTree\n }\n}\n ${TokenTreeFragmentDoc}`;\nexport const SubgraphPriceRateProviderFragmentDoc = gql`\n fragment SubgraphPriceRateProvider on PriceRateProvider {\n address\n token {\n address\n }\n}\n `;\nexport const SubgraphPoolFragmentDoc = gql`\n fragment SubgraphPool on Pool {\n id\n address\n poolType\n poolTypeVersion\n factory\n strategyType\n symbol\n name\n swapEnabled\n swapFee\n protocolYieldFeeCache\n protocolSwapFeeCache\n owner\n totalWeight\n totalSwapVolume\n totalSwapFee\n totalLiquidity\n totalShares\n tokens(first: 100, orderBy: index) {\n ...SubgraphPoolToken\n }\n swapsCount\n holdersCount\n tokensList\n amp\n priceRateProviders(first: 100) {\n ...SubgraphPriceRateProvider\n }\n expiryTime\n unitSeconds\n createTime\n principalToken\n baseToken\n wrappedIndex\n mainIndex\n lowerTarget\n upperTarget\n sqrtAlpha\n sqrtBeta\n root3Alpha\n isInRecoveryMode\n isPaused\n alpha\n beta\n c\n s\n lambda\n tauAlphaX\n tauAlphaY\n tauBetaX\n tauBetaY\n u\n v\n w\n z\n dSq\n delta\n epsilon\n}\n ${SubgraphPoolTokenFragmentDoc}\n${SubgraphPriceRateProviderFragmentDoc}`;\nexport const TokenAttrsFragmentDoc = gql`\n fragment TokenAttrs on Token {\n address\n symbol\n decimals\n}\n `;\nexport const SubgraphPoolSnapshotFragmentDoc = gql`\n fragment SubgraphPoolSnapshot on PoolSnapshot {\n id\n pool {\n id\n }\n totalShares\n swapVolume\n swapFees\n timestamp\n}\n `;\nexport const SubgraphJoinExitFragmentDoc = gql`\n fragment SubgraphJoinExit on JoinExit {\n amounts\n id\n sender\n timestamp\n tx\n type\n user {\n id\n }\n pool {\n id\n tokensList\n }\n}\n `;\nexport const SubgraphBalancerFragmentDoc = gql`\n fragment SubgraphBalancer on Balancer {\n id\n totalLiquidity\n totalSwapVolume\n totalSwapFee\n totalSwapCount\n poolCount\n}\n `;\nexport const SubgraphTokenPriceFragmentDoc = gql`\n fragment SubgraphTokenPrice on TokenPrice {\n id\n poolId {\n id\n }\n asset\n amount\n pricingAsset\n price\n block\n timestamp\n}\n `;\nexport const SubgraphTokenLatestPriceFragmentDoc = gql`\n fragment SubgraphTokenLatestPrice on LatestPrice {\n id\n asset\n price\n poolId {\n id\n }\n pricingAsset\n}\n `;\nexport const SubgraphUserFragmentDoc = gql`\n fragment SubgraphUser on User {\n id\n sharesOwned(first: 1000) {\n balance\n poolId {\n id\n }\n }\n}\n `;\nexport const PoolShareDocument = gql`\n query PoolShare($id: ID!, $block: Block_height) {\n poolShare(id: $id, block: $block) {\n ...SubgraphPoolShare\n }\n}\n ${SubgraphPoolShareFragmentDoc}`;\nexport const PoolSharesDocument = gql`\n query PoolShares($first: Int, $orderBy: PoolShare_orderBy, $orderDirection: OrderDirection, $skip: Int, $where: PoolShare_filter, $block: Block_height) {\n poolShares(\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n skip: $skip\n where: $where\n block: $block\n ) {\n ...SubgraphPoolShare\n }\n}\n ${SubgraphPoolShareFragmentDoc}`;\nexport const PoolsDocument = gql`\n query Pools($skip: Int, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $where: Pool_filter, $block: Block_height) {\n pools(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPool\n }\n}\n ${SubgraphPoolFragmentDoc}`;\nexport const AllPoolsDocument = gql`\n query AllPools($skip: Int, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $where: Pool_filter, $block: Block_height) {\n pool0: pools(\n first: 1000\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPool\n }\n pool1000: pools(\n first: 1000\n skip: 1000\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPool\n }\n pool2000: pools(\n first: 1000\n skip: 2000\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPool\n }\n}\n ${SubgraphPoolFragmentDoc}`;\nexport const PoolDocument = gql`\n query Pool($id: ID!, $block: Block_height) {\n pool(id: $id, block: $block) {\n ...SubgraphPool\n }\n}\n ${SubgraphPoolFragmentDoc}`;\nexport const PoolHistoricalLiquiditiesDocument = gql`\n query PoolHistoricalLiquidities($skip: Int, $first: Int, $orderBy: PoolHistoricalLiquidity_orderBy, $orderDirection: OrderDirection, $where: PoolHistoricalLiquidity_filter, $block: Block_height) {\n poolHistoricalLiquidities(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n id\n poolId {\n id\n }\n poolTotalShares\n poolLiquidity\n poolShareValue\n pricingAsset\n block\n }\n}\n `;\nexport const PoolSnapshotsDocument = gql`\n query PoolSnapshots($skip: Int, $first: Int, $orderBy: PoolSnapshot_orderBy, $orderDirection: OrderDirection, $where: PoolSnapshot_filter, $block: Block_height) {\n poolSnapshots(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPoolSnapshot\n }\n}\n ${SubgraphPoolSnapshotFragmentDoc}`;\nexport const JoinExitsDocument = gql`\n query JoinExits($skip: Int, $first: Int, $orderBy: JoinExit_orderBy, $orderDirection: OrderDirection, $where: JoinExit_filter, $block: Block_height) {\n joinExits(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphJoinExit\n }\n}\n ${SubgraphJoinExitFragmentDoc}`;\nexport const BalancersDocument = gql`\n query Balancers($skip: Int, $first: Int, $orderBy: Balancer_orderBy, $orderDirection: OrderDirection, $where: Balancer_filter, $block: Block_height) {\n balancers(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphBalancer\n }\n}\n ${SubgraphBalancerFragmentDoc}`;\nexport const TokenPricesDocument = gql`\n query TokenPrices($skip: Int, $first: Int, $orderBy: TokenPrice_orderBy, $orderDirection: OrderDirection, $where: TokenPrice_filter, $block: Block_height) {\n tokenPrices(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphTokenPrice\n }\n}\n ${SubgraphTokenPriceFragmentDoc}`;\nexport const TokenLatestPricesDocument = gql`\n query TokenLatestPrices($skip: Int, $first: Int, $orderBy: LatestPrice_orderBy, $orderDirection: OrderDirection, $where: LatestPrice_filter, $block: Block_height) {\n latestPrices(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphTokenLatestPrice\n }\n}\n ${SubgraphTokenLatestPriceFragmentDoc}`;\nexport const TokenLatestPriceDocument = gql`\n query TokenLatestPrice($id: ID!) {\n latestPrice(id: $id) {\n ...SubgraphTokenLatestPrice\n }\n}\n ${SubgraphTokenLatestPriceFragmentDoc}`;\nexport const UserDocument = gql`\n query User($id: ID!, $block: Block_height) {\n user(id: $id, block: $block) {\n ...SubgraphUser\n }\n}\n ${SubgraphUserFragmentDoc}`;\nexport const UsersDocument = gql`\n query Users($skip: Int, $first: Int, $orderBy: User_orderBy, $orderDirection: OrderDirection, $where: User_filter, $block: Block_height) {\n users(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphUser\n }\n}\n ${SubgraphUserFragmentDoc}`;\n\nexport type SdkFunctionWrapper = (action: (requestHeaders?:Record) => Promise, operationName: string, operationType?: string) => Promise;\n\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType) => action();\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n PoolShare(variables: PoolShareQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolShareDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolShare', 'query');\n },\n PoolShares(variables?: PoolSharesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolSharesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolShares', 'query');\n },\n Pools(variables?: PoolsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Pools', 'query');\n },\n AllPools(variables?: AllPoolsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(AllPoolsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'AllPools', 'query');\n },\n Pool(variables: PoolQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Pool', 'query');\n },\n PoolHistoricalLiquidities(variables?: PoolHistoricalLiquiditiesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolHistoricalLiquiditiesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolHistoricalLiquidities', 'query');\n },\n PoolSnapshots(variables?: PoolSnapshotsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolSnapshotsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolSnapshots', 'query');\n },\n JoinExits(variables?: JoinExitsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(JoinExitsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'JoinExits', 'query');\n },\n Balancers(variables?: BalancersQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(BalancersDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Balancers', 'query');\n },\n TokenPrices(variables?: TokenPricesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(TokenPricesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'TokenPrices', 'query');\n },\n TokenLatestPrices(variables?: TokenLatestPricesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(TokenLatestPricesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'TokenLatestPrices', 'query');\n },\n TokenLatestPrice(variables: TokenLatestPriceQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(TokenLatestPriceDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'TokenLatestPrice', 'query');\n },\n User(variables: UserQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(UserDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'User', 'query');\n },\n Users(variables?: UsersQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(UsersDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Users', 'query');\n }\n };\n}\nexport type Sdk = ReturnType;","import { GraphQLClient } from 'graphql-request';\nimport * as Dom from 'graphql-request/dist/types.dom';\nimport gql from 'graphql-tag';\nexport type Maybe = T | null;\nexport type InputMaybe = Maybe;\nexport type Exact = { [K in keyof T]: T[K] };\nexport type MakeOptional = Omit & { [SubKey in K]?: Maybe };\nexport type MakeMaybe = Omit & { [SubKey in K]: Maybe };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n BigDecimal: string;\n BigInt: string;\n Bytes: string;\n Int8: any;\n};\n\nexport type BlockChangedFilter = {\n number_gte: Scalars['Int'];\n};\n\nexport type Block_Height = {\n hash?: InputMaybe;\n number?: InputMaybe;\n number_gte?: InputMaybe;\n};\n\nexport enum Chain {\n Arbitrum = 'Arbitrum',\n Avalanche = 'Avalanche',\n Base = 'Base',\n Gnosis = 'Gnosis',\n Optimism = 'Optimism',\n Polygon = 'Polygon',\n PolygonZkEvm = 'PolygonZkEvm'\n}\n\nexport type Gauge = {\n __typename?: 'Gauge';\n /** Timestamp at which Balancer DAO added the gauge to GaugeController [seconds] */\n addedTimestamp: Scalars['Int'];\n /** Address of the gauge */\n address: Scalars['Bytes'];\n /** Equal to: - */\n id: Scalars['ID'];\n /** Reference to LiquidityGauge */\n liquidityGauge?: Maybe;\n /** Reference to RootGauge */\n rootGauge?: Maybe;\n /** Type of the gauge */\n type: GaugeType;\n};\n\nexport type GaugeFactory = {\n __typename?: 'GaugeFactory';\n /** List of gauges created through the factory */\n gauges?: Maybe>;\n /** Factory contract address */\n id: Scalars['ID'];\n /** Number of gauges created through the factory */\n numGauges: Scalars['Int'];\n};\n\n\nexport type GaugeFactoryGaugesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type GaugeFactory_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n gauges_?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n numGauges?: InputMaybe;\n numGauges_gt?: InputMaybe;\n numGauges_gte?: InputMaybe;\n numGauges_in?: InputMaybe>;\n numGauges_lt?: InputMaybe;\n numGauges_lte?: InputMaybe;\n numGauges_not?: InputMaybe;\n numGauges_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n};\n\nexport enum GaugeFactory_OrderBy {\n gauges = 'gauges',\n id = 'id',\n numGauges = 'numGauges'\n}\n\nexport type GaugeShare = {\n __typename?: 'GaugeShare';\n /** User's balance of gauge deposit tokens */\n balance: Scalars['BigDecimal'];\n /** Reference to LiquidityGauge entity */\n gauge: LiquidityGauge;\n /** Equal to: - */\n id: Scalars['ID'];\n /** Reference to User entity */\n user: User;\n};\n\nexport type GaugeShare_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n balance?: InputMaybe;\n balance_gt?: InputMaybe;\n balance_gte?: InputMaybe;\n balance_in?: InputMaybe>;\n balance_lt?: InputMaybe;\n balance_lte?: InputMaybe;\n balance_not?: InputMaybe;\n balance_not_in?: InputMaybe>;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n};\n\nexport enum GaugeShare_OrderBy {\n balance = 'balance',\n gauge = 'gauge',\n gauge__id = 'gauge__id',\n gauge__isKilled = 'gauge__isKilled',\n gauge__isPreferentialGauge = 'gauge__isPreferentialGauge',\n gauge__poolAddress = 'gauge__poolAddress',\n gauge__poolId = 'gauge__poolId',\n gauge__relativeWeightCap = 'gauge__relativeWeightCap',\n gauge__streamer = 'gauge__streamer',\n gauge__symbol = 'gauge__symbol',\n gauge__totalSupply = 'gauge__totalSupply',\n id = 'id',\n user = 'user',\n user__id = 'user__id'\n}\n\nexport type GaugeType = {\n __typename?: 'GaugeType';\n /** Type ID */\n id: Scalars['ID'];\n /** Name of the type - empty string if call reverts */\n name: Scalars['String'];\n};\n\nexport type GaugeType_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n};\n\nexport enum GaugeType_OrderBy {\n id = 'id',\n name = 'name'\n}\n\nexport type GaugeVote = {\n __typename?: 'GaugeVote';\n /** Reference to Gauge entity */\n gauge: Gauge;\n /** Equal to: - */\n id: Scalars['ID'];\n /** Timestamp at which user voted [seconds] */\n timestamp?: Maybe;\n /** Reference to User entity */\n user: User;\n /** Weight of veBAL power user has used to vote */\n weight?: Maybe;\n};\n\nexport type GaugeVote_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n weight?: InputMaybe;\n weight_gt?: InputMaybe;\n weight_gte?: InputMaybe;\n weight_in?: InputMaybe>;\n weight_lt?: InputMaybe;\n weight_lte?: InputMaybe;\n weight_not?: InputMaybe;\n weight_not_in?: InputMaybe>;\n};\n\nexport enum GaugeVote_OrderBy {\n gauge = 'gauge',\n gauge__addedTimestamp = 'gauge__addedTimestamp',\n gauge__address = 'gauge__address',\n gauge__id = 'gauge__id',\n id = 'id',\n timestamp = 'timestamp',\n user = 'user',\n user__id = 'user__id',\n weight = 'weight'\n}\n\nexport type Gauge_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n addedTimestamp?: InputMaybe;\n addedTimestamp_gt?: InputMaybe;\n addedTimestamp_gte?: InputMaybe;\n addedTimestamp_in?: InputMaybe>;\n addedTimestamp_lt?: InputMaybe;\n addedTimestamp_lte?: InputMaybe;\n addedTimestamp_not?: InputMaybe;\n addedTimestamp_not_in?: InputMaybe>;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n liquidityGauge?: InputMaybe;\n liquidityGauge_?: InputMaybe;\n liquidityGauge_contains?: InputMaybe;\n liquidityGauge_contains_nocase?: InputMaybe;\n liquidityGauge_ends_with?: InputMaybe;\n liquidityGauge_ends_with_nocase?: InputMaybe;\n liquidityGauge_gt?: InputMaybe;\n liquidityGauge_gte?: InputMaybe;\n liquidityGauge_in?: InputMaybe>;\n liquidityGauge_lt?: InputMaybe;\n liquidityGauge_lte?: InputMaybe;\n liquidityGauge_not?: InputMaybe;\n liquidityGauge_not_contains?: InputMaybe;\n liquidityGauge_not_contains_nocase?: InputMaybe;\n liquidityGauge_not_ends_with?: InputMaybe;\n liquidityGauge_not_ends_with_nocase?: InputMaybe;\n liquidityGauge_not_in?: InputMaybe>;\n liquidityGauge_not_starts_with?: InputMaybe;\n liquidityGauge_not_starts_with_nocase?: InputMaybe;\n liquidityGauge_starts_with?: InputMaybe;\n liquidityGauge_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n rootGauge?: InputMaybe;\n rootGauge_?: InputMaybe;\n rootGauge_contains?: InputMaybe;\n rootGauge_contains_nocase?: InputMaybe;\n rootGauge_ends_with?: InputMaybe;\n rootGauge_ends_with_nocase?: InputMaybe;\n rootGauge_gt?: InputMaybe;\n rootGauge_gte?: InputMaybe;\n rootGauge_in?: InputMaybe>;\n rootGauge_lt?: InputMaybe;\n rootGauge_lte?: InputMaybe;\n rootGauge_not?: InputMaybe;\n rootGauge_not_contains?: InputMaybe;\n rootGauge_not_contains_nocase?: InputMaybe;\n rootGauge_not_ends_with?: InputMaybe;\n rootGauge_not_ends_with_nocase?: InputMaybe;\n rootGauge_not_in?: InputMaybe>;\n rootGauge_not_starts_with?: InputMaybe;\n rootGauge_not_starts_with_nocase?: InputMaybe;\n rootGauge_starts_with?: InputMaybe;\n rootGauge_starts_with_nocase?: InputMaybe;\n type?: InputMaybe;\n type_?: InputMaybe;\n type_contains?: InputMaybe;\n type_contains_nocase?: InputMaybe;\n type_ends_with?: InputMaybe;\n type_ends_with_nocase?: InputMaybe;\n type_gt?: InputMaybe;\n type_gte?: InputMaybe;\n type_in?: InputMaybe>;\n type_lt?: InputMaybe;\n type_lte?: InputMaybe;\n type_not?: InputMaybe;\n type_not_contains?: InputMaybe;\n type_not_contains_nocase?: InputMaybe;\n type_not_ends_with?: InputMaybe;\n type_not_ends_with_nocase?: InputMaybe;\n type_not_in?: InputMaybe>;\n type_not_starts_with?: InputMaybe;\n type_not_starts_with_nocase?: InputMaybe;\n type_starts_with?: InputMaybe;\n type_starts_with_nocase?: InputMaybe;\n};\n\nexport enum Gauge_OrderBy {\n addedTimestamp = 'addedTimestamp',\n address = 'address',\n id = 'id',\n liquidityGauge = 'liquidityGauge',\n liquidityGauge__id = 'liquidityGauge__id',\n liquidityGauge__isKilled = 'liquidityGauge__isKilled',\n liquidityGauge__isPreferentialGauge = 'liquidityGauge__isPreferentialGauge',\n liquidityGauge__poolAddress = 'liquidityGauge__poolAddress',\n liquidityGauge__poolId = 'liquidityGauge__poolId',\n liquidityGauge__relativeWeightCap = 'liquidityGauge__relativeWeightCap',\n liquidityGauge__streamer = 'liquidityGauge__streamer',\n liquidityGauge__symbol = 'liquidityGauge__symbol',\n liquidityGauge__totalSupply = 'liquidityGauge__totalSupply',\n rootGauge = 'rootGauge',\n rootGauge__chain = 'rootGauge__chain',\n rootGauge__id = 'rootGauge__id',\n rootGauge__isKilled = 'rootGauge__isKilled',\n rootGauge__recipient = 'rootGauge__recipient',\n rootGauge__relativeWeightCap = 'rootGauge__relativeWeightCap',\n type = 'type',\n type__id = 'type__id',\n type__name = 'type__name'\n}\n\nexport type LiquidityGauge = {\n __typename?: 'LiquidityGauge';\n /** Factory contract address */\n factory: GaugeFactory;\n /** Reference to Gauge entity - created when LiquidityGauge is added to GaugeController */\n gauge?: Maybe;\n /** LiquidityGauge contract address */\n id: Scalars['ID'];\n /** Whether Balancer DAO killed the gauge */\n isKilled: Scalars['Boolean'];\n /** Whether the LiquidityGauge is the most recent added to GaugeController */\n isPreferentialGauge: Scalars['Boolean'];\n /** Reference to Pool entity */\n pool?: Maybe;\n /** Address of the pool (lp_token of the gauge) */\n poolAddress: Scalars['Bytes'];\n /** Pool ID if lp_token is a Balancer pool; null otherwise */\n poolId?: Maybe;\n /** Relative weight cap of the gauge (0.01 = 1%) - V2 factories only */\n relativeWeightCap?: Maybe;\n /** List of reward tokens depositted in the gauge - ChildChainLiquidityGauge only */\n rewardTokensList?: Maybe>;\n /** List of user shares */\n shares?: Maybe>;\n /** Address of the contract that streams reward tokens to the gauge - ChildChainLiquidityGauge only */\n streamer?: Maybe;\n /** ERC20 token symbol */\n symbol: Scalars['String'];\n /** List of reward tokens depositted in the gauge */\n tokens?: Maybe>;\n /** Total of BPTs users have staked in the LiquidityGauge */\n totalSupply: Scalars['BigDecimal'];\n};\n\n\nexport type LiquidityGaugeSharesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type LiquidityGaugeTokensArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type LiquidityGauge_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n factory?: InputMaybe;\n factory_?: InputMaybe;\n factory_contains?: InputMaybe;\n factory_contains_nocase?: InputMaybe;\n factory_ends_with?: InputMaybe;\n factory_ends_with_nocase?: InputMaybe;\n factory_gt?: InputMaybe;\n factory_gte?: InputMaybe;\n factory_in?: InputMaybe>;\n factory_lt?: InputMaybe;\n factory_lte?: InputMaybe;\n factory_not?: InputMaybe;\n factory_not_contains?: InputMaybe;\n factory_not_contains_nocase?: InputMaybe;\n factory_not_ends_with?: InputMaybe;\n factory_not_ends_with_nocase?: InputMaybe;\n factory_not_in?: InputMaybe>;\n factory_not_starts_with?: InputMaybe;\n factory_not_starts_with_nocase?: InputMaybe;\n factory_starts_with?: InputMaybe;\n factory_starts_with_nocase?: InputMaybe;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n isKilled?: InputMaybe;\n isKilled_in?: InputMaybe>;\n isKilled_not?: InputMaybe;\n isKilled_not_in?: InputMaybe>;\n isPreferentialGauge?: InputMaybe;\n isPreferentialGauge_in?: InputMaybe>;\n isPreferentialGauge_not?: InputMaybe;\n isPreferentialGauge_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n poolAddress?: InputMaybe;\n poolAddress_contains?: InputMaybe;\n poolAddress_gt?: InputMaybe;\n poolAddress_gte?: InputMaybe;\n poolAddress_in?: InputMaybe>;\n poolAddress_lt?: InputMaybe;\n poolAddress_lte?: InputMaybe;\n poolAddress_not?: InputMaybe;\n poolAddress_not_contains?: InputMaybe;\n poolAddress_not_in?: InputMaybe>;\n poolId?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n relativeWeightCap?: InputMaybe;\n relativeWeightCap_gt?: InputMaybe;\n relativeWeightCap_gte?: InputMaybe;\n relativeWeightCap_in?: InputMaybe>;\n relativeWeightCap_lt?: InputMaybe;\n relativeWeightCap_lte?: InputMaybe;\n relativeWeightCap_not?: InputMaybe;\n relativeWeightCap_not_in?: InputMaybe>;\n rewardTokensList?: InputMaybe>;\n rewardTokensList_contains?: InputMaybe>;\n rewardTokensList_contains_nocase?: InputMaybe>;\n rewardTokensList_not?: InputMaybe>;\n rewardTokensList_not_contains?: InputMaybe>;\n rewardTokensList_not_contains_nocase?: InputMaybe>;\n shares_?: InputMaybe;\n streamer?: InputMaybe;\n streamer_contains?: InputMaybe;\n streamer_gt?: InputMaybe;\n streamer_gte?: InputMaybe;\n streamer_in?: InputMaybe>;\n streamer_lt?: InputMaybe;\n streamer_lte?: InputMaybe;\n streamer_not?: InputMaybe;\n streamer_not_contains?: InputMaybe;\n streamer_not_in?: InputMaybe>;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n tokens_?: InputMaybe;\n totalSupply?: InputMaybe;\n totalSupply_gt?: InputMaybe;\n totalSupply_gte?: InputMaybe;\n totalSupply_in?: InputMaybe>;\n totalSupply_lt?: InputMaybe;\n totalSupply_lte?: InputMaybe;\n totalSupply_not?: InputMaybe;\n totalSupply_not_in?: InputMaybe>;\n};\n\nexport enum LiquidityGauge_OrderBy {\n factory = 'factory',\n factory__id = 'factory__id',\n factory__numGauges = 'factory__numGauges',\n gauge = 'gauge',\n gauge__addedTimestamp = 'gauge__addedTimestamp',\n gauge__address = 'gauge__address',\n gauge__id = 'gauge__id',\n id = 'id',\n isKilled = 'isKilled',\n isPreferentialGauge = 'isPreferentialGauge',\n pool = 'pool',\n poolAddress = 'poolAddress',\n poolId = 'poolId',\n pool__address = 'pool__address',\n pool__id = 'pool__id',\n pool__poolId = 'pool__poolId',\n relativeWeightCap = 'relativeWeightCap',\n rewardTokensList = 'rewardTokensList',\n shares = 'shares',\n streamer = 'streamer',\n symbol = 'symbol',\n tokens = 'tokens',\n totalSupply = 'totalSupply'\n}\n\nexport type LockSnapshot = {\n __typename?: 'LockSnapshot';\n /** veBAL balance at the moment user locks */\n bias: Scalars['BigDecimal'];\n /** Equal to - */\n id: Scalars['ID'];\n /** veBAL decay rate (per second) */\n slope: Scalars['BigDecimal'];\n /** Timestamp at which the snapshot was taken [seconds] */\n timestamp: Scalars['Int'];\n /** Reference to User entity */\n user: User;\n};\n\nexport type LockSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n bias?: InputMaybe;\n bias_gt?: InputMaybe;\n bias_gte?: InputMaybe;\n bias_in?: InputMaybe>;\n bias_lt?: InputMaybe;\n bias_lte?: InputMaybe;\n bias_not?: InputMaybe;\n bias_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n slope?: InputMaybe;\n slope_gt?: InputMaybe;\n slope_gte?: InputMaybe;\n slope_in?: InputMaybe>;\n slope_lt?: InputMaybe;\n slope_lte?: InputMaybe;\n slope_not?: InputMaybe;\n slope_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n};\n\nexport enum LockSnapshot_OrderBy {\n bias = 'bias',\n id = 'id',\n slope = 'slope',\n timestamp = 'timestamp',\n user = 'user',\n user__id = 'user__id'\n}\n\nexport type OmniVotingEscrowLock = {\n __typename?: 'OmniVotingEscrowLock';\n /** veBAL balance at the moment user locks */\n bias: Scalars['BigDecimal'];\n /** Chain where the lock was bridged to */\n dstChainId: Scalars['Int'];\n /** Equal to: - */\n id: Scalars['ID'];\n /** User on the local chain (reference to User entity) */\n localUser: User;\n /** User address on the remote chain */\n remoteUser: Scalars['Bytes'];\n /** veBAL decay rate (per second) */\n slope: Scalars['BigDecimal'];\n /** Timestamp the lock was created [seconds] */\n timestamp: Scalars['Int'];\n /** Reference to VotingEscrow entity */\n votingEscrowID: VotingEscrow;\n};\n\nexport type OmniVotingEscrowLock_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n bias?: InputMaybe;\n bias_gt?: InputMaybe;\n bias_gte?: InputMaybe;\n bias_in?: InputMaybe>;\n bias_lt?: InputMaybe;\n bias_lte?: InputMaybe;\n bias_not?: InputMaybe;\n bias_not_in?: InputMaybe>;\n dstChainId?: InputMaybe;\n dstChainId_gt?: InputMaybe;\n dstChainId_gte?: InputMaybe;\n dstChainId_in?: InputMaybe>;\n dstChainId_lt?: InputMaybe;\n dstChainId_lte?: InputMaybe;\n dstChainId_not?: InputMaybe;\n dstChainId_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n localUser?: InputMaybe;\n localUser_?: InputMaybe;\n localUser_contains?: InputMaybe;\n localUser_contains_nocase?: InputMaybe;\n localUser_ends_with?: InputMaybe;\n localUser_ends_with_nocase?: InputMaybe;\n localUser_gt?: InputMaybe;\n localUser_gte?: InputMaybe;\n localUser_in?: InputMaybe>;\n localUser_lt?: InputMaybe;\n localUser_lte?: InputMaybe;\n localUser_not?: InputMaybe;\n localUser_not_contains?: InputMaybe;\n localUser_not_contains_nocase?: InputMaybe;\n localUser_not_ends_with?: InputMaybe;\n localUser_not_ends_with_nocase?: InputMaybe;\n localUser_not_in?: InputMaybe>;\n localUser_not_starts_with?: InputMaybe;\n localUser_not_starts_with_nocase?: InputMaybe;\n localUser_starts_with?: InputMaybe;\n localUser_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n remoteUser?: InputMaybe;\n remoteUser_contains?: InputMaybe;\n remoteUser_gt?: InputMaybe;\n remoteUser_gte?: InputMaybe;\n remoteUser_in?: InputMaybe>;\n remoteUser_lt?: InputMaybe;\n remoteUser_lte?: InputMaybe;\n remoteUser_not?: InputMaybe;\n remoteUser_not_contains?: InputMaybe;\n remoteUser_not_in?: InputMaybe>;\n slope?: InputMaybe;\n slope_gt?: InputMaybe;\n slope_gte?: InputMaybe;\n slope_in?: InputMaybe>;\n slope_lt?: InputMaybe;\n slope_lte?: InputMaybe;\n slope_not?: InputMaybe;\n slope_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n votingEscrowID?: InputMaybe;\n votingEscrowID_?: InputMaybe;\n votingEscrowID_contains?: InputMaybe;\n votingEscrowID_contains_nocase?: InputMaybe;\n votingEscrowID_ends_with?: InputMaybe;\n votingEscrowID_ends_with_nocase?: InputMaybe;\n votingEscrowID_gt?: InputMaybe;\n votingEscrowID_gte?: InputMaybe;\n votingEscrowID_in?: InputMaybe>;\n votingEscrowID_lt?: InputMaybe;\n votingEscrowID_lte?: InputMaybe;\n votingEscrowID_not?: InputMaybe;\n votingEscrowID_not_contains?: InputMaybe;\n votingEscrowID_not_contains_nocase?: InputMaybe;\n votingEscrowID_not_ends_with?: InputMaybe;\n votingEscrowID_not_ends_with_nocase?: InputMaybe;\n votingEscrowID_not_in?: InputMaybe>;\n votingEscrowID_not_starts_with?: InputMaybe;\n votingEscrowID_not_starts_with_nocase?: InputMaybe;\n votingEscrowID_starts_with?: InputMaybe;\n votingEscrowID_starts_with_nocase?: InputMaybe;\n};\n\nexport enum OmniVotingEscrowLock_OrderBy {\n bias = 'bias',\n dstChainId = 'dstChainId',\n id = 'id',\n localUser = 'localUser',\n localUser__id = 'localUser__id',\n remoteUser = 'remoteUser',\n slope = 'slope',\n timestamp = 'timestamp',\n votingEscrowID = 'votingEscrowID',\n votingEscrowID__id = 'votingEscrowID__id',\n votingEscrowID__stakedSupply = 'votingEscrowID__stakedSupply'\n}\n\n/** Defines the order direction, either ascending or descending */\nexport enum OrderDirection {\n asc = 'asc',\n desc = 'desc'\n}\n\nexport type Pool = {\n __typename?: 'Pool';\n /** Address of the pool (lp_token of the gauge) */\n address: Scalars['Bytes'];\n /** List of gauges created for the pool */\n gauges?: Maybe>;\n /** List of the pool's gauges addresses */\n gaugesList: Array;\n /** Address of the pool (lp_token of the gauge) */\n id: Scalars['ID'];\n /** Pool ID if lp_token is a Balancer pool; null otherwise */\n poolId?: Maybe;\n /** Most recent, unkilled gauge in the GaugeController */\n preferentialGauge?: Maybe;\n};\n\n\nexport type PoolGaugesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type Pool_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n gaugesList?: InputMaybe>;\n gaugesList_contains?: InputMaybe>;\n gaugesList_contains_nocase?: InputMaybe>;\n gaugesList_not?: InputMaybe>;\n gaugesList_not_contains?: InputMaybe>;\n gaugesList_not_contains_nocase?: InputMaybe>;\n gauges_?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n preferentialGauge?: InputMaybe;\n preferentialGauge_?: InputMaybe;\n preferentialGauge_contains?: InputMaybe;\n preferentialGauge_contains_nocase?: InputMaybe;\n preferentialGauge_ends_with?: InputMaybe;\n preferentialGauge_ends_with_nocase?: InputMaybe;\n preferentialGauge_gt?: InputMaybe;\n preferentialGauge_gte?: InputMaybe;\n preferentialGauge_in?: InputMaybe>;\n preferentialGauge_lt?: InputMaybe;\n preferentialGauge_lte?: InputMaybe;\n preferentialGauge_not?: InputMaybe;\n preferentialGauge_not_contains?: InputMaybe;\n preferentialGauge_not_contains_nocase?: InputMaybe;\n preferentialGauge_not_ends_with?: InputMaybe;\n preferentialGauge_not_ends_with_nocase?: InputMaybe;\n preferentialGauge_not_in?: InputMaybe>;\n preferentialGauge_not_starts_with?: InputMaybe;\n preferentialGauge_not_starts_with_nocase?: InputMaybe;\n preferentialGauge_starts_with?: InputMaybe;\n preferentialGauge_starts_with_nocase?: InputMaybe;\n};\n\nexport enum Pool_OrderBy {\n address = 'address',\n gauges = 'gauges',\n gaugesList = 'gaugesList',\n id = 'id',\n poolId = 'poolId',\n preferentialGauge = 'preferentialGauge',\n preferentialGauge__id = 'preferentialGauge__id',\n preferentialGauge__isKilled = 'preferentialGauge__isKilled',\n preferentialGauge__isPreferentialGauge = 'preferentialGauge__isPreferentialGauge',\n preferentialGauge__poolAddress = 'preferentialGauge__poolAddress',\n preferentialGauge__poolId = 'preferentialGauge__poolId',\n preferentialGauge__relativeWeightCap = 'preferentialGauge__relativeWeightCap',\n preferentialGauge__streamer = 'preferentialGauge__streamer',\n preferentialGauge__symbol = 'preferentialGauge__symbol',\n preferentialGauge__totalSupply = 'preferentialGauge__totalSupply'\n}\n\nexport type Query = {\n __typename?: 'Query';\n /** Access to subgraph metadata */\n _meta?: Maybe<_Meta_>;\n gauge?: Maybe;\n gaugeFactories: Array;\n gaugeFactory?: Maybe;\n gaugeShare?: Maybe;\n gaugeShares: Array;\n gaugeType?: Maybe;\n gaugeTypes: Array;\n gaugeVote?: Maybe;\n gaugeVotes: Array;\n gauges: Array;\n liquidityGauge?: Maybe;\n liquidityGauges: Array;\n lockSnapshot?: Maybe;\n lockSnapshots: Array;\n omniVotingEscrowLock?: Maybe;\n omniVotingEscrowLocks: Array;\n pool?: Maybe;\n pools: Array;\n rewardToken?: Maybe;\n rewardTokens: Array;\n rootGauge?: Maybe;\n rootGauges: Array;\n singleRecipientGauge?: Maybe;\n singleRecipientGauges: Array;\n user?: Maybe;\n users: Array;\n votingEscrow?: Maybe;\n votingEscrowLock?: Maybe;\n votingEscrowLocks: Array;\n votingEscrows: Array;\n};\n\n\nexport type Query_MetaArgs = {\n block?: InputMaybe;\n};\n\n\nexport type QueryGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeFactoriesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGaugeFactoryArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeShareArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeSharesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGaugeTypeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeTypesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGaugeVoteArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeVotesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryLiquidityGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryLiquidityGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryLockSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryLockSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryOmniVotingEscrowLockArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryOmniVotingEscrowLocksArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryRewardTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryRewardTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryRootGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryRootGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QuerySingleRecipientGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QuerySingleRecipientGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryUserArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUsersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryVotingEscrowArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryVotingEscrowLockArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryVotingEscrowLocksArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryVotingEscrowsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\nexport type RewardToken = {\n __typename?: 'RewardToken';\n /** ERC20 token decimals - zero if call to decimals() reverts */\n decimals: Scalars['Int'];\n /** Reference to LiquidityGauge entity */\n gauge: LiquidityGauge;\n /** Equal to: - */\n id: Scalars['ID'];\n /** Timestamp at which finishes the period of rewards */\n periodFinish?: Maybe;\n /** Rate of reward tokens streamed per second */\n rate?: Maybe;\n /** ERC20 token symbol - empty string if call to symbol() reverts */\n symbol: Scalars['String'];\n /** Amount of reward tokens that has been deposited into the gauge */\n totalDeposited: Scalars['BigDecimal'];\n};\n\nexport type RewardToken_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n decimals?: InputMaybe;\n decimals_gt?: InputMaybe;\n decimals_gte?: InputMaybe;\n decimals_in?: InputMaybe>;\n decimals_lt?: InputMaybe;\n decimals_lte?: InputMaybe;\n decimals_not?: InputMaybe;\n decimals_not_in?: InputMaybe>;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n periodFinish?: InputMaybe;\n periodFinish_gt?: InputMaybe;\n periodFinish_gte?: InputMaybe;\n periodFinish_in?: InputMaybe>;\n periodFinish_lt?: InputMaybe;\n periodFinish_lte?: InputMaybe;\n periodFinish_not?: InputMaybe;\n periodFinish_not_in?: InputMaybe>;\n rate?: InputMaybe;\n rate_gt?: InputMaybe;\n rate_gte?: InputMaybe;\n rate_in?: InputMaybe>;\n rate_lt?: InputMaybe;\n rate_lte?: InputMaybe;\n rate_not?: InputMaybe;\n rate_not_in?: InputMaybe>;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n totalDeposited?: InputMaybe;\n totalDeposited_gt?: InputMaybe;\n totalDeposited_gte?: InputMaybe;\n totalDeposited_in?: InputMaybe>;\n totalDeposited_lt?: InputMaybe;\n totalDeposited_lte?: InputMaybe;\n totalDeposited_not?: InputMaybe;\n totalDeposited_not_in?: InputMaybe>;\n};\n\nexport enum RewardToken_OrderBy {\n decimals = 'decimals',\n gauge = 'gauge',\n gauge__id = 'gauge__id',\n gauge__isKilled = 'gauge__isKilled',\n gauge__isPreferentialGauge = 'gauge__isPreferentialGauge',\n gauge__poolAddress = 'gauge__poolAddress',\n gauge__poolId = 'gauge__poolId',\n gauge__relativeWeightCap = 'gauge__relativeWeightCap',\n gauge__streamer = 'gauge__streamer',\n gauge__symbol = 'gauge__symbol',\n gauge__totalSupply = 'gauge__totalSupply',\n id = 'id',\n periodFinish = 'periodFinish',\n rate = 'rate',\n symbol = 'symbol',\n totalDeposited = 'totalDeposited'\n}\n\nexport type RootGauge = {\n __typename?: 'RootGauge';\n /** Chain where emissions by this gauge will be bridged to */\n chain: Chain;\n /** Factory contract address */\n factory: GaugeFactory;\n /** Reference to Gauge entity - created when LiquidityGauge is added to GaugeController */\n gauge?: Maybe;\n /** RootGauge contract address */\n id: Scalars['ID'];\n /** Whether Balancer DAO killed the gauge */\n isKilled: Scalars['Boolean'];\n /** Address where emissions by this gauge will be bridged to */\n recipient: Scalars['Bytes'];\n /** Relative weight cap of the gauge (0.01 = 1%) - V2 factories only */\n relativeWeightCap?: Maybe;\n};\n\nexport type RootGauge_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n chain?: InputMaybe;\n chain_in?: InputMaybe>;\n chain_not?: InputMaybe;\n chain_not_in?: InputMaybe>;\n factory?: InputMaybe;\n factory_?: InputMaybe;\n factory_contains?: InputMaybe;\n factory_contains_nocase?: InputMaybe;\n factory_ends_with?: InputMaybe;\n factory_ends_with_nocase?: InputMaybe;\n factory_gt?: InputMaybe;\n factory_gte?: InputMaybe;\n factory_in?: InputMaybe>;\n factory_lt?: InputMaybe;\n factory_lte?: InputMaybe;\n factory_not?: InputMaybe;\n factory_not_contains?: InputMaybe;\n factory_not_contains_nocase?: InputMaybe;\n factory_not_ends_with?: InputMaybe;\n factory_not_ends_with_nocase?: InputMaybe;\n factory_not_in?: InputMaybe>;\n factory_not_starts_with?: InputMaybe;\n factory_not_starts_with_nocase?: InputMaybe;\n factory_starts_with?: InputMaybe;\n factory_starts_with_nocase?: InputMaybe;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n isKilled?: InputMaybe;\n isKilled_in?: InputMaybe>;\n isKilled_not?: InputMaybe;\n isKilled_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n recipient?: InputMaybe;\n recipient_contains?: InputMaybe;\n recipient_gt?: InputMaybe;\n recipient_gte?: InputMaybe;\n recipient_in?: InputMaybe>;\n recipient_lt?: InputMaybe;\n recipient_lte?: InputMaybe;\n recipient_not?: InputMaybe;\n recipient_not_contains?: InputMaybe;\n recipient_not_in?: InputMaybe>;\n relativeWeightCap?: InputMaybe;\n relativeWeightCap_gt?: InputMaybe;\n relativeWeightCap_gte?: InputMaybe;\n relativeWeightCap_in?: InputMaybe>;\n relativeWeightCap_lt?: InputMaybe;\n relativeWeightCap_lte?: InputMaybe;\n relativeWeightCap_not?: InputMaybe;\n relativeWeightCap_not_in?: InputMaybe>;\n};\n\nexport enum RootGauge_OrderBy {\n chain = 'chain',\n factory = 'factory',\n factory__id = 'factory__id',\n factory__numGauges = 'factory__numGauges',\n gauge = 'gauge',\n gauge__addedTimestamp = 'gauge__addedTimestamp',\n gauge__address = 'gauge__address',\n gauge__id = 'gauge__id',\n id = 'id',\n isKilled = 'isKilled',\n recipient = 'recipient',\n relativeWeightCap = 'relativeWeightCap'\n}\n\nexport type SingleRecipientGauge = {\n __typename?: 'SingleRecipientGauge';\n /** Factory contract address */\n factory: GaugeFactory;\n /** Reference to Gauge entity - created when SingleRecipientGauge is added to GaugeController */\n gauge?: Maybe;\n /** SingleRecipientGauge contract address */\n id: Scalars['ID'];\n /** Whether Balancer DAO killed the gauge */\n isKilled: Scalars['Boolean'];\n /** Address where emissions for this gauge will be sent to */\n recipient: Scalars['Bytes'];\n /** Relative weight cap of the gauge (0.01 = 1%) - V2 factories only */\n relativeWeightCap?: Maybe;\n};\n\nexport type SingleRecipientGauge_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n factory?: InputMaybe;\n factory_?: InputMaybe;\n factory_contains?: InputMaybe;\n factory_contains_nocase?: InputMaybe;\n factory_ends_with?: InputMaybe;\n factory_ends_with_nocase?: InputMaybe;\n factory_gt?: InputMaybe;\n factory_gte?: InputMaybe;\n factory_in?: InputMaybe>;\n factory_lt?: InputMaybe;\n factory_lte?: InputMaybe;\n factory_not?: InputMaybe;\n factory_not_contains?: InputMaybe;\n factory_not_contains_nocase?: InputMaybe;\n factory_not_ends_with?: InputMaybe;\n factory_not_ends_with_nocase?: InputMaybe;\n factory_not_in?: InputMaybe>;\n factory_not_starts_with?: InputMaybe;\n factory_not_starts_with_nocase?: InputMaybe;\n factory_starts_with?: InputMaybe;\n factory_starts_with_nocase?: InputMaybe;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n isKilled?: InputMaybe;\n isKilled_in?: InputMaybe>;\n isKilled_not?: InputMaybe;\n isKilled_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n recipient?: InputMaybe;\n recipient_contains?: InputMaybe;\n recipient_gt?: InputMaybe;\n recipient_gte?: InputMaybe;\n recipient_in?: InputMaybe>;\n recipient_lt?: InputMaybe;\n recipient_lte?: InputMaybe;\n recipient_not?: InputMaybe;\n recipient_not_contains?: InputMaybe;\n recipient_not_in?: InputMaybe>;\n relativeWeightCap?: InputMaybe;\n relativeWeightCap_gt?: InputMaybe;\n relativeWeightCap_gte?: InputMaybe;\n relativeWeightCap_in?: InputMaybe>;\n relativeWeightCap_lt?: InputMaybe;\n relativeWeightCap_lte?: InputMaybe;\n relativeWeightCap_not?: InputMaybe;\n relativeWeightCap_not_in?: InputMaybe>;\n};\n\nexport enum SingleRecipientGauge_OrderBy {\n factory = 'factory',\n factory__id = 'factory__id',\n factory__numGauges = 'factory__numGauges',\n gauge = 'gauge',\n gauge__addedTimestamp = 'gauge__addedTimestamp',\n gauge__address = 'gauge__address',\n gauge__id = 'gauge__id',\n id = 'id',\n isKilled = 'isKilled',\n recipient = 'recipient',\n relativeWeightCap = 'relativeWeightCap'\n}\n\nexport type Subscription = {\n __typename?: 'Subscription';\n /** Access to subgraph metadata */\n _meta?: Maybe<_Meta_>;\n gauge?: Maybe;\n gaugeFactories: Array;\n gaugeFactory?: Maybe;\n gaugeShare?: Maybe;\n gaugeShares: Array;\n gaugeType?: Maybe;\n gaugeTypes: Array;\n gaugeVote?: Maybe;\n gaugeVotes: Array;\n gauges: Array;\n liquidityGauge?: Maybe;\n liquidityGauges: Array;\n lockSnapshot?: Maybe;\n lockSnapshots: Array;\n omniVotingEscrowLock?: Maybe;\n omniVotingEscrowLocks: Array;\n pool?: Maybe;\n pools: Array;\n rewardToken?: Maybe;\n rewardTokens: Array;\n rootGauge?: Maybe;\n rootGauges: Array;\n singleRecipientGauge?: Maybe;\n singleRecipientGauges: Array;\n user?: Maybe;\n users: Array;\n votingEscrow?: Maybe;\n votingEscrowLock?: Maybe;\n votingEscrowLocks: Array;\n votingEscrows: Array;\n};\n\n\nexport type Subscription_MetaArgs = {\n block?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeFactoriesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugeFactoryArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeShareArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeSharesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugeTypeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeTypesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugeVoteArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeVotesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionLiquidityGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionLiquidityGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionLockSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionLockSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionOmniVotingEscrowLockArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionOmniVotingEscrowLocksArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionRewardTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionRewardTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionRootGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionRootGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionSingleRecipientGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionSingleRecipientGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionUserArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUsersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionVotingEscrowArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionVotingEscrowLockArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionVotingEscrowLocksArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionVotingEscrowsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\nexport type User = {\n __typename?: 'User';\n /** List of gauge the user has shares */\n gaugeShares?: Maybe>;\n /** List of votes on gauges */\n gaugeVotes?: Maybe>;\n /** User address */\n id: Scalars['ID'];\n /** List of omni locks the user created */\n omniVotingLocks?: Maybe>;\n /** List of locks the user created */\n votingLocks?: Maybe>;\n};\n\n\nexport type UserGaugeSharesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserGaugeVotesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserOmniVotingLocksArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserVotingLocksArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type User_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n gaugeShares_?: InputMaybe;\n gaugeVotes_?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n omniVotingLocks_?: InputMaybe;\n or?: InputMaybe>>;\n votingLocks_?: InputMaybe;\n};\n\nexport enum User_OrderBy {\n gaugeShares = 'gaugeShares',\n gaugeVotes = 'gaugeVotes',\n id = 'id',\n omniVotingLocks = 'omniVotingLocks',\n votingLocks = 'votingLocks'\n}\n\nexport type VotingEscrow = {\n __typename?: 'VotingEscrow';\n /** VotingEscrow contract address */\n id: Scalars['ID'];\n /** List of veBAL locks created */\n locks?: Maybe>;\n /** List of veBAL locks created */\n omniLocks?: Maybe>;\n /** Amount of B-80BAL-20WETH BPT locked, only applies on mainnet */\n stakedSupply?: Maybe;\n};\n\n\nexport type VotingEscrowLocksArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type VotingEscrowOmniLocksArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type VotingEscrowLock = {\n __typename?: 'VotingEscrowLock';\n /** veBAL balance at the moment user locks */\n bias: Scalars['BigDecimal'];\n /** Equal to: - */\n id: Scalars['ID'];\n /** Amount of B-80BAL-20WETH BPT the user has locked */\n lockedBalance: Scalars['BigDecimal'];\n /** veBAL decay rate (per second) */\n slope: Scalars['BigDecimal'];\n /** Timestamp at which the lock was created [seconds] */\n timestamp: Scalars['Int'];\n /** Timestamp at which B-80BAL-20WETH BPT can be unlocked by user [seconds] */\n unlockTime: Scalars['BigInt'];\n /** Timestamp at which the lcok was created [seconds]. Same as timestamp */\n updatedAt: Scalars['Int'];\n /** Reference to User entity */\n user: User;\n /** Reference to VotingEscrow entity */\n votingEscrowID: VotingEscrow;\n};\n\nexport type VotingEscrowLock_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n bias?: InputMaybe;\n bias_gt?: InputMaybe;\n bias_gte?: InputMaybe;\n bias_in?: InputMaybe>;\n bias_lt?: InputMaybe;\n bias_lte?: InputMaybe;\n bias_not?: InputMaybe;\n bias_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n lockedBalance?: InputMaybe;\n lockedBalance_gt?: InputMaybe;\n lockedBalance_gte?: InputMaybe;\n lockedBalance_in?: InputMaybe>;\n lockedBalance_lt?: InputMaybe;\n lockedBalance_lte?: InputMaybe;\n lockedBalance_not?: InputMaybe;\n lockedBalance_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n slope?: InputMaybe;\n slope_gt?: InputMaybe;\n slope_gte?: InputMaybe;\n slope_in?: InputMaybe>;\n slope_lt?: InputMaybe;\n slope_lte?: InputMaybe;\n slope_not?: InputMaybe;\n slope_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n unlockTime?: InputMaybe;\n unlockTime_gt?: InputMaybe;\n unlockTime_gte?: InputMaybe;\n unlockTime_in?: InputMaybe>;\n unlockTime_lt?: InputMaybe;\n unlockTime_lte?: InputMaybe;\n unlockTime_not?: InputMaybe;\n unlockTime_not_in?: InputMaybe>;\n updatedAt?: InputMaybe;\n updatedAt_gt?: InputMaybe;\n updatedAt_gte?: InputMaybe;\n updatedAt_in?: InputMaybe>;\n updatedAt_lt?: InputMaybe;\n updatedAt_lte?: InputMaybe;\n updatedAt_not?: InputMaybe;\n updatedAt_not_in?: InputMaybe>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n votingEscrowID?: InputMaybe;\n votingEscrowID_?: InputMaybe;\n votingEscrowID_contains?: InputMaybe;\n votingEscrowID_contains_nocase?: InputMaybe;\n votingEscrowID_ends_with?: InputMaybe;\n votingEscrowID_ends_with_nocase?: InputMaybe;\n votingEscrowID_gt?: InputMaybe;\n votingEscrowID_gte?: InputMaybe;\n votingEscrowID_in?: InputMaybe>;\n votingEscrowID_lt?: InputMaybe;\n votingEscrowID_lte?: InputMaybe;\n votingEscrowID_not?: InputMaybe;\n votingEscrowID_not_contains?: InputMaybe;\n votingEscrowID_not_contains_nocase?: InputMaybe;\n votingEscrowID_not_ends_with?: InputMaybe;\n votingEscrowID_not_ends_with_nocase?: InputMaybe;\n votingEscrowID_not_in?: InputMaybe>;\n votingEscrowID_not_starts_with?: InputMaybe;\n votingEscrowID_not_starts_with_nocase?: InputMaybe;\n votingEscrowID_starts_with?: InputMaybe;\n votingEscrowID_starts_with_nocase?: InputMaybe;\n};\n\nexport enum VotingEscrowLock_OrderBy {\n bias = 'bias',\n id = 'id',\n lockedBalance = 'lockedBalance',\n slope = 'slope',\n timestamp = 'timestamp',\n unlockTime = 'unlockTime',\n updatedAt = 'updatedAt',\n user = 'user',\n user__id = 'user__id',\n votingEscrowID = 'votingEscrowID',\n votingEscrowID__id = 'votingEscrowID__id',\n votingEscrowID__stakedSupply = 'votingEscrowID__stakedSupply'\n}\n\nexport type VotingEscrow_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n locks_?: InputMaybe;\n omniLocks_?: InputMaybe;\n or?: InputMaybe>>;\n stakedSupply?: InputMaybe;\n stakedSupply_gt?: InputMaybe;\n stakedSupply_gte?: InputMaybe;\n stakedSupply_in?: InputMaybe>;\n stakedSupply_lt?: InputMaybe;\n stakedSupply_lte?: InputMaybe;\n stakedSupply_not?: InputMaybe;\n stakedSupply_not_in?: InputMaybe>;\n};\n\nexport enum VotingEscrow_OrderBy {\n id = 'id',\n locks = 'locks',\n omniLocks = 'omniLocks',\n stakedSupply = 'stakedSupply'\n}\n\nexport type _Block_ = {\n __typename?: '_Block_';\n /** The hash of the block */\n hash?: Maybe;\n /** The block number */\n number: Scalars['Int'];\n /** Integer representation of the timestamp stored in blocks for the chain */\n timestamp?: Maybe;\n};\n\n/** The type for the top-level _meta field */\nexport type _Meta_ = {\n __typename?: '_Meta_';\n /**\n * Information about a specific subgraph block. The hash of the block\n * will be null if the _meta field has a block constraint that asks for\n * a block number. It will be filled if the _meta field has no block constraint\n * and therefore asks for the latest block\n *\n */\n block: _Block_;\n /** The deployment ID */\n deployment: Scalars['String'];\n /** If `true`, the subgraph encountered indexing errors at some past block */\n hasIndexingErrors: Scalars['Boolean'];\n};\n\nexport enum _SubgraphErrorPolicy_ {\n /** Data will be returned even if the subgraph has indexing errors */\n allow = 'allow',\n /** If the subgraph has indexing errors, data will be omitted. The default. */\n deny = 'deny'\n}\n\nexport type GaugeShareQueryVariables = Exact<{\n id: Scalars['ID'];\n block?: InputMaybe;\n}>;\n\n\nexport type GaugeShareQuery = { __typename?: 'Query', gaugeShare?: { __typename?: 'GaugeShare', id: string, balance: string, user: { __typename?: 'User', id: string }, gauge: { __typename?: 'LiquidityGauge', id: string, isKilled: boolean, poolId?: string | null, poolAddress: string, totalSupply: string } } | null };\n\nexport type GaugeSharesQueryVariables = Exact<{\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type GaugeSharesQuery = { __typename?: 'Query', gaugeShares: Array<{ __typename?: 'GaugeShare', id: string, balance: string, user: { __typename?: 'User', id: string }, gauge: { __typename?: 'LiquidityGauge', id: string, isKilled: boolean, poolId?: string | null, poolAddress: string, totalSupply: string } }> };\n\nexport type SubgraphGaugeShareFragment = { __typename?: 'GaugeShare', id: string, balance: string, user: { __typename?: 'User', id: string }, gauge: { __typename?: 'LiquidityGauge', id: string, isKilled: boolean, poolId?: string | null, poolAddress: string, totalSupply: string } };\n\nexport type LiquidityGaugesQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type LiquidityGaugesQuery = { __typename?: 'Query', liquidityGauges: Array<{ __typename?: 'LiquidityGauge', id: string, symbol: string, poolAddress: string, poolId?: string | null, streamer?: string | null, totalSupply: string, factory: { __typename?: 'GaugeFactory', id: string, numGauges: number }, tokens?: Array<{ __typename?: 'RewardToken', id: string, symbol: string, decimals: number, totalDeposited: string, rate?: string | null, periodFinish?: string | null }> | null }> };\n\nexport type SubgraphLiquidityGaugeFragment = { __typename?: 'LiquidityGauge', id: string, symbol: string, poolAddress: string, poolId?: string | null, streamer?: string | null, totalSupply: string, factory: { __typename?: 'GaugeFactory', id: string, numGauges: number }, tokens?: Array<{ __typename?: 'RewardToken', id: string, symbol: string, decimals: number, totalDeposited: string, rate?: string | null, periodFinish?: string | null }> | null };\n\nexport type PoolsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolsQuery = { __typename?: 'Query', pools: Array<{ __typename?: 'Pool', id: string, poolId?: string | null, preferentialGauge?: { __typename?: 'LiquidityGauge', id: string, symbol: string, poolAddress: string, poolId?: string | null, streamer?: string | null, totalSupply: string, factory: { __typename?: 'GaugeFactory', id: string, numGauges: number }, tokens?: Array<{ __typename?: 'RewardToken', id: string, symbol: string, decimals: number, totalDeposited: string, rate?: string | null, periodFinish?: string | null }> | null } | null }> };\n\nexport type SubgraphPoolWithPreferentialGaugeFragment = { __typename?: 'Pool', id: string, poolId?: string | null, preferentialGauge?: { __typename?: 'LiquidityGauge', id: string, symbol: string, poolAddress: string, poolId?: string | null, streamer?: string | null, totalSupply: string, factory: { __typename?: 'GaugeFactory', id: string, numGauges: number }, tokens?: Array<{ __typename?: 'RewardToken', id: string, symbol: string, decimals: number, totalDeposited: string, rate?: string | null, periodFinish?: string | null }> | null } | null };\n\nexport type PoolGaugesQueryVariables = Exact<{\n where?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolGaugesQuery = { __typename?: 'Query', pools: Array<{ __typename?: 'Pool', gauges?: Array<{ __typename?: 'LiquidityGauge', id: string, relativeWeightCap?: string | null }> | null, preferentialGauge?: { __typename?: 'LiquidityGauge', id: string } | null }> };\n\nexport const SubgraphGaugeShareFragmentDoc = gql`\n fragment SubgraphGaugeShare on GaugeShare {\n id\n balance\n user {\n id\n }\n gauge {\n id\n isKilled\n poolId\n poolAddress\n totalSupply\n }\n}\n `;\nexport const SubgraphLiquidityGaugeFragmentDoc = gql`\n fragment SubgraphLiquidityGauge on LiquidityGauge {\n id\n symbol\n poolAddress\n poolId\n streamer\n factory {\n id\n numGauges\n }\n totalSupply\n tokens {\n id\n symbol\n decimals\n totalDeposited\n rate\n periodFinish\n }\n}\n `;\nexport const SubgraphPoolWithPreferentialGaugeFragmentDoc = gql`\n fragment SubgraphPoolWithPreferentialGauge on Pool {\n id\n poolId\n preferentialGauge {\n ...SubgraphLiquidityGauge\n }\n}\n ${SubgraphLiquidityGaugeFragmentDoc}`;\nexport const GaugeShareDocument = gql`\n query GaugeShare($id: ID!, $block: Block_height) {\n gaugeShare(id: $id, block: $block) {\n ...SubgraphGaugeShare\n }\n}\n ${SubgraphGaugeShareFragmentDoc}`;\nexport const GaugeSharesDocument = gql`\n query GaugeShares($first: Int, $orderBy: GaugeShare_orderBy, $orderDirection: OrderDirection, $skip: Int, $where: GaugeShare_filter, $block: Block_height) {\n gaugeShares(\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n skip: $skip\n where: $where\n block: $block\n ) {\n ...SubgraphGaugeShare\n }\n}\n ${SubgraphGaugeShareFragmentDoc}`;\nexport const LiquidityGaugesDocument = gql`\n query LiquidityGauges($skip: Int, $first: Int, $orderBy: LiquidityGauge_orderBy, $orderDirection: OrderDirection, $where: LiquidityGauge_filter, $block: Block_height) {\n liquidityGauges(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphLiquidityGauge\n }\n}\n ${SubgraphLiquidityGaugeFragmentDoc}`;\nexport const PoolsDocument = gql`\n query Pools($skip: Int, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $where: Pool_filter, $block: Block_height) {\n pools(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPoolWithPreferentialGauge\n }\n}\n ${SubgraphPoolWithPreferentialGaugeFragmentDoc}`;\nexport const PoolGaugesDocument = gql`\n query PoolGauges($where: Pool_filter, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $skip: Int, $block: Block_height) {\n pools(\n where: $where\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n skip: $skip\n block: $block\n ) {\n gauges {\n id\n relativeWeightCap\n }\n preferentialGauge {\n id\n }\n }\n}\n `;\n\nexport type SdkFunctionWrapper = (action: (requestHeaders?:Record) => Promise, operationName: string, operationType?: string) => Promise;\n\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType) => action();\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n GaugeShare(variables: GaugeShareQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(GaugeShareDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'GaugeShare', 'query');\n },\n GaugeShares(variables?: GaugeSharesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(GaugeSharesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'GaugeShares', 'query');\n },\n LiquidityGauges(variables?: LiquidityGaugesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(LiquidityGaugesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'LiquidityGauges', 'query');\n },\n Pools(variables?: PoolsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Pools', 'query');\n },\n PoolGauges(variables?: PoolGaugesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolGaugesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolGauges', 'query');\n }\n };\n}\nexport type Sdk = ReturnType;","import { GraphQLClient } from 'graphql-request';\nimport { getSdk, Sdk } from './generated/balancer-subgraph-types';\nimport * as Gauges from './generated/balancer-gauges';\nimport * as V2 from './generated/balancer-subgraph-types';\n\nexport * from './generated/balancer-subgraph-types';\n\nexport type SubgraphClient = Sdk;\nexport type GaugesClient = Gauges.Sdk;\nexport type SubgraphLiquidityGauge = Gauges.LiquidityGauge;\nexport type SubgraphPool = V2.SubgraphPoolFragment;\n\nexport function createSubgraphClient(subgraphUrl: string): SubgraphClient {\n const client = new GraphQLClient(subgraphUrl);\n\n return getSdk(client);\n}\n\nexport function createGaugesClient(url: string): GaugesClient {\n const client = new GraphQLClient(url);\n\n return Gauges.getSdk(client);\n}\n","import { set } from 'lodash';\nimport { Fragment, JsonFragment, Interface, Result } from '@ethersproject/abi';\nimport { CallOverrides } from '@ethersproject/contracts';\nimport { Multicall3, Multicall3__factory } from '@/contracts';\nimport { Provider } from '@ethersproject/providers';\n\nexport class Multicaller3 {\n private interface: Interface;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private calls: [string, string, any][] = [];\n private paths: string[] = [];\n address = '0xcA11bde05977b3631167028862bE2a173976CA11';\n multicall: Multicall3;\n\n constructor(\n abi: string | Array,\n provider: Provider,\n private options: CallOverrides = {}\n ) {\n this.interface = new Interface(abi);\n this.multicall = Multicall3__factory.connect(this.address, provider);\n }\n\n call(\n path: string,\n address: string,\n functionName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n params?: any[]\n ): Multicaller3 {\n this.calls.push([address, functionName, params]);\n this.paths.push(path);\n return this;\n }\n\n async execute(\n from: Record = {},\n batchSize = 1024 // Define the number of function calls in each batch\n ): Promise> {\n const obj = from;\n const results = await this.executeMulticall(batchSize);\n results.forEach((result, i) =>\n set(obj, this.paths[i], result.length > 1 ? result : result[0])\n );\n this.calls = [];\n this.paths = [];\n return obj;\n }\n\n private async executeMulticall(batchSize: number): Promise {\n const numBatches = Math.ceil(this.calls.length / batchSize);\n const results: Result[] = [];\n\n const batchPromises = [];\n\n for (let batchIndex = 0; batchIndex < numBatches; batchIndex++) {\n const batchCalls = this.calls.slice(\n batchIndex * batchSize,\n (batchIndex + 1) * batchSize\n );\n\n const batchRequests = batchCalls.map(\n ([address, functionName, params]) => ({\n target: address,\n allowFailure: true,\n callData: this.interface.encodeFunctionData(functionName, params),\n })\n );\n\n batchPromises.push(\n this.multicall.callStatic.aggregate3(batchRequests, this.options)\n );\n }\n\n const batchResults = await Promise.all(batchPromises);\n\n batchResults.forEach((res, batchIndex) => {\n const offset = batchIndex * batchSize;\n\n for (let i = 0; i < res.length; i++) {\n const callIndex = offset + i;\n const { success, returnData } = res[i];\n\n if (success) {\n try {\n const result = this.interface.decodeFunctionResult(\n this.calls[callIndex][1],\n returnData\n );\n results[callIndex] = result;\n } catch (e) {\n console.error('Multicall error', this.paths[callIndex]);\n results[callIndex] = [];\n }\n } else {\n console.error('Failed request in multicall', this.paths[callIndex]);\n results[callIndex] = [];\n }\n }\n });\n\n return results;\n }\n}\n","import { Multicaller3 } from '@/lib/utils/multiCaller3';\nimport { SubgraphPoolBase } from '@/.';\nimport { Provider } from '@ethersproject/providers';\nimport { formatFixed } from '@ethersproject/bignumber';\nimport { SubgraphToken } from '@balancer-labs/sor';\nimport { PoolToken, Pool } from '@/types';\n\nconst abi = [\n 'function getSwapFeePercentage() view returns (uint256)',\n 'function percentFee() view returns (uint256)',\n 'function protocolPercentFee() view returns (uint256)',\n 'function getNormalizedWeights() view returns (uint256[])',\n 'function totalSupply() view returns (uint256)',\n 'function getVirtualSupply() view returns (uint256)',\n 'function getActualSupply() view returns (uint256)',\n 'function getTargets() view returns (uint256 lowerTarget, uint256 upperTarget)',\n 'function getTokenRates() view returns (uint256, uint256)',\n 'function getWrappedTokenRate() view returns (uint256)',\n 'function getAmplificationParameter() view returns (uint256 value, bool isUpdating, uint256 precision)',\n 'function getPausedState() view returns (bool)',\n 'function inRecoveryMode() view returns (bool)',\n 'function getRate() view returns (uint256)',\n 'function getScalingFactors() view returns (uint256[] memory)', // do we need this here?\n 'function getPoolTokens(bytes32) view returns (address[], uint256[])',\n];\n\nconst getTotalSupplyFn = (poolType: string) => {\n if (poolType.includes('Linear') || ['StablePhantom'].includes(poolType)) {\n return 'getVirtualSupply';\n } else if (poolType === 'ComposableStable') {\n return 'getActualSupply';\n } else {\n return 'totalSupply';\n }\n};\n\nconst getSwapFeeFn = (poolType: string) => {\n if (poolType === 'Element') {\n return 'percentFee';\n } else if (poolType === 'FX') {\n return 'protocolPercentFee';\n } else {\n return 'getSwapFeePercentage';\n }\n};\n\ntype GenericToken = SubgraphToken | PoolToken;\ntype GenericPool = Omit & {\n tokens: GenericToken[];\n};\n\ninterface OnchainData {\n poolTokens: [string[], string[]];\n totalShares: string;\n swapFee: string;\n isPaused?: boolean;\n inRecoveryMode?: boolean;\n rate?: string;\n scalingFactors?: string[];\n weights?: string[];\n targets?: [string, string];\n wrappedTokenRate?: string;\n amp?: [string, boolean, string];\n tokenRates?: [string, string];\n}\n\nconst defaultCalls = (\n id: string,\n address: string,\n vaultAddress: string,\n poolType: string,\n multicaller: Multicaller3\n) => {\n multicaller.call(`${id}.poolTokens`, vaultAddress, 'getPoolTokens', [id]);\n multicaller.call(`${id}.totalShares`, address, getTotalSupplyFn(poolType));\n multicaller.call(`${id}.swapFee`, address, getSwapFeeFn(poolType));\n // Following where added to the pools query contract, however legacy onchain data didn't have them.\n // multicaller.call(`${id}.isPaused`, address, 'getPausedState');\n // multicaller.call(`${id}.inRecoveryMode`, address, 'inRecoveryMode');\n // multicaller.call(`${id}.rate`, address, 'getRate');\n // multicaller.call(`${id}.scalingFactors`, address, 'getScalingFactors');\n};\n\nconst weightedCalls = (\n id: string,\n address: string,\n multicaller: Multicaller3\n) => {\n multicaller.call(`${id}.weights`, address, 'getNormalizedWeights');\n};\n\nconst linearCalls = (\n id: string,\n address: string,\n multicaller: Multicaller3\n) => {\n multicaller.call(`${id}.targets`, address, 'getTargets');\n multicaller.call(`${id}.wrappedTokenRate`, address, 'getWrappedTokenRate');\n};\n\nconst stableCalls = (\n id: string,\n address: string,\n multicaller: Multicaller3\n) => {\n multicaller.call(`${id}.amp`, address, 'getAmplificationParameter');\n};\n\nconst gyroECalls = (id: string, address: string, multicaller: Multicaller3) => {\n multicaller.call(`${id}.tokenRates`, address, 'getTokenRates');\n};\n\nconst poolTypeCalls = (poolType: string, poolTypeVersion = 1) => {\n const do_nothing = () => ({});\n switch (poolType) {\n case 'Weighted':\n case 'LiquidityBootstrapping':\n case 'Investment':\n return weightedCalls;\n case 'Stable':\n case 'StablePhantom':\n case 'MetaStable':\n case 'ComposableStable':\n return stableCalls;\n case 'GyroE':\n if (poolTypeVersion === 2) {\n return gyroECalls;\n } else {\n return do_nothing;\n }\n case 'Gyro2':\n if (poolTypeVersion === 2) {\n // Gyro2 V2 has tokenRates same as GyroE V2\n return gyroECalls;\n } else {\n return do_nothing;\n }\n case 'AaveLinear':\n if (poolTypeVersion === 1) {\n return linearCalls;\n } else {\n return do_nothing;\n }\n default:\n return do_nothing;\n }\n};\n\nconst merge = (pool: T, result: OnchainData) => ({\n ...pool,\n tokens: result.poolTokens\n ? pool.tokens.map((token) => {\n const idx = result.poolTokens[0]\n .map((t) => t.toLowerCase())\n .indexOf(token.address);\n const wrappedToken =\n pool.wrappedIndex && pool.tokensList[pool.wrappedIndex];\n const tokenDecimals =\n token.decimals === undefined ? 18 : token.decimals;\n return {\n ...token,\n balance: formatFixed(result.poolTokens[1][idx], tokenDecimals),\n weight:\n (result.weights && formatFixed(result.weights[idx], 18)) ||\n token.weight,\n priceRate:\n (result.wrappedTokenRate &&\n wrappedToken &&\n wrappedToken.toLowerCase() === token.address.toLowerCase() &&\n formatFixed(result.wrappedTokenRate, 18)) ||\n token.priceRate,\n } as SubgraphToken;\n })\n : pool.tokens,\n totalShares: result.totalShares\n ? formatFixed(result.totalShares, 18)\n : pool.totalShares,\n swapFee: result.swapFee ? formatFixed(result.swapFee, 18) : pool.swapFee,\n amp:\n (result.amp &&\n result.amp[0] &&\n formatFixed(result.amp[0], String(result.amp[2]).length - 1)) ||\n pool.amp,\n lowerTarget:\n (result.targets && formatFixed(result.targets[0], 18)) || pool.lowerTarget,\n upperTarget:\n (result.targets && formatFixed(result.targets[1], 18)) || pool.upperTarget,\n tokenRates:\n (result.tokenRates &&\n result.tokenRates.map((rate) => formatFixed(rate, 18))) ||\n pool.tokenRates,\n // rate: result.rate,\n // isPaused: result.isPaused,\n // inRecoveryMode: result.inRecoveryMode,\n // scalingFactors: result.scalingFactors,\n});\n\nexport const fetchOnChainPoolData = async (\n pools: {\n id: string;\n address: string;\n poolType: string;\n poolTypeVersion?: number;\n }[],\n vaultAddress: string,\n provider: Provider,\n batchSize = 1024\n): Promise<{ [id: string]: OnchainData }> => {\n if (pools.length === 0) {\n return {};\n }\n\n const multicaller = new Multicaller3(abi, provider);\n\n pools.forEach(({ id, address, poolType, poolTypeVersion }) => {\n defaultCalls(id, address, vaultAddress, poolType, multicaller);\n poolTypeCalls(poolType, poolTypeVersion)(id, address, multicaller);\n });\n\n const results = (await multicaller.execute({}, batchSize)) as {\n [id: string]: OnchainData;\n };\n\n return results;\n};\n\nexport async function getOnChainBalances(\n subgraphPoolsOriginal: T[],\n _multiAddress: string,\n vaultAddress: string,\n provider: Provider,\n batchSize = 1024\n): Promise {\n if (subgraphPoolsOriginal.length === 0) return subgraphPoolsOriginal;\n\n const poolsWithOnchainData: T[] = [];\n\n const onchainData = (await fetchOnChainPoolData(\n subgraphPoolsOriginal,\n vaultAddress,\n provider,\n batchSize\n )) as { [id: string]: OnchainData };\n\n subgraphPoolsOriginal.forEach((pool) => {\n const data = onchainData[pool.id];\n poolsWithOnchainData.push(merge(pool, data));\n });\n\n return poolsWithOnchainData;\n}\n","import { PoolDataService, SubgraphPoolBase } from '@balancer-labs/sor';\nimport {\n OrderDirection,\n Pool_OrderBy,\n PoolsQueryVariables,\n SubgraphClient,\n} from '@/modules/subgraph/subgraph';\nimport { parseInt } from 'lodash';\nimport { getOnChainBalances } from './onChainData3';\nimport { Provider } from '@ethersproject/providers';\nimport {\n BalancerNetworkConfig,\n BalancerSdkSorConfig,\n GraphQLQuery,\n} from '@/types';\nimport { GraphQLArgs } from '@/lib/graphql/types';\nimport {\n GraphQLArgsBuilder,\n SubgraphArgsFormatter,\n} from '@/lib/graphql/args-builder';\n\nimport { Logger } from '@/lib/utils/logger';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function mapPools(pools: any[]): SubgraphPoolBase[] {\n return pools.map((pool) => ({\n ...pool,\n poolType: pool.poolType || '',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n tokens: (pool.tokens || []).map((token: any) => ({\n ...token,\n weight: token.weight || null,\n })),\n totalWeight: pool.totalWeight || undefined,\n amp: pool.amp || undefined,\n expiryTime: pool.expiryTime ? parseInt(pool.expiryTime) : undefined,\n unitSeconds: pool.unitSeconds ? parseInt(pool.unitSeconds) : undefined,\n principalToken: pool.principalToken || undefined,\n baseToken: pool.baseToken || undefined,\n }));\n}\n\nexport class SubgraphPoolDataService implements PoolDataService {\n private readonly defaultArgs: GraphQLArgs;\n constructor(\n private readonly client: SubgraphClient,\n private readonly provider: Provider,\n private readonly network: BalancerNetworkConfig,\n private readonly sorConfig?: BalancerSdkSorConfig,\n query?: GraphQLQuery\n ) {\n // Default args can be overwritten by passing in a queryArgs object to .getPools\n this.defaultArgs = query?.args || {\n orderBy: Pool_OrderBy.TotalLiquidity,\n orderDirection: OrderDirection.Desc,\n where: {\n swapEnabled: {\n eq: true,\n },\n totalShares: {\n gt: 0.000000000001,\n },\n },\n };\n }\n\n /**\n * Returns pools from the subgraph filtered by queryArgs with on-chain balances\n *\n * @param queryArgs\n * @returns SubgraphPoolBase[]\n */\n async getPools(queryArgs?: GraphQLArgs): Promise {\n const pools = await this.getSubgraphPools(queryArgs);\n\n const filteredPools = pools.filter((p) => {\n if (!this.network.poolsToIgnore) return true;\n const index = this.network.poolsToIgnore.findIndex(\n (id) => id.toLowerCase() === p.id.toLowerCase()\n );\n return index === -1;\n });\n\n const mapped = mapPools(filteredPools);\n\n if (this.sorConfig && this.sorConfig.fetchOnChainBalances === false) {\n return mapped;\n }\n\n const logger = Logger.getInstance();\n logger.time(`fetching on-chain balances for ${mapped.length} pools`);\n\n const onChainBalances = await getOnChainBalances(\n mapped,\n this.network.addresses.contracts.multicall,\n this.network.addresses.contracts.vault,\n this.provider,\n this.network.multicallBatchSize\n );\n\n logger.timeEnd(`fetching on-chain balances for ${mapped.length} pools`);\n\n return onChainBalances;\n }\n\n private async getSubgraphPools(queryArgs?: GraphQLArgs) {\n const formattedQuery = new GraphQLArgsBuilder(\n queryArgs || this.defaultArgs\n ).format(new SubgraphArgsFormatter()) as PoolsQueryVariables;\n\n if (formattedQuery.first) {\n const { pools } = await this.client.Pools(formattedQuery);\n return pools;\n }\n\n const { pool0, pool1000, pool2000 } = await this.client.AllPools(\n formattedQuery\n );\n\n const pools = [...pool0, ...pool1000, ...pool2000];\n\n return pools;\n }\n}\n","import { TokenPriceService } from '@balancer-labs/sor';\nimport { SubgraphClient } from '@/modules/subgraph/subgraph';\nimport { keyBy } from 'lodash';\n\nexport class SubgraphTokenPriceService implements TokenPriceService {\n private readonly weth: string;\n\n constructor(private readonly client: SubgraphClient, weth: string) {\n //the subgraph addresses are all toLowerCase\n this.weth = weth.toLowerCase();\n }\n\n public async getNativeAssetPriceInToken(\n tokenAddress: string\n ): Promise {\n const ethPerToken = await this.getLatestPriceInEthFromSubgraph(\n tokenAddress\n );\n\n if (!ethPerToken) {\n throw Error('No price found in the subgraph');\n }\n\n // We want the price of 1 ETH in terms of the token base units\n return `${1 / ethPerToken}`;\n }\n\n public async getLatestPriceInEthFromSubgraph(\n tokenAddress: string\n ): Promise {\n tokenAddress = tokenAddress.toLowerCase();\n\n const { latestPrices } = await this.client.TokenLatestPrices({\n where: { asset_in: [tokenAddress, this.weth] },\n });\n const pricesKeyedOnId = keyBy(latestPrices, 'id');\n\n //the ids are set as ${asset}-${pricingAsset}\n //first try to find an exact match\n if (pricesKeyedOnId[`${tokenAddress}-${this.weth}`]) {\n return parseFloat(pricesKeyedOnId[`${tokenAddress}-${this.weth}`].price);\n }\n\n //no exact match, try to traverse the path\n const matchingLatestPrices = latestPrices.filter(\n (price) => price.asset === tokenAddress\n );\n\n //pick the first one we match on.\n //There is no timestamp on latestPrice, should get introduced to allow for sorting by latest\n for (const tokenPrice of matchingLatestPrices) {\n const pricingAssetPricedInEth =\n pricesKeyedOnId[`${tokenPrice.pricingAsset}-${this.weth}`];\n\n //1 BAL = 20 USDC, 1 USDC = 0.00025 ETH, 1 BAL = 20 * 0.00025\n if (pricingAssetPricedInEth) {\n return (\n parseFloat(tokenPrice.price) *\n parseFloat(pricingAssetPricedInEth.price)\n );\n }\n }\n\n return null;\n }\n}\n","import { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { BalancerNetworkConfig, BalancerSdkConfig } from '@/types';\nexport function getNetworkConfig(\n config: BalancerSdkConfig\n): BalancerNetworkConfig {\n if (typeof config.network === 'number') {\n const networkConfig = BALANCER_NETWORK_CONFIG[config.network];\n\n return {\n ...networkConfig,\n urls: {\n ...networkConfig.urls,\n subgraph: config.customSubgraphUrl ?? networkConfig.urls.subgraph,\n },\n tenderly: config.tenderly,\n };\n }\n\n return {\n ...config.network,\n urls: {\n ...config.network.urls,\n subgraph: config.customSubgraphUrl ?? config.network.urls.subgraph,\n },\n tenderly: config.network.tenderly,\n };\n}\n","export const POOLS_TO_IGNORE = [\n '0x00c2a4be503869fa751c2dbcb7156cc970b5a8da000000000000000000000477',\n '0x02d928e68d8f10c0358566152677db51e1e2dc8c00000000000000000000051e',\n '0x04248aabca09e9a1a3d5129a7ba05b7f17de768400000000000000000000050e',\n '0x05513ca725b6ce035ca2641075474eb469f05f4c00020000000000000000041f',\n '0x0a0fb4ff697de5ac5b6770cd8ee1b72af80b57cf000000000000000000000496',\n '0x0afbd58beca09545e4fb67772faf3858e610bcd00000000000000000000004b9',\n '0x0d05aac44ac7dd3c7ba5d50be93eb884a057d23400000000000000000000051c',\n '0x11839d635e2f0270da37e8ef4324d4d5d54329570002000000000000000004d8',\n '0x126e7643235ec0ab9c103c507642dc3f4ca23c66000000000000000000000468',\n '0x133d241f225750d2c92948e464a5a80111920331000000000000000000000476',\n '0x159cb00338fb63f263fd6f621df619cef71da9540000000000000000000004d5',\n '0x173063a30e095313eee39411f07e95a8a806014e0002000000000000000003ab',\n '0x1bd2f176a812e312077bca87e37c08432bb09f3e0000000000000000000005a1',\n '0x20b156776114e8a801e9767d90c6ccccc8adf398000000000000000000000499',\n '0x246ffb4d928e394a02e45761fecdba6c2e79b8eb000000000000000000000541',\n '0x25accb7943fd73dda5e23ba6329085a3c24bfb6a000200000000000000000387',\n '0x26c2b83fc8535deead276f5cc3ad9c1a2192e02700020000000000000000056b',\n '0x2b218683178d029bab6c9789b1073aa6c96e517600000000000000000000058c',\n '0x2ba7aa2213fa2c909cd9e46fed5a0059542b36b00000000000000000000003a3',\n '0x2bbf681cc4eb09218bee85ea2a5d3d13fa40fc0c0000000000000000000000fd',\n '0x2e52c64fd319e380cdbcfc4577ea1fda558a32e40002000000000000000005ba',\n '0x2f4eb100552ef93840d5adc30560e5513dfffacb000000000000000000000334',\n '0x2ff1a9dbdacd55297452cfd8a4d94724bc22a5f7000000000000000000000484',\n '0x3035917be42af437cbdd774be26b9ec90a2bd677000200000000000000000543',\n '0x331d50e0b00fc1c32742f151e56b9b616227e23e00000000000000000000047c',\n '0x334c96d792e4b26b841d28f53235281cec1be1f200020000000000000000038a',\n '0x335d1709d4da9aca59d16328db5cd4ea66bfe06b0000000000000000000004d6',\n '0x395d8a1d9ad82b5abe558f8abbfe183b27138af40000000000000000000004e5',\n '0x3bb22fc9033b802f2ac47c18885f63476f158afc000000000000000000000483',\n '0x3c640f0d3036ad85afa2d5a9e32be651657b874f00000000000000000000046b',\n '0x3cdae4f12a67ba563499e102f309c73213cb241c000000000000000000000335',\n '0x3dbb8d974b82e82ce79c20c0f5995f4f1f533ede000000000000000000000470',\n '0x3f7a7fd7f214be45ec26820fd01ac3be4fc75aa70002000000000000000004c5',\n '0x3fcb7085b8f2f473f80bf6d879cae99ea4de934400000000000000000000056d',\n '0x41503c9d499ddbd1dcdf818a1b05e9774203bf46000000000000000000000594',\n '0x4228290ee9cab692938ff0b4ba303fbcdb68e9f200020000000000000000057d',\n '0x454ed96955d04d2f5cdd05e0fd1c77975bfe5307000000000000000000000410',\n '0x481c5fc05d63a58aa2f0f2aa417c021b5d419cb200000000000000000000056a',\n '0x483006684f422a9448023b2382615c57c5ecf18f000000000000000000000488',\n '0x4a82b580365cff9b146281ab72500957a849abdc000000000000000000000494',\n '0x4c81255cc9ed7062180ea99962fe05ac0d57350b0000000000000000000005a3',\n '0x4c8d2e60863e8d7e1033eda2b3d84e92a641802000000000000000000000040f',\n '0x4cbde5c4b4b53ebe4af4adb85404725985406163000000000000000000000595',\n '0x4ce0bd7debf13434d3ae127430e9bd4291bfb61f00020000000000000000038b',\n '0x4ce277df0feb5b4d07a0ca2adcf5326e4005239d000000000000000000000518',\n '0x4fd4687ec38220f805b6363c3c1e52d0df3b5023000200000000000000000473',\n '0x4fd63966879300cafafbb35d157dc5229278ed230000000000000000000000e9',\n '0x50cf90b954958480b8df7958a9e965752f62712400000000000000000000046f',\n '0x53bc3cba3832ebecbfa002c12023f8ab1aa3a3a0000000000000000000000411',\n '0x5a6a8cffb4347ff7fc484bf5f0f8a2e234d34255000200000000000000000275',\n '0x5b3240b6be3e7487d61cd1afdfc7fe4fa1d81e6400000000000000000000037b',\n '0x60683b05e9a39e3509d8fdb9c959f23170f8a0fa000000000000000000000489',\n '0x60d604890feaa0b5460b28a424407c24fe89374a0000000000000000000004fc',\n '0x639883476960a23b38579acfd7d71561a0f408cf000200000000000000000505',\n '0x652d486b80c461c397b0d95612a404da936f3db30000000000000000000000e7',\n '0x6667c6fa9f2b3fc1cc8d85320b62703d938e43850000000000000000000004fb',\n '0x6a1eb2e9b45e772f55bd9a34659a04b6f75da68700000000000000000000040d',\n '0x6c56e72c551b5ac4bf54a620a76077ca768c8fe40002000000000000000004da',\n '0x70b7d3b3209a59fb0400e17f67f3ee8c37363f4900020000000000000000018f',\n '0x7337224d59cb16c2dc6938cd45a7b2c60c865d6a0000000000000000000004d4',\n '0x74cbfaf94a3577c539a9dcee9870a6349a33b34f000000000000000000000534',\n '0x779d01f939d78a918a3de18cc236ee89221dfd4e0000000000000000000004c7',\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe',\n '0x804cdb9116a10bb78768d3252355a1b18067bf8f0000000000000000000000fb',\n '0x813e3fe1761f714c502d1d2d3a7cceb33f37f59d00000000000000000000040c',\n '0x82698aecc9e28e9bb27608bd52cf57f704bd1b83000000000000000000000336',\n '0x8a6b25e33b12d1bb6929a8793961076bd1f9d3eb0002000000000000000003e8',\n '0x8e6ec57a822c2f527f2df7c7d7d361df3e7530a1000000000000000000000498',\n '0x8f4063446f5011bc1c9f79a819efe87776f23704000000000000000000000197',\n '0x9001cbbd96f54a658ff4e6e65ab564ded76a543100000000000000000000050a',\n '0x9210f1204b5a24742eba12f710636d76240df3d00000000000000000000000fc',\n '0x9516a2d25958edb8da246a320f2c7d94a0dbe25d000000000000000000000519',\n '0x959216bb492b2efa72b15b7aacea5b5c984c3cca000200000000000000000472',\n '0x968024662b9566b42d78af23a0f441bc8723fa83000200000000000000000418',\n '0x99c88ad7dc566616548adde8ed3effa730eb6c3400000000000000000000049a',\n '0x9b1c8407a360443a9e5eca004713e4088fab8ac0000000000000000000000497',\n '0x9b692f571b256140a39a34676bffa30634c586e100000000000000000000059d',\n '0x9d7f992c900fbea0ec314bdd71b7cc1becf76a33000200000000000000000573',\n '0x9fb771d530b0ceba5160f7bfe2dd1e8b8aa1340300000000000000000000040e',\n '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d',\n '0xa1697f9af0875b63ddc472d6eebada8c1fab85680000000000000000000004f9',\n '0xa3823e50f20982656557a4a6a9c06ba5467ae9080000000000000000000000e6',\n '0xa718042e5622099e5f0ace4e7122058ab39e1bbe000200000000000000000475',\n '0xa8b103a10a94f4f2d7ed2fdcd5545e807557330700000000000000000000048e',\n '0xac5b4ef7ede2f2843a704e96dcaa637f4ba3dc3f00000000000000000000051d',\n '0xac976bb42cb0c85635644e8c7c74d0e0286aa61c0000000000000000000003cb',\n '0xae37d54ae477268b9997d4161b96b8200755935c000000000000000000000337',\n '0xae8535c23afedda9304b03c68a3563b75fc8f92b0000000000000000000005a0',\n '0xb0f75e97a114a4eb4a425edc48990e6760726709000000000000000000000198',\n '0xb5e3de837f869b0248825e0175da73d4e8c3db6b000200000000000000000474',\n '0xb841b062ea8ccf5c4cb78032e91de4ae875560420002000000000000000005b7',\n '0xb9bd68a77ccf8314c0dfe51bc291c77590c4e9e6000200000000000000000385',\n '0xbb6881874825e60e1160416d6c426eae65f2459e000000000000000000000592',\n '0xbc0f2372008005471874e426e86ccfae7b4de79d000000000000000000000485',\n '0xbf2ef8bdc2fc0f3203b3a01778e3ec5009aeef3300000000000000000000058d',\n '0xbfa413a2ff0f20456d57b643746133f54bfe0cd20000000000000000000004c3',\n '0xc2b021133d1b0cf07dba696fd5dd89338428225b000000000000000000000598',\n '0xc443c15033fcb6cf72cc24f1bda0db070ddd9786000000000000000000000593',\n '0xc50d4347209f285247bda8a09fc1c12ce42031c3000000000000000000000590',\n '0xc5dc1316ab670a2eed5716d7f19ced321191f38200000000000000000000056e',\n '0xc8c79fcd0e859e7ec81118e91ce8e4379a481ee6000000000000000000000196',\n '0xcaa052584b462198a5a9356c28bce0634d65f65c0000000000000000000004db',\n '0xcbfa4532d8b2ade2c261d3dd5ef2a2284f7926920000000000000000000004fa',\n '0xcfae6e251369467f465f13836ac8135bd42f8a56000000000000000000000591',\n '0xd4e7c1f3da1144c9e2cfd1b015eda7652b4a439900000000000000000000046a',\n '0xd6e355036f41dc261b3f1ed3bbc6003e87aadb4f000000000000000000000495',\n '0xd7edb56f63b2a0191742aea32df1f98ca81ed9c600000000000000000000058e',\n '0xd997f35c9b1281b82c8928039d14cddab5e13c2000000000000000000000019c',\n '0xdba274b4d04097b90a72b62467d828cefd708037000000000000000000000486',\n '0xdc063deafce952160ec112fa382ac206305657e60000000000000000000004c4',\n '0xdec02e6642e2c999af429f5ce944653cad15e093000000000000000000000469',\n '0xe03af00fabe8401560c1ff7d242d622a5b601573000000000000000000000493',\n '0xe0fcbf4d98f0ad982db260f86cf28b49845403c5000000000000000000000504',\n '0xe2d16b0a39f3fbb4389a0e8f1efcbecfb3d1e6e10000000000000000000005a7',\n '0xe4dc3c1998ac693d68f4c77476d7c815694c3e94000200000000000000000416',\n '0xe6bcc79f328eec93d4ec8f7ed35534d9ab549faa0000000000000000000000e8',\n '0xe8c56405bc405840154d9b572927f4197d110de10000000000000000000005a4',\n '0xeb486af868aeb3b6e53066abc9623b1041b42bc000000000000000000000046c',\n '0xeb567dde03f3da7fe185bdacd5ab495ab220769d000000000000000000000548',\n '0xec3626fee40ef95e7c0cbb1d495c8b67b34d398300000000000000000000053d',\n '0xf22ff21e17157340575158ad7394e068048dd98b0000000000000000000004b8',\n '0xf57c794f42da72b38c8f610ff3b5e8502e48cbde00000000000000000000055c',\n '0xf71d0774b214c4cf51e33eb3d30ef98132e4dbaa00000000000000000000046e',\n '0xfa24a90a3f2bbe5feea92b95cd0d14ce709649f900000000000000000000058f',\n '0xfd11ccdbdb7ab91cb9427a6d6bf570c95876d1950000000000000000000004c2',\n '0xfebb0bbf162e64fb9d0dfe186e517d84c395f016000000000000000000000502',\n '0xfef969638c52899f91781f1be594af6f40b99bad00000000000000000000047b',\n '0x02e139d53ebf4033bf78ab66c6a1e7f1f204487f0002000000000000000009f9',\n '0x03090a9811181a2afe830a3a0b467698ccf3a8b1000000000000000000000bf5',\n '0x0320c1c5b6df19a194d48882aaec1c72940081d9000000000000000000000a7d',\n '0x04b54ea92d73de2d62d651db7d9778f0c49157d8000200000000000000000ba2',\n '0x0503dd6b2d3dd463c9bef67fb5156870af63393e00000000000000000000042e',\n '0x0889b240a5876aae745ac19f1771853671dc5d36000000000000000000000b3f',\n '0x0bc54e914f53f98d16035f4f0d948f3e09c2fac0000200000000000000000bac',\n '0x0c06e87c7b88d998f645b91c1f53b51294b12bca000100000000000000000bb9',\n '0x10b040038f87219d9b42e025e3bd9b8095c87dd9000000000000000000000b11',\n '0x117a3d474976274b37b7b94af5dcade5c90c6e85000000000000000000000aca',\n '0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000a5f',\n '0x1379b816b9be611431d693290289c204720ca56d000100000000000000000b6f',\n '0x150e7b885bdfce974f2abe88a72fdbd692175c6f0002000000000000000009fd',\n '0x178e029173417b1f9c8bc16dcec6f697bc323746000000000000000000000758',\n '0x1aafc31091d93c3ff003cff5d2d8f7ba2e7284250000000000000000000003b3',\n '0x216690738aac4aa0c4770253ca26a28f0115c595000000000000000000000b2c',\n '0x216d6db0c28204014618482c369d7fbf0a8f3232000100000000000000000b60',\n '0x230ecdb2a7cee56d6889965a023aa0473d6da507000000000000000000000bf3',\n '0x252ff6a3a6fd7b5e8e999de8e3f5c3b306ed1401000200000000000000000bec',\n '0x25e57f4612912614e6c99616bd2abb9b5ae71e99000000000000000000000bf0',\n '0x2645b13fd2c5295296e94a76280b968bdcbbdfed000000000000000000000c11',\n '0x284eb68520c8fa83361c1a3a5910aec7f873c18b000000000000000000000ac9',\n '0x2c8dbe8eb86135d9f2f26d196748c088d47f73e7000200000000000000000a29',\n '0x31bccf9e28b94e5dacebaa67fe8bc1603cecd904000000000000000000000a01',\n '0x341068a547c3cde3c09e338714010dd01b32f93f000200000000000000000a34',\n '0x3db543faf7a92052de7860c5c9debabee59ed5bd000000000000000000000a62',\n '0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd00000000000000000000070d',\n '0x3efb91c4f9b103ee45885695c67794591916f34e000200000000000000000b43',\n '0x402cfdb7781fa85d52f425352661128250b79e12000000000000000000000be3',\n '0x43894de14462b421372bcfe445fa51b1b4a0ff3d000000000000000000000b36',\n '0x4739e50b59b552d490d3fdc60d200977a38510c0000000000000000000000b10',\n '0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b',\n '0x4a0b73f0d13ff6d43e304a174697e3d5cfd310a400020000000000000000091c',\n '0x4a77ef015ddcd972fd9ba2c7d5d658689d090f1a000000000000000000000b38',\n '0x4ae3661afa119892f0cc8c43edaf6a94989ac171000000000000000000000c06',\n '0x4ccb966d8246240afb7a1a24628efb930870b1c40002000000000000000009fc',\n '0x52cc8389c6b93d740325729cc7c958066cee4262000000000000000000000b0f',\n '0x5b77107fcdf2b41903bab2bc555d4fc14cf7667d000000000000000000000b32',\n '0x5bae72b75caab1f260d21bc028c630140607d6e8000000000000000000000ac6',\n '0x600bd01b6526611079e12e1ff93aba7a3e34226f0000000000000000000009e4',\n '0x63ce19ccd39930725b8a3d2733627804718ab83d000000000000000000000bf2',\n '0x64efad69f099813021b41f4cac6e749fd55e188f000000000000000000000b39',\n '0x6933ec1ca55c06a894107860c92acdfd2dd8512f000000000000000000000428',\n '0x6abe4e7a497b8293c258389c1b00d177e4f257ed00010000000000000000080d',\n '0x6c8c7fc50247a47038015eb1fd5dc105d05dafba000200000000000000000ba0',\n '0x7079a25dec33be61bbd81b2fb69b468e80d3e72c0000000000000000000009ff',\n '0x71bd10c2a590b5858f5576550c163976a48af906000000000000000000000b27',\n '0x7c82a23b4c48d796dee36a9ca215b641c6a8709d000000000000000000000acd',\n '0x7f4f4942f2a14b6ab7b08b10ada1aacede4ee8d4000200000000000000000b44',\n '0x86aef31951e0a3a54333bd9e72f9a95587d058c5000200000000000000000912',\n '0x882c7a84231484b3e9f3fd45ac04b1eb5d35b076000200000000000000000a91',\n '0x894c82800526e0391e709c0983a5aea3718b7f6d000000000000000000000ac5',\n '0x89b28a9494589b09dbccb69911c189f74fdadc5a000000000000000000000b33',\n '0x89bb15076c9f2d86aa98ec6cffc1a71e31c38953000000000000000000000bf1',\n '0x89f1146fee52b5d9166e9c83cc388b6d8f69f1380001000000000000000009e7',\n '0x8a819a4cabd6efcb4e5504fe8679a1abd831dd8f00000000000000000000042d',\n '0x8b58a1e7fff52001c22386c2918d45938a6a9be30001000000000000000008d9',\n '0x8b8225bfedebaf1708c55743acb4ad43fd4d0f21000200000000000000000918',\n '0x8fbd0f8e490735cfc3abf4f29cbddd5c3289b9a7000000000000000000000b5b',\n '0x8fd39252d683fdb60bddd4df4b53c9380b496d59000200000000000000000b45',\n '0x9321e2250767d79bab5aa06daa8606a2b3b7b4c5000000000000000000000bf4',\n '0x949a12b95ec5b80c375b98963a5d6b33b0d0efff0002000000000000000009fe',\n '0x9a020bdc2faff5bd24c6acc2020d01ff9f2c627a000000000000000000000ae2',\n '0x9cf9358300e34bf9373d30129a1e718d8d058b54000200000000000000000913',\n '0x9e34631547adcf2f8cefa0f5f223955c7b137571000000000000000000000ad5',\n '0xa5a935833f6a5312715f182733eab088452335d7000100000000000000000bee',\n '0xa5fe91dde37d8bf2dacacc0168b115d28ed03f84000000000000000000000b35',\n '0xa8bf1c584519be0184311c48adbdc4c15cb2e8c1000000000000000000000bf6',\n '0xab269164a10fab22bc87c39946da06c870b172d6000000000000000000000bfc',\n '0xac2cae8d2f78a4a8f92f20dbe74042cd0a8d5af3000000000000000000000be2',\n '0xae646817e458c0be890b81e8d880206710e3c44e000000000000000000000acb',\n '0xaef2c171dbe64b0c18977e16e70bfd29d4ee0256000000000000000000000ac8',\n '0xb0c830dceb4ef55a60192472c20c8bf19df03488000000000000000000000be1',\n '0xb266ac3b7c98d7bcb28731dac0ef42dba1b276be000000000000000000000be4',\n '0xb371aa09f5a110ab69b39a84b5469d29f9b22b76000000000000000000000b37',\n '0xb3d658d5b95bf04e2932370dd1ff976fe18dd66a000000000000000000000ace',\n '0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e',\n '0xb59be8f3c85a9dd6e2899103b6fbf6ea405b99a4000000000000000000000b34',\n '0xb878ecce26838fbba4f78cb5b791a0e09152c067000000000000000000000427',\n '0xb973ca96a3f0d61045f53255e319aedb6ed4924000000000000000000000042f',\n '0xbd4e35784c832d0f9049b54cb3609e5907c5b495000100000000000000000b14',\n '0xc55ec796a4debe625d95436a3531f4950b11bdcf000000000000000000000b3e',\n '0xc7e6389e364f4275eb442ef215ed21877028e2af000000000000000000000ac7',\n '0xc83b55bbd005f1f84906545fcdb145dee53523e0000200000000000000000b30',\n '0xcb21a9e647c95127ed784626485b3104cb28d0e7000000000000000000000425',\n '0xd00f9ca46ce0e4a63067c4657986f0167b0de1e5000000000000000000000b42',\n '0xd2f3b9e67c69762dd1c88f1d3dadd1649a190761000200000000000000000bf7',\n '0xd4accb350f9cf59fe3cf7a5ee6ed9ace6a568ea9000200000000000000000b75',\n '0xda1cd1711743e57dd57102e9e61b75f3587703da000000000000000000000acc',\n '0xdae301690004946424e41051ace1791083be42a1000000000000000000000b40',\n '0xde0a77ab6689b980c30306b10f9131a007e1af81000200000000000000000ba1',\n '0xe051605a83deae38d26a7346b100ef1ac2ef8a0b0000000000000000000003ce',\n '0xe1fb90d0d3b47e551d494d7ebe8f209753526b01000000000000000000000ac4',\n '0xe2272cddb2cc408e79e02a73d1db9acc24a843d5000200000000000000000ba7',\n '0xe2dc0e0f2c358d6e31836dee69a558ab8d1390e70000000000000000000009fa',\n '0xe4885ed2818cc9e840a25f94f9b2a28169d1aea7000000000000000000000b29',\n '0xe6909c2f18a29d97217a6146f045e1780606991f000100000000000000000bfe',\n '0xe78b25c06db117fdf8f98583cdaaa6c92b79e917000000000000000000000b2b',\n '0xea11645ac7d8f2def94c9d8d86bd766296c9b6b6000000000000000000000b3a',\n '0xeb480dbbdd921cd6c359e4cc4c65ddea6395e2a1000200000000000000000946',\n '0xed35f28f837e96f81240ebb82e0e3f518c7e8a2f000100000000000000000bb5',\n '0xf0211cceebe6fcc45052b4e57ee95d233f5669d2000100000000000000000c01',\n '0xf22a66046b5307842f21b311ecb4c462c24c0635000000000000000000000b15',\n '0xf28f17be00f8ca3c9b7f66a4aad5513757fb3341000200000000000000000b5a',\n '0xf42ed61450458ee4620f5ef4f29adb25a6ef0fb6000000000000000000000bf8',\n '0xf48f01dcb2cbb3ee1f6aab0e742c2d3941039d56000000000000000000000445',\n '0xf93579002dbe8046c43fefe86ec78b1112247bb8000000000000000000000759',\n '0xf984eb2b8a7ef780245a797a2fccd82f346409ca000000000000000000000a59',\n '0xfa2c0bd8327c99db5bde4c9e9e5cbf30946351bb000000000000000000000948',\n '0xff4ce5aaab5a627bf82f4a571ab1ce94aa365ea600000000000000000000075a',\n '0x1ac55c31dac78ca943cb8ebfca5945ce09e036e2000000000000000000000024',\n '0x225e0047671939a8d78e08ebd692788abe63f15c000000000000000000000009',\n '0x41211bba6d37f5a74b22e667533f080c7c7f3f1300000000000000000000000b',\n '0x4de21b365d6543661d0e105e579a34b963862497000200000000000000000045',\n '0x581ec1f5e7ced12b186deae32256adb53bdd5b08000000000000000000000001',\n '0x66f33ae36dd80327744207a48122f874634b3ada000100000000000000000013',\n '0xa3ed6f78edc29f69df8a0d16b1d1ccf9871f918c000000000000000000000032',\n '0xa611a551b95b205ccd9490657acf7899daee5db700000000000000000000002e',\n '0xb95829adbacd8af89e291dee78bc09e24de51d6b000000000000000000000043',\n '0xb973ca96a3f0d61045f53255e319aedb6ed49240000200000000000000000011',\n '0xba1a5b19d09a79dada039b1f974015c5a989d5fd000100000000000000000046',\n '0xbb9cd48d33033f5effbedec9dd700c7d7e1dcf5000000000000000000000000e',\n '0xd16f72b02da5f51231fde542a8b9e2777a478c8800000000000000000000000f',\n '0xd4015683b8153666190e0b2bec352580ebc4caca00000000000000000000000d',\n '0xe15cac1df3621e001f76210ab12a7f1a1691481f000000000000000000000044',\n '0xe7f88d7d4ef2eb18fcf9dd7216ba7da1c46f3dd600000000000000000000000a',\n '0xf48f01dcb2cbb3ee1f6aab0e742c2d3941039d56000200000000000000000012',\n '0xfedb19ec000d38d92af4b21436870f115db22725000000000000000000000010',\n '0xffff76a3280e95dc855696111c2562da09db2ac000000000000000000000000c',\n '0x00fcd3d55085e998e291a0005cedecf58ac14c4000020000000000000000047f',\n '0x077794c30afeccdf5ad2abc0588e8cee7197b71a000000000000000000000352',\n '0x117a3d474976274b37b7b94af5dcade5c90c6e85000000000000000000000381',\n '0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000353',\n '0x19b1c92631405a0a9495ccba0becf4f2e8e908bd000000000000000000000410',\n '0x1e550b7764da9638fdd32c8a701364de31f45ee800000000000000000000047c',\n '0x1fa7f727934226aedab636d62a084931b97d366b000000000000000000000411',\n '0x23ca0306b21ea71552b148cf3c4db4fc85ae19290000000000000000000000c9',\n '0x284eb68520c8fa83361c1a3a5910aec7f873c18b000000000000000000000380',\n '0x2a96254ca32020b20ed3506f8f75318da24709f9000200000000000000000456',\n '0x36942963e3b6f37ecc45a4e72349558514233f0000000000000000000000048a',\n '0x3f53a862919ccfa023cb6ace91378a79fb0f6bf500000000000000000000040f',\n '0x40af308e3d07ec769d85eb80afb116525ff4ac99000000000000000000000485',\n '0x418de00ae109e6f874d872658767866d680eaa1900000000000000000000047d',\n '0x45c4d1376943ab28802b995acffc04903eb5223f000000000000000000000470',\n '0x4689122d360c4725d244c5cfea22861333d862e6000100000000000000000468',\n '0x4739e50b59b552d490d3fdc60d200977a38510c0000000000000000000000409',\n '0x49a0e3334496442a9706e481617724e7e37eaa080000000000000000000003ff',\n '0x519cce718fcd11ac09194cff4517f12d263be067000000000000000000000382',\n '0x52cc8389c6b93d740325729cc7c958066cee4262000000000000000000000408',\n '0x567ecfcb22205d279bb8eed3e066989902bf03d5000000000000000000000452',\n '0x585d95df0231fa08aeee35ff0c16b92fd0ecdc3300020000000000000000045f',\n '0x5a7f39435fd9c381e4932fa2047c9a5136a5e3e7000000000000000000000400',\n '0x5bae72b75caab1f260d21bc028c630140607d6e8000000000000000000000350',\n '0x6cb787a419c3e6ee2e9ff365856c29cd10659113000000000000000000000474',\n '0x7c82a23b4c48d796dee36a9ca215b641c6a8709d000000000000000000000406',\n '0x81fc12c60ee5b753cf5fd0adc342dfb5f3817e3200000000000000000000035d',\n '0x894c82800526e0391e709c0983a5aea3718b7f6d00000000000000000000034f',\n '0x970712708a08e8fb152be4d81b2dc586923f5369000200000000000000000479',\n '0x9bf7c3b63c77b4b4f2717776f15a4bec1b532a280000000000000000000000c8',\n '0x9cebf13bb702f253abf1579294694a1edad00eaa000000000000000000000486',\n '0x9e34631547adcf2f8cefa0f5f223955c7b137571000000000000000000000407',\n '0x9fb7d6dcac7b6aa20108bad226c35b85a9e31b63000200000000000000000412',\n '0xa1ea76c42b2938cfa9abea12357881006c52851300000000000000000000048f',\n '0xa50f89e9f439fde2a6fe05883721a00475da3c4500000000000000000000048b',\n '0xa612b6aed2e7ca1a3a4f23fbca9128461bbb7718000000000000000000000274',\n '0xa8af146d79ac0bb981e4e0d8b788ec5711b1d5d000000000000000000000047b',\n '0xad28940024117b442a9efb6d0f25c8b59e1c950b00000000000000000000046f',\n '0xae646817e458c0be890b81e8d880206710e3c44e00000000000000000000039d',\n '0xaef2c171dbe64b0c18977e16e70bfd29d4ee0256000000000000000000000351',\n '0xbbf9d705b75f408cfcaee91da32966124d2c6f7d00000000000000000000047e',\n '0xbd724eb087d4cc0f61a5fed1fffaf937937e14de000000000000000000000473',\n '0xbe0f30217be1e981add883848d0773a86d2d2cd4000000000000000000000471',\n '0xc46be4b8bb6b5a3d3120660efae9c5416318ed40000000000000000000000472',\n '0xc69771058481551261709d8db44977e9afde645000010000000000000000042a',\n '0xc6eee8cb7643ec2f05f46d569e9ec8ef8b41b389000000000000000000000475',\n '0xcba9ff45cfb9ce238afde32b0148eb82cbe635620000000000000000000003fd',\n '0xcf8b555b7754556cf2ac2165e77ee23ed8517d7900020000000000000000045e',\n '0xd0dc20e6342db2de82692b8dc842301ff9121805000200000000000000000454',\n '0xd3d5d45f4edf82ba0dfaf061d230766032a10e07000200000000000000000413',\n '0xd6d20527c7b0669989ee082b9d3a1c63af742290000000000000000000000483',\n '0xda1cd1711743e57dd57102e9e61b75f3587703da0000000000000000000003fc',\n '0xe1fb90d0d3b47e551d494d7ebe8f209753526b0100000000000000000000034e',\n '0xee02583596aee94cccb7e8ccd3921d955f17982a00000000000000000000040a',\n '0xf984eb2b8a7ef780245a797a2fccd82f346409ca00000000000000000000034d',\n '0xff8f84e8c87532af96aef5582ee451572233678b000200000000000000000478',\n '0x054e7b0c73e1ee5aed6864fa511658fc2b54bcaa000000000000000000000015',\n '0x3f1a2c4a3a751f6626bd90ef16e104f0772d4d6b00020000000000000000001b',\n '0x7275c131b1f67e8b53b4691f92b0e35a4c1c6e22000000000000000000000010',\n '0xa154009870e9b6431305f19b09f9cfd7284d4e7a000000000000000000000013',\n '0xa1d14d922a575232066520eda11e27760946c991000000000000000000000012',\n '0xa826a114b0c7db4d1ff4a4be845a78998c64564c000000000000000000000008',\n '0xea67626e1f0b59e0d172a04f5702ef90bcdf440c00000000000000000000000f',\n '0xeb496161099d45b3ea4892408ef745c6182eb56e00000000000000000000000e',\n '0xece571847897fd61e764d455dc15cf1cd9de8d6f000000000000000000000014',\n '0xed3e2f496cbcd8e212192fb8d1499842f04a0d19000000000000000000000009',\n '0x02c9dcb975262719a61f9b40bdf0987ead9add3a000000000000000000000006',\n '0x16c9a4d841e88e52b51936106010f27085a529ec00000000000000000000000c',\n '0x32be2d0ddeaf3333501b24a28668ce373ba8e763000200000000000000000014',\n '0x32f03464fdf909fdf3798f87ff3712b10c59bd86000000000000000000000005',\n '0x4b718e0e2fea1da68b763cd50c446fba03ceb2ea00000000000000000000000b',\n '0x68a69c596b3839023c0e08d09682314f582314e5000200000000000000000011',\n '0x6f34a44fce1506352a171232163e7716dd073ade000200000000000000000015',\n '0x9e2d87f904862671eb49cb358e74284762cc9f42000200000000000000000013',\n '0xac4b72c01072a52b73ca71105504f1372efcce0d000000000000000000000003',\n '0xbfd65c6160cfd638a85c645e6e6d8acac5dac935000000000000000000000004',\n '0xe274c9deb6ed34cfe4130f8d0a8a948dea5bb28600000000000000000000000d',\n];\n","import { TokenPriceService } from '@balancer-labs/sor';\nimport { gql, request } from 'graphql-request';\nimport { Network } from '@/types';\n\nexport class ApiTokenPriceService implements TokenPriceService {\n private chainKey: string;\n\n private balancerApiUrl = 'https://api-v3.balancer.fi/';\n\n private tokenPriceQuery = gql`\n query queryTokenPrices($chainKey: GqlChain!) {\n tokenGetCurrentPrices(chains: [$chainKey]) {\n address\n price\n }\n }\n `;\n\n constructor(private readonly chainId: number) {\n this.chainKey = Network[chainId];\n }\n async getNativeAssetPriceInToken(tokenAddress: string): Promise {\n const { tokenGetCurrentPrices: tokenPrices } = await request(\n this.balancerApiUrl,\n this.tokenPriceQuery,\n {\n chainKey: this.chainKey,\n }\n );\n const tokenPriceUsd = (\n tokenPrices as { address: string; price: number }[]\n ).find(\n ({ address }) => address.toLowerCase() === tokenAddress.toLowerCase()\n );\n if (!tokenPriceUsd) {\n throw new Error('Token Price not found in the API');\n }\n const nativeAssetPriceUsd = (\n tokenPrices as { address: string; price: number }[]\n ).find(\n ({ address }) =>\n address.toLowerCase() ===\n NativeAssetAddress[this.chainKey as keyof typeof NativeAssetAddress]\n );\n if (!nativeAssetPriceUsd) {\n throw new Error('Native Token Price not found in the API');\n }\n const tokenPriceInNativeAsset =\n tokenPriceUsd.price / nativeAssetPriceUsd.price;\n return String(tokenPriceInNativeAsset);\n }\n}\n\nenum NativeAssetAddress {\n MAINNET = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n POLYGON = '0x0000000000000000000000000000000000001010',\n ARBITRUM = '0x912ce59144191c1204e64559fe8253a0e49e6548',\n AVALANCHE = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n BASE = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n FANTOM = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n GNOSIS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n OPTIMISM = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n ZKEVM = '0xa2036f0538221a77a3937f1379699f44945018d0',\n}\n","export function getCoingeckoApiBaseUrl(isDemoApi = true): string {\n if (isDemoApi) {\n return 'https://api.coingecko.com/api/v3/';\n }\n return 'https://pro-api.coingecko.com/api/v3/';\n}\n\nexport function getCoingeckoApiKeyHeaderName(isDemoApi = true): string {\n if (isDemoApi) {\n return 'x-cg-demo-api-key';\n }\n return 'x-cg-pro-api-key';\n}\n","import { TokenPriceService } from '@balancer-labs/sor';\nimport axios from 'axios';\nimport { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { Network, BalancerNetworkConfig, CoingeckoConfig } from '@/types';\nimport {\n getCoingeckoApiBaseUrl,\n getCoingeckoApiKeyHeaderName,\n} from '@/lib/utils/coingecko-api';\n\nexport class CoingeckoTokenPriceService implements TokenPriceService {\n private readonly urlBase: string;\n private readonly apiKey: string;\n private readonly coingeckoApiKeyHeaderName: string;\n constructor(private readonly chainId: number, coingecko: CoingeckoConfig) {\n this.urlBase = `${getCoingeckoApiBaseUrl(\n coingecko?.isDemoApiKey\n )}simple/token_price/${this.platformId}?vs_currencies=${\n this.nativeAssetId\n }`;\n this.coingeckoApiKeyHeaderName = getCoingeckoApiKeyHeaderName(\n coingecko?.isDemoApiKey\n );\n this.apiKey = coingecko.coingeckoApiKey;\n }\n\n public async getNativeAssetPriceInToken(\n tokenAddress: string\n ): Promise {\n const ethPerToken = await this.getTokenPriceInNativeAsset(tokenAddress);\n\n // We get the price of token in terms of ETH\n // We want the price of 1 ETH in terms of the token base units\n return `${1 / parseFloat(ethPerToken)}`;\n }\n\n /**\n * @dev Assumes that the native asset has 18 decimals\n * @param tokenAddress - the address of the token contract\n * @returns the price of 1 ETH in terms of the token base units\n */\n async getTokenPriceInNativeAsset(tokenAddress: string): Promise {\n const endpoint = `${this.urlBase}&contract_addresses=${tokenAddress}`;\n\n const { data } = await axios.get(endpoint, {\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '',\n },\n });\n\n if (\n data[tokenAddress.toLowerCase()] === undefined ||\n data[tokenAddress.toLowerCase()][this.nativeAssetId] === undefined\n ) {\n throw Error('No price returned from Coingecko');\n }\n\n return data[tokenAddress.toLowerCase()][this.nativeAssetId];\n }\n\n private get platformId(): string {\n const networkConfig: BalancerNetworkConfig =\n BALANCER_NETWORK_CONFIG[this.chainId as Network];\n return networkConfig.thirdParty.coingecko.platformId || '2';\n }\n\n private get nativeAssetId(): string {\n const networkConfig: BalancerNetworkConfig =\n BALANCER_NETWORK_CONFIG[this.chainId as Network];\n return networkConfig.thirdParty.coingecko.nativeAssetId || '';\n }\n}\n","import { SOR, SorConfig, TokenPriceService } from '@balancer-labs/sor';\nimport { Provider, JsonRpcProvider } from '@ethersproject/providers';\nimport { SubgraphPoolDataService } from './pool-data/subgraphPoolDataService';\nimport {\n SubgraphClient,\n createSubgraphClient,\n} from '@/modules/subgraph/subgraph';\nimport {\n BalancerNetworkConfig,\n BalancerSdkConfig,\n BalancerSdkSorConfig,\n CoingeckoConfig,\n} from '@/types';\nimport { SubgraphTokenPriceService } from './token-price/subgraphTokenPriceService';\nimport { getNetworkConfig } from '@/modules/sdk.helpers';\nimport { POOLS_TO_IGNORE } from '@/lib/constants/poolsToIgnore';\nimport { ApiTokenPriceService } from '@/modules/sor/token-price/apiTokenPriceService';\nimport { CoingeckoTokenPriceService } from '@/modules/sor/token-price/coingeckoTokenPriceService';\n\nexport class Sor extends SOR {\n constructor(sdkConfig: BalancerSdkConfig) {\n const network = getNetworkConfig(sdkConfig);\n const sorConfig = Sor.getSorConfig(sdkConfig);\n const sorNetworkConfig = Sor.getSorNetworkConfig(network);\n const provider = new JsonRpcProvider(\n sdkConfig.rpcUrl,\n sdkConfig.network as number\n );\n const subgraphClient = createSubgraphClient(network.urls.subgraph);\n\n const poolDataService = Sor.getPoolDataService(\n network,\n sorConfig,\n provider,\n subgraphClient\n );\n\n const tokenPriceService = Sor.getTokenPriceService(\n network,\n sorConfig,\n subgraphClient,\n sdkConfig.coingecko\n );\n\n super(provider, sorNetworkConfig, poolDataService, tokenPriceService);\n }\n\n private static getSorConfig(config: BalancerSdkConfig): BalancerSdkSorConfig {\n return {\n tokenPriceService: 'api',\n poolDataService: 'subgraph',\n fetchOnChainBalances: true,\n ...config.sor,\n };\n }\n\n private static getSorNetworkConfig(\n network: BalancerNetworkConfig\n ): SorConfig {\n return {\n ...network,\n vault: network.addresses.contracts.vault,\n weth: network.addresses.tokens.wrappedNativeAsset,\n lbpRaisingTokens: network.addresses.tokens?.lbpRaisingTokens,\n wETHwstETH: network.pools.wETHwstETH,\n connectingTokens: network.sorConnectingTokens,\n triPathMidPoolIds: network.sorTriPathMidPoolIds,\n };\n }\n\n private static getPoolDataService(\n network: BalancerNetworkConfig,\n sorConfig: BalancerSdkSorConfig,\n provider: Provider,\n subgraphClient: SubgraphClient\n ) {\n // For SOR we want to ignore all configured pools (for Vault/Simulation we don't)\n const allPoolsToIgnore = [\n ...(network.poolsToIgnore ?? []),\n ...POOLS_TO_IGNORE,\n ];\n return typeof sorConfig.poolDataService === 'object'\n ? sorConfig.poolDataService\n : new SubgraphPoolDataService(\n subgraphClient,\n provider,\n { ...network, poolsToIgnore: allPoolsToIgnore },\n sorConfig\n );\n }\n\n private static getTokenPriceService(\n network: BalancerNetworkConfig,\n sorConfig: BalancerSdkSorConfig,\n subgraphClient: SubgraphClient,\n coingeckoConfig?: CoingeckoConfig\n ): TokenPriceService {\n if (sorConfig.tokenPriceService === 'coingecko' && coingeckoConfig) {\n return new CoingeckoTokenPriceService(network.chainId, coingeckoConfig);\n }\n if (typeof sorConfig.tokenPriceService === 'object') {\n return sorConfig.tokenPriceService;\n } else if (sorConfig.tokenPriceService === 'subgraph') {\n return new SubgraphTokenPriceService(\n subgraphClient,\n network.addresses.tokens.wrappedNativeAsset\n );\n }\n return new ApiTokenPriceService(network.chainId);\n }\n}\n","import {\n QuerySimpleFlashSwapParameters,\n QuerySimpleFlashSwapResponse,\n SimpleFlashSwapParameters,\n SwapType,\n} from '../types';\nimport { queryBatchSwap } from '../queryBatchSwap';\nimport { BatchSwap } from '../types';\nimport { sum } from 'lodash';\n\nfunction checkSimpleFlashSwapParams(params: {\n poolIds: string[];\n assets: string[];\n}) {\n if (params.poolIds.length > 2) {\n throw new Error('Simple flash swap only supports a maximum of two pools');\n }\n\n if (params.assets.length > 2) {\n throw new Error(\n 'Simple flash swap only supports a maximum of to two assets (tokens)'\n );\n }\n}\n\nfunction createSwaps(\n poolIds: SimpleFlashSwapParameters['poolIds'],\n amount: string\n): BatchSwap['swaps'] {\n return [\n {\n poolId: poolIds[0],\n assetInIndex: 0,\n assetOutIndex: 1,\n amount,\n userData: '0x',\n },\n {\n poolId: poolIds[1],\n assetInIndex: 1,\n assetOutIndex: 0,\n amount: '0',\n userData: '0x',\n },\n ];\n}\n\nexport function convertSimpleFlashSwapToBatchSwapParameters({\n poolIds,\n assets,\n flashLoanAmount,\n walletAddress,\n}: SimpleFlashSwapParameters & {\n walletAddress: string;\n}): BatchSwap {\n checkSimpleFlashSwapParams({ poolIds, assets });\n\n const swaps = createSwaps(poolIds, flashLoanAmount);\n\n const funds = {\n sender: walletAddress,\n fromInternalBalance: false,\n recipient: walletAddress,\n toInternalBalance: false,\n };\n\n const limits = ['0', '0'];\n\n const deadline = '999999999999999999';\n\n return {\n kind: SwapType.SwapExactIn,\n swaps,\n assets,\n funds,\n limits,\n deadline,\n };\n}\n\nfunction deltaToExpectedProfit(delta: string) {\n return Number(delta) * -1;\n}\n\nfunction calcProfit(profits: string[]) {\n return sum(profits);\n}\n\n/**\n * Simple interface to test if a simple flash swap is valid and see potential profits.\n *\n * A \"simple\" flash swap is an arbitrage executed with only two tokens and two pools,\n * swapping in the first pool and then back in the second pool for a profit. For more\n * complex flash swaps, you will have to use the batch swap method.\n *\n * Learn more: A [Flash Swap](https://dev.balancer.fi/resources/swaps/flash-swaps).\n *\n * _NB: This method doesn't execute a flashSwap\n *\n * @param {SimpleFlashSwapParameters} params - BatchSwap information used for query.\n * @param {Contract} params.vaultContract - the ethersjs contract for the Balancer Vault.\n * @param {string} params.flashLoanAmount - initial input amount for the flash loan (first asset)\n * @param {string[]} params.poolIds - array of Balancer pool ids\n * @param {string[]} params.assets - array of token addresses\n * @returns {Promise} Returns an ethersjs transaction response\n */\nexport async function querySimpleFlashSwap(\n params: QuerySimpleFlashSwapParameters\n): Promise {\n checkSimpleFlashSwapParams(params);\n\n const [tokenAddress0, tokenAddress1] = params.assets;\n\n try {\n const deltas = await queryBatchSwap(\n params.vaultContract,\n SwapType.SwapExactIn,\n createSwaps(params.poolIds, params.flashLoanAmount),\n params.assets\n );\n\n const profits = {\n [tokenAddress0]: deltaToExpectedProfit(deltas[0]).toString(),\n [tokenAddress1]: deltaToExpectedProfit(deltas[1]).toString(),\n };\n\n return {\n profits,\n isProfitable:\n calcProfit([profits[tokenAddress0], profits[tokenAddress1]]) > 0,\n };\n } catch (err) {\n throw `Failed to querySimpleFlashSwap: ${err}`;\n }\n}\n","import { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { JsonFragment } from '@ethersproject/abi';\nimport { networkAddresses } from '@/lib/constants/config';\nimport { BatchRelayerLibrary__factory } from '@/contracts';\n\n/**\n * Maps SOR data to get the tokenIn used in swaps.\n * Logic related to a relayer wrapping and unwrapping tokens.\n * SOR returns list of already wrapped tokenAddresses used in the swap.\n * However tokenIn defined as an input is the unwrapped token.\n * Note: tokenAddresses are transformed in SOR lib wrapInfo.setWrappedInfo\n * TODO: Once PR is merged, this table can be removed.\n */\ntype WrappedList = {\n [key: string]: string;\n};\n\nconst underlyingToWrappedMap: WrappedList = {\n // stETH => wstETH\n '0xae7ab96520de3a18e5e111b5eaab095312d7fe84':\n '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',\n\n // AMPL => WAMPL\n '0xd46ba6d942050d489dbd938a2c909a5d5039a161':\n '0xedb171c18ce90b633db442f2a6f72874093b49ef',\n\n // aAMPL -> ubAAMPL\n '0x1e6bb68acec8fefbd87d192be09bb274170a0548':\n '0xF03387d8d0FF326ab586A58E0ab4121d106147DF',\n};\n\n/**\n * Vault swaps are operating on wrapped tokens. When user is sending an unwrapped token, it's wrapped in a relayer.\n * SOR is returning an array of tokens already wrapped.\n * Converts tokenIn to match tokenIn used in a swap.\n *\n * TODO: add tokenIn and tokenOut addressed used for swap in the SOR results as tokenInForSwap, tokenOutForSwap\n *\n * @param token token address\n * @returns wrapped token address\n */\nfunction tokenForSwaps(token: string): string {\n let wrapped = token;\n // eslint-disable-next-line no-prototype-builtins\n if (underlyingToWrappedMap.hasOwnProperty(token)) {\n wrapped = underlyingToWrappedMap[token as keyof WrappedList];\n }\n return wrapped;\n}\n\nexport enum Relayers {\n vault = 1,\n lido = 2,\n}\n\nexport interface SwapRelayer {\n id: Relayers;\n address: string;\n}\n\n/**\n * Resolves a contract address for sending swap transaction to.\n * Balancer is using relayers to automatically wrap / unwrap tokens not compatibile with ERC20.\n */\nfunction relayerResolver(\n assetIn: string,\n assetOut: string,\n chainId: number\n): SwapRelayer {\n const { tokens, contracts } = networkAddresses(chainId);\n\n let to = {\n id: Relayers.vault,\n address: contracts.vault,\n };\n\n if (tokens.stETH && contracts.lidoRelayer)\n if ([assetIn, assetOut].includes(tokens.stETH))\n to = {\n id: Relayers.lido,\n address: contracts.lidoRelayer,\n };\n\n return to;\n}\n\nfunction swapFragment(relayer: SwapRelayer): JsonFragment[] {\n if (relayer.id === Relayers.lido)\n return BatchRelayerLibrary__factory.abi.filter(\n (f) =>\n f.type === 'function' &&\n f.name &&\n ['swap', 'batchSwap'].includes(f.name)\n );\n else\n return Vault__factory.abi.filter(\n (f) =>\n f.type === 'function' &&\n f.name &&\n ['swap', 'batchSwap'].includes(f.name)\n );\n}\n\nfunction batchSwapFragment(\n assetIn: string,\n assetOut: string,\n chainId: number\n): JsonFragment[] {\n const { tokens, contracts } = networkAddresses(chainId);\n if (tokens.stETH && contracts.lidoRelayer) {\n if ([assetIn, assetOut].includes(tokens.stETH)) {\n const relayerSignaturesForSwaps = BatchRelayerLibrary__factory.abi.filter(\n (f) => f.type === 'function' && f.name === 'batchSwap'\n );\n return relayerSignaturesForSwaps;\n }\n }\n const vaultSignaturesForSwaps = Vault__factory.abi.filter(\n (f) => f.type === 'function' && f.name === 'batchSwap'\n );\n return vaultSignaturesForSwaps;\n}\n\nexport { tokenForSwaps, relayerResolver, swapFragment, batchSwapFragment };\n","import { SwapInfo } from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { tokenForSwaps } from './swap_utils';\nimport { SwapType } from '../types';\n\ninterface AmountForLimit {\n amount: BigNumber;\n max: (slippage: number) => BigNumber;\n min: (slippage: number) => BigNumber;\n}\n\ninterface SDKSwapInfo extends SwapInfo {\n /** Name mapping to improve readability. */\n amountIn: BigNumber;\n amountOut: BigNumber;\n /** Name mapping for amounts used specifically for limits calculations. */\n amountInForLimits: AmountForLimit;\n amountOutForLimits: AmountForLimit;\n /** Wrapped token addresses used in the swap. */\n tokenInForSwaps: string;\n tokenOutFromSwaps: string;\n}\n\n/** Applies slippage to a number */\nfunction amountForLimit(amount: BigNumber): AmountForLimit {\n return {\n amount,\n max: (maxSlippage: number): BigNumber => {\n return amount.mul(1e4 + maxSlippage).div(1e4);\n },\n min: (maxSlippage: number): BigNumber => {\n return amount.mul(1e4 - maxSlippage).div(1e4);\n },\n };\n}\n\nfunction decorateSorSwapInfo(\n swapInfo: SwapInfo,\n swapType: SwapType\n): SDKSwapInfo {\n const amountIn =\n swapType === SwapType.SwapExactIn\n ? swapInfo.swapAmount\n : swapInfo.returnAmount;\n const amountOut =\n swapType === SwapType.SwapExactIn\n ? swapInfo.returnAmount\n : swapInfo.swapAmount;\n const amountInForLimits =\n swapType === SwapType.SwapExactIn\n ? swapInfo.swapAmountForSwaps || swapInfo.swapAmount\n : swapInfo.returnAmountFromSwaps || swapInfo.returnAmount;\n const amountOutForLimits =\n swapType === SwapType.SwapExactIn\n ? swapInfo.returnAmountFromSwaps || swapInfo.returnAmount\n : swapInfo.swapAmountForSwaps || swapInfo.swapAmount;\n const tokenInForSwaps = tokenForSwaps(swapInfo.tokenIn);\n const tokenOutFromSwaps = tokenForSwaps(swapInfo.tokenOut);\n\n return {\n ...swapInfo,\n amountIn,\n amountOut,\n amountInForLimits: amountForLimit(amountInForLimits),\n amountOutForLimits: amountForLimit(amountOutForLimits),\n tokenInForSwaps,\n tokenOutFromSwaps,\n };\n}\n\nexport { SDKSwapInfo, tokenForSwaps, decorateSorSwapInfo };\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { FundManagement, SingleSwap, Swap, SwapType } from '../types';\nimport { Interface, JsonFragment } from '@ethersproject/abi';\nimport { SwapInfo } from '@balancer-labs/sor';\nimport { SDKSwapInfo, decorateSorSwapInfo } from './swap_info_decorator';\nimport { AddressZero } from '@ethersproject/constants';\nimport { swapFragment, relayerResolver, SwapRelayer } from './swap_utils';\n\nclass SingleSwapBuilder {\n private swapInfo: SDKSwapInfo;\n funds?: FundManagement;\n limit?: BigNumberish;\n deadline?: string;\n relayer: SwapRelayer;\n readonly functionName = 'swap';\n\n /**\n * Building swap transaction data\n *\n * @param swapInfo SOR result\n * @param kind\n * @param chainId used to resolve relayer addresses\n */\n constructor(\n swapInfo: SwapInfo,\n private readonly kind: SwapType,\n private readonly chainId: number\n ) {\n this.swapInfo = decorateSorSwapInfo(swapInfo, kind);\n this.relayer = relayerResolver(\n this.swapInfo.tokenIn,\n this.swapInfo.tokenOut,\n this.chainId\n );\n }\n\n setFunds(sender: string, recipient?: string): void {\n this.funds = {\n sender,\n recipient: recipient || sender,\n fromInternalBalance: false,\n toInternalBalance: false,\n };\n }\n\n /**\n * @param deadline block timestamp\n */\n setDeadline(deadline: string): void {\n this.deadline = deadline;\n }\n\n get amount(): BigNumber {\n return this.kind === SwapType.SwapExactOut\n ? this.swapInfo.amountOutForLimits.amount\n : this.swapInfo.amountInForLimits.amount;\n }\n\n /**\n * Calculates the limit for token amount.\n * https://dev.balancer.fi/guides/swaps/single-swaps\n * https://dev.balancer.fi/resources/swaps/single-swap\n *\n * For swap:\n * The meaning of limit depends on the value of kind\n * GIVEN_IN: The minimum amount of tokens we would accept to receive from the swap.\n * GIVEN_OUT: The maximum amount of tokens we would be sending to swap.\n *\n * @param maxSlippage [bps], eg: 1 === 0.01%, 100 === 1%\n */\n setLimits(maxSlippage: number): void {\n this.limit =\n this.kind === SwapType.SwapExactIn\n ? this.swapInfo.amountOutForLimits.min(maxSlippage).toString()\n : this.swapInfo.amountInForLimits.max(maxSlippage).toString();\n }\n\n get singleSwap(): SingleSwap {\n const poolId = this.swapInfo.swaps[0].poolId;\n const kind = this.kind;\n const assetIn = this.swapInfo.tokenInForSwaps;\n const assetOut = this.swapInfo.tokenOutFromSwaps;\n const amount = this.amount.toString();\n const userData = '0x';\n\n return {\n poolId,\n kind,\n assetIn,\n assetOut,\n amount,\n userData,\n };\n }\n\n attributes(): Swap {\n if (!this.funds || !this.limit || !this.deadline) {\n throw new Error('Uninitialized arguments');\n }\n\n // TODO: Raise errors when some parameters are missing\n let attrs: Swap = {\n request: this.singleSwap,\n funds: this.funds,\n limit: this.limit,\n deadline: this.deadline,\n };\n\n // TODO: Call this logic from a relayer module maybe? Do we actually need to do that?\n // additional parameters on a contract:\n // https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/standalone-utils/contracts/relayer/VaultActions.sol#L44\n const fragment = this.fragment();\n if (fragment[0].inputs && fragment[0].inputs?.length > 4) {\n attrs = {\n ...attrs,\n value: '0',\n outputReference: '0',\n };\n }\n\n return attrs;\n }\n\n data(): string {\n const contractInterface = new Interface(this.fragment());\n\n return contractInterface.encodeFunctionData(\n 'swap',\n Object.values(this.attributes())\n );\n }\n\n value(maxSlippage: number): BigNumber {\n let amount = BigNumber.from(0);\n if (this.swapInfo.tokenIn === AddressZero)\n amount =\n this.kind === SwapType.SwapExactIn\n ? this.swapInfo.amountIn\n : this.swapInfo.amountInForLimits.max(maxSlippage);\n return amount;\n }\n\n to(): string {\n return this.relayer.address;\n }\n\n private fragment(): JsonFragment[] {\n return swapFragment(this.relayer).filter(\n (f) => f.name === this.functionName\n );\n }\n}\n\nexport { SingleSwapBuilder };\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { BatchSwap, FundManagement, SwapType } from '../types';\nimport { Interface, JsonFragment } from '@ethersproject/abi';\nimport { SwapInfo } from '@balancer-labs/sor';\nimport { SDKSwapInfo, decorateSorSwapInfo } from './swap_info_decorator';\nimport { AddressZero } from '@ethersproject/constants';\nimport { swapFragment, relayerResolver, SwapRelayer } from './swap_utils';\n\nclass BatchSwapBuilder {\n private swapInfo: SDKSwapInfo;\n funds?: FundManagement;\n limits?: BigNumberish[];\n deadline?: string;\n relayer: SwapRelayer;\n readonly functionName = 'batchSwap';\n\n /**\n * Building swap transaction data\n *\n * @param swapInfo SOR result\n * @param kind\n */\n constructor(\n swapInfo: SwapInfo,\n private readonly kind: SwapType,\n private readonly chainId: number\n ) {\n this.swapInfo = decorateSorSwapInfo(swapInfo, kind);\n this.relayer = relayerResolver(\n this.swapInfo.tokenIn,\n this.swapInfo.tokenOut,\n this.chainId\n );\n }\n\n setFunds(sender: string, recipient?: string): void {\n this.funds = {\n sender,\n recipient: recipient || sender,\n fromInternalBalance: false,\n toInternalBalance: false,\n };\n }\n\n /**\n * @param deadline block timestamp\n */\n setDeadline(deadline: string): void {\n this.deadline = deadline;\n }\n\n /**\n * Given IN it's the minimum amount we are willing to accept.\n * Given OUT it's the fixed amount defined as output.\n */\n minAmountOut(maxSlippage: number): BigNumber {\n return this.kind === SwapType.SwapExactIn\n ? this.swapInfo.amountOutForLimits.min(maxSlippage)\n : this.swapInfo.amountOutForLimits.amount;\n }\n\n /**\n * Given IN it's the fixed amount we define as input.\n * Given OUT it's the maximum amount we are willing to pay for the request.\n */\n maxAmountIn(maxSlippage: number): BigNumber {\n return this.kind === SwapType.SwapExactOut\n ? this.swapInfo.amountInForLimits.max(maxSlippage)\n : this.swapInfo.amountInForLimits.amount;\n }\n\n /**\n * Calculates limits for token amount.\n * Maximum number of tokens to send is a positive number\n * Minimum amount of tokens to receive is a negative number\n * https://dev.balancer.fi/guides/swaps/batch-swaps\n * https://dev.balancer.fi/resources/swaps/batch-swaps#multi-hop-examples\n *\n * For batchSwap:\n * An array of of the maximum net amounts of each asset which can be taken to perform the swap.\n * Should the total trade require more than limits[i] tokens to be taken from sender for any i\n * then the transaction shall fail.\n *\n * @param maxSlippage [bps], eg: 1 === 0.01%, 100 === 1%\n */\n setLimits(maxSlippage: number): void {\n // TODO: This implementation handles only a single input. We might want to extend it for multiple token inputs\n this.limits = this.swapInfo.tokenAddresses\n .map((token) => {\n let amount = BigNumber.from(0);\n if (token === this.swapInfo.tokenInForSwaps) {\n amount = this.maxAmountIn(maxSlippage);\n }\n if (token === this.swapInfo.tokenOutFromSwaps) {\n amount = this.minAmountOut(maxSlippage).mul(-1);\n }\n return amount;\n })\n .map((limit) => limit.toString().split('.')[0]);\n }\n\n attributes(): BatchSwap {\n // TODO: Raise errors when some parameters are missing\n if (!this.funds || !this.limits || !this.deadline) {\n throw new Error('Uninitialized arguments');\n }\n\n let attrs: BatchSwap = {\n kind: this.kind,\n swaps: this.swapInfo.swaps,\n assets: this.swapInfo.tokenAddresses,\n funds: this.funds,\n limits: this.limits,\n deadline: this.deadline,\n };\n\n const fragment = this.fragment();\n\n // TODO: Call this logic from a relayer module maybe? Do we actually need to do that?\n // additional parameters on a contract:\n // https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/standalone-utils/contracts/relayer/VaultActions.sol#L67\n if (fragment[0].inputs && fragment[0].inputs?.length > 6) {\n attrs = {\n ...attrs,\n value: '0',\n outputReferences: [],\n };\n }\n\n return attrs;\n }\n\n data(): string {\n const contractInterface = new Interface(this.fragment());\n\n return contractInterface.encodeFunctionData(\n 'batchSwap',\n Object.values(this.attributes())\n );\n }\n\n value(maxSlippage: number): BigNumber {\n let amount = BigNumber.from(0);\n if (this.swapInfo.tokenIn === AddressZero)\n amount = this.maxAmountIn(maxSlippage);\n return amount;\n }\n\n to(): string {\n return this.relayer.address;\n }\n\n private fragment(): JsonFragment[] {\n return swapFragment(this.relayer).filter(\n (f) => f.name === this.functionName\n );\n }\n}\n\nexport { BatchSwapBuilder };\n","import { SOR, SubgraphPoolBase, SwapInfo, SwapTypes } from '@balancer-labs/sor';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { Vault } from '@/contracts/Vault';\nimport {\n BatchSwap,\n QuerySimpleFlashSwapParameters,\n QuerySimpleFlashSwapResponse,\n SimpleFlashSwapParameters,\n FindRouteParameters,\n BuildTransactionParameters,\n SwapAttributes,\n SwapType,\n TokenAmounts,\n SwapsOptions,\n} from './types';\nimport { queryBatchSwap, getSorSwapInfo } from './queryBatchSwap';\nimport { balancerVault } from '@/lib/constants/config';\nimport { getLimitsForSlippage } from './helpers';\nimport { BalancerSdkConfig } from '@/types';\nimport { SwapInput } from './types';\nimport { Sor } from '@/modules/sor/sor.module';\nimport {\n convertSimpleFlashSwapToBatchSwapParameters,\n querySimpleFlashSwap,\n} from './flashSwap';\nimport {\n SingleSwapBuilder,\n BatchSwapBuilder,\n} from '@/modules/swaps/swap_builder';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport { GraphQLArgs } from '@/lib/graphql';\n\nconst buildRouteDefaultOptions = {\n maxPools: 4,\n gasPrice: '1',\n deadline: '999999999999999999',\n maxSlippage: 10, // in bspt, eg: 10 = 0.1%\n};\n\nexport class Swaps {\n readonly sor: SOR;\n chainId: number;\n vaultContract: Vault;\n\n // TODO: sorOrConfig - let's make it more predictable and always pass configuration explicitly\n constructor(sorOrConfig: SOR | BalancerSdkConfig) {\n if (sorOrConfig instanceof SOR) {\n this.sor = sorOrConfig;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.chainId = (this.sor.provider)['_network']['chainId'];\n } else {\n this.sor = new Sor(sorOrConfig);\n if (typeof sorOrConfig.network === 'number')\n this.chainId = sorOrConfig.network as number;\n else this.chainId = sorOrConfig.network.chainId;\n }\n\n this.vaultContract = Vault__factory.connect(\n balancerVault,\n this.sor.provider\n );\n }\n\n static getLimitsForSlippage(\n tokensIn: string[],\n tokensOut: string[],\n swapType: SwapType,\n deltas: string[],\n assets: string[],\n slippage: string\n ): string[] {\n // TO DO - Check best way to do this?\n const limits = getLimitsForSlippage(\n tokensIn,\n tokensOut,\n swapType,\n deltas,\n assets,\n slippage\n );\n\n return limits.map((l) => l.toString());\n }\n\n /**\n * Uses SOR to find optimal route for a trading pair and amount\n *\n * @param FindRouteParameters\n * @param FindRouteParameters.tokenIn Address\n * @param FindRouteParameters.tokenOut Address\n * @param FindRouteParameters.amount BigNumber with a trade amount\n * @param FindRouteParameters.gasPrice BigNumber current gas price\n * @param FindRouteParameters.maxPools number of pool included in path, default 4\n * @returns Best trade route information\n */\n async findRouteGivenIn({\n tokenIn,\n tokenOut,\n amount,\n gasPrice,\n maxPools = 4,\n }: FindRouteParameters): Promise {\n return this.sor.getSwaps(tokenIn, tokenOut, SwapTypes.SwapExactIn, amount, {\n gasPrice,\n maxPools,\n });\n }\n\n /**\n * Uses SOR to find optimal route for a trading pair and amount\n *\n * @param FindRouteParameters\n * @param FindRouteParameters.tokenIn Address\n * @param FindRouteParameters.tokenOut Address\n * @param FindRouteParameters.amount BigNumber with a trade amount\n * @param FindRouteParameters.gasPrice BigNumber current gas price\n * @param FindRouteParameters.maxPools number of pool included in path, default 4\n * @returns Best trade route information\n */\n async findRouteGivenOut({\n tokenIn,\n tokenOut,\n amount,\n gasPrice,\n maxPools = 4,\n }: FindRouteParameters): Promise {\n return this.sor.getSwaps(\n tokenIn,\n tokenOut,\n SwapTypes.SwapExactOut,\n amount,\n {\n gasPrice,\n maxPools,\n }\n );\n }\n\n /**\n * Uses SOR to find optimal route for a trading pair and amount\n *\n * @param BuildTransactionParameters\n * @param BuildTransactionParameters.userAddress Address\n * @param BuildTransactionParameters.swapInfo result of route finding\n * @param BuildTransactionParameters.kind 0 - givenIn, 1 - givenOut\n * @param BuildTransactionParameters.deadline block linux timestamp as string\n * @param BuildTransactionParameters.maxSlippage [bps], eg: 1 === 0.01%, 100 === 1%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildSwap({\n userAddress,\n recipient,\n swapInfo,\n kind,\n deadline,\n maxSlippage,\n }: BuildTransactionParameters): SwapAttributes {\n if (!this.chainId) throw 'Missing network configuration';\n\n // one vs batch (gas cost optimisation when using single swap)\n const builder =\n swapInfo.swaps.length > 1\n ? new BatchSwapBuilder(swapInfo, kind, this.chainId)\n : new SingleSwapBuilder(swapInfo, kind, this.chainId);\n builder.setFunds(userAddress, recipient);\n builder.setDeadline(deadline);\n builder.setLimits(maxSlippage);\n\n const to = builder.to();\n const { functionName } = builder;\n const attributes = builder.attributes();\n const data = builder.data();\n const value = builder.value(maxSlippage);\n\n return { to, functionName, attributes, data, value };\n }\n\n /**\n * Uses SOR to find optimal route for a trading pair and amount\n * and builds a transaction request\n *\n * @param sender Sender of the swap\n * @param recipient Reciever of the swap\n * @param tokenIn Address of tokenIn\n * @param tokenOut Address of tokenOut\n * @param amount Amount of tokenIn to swap as a string with 18 decimals precision\n * @param options\n * @param options.maxPools number of pool included in path\n * @param options.gasPrice BigNumber current gas price\n * @param options.deadline BigNumber block timestamp\n * @param options.maxSlippage [bps], eg: 1 === 0.01%, 100 === 1%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n async buildRouteExactIn(\n sender: string,\n recipient: string,\n tokenIn: string,\n tokenOut: string,\n amount: string,\n options: SwapsOptions = buildRouteDefaultOptions\n ): Promise {\n const opts = {\n ...buildRouteDefaultOptions,\n ...options,\n };\n\n const swapInfo = await this.findRouteGivenIn({\n tokenIn,\n tokenOut,\n amount: BigNumber.from(amount),\n gasPrice: BigNumber.from(opts.gasPrice),\n maxPools: opts.maxPools,\n });\n\n const tx = this.buildSwap({\n userAddress: sender, // sender account\n recipient, // recipient account\n swapInfo, // result from the previous step\n kind: SwapType.SwapExactIn, // or SwapExactOut\n deadline: opts.deadline, // BigNumber block timestamp\n maxSlippage: opts.maxSlippage, // [bps], eg: 1 == 0.01%, 100 == 1%\n });\n\n // TODO: add query support\n // query will be a function that returns the deltas for the swap in { [address: string]: string } format\n // const query = this.queryBatchSwap(tx);\n\n return tx;\n }\n\n /**\n * Encode batchSwap in an ABI byte string\n *\n * [See method for a batchSwap](https://dev.balancer.fi/references/contracts/apis/the-vault#batch-swaps).\n *\n * _NB: This method doesn't execute a batchSwap -- it returns an [ABI byte string](https://docs.soliditylang.org/en/latest/abi-spec.html)\n * containing the data of the function call on a contract, which can then be sent to the network to be executed.\n * (ex. [sendTransaction](https://web3js.readthedocs.io/en/v1.2.11/web3-eth.html#sendtransaction)).\n *\n * @param {BatchSwap} batchSwap - BatchSwap information used for query.\n * @param {SwapType} batchSwap.kind - either exactIn or exactOut\n * @param {BatchSwapSteps[]} batchSwap.swaps - sequence of swaps\n * @param {string[]} batchSwap.assets - array contains the addresses of all assets involved in the swaps\n * @param {FundManagement} batchSwap.funds - object containing information about where funds should be taken/sent\n * @param {number[]} batchSwap.limits - limits for each token involved in the swap, where either the maximum number of tokens to send (by passing a positive value) or the minimum amount of tokens to receive (by passing a negative value) is specified\n * @param {string} batchSwap.deadline - time (in Unix timestamp) after which it will no longer attempt to make a trade\n * @returns {string} encodedBatchSwapData - Returns an ABI byte string containing the data of the function call on a contract\n */\n static encodeBatchSwap(batchSwap: BatchSwap): string {\n const vaultInterface = Vault__factory.createInterface();\n\n return vaultInterface.encodeFunctionData('batchSwap', [\n batchSwap.kind,\n batchSwap.swaps,\n batchSwap.assets,\n batchSwap.funds,\n batchSwap.limits,\n batchSwap.deadline,\n ]);\n }\n\n /**\n * Encode simple flash swap into a ABI byte string\n *\n * A \"simple\" flash swap is an arbitrage executed with only two tokens and two pools,\n * swapping in the first pool and then back in the second pool for a profit. For more\n * complex flash swaps, you will have to use the batch swap method.\n *\n * Learn more: A [Flash Swap](https://dev.balancer.fi/resources/swaps/flash-swaps).\n *\n * @param {SimpleFlashSwapParameters} params - BatchSwap information used for query.\n * @param {string} params.flashLoanAmount - initial input amount for the flash loan (first asset)\n * @param {string[]} params.poolIds - array of Balancer pool ids\n * @param {string[]} params.assets - array of token addresses\n * @param {string} params.walletAddress - array of token addresses\n * @returns {string} encodedBatchSwapData - Returns an ABI byte string containing the data of the function call on a contract\n */\n static encodeSimpleFlashSwap(params: SimpleFlashSwapParameters): string {\n return this.encodeBatchSwap(\n convertSimpleFlashSwapToBatchSwapParameters(params)\n );\n }\n\n /**\n * fetchPools saves updated pools data to SOR internal onChainBalanceCache.\n *\n * @returns Boolean indicating whether pools data was fetched correctly (true) or not (false).\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async fetchPools(queryArgs?: GraphQLArgs): Promise {\n return this.sor.fetchPools(queryArgs);\n }\n\n public getPools(): SubgraphPoolBase[] {\n return this.sor.getPools();\n }\n\n /**\n * queryBatchSwap simulates a call to `batchSwap`, returning an array of Vault asset deltas.\n * @param batchSwap - BatchSwap information used for query.\n * @param {SwapType} batchSwap.kind - either exactIn or exactOut.\n * @param {BatchSwapStep[]} batchSwap.swaps - sequence of swaps.\n * @param {string[]} batchSwap.assets - array contains the addresses of all assets involved in the swaps.\n * @returns {Promise} Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the\n * Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at\n * the same index in the `assets` array.\n */\n async queryBatchSwap(\n batchSwap: Pick\n ): Promise {\n return await queryBatchSwap(\n this.vaultContract,\n batchSwap.kind,\n batchSwap.swaps,\n batchSwap.assets\n );\n }\n\n /**\n * Simple interface to test if a simple flash swap is valid and see potential profits.\n *\n * A \"simple\" flash swap is an arbitrage executed with only two tokens and two pools,\n * swapping in the first pool and then back in the second pool for a profit. For more\n * complex flash swaps, you will have to use the batch swap method.\n *\n * Learn more: A [Flash Swap](https://dev.balancer.fi/resources/swaps/flash-swaps).\n *\n * _NB: This method doesn't execute a flashSwap\n *\n * @param {SimpleFlashSwapParameters} params - BatchSwap information used for query.\n * @param {string} params.flashLoanAmount - initial input amount for the flash loan (first asset)\n * @param {string[]} params.poolIds - array of Balancer pool ids\n * @param {string[]} params.assets - array of token addresses\n * @returns {Promise<{profits: Record, isProfitable: boolean}>} Returns an ethersjs transaction response\n */\n async querySimpleFlashSwap(\n params: Omit\n ): Promise {\n return await querySimpleFlashSwap({\n ...params,\n vaultContract: this.vaultContract,\n });\n }\n\n /**\n * Use SOR to get swapInfo for tokenIn<>tokenOut.\n * @param {SwapInput} swapInput - Swap information used for querying using SOR.\n * @param {string} swapInput.tokenIn - Addresse of asset in.\n * @param {string} swapInput.tokenOut - Addresse of asset out.\n * @param {SwapType} swapInput.swapType - Type of Swap, ExactIn/Out.\n * @param {string} swapInput.amount - Amount used in swap.\n * @returns {Promise} SOR swap info.\n */\n async getSorSwap(swapInput: SwapInput): Promise {\n return await getSorSwapInfo(\n swapInput.tokenIn,\n swapInput.tokenOut,\n swapInput.swapType,\n swapInput.amount,\n this.sor\n );\n }\n\n async queryExactIn(swap: SwapInfo): Promise {\n const deltas = await this.query(swap, SwapType.SwapExactIn);\n return this.assetDeltas(deltas.map(String), swap.tokenAddresses);\n }\n\n async queryExactOut(swap: SwapInfo): Promise {\n const deltas = await this.query(swap, SwapType.SwapExactOut);\n return this.assetDeltas(deltas.map(String), swap.tokenAddresses);\n }\n\n private query(swap: SwapInfo, kind: SwapType): Promise {\n const { swaps, tokenAddresses: assets } = swap;\n\n const funds = {\n sender: AddressZero,\n recipient: AddressZero,\n fromInternalBalance: false,\n toInternalBalance: false,\n };\n\n return this.vaultContract.callStatic.queryBatchSwap(\n kind,\n swaps,\n assets,\n funds\n );\n }\n\n private assetDeltas(deltas: string[], assets: string[]): TokenAmounts {\n return Object.fromEntries(deltas.map((delta, idx) => [assets[idx], delta]));\n }\n}\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\n\nimport { ExitPoolRequest, JoinPoolRequest } from '@/types';\nimport { SwapType, BatchSwapStep, FundManagement } from '@/modules/swaps/types';\n\nexport enum PoolKind {\n WEIGHTED = 0,\n LEGACY_STABLE,\n COMPOSABLE_STABLE,\n COMPOSABLE_STABLE_V2,\n}\n\nexport type OutputReference = {\n index: number;\n key: BigNumber;\n};\n\nexport interface EncodeBatchSwapInput {\n swapType: SwapType;\n swaps: BatchSwapStep[];\n assets: string[];\n funds: FundManagement;\n limits: string[];\n deadline: BigNumberish;\n value: BigNumberish;\n outputReferences: OutputReference[];\n}\n\nexport interface EncodeExitPoolInput {\n poolId: string;\n poolKind: number;\n sender: string;\n recipient: string;\n outputReferences: OutputReference[];\n exitPoolRequest: ExitPoolRequest;\n}\n\nexport interface EncodeJoinPoolInput {\n poolId: string;\n kind: number;\n sender: string;\n recipient: string;\n joinPoolRequest: JoinPoolRequest;\n value: BigNumberish;\n outputReference: string;\n}\n\nexport interface EncodeWrapAaveDynamicTokenInput {\n staticToken: string;\n sender: string;\n recipient: string;\n amount: BigNumberish;\n fromUnderlying: boolean;\n outputReference: BigNumberish;\n}\n\nexport interface EncodeUnwrapAaveStaticTokenInput {\n staticToken: string;\n sender: string;\n recipient: string;\n amount: BigNumberish;\n toUnderlying: boolean;\n outputReference: BigNumberish;\n}\n\nexport interface EncodeUnwrapInput {\n wrappedToken: string;\n sender: string;\n recipient: string;\n amount: BigNumberish;\n outputReference: BigNumberish;\n}\n\nexport interface EncodeUnwrapWstETHInput {\n sender: string;\n recipient: string;\n amount: BigNumberish;\n outputReference: BigNumberish;\n}\n\nexport type ExitPoolData = ExitPoolRequest & EncodeExitPoolInput;\nexport type JoinPoolData = JoinPoolRequest & EncodeJoinPoolInput;\n","import { JsonRpcSigner } from '@ethersproject/providers';\nimport { BigNumberish, BigNumber } from '@ethersproject/bignumber';\nimport { MaxUint256 } from '@ethersproject/constants';\nimport { BatchRelayerLibrary__factory } from '@/contracts';\nimport { IVault, Vault } from '@/contracts/Vault';\nimport {\n EncodeBatchSwapInput,\n EncodeExitPoolInput,\n EncodeJoinPoolInput,\n EncodeUnwrapAaveStaticTokenInput,\n EncodeUnwrapInput,\n EncodeUnwrapWstETHInput,\n EncodeWrapAaveDynamicTokenInput,\n ExitPoolData,\n JoinPoolData,\n} from './types';\nimport { ExitPoolRequest, JoinPoolRequest } from '@/types';\nimport { Swap } from '../swaps/types';\nimport { RelayerAuthorization } from '@/lib/utils';\nimport FundManagementStruct = IVault.FundManagementStruct;\nimport SingleSwapStruct = IVault.SingleSwapStruct;\n\nexport * from './types';\n\nconst relayerLibrary = BatchRelayerLibrary__factory.createInterface();\n\nexport class Relayer {\n static CHAINED_REFERENCE_TEMP_PREFIX = 'ba10'; // Temporary reference: it is deleted after a read.\n static CHAINED_REFERENCE_READONLY_PREFIX = 'ba11'; // Read-only reference: it is not deleted after a read.\n\n static encodeApproveVault(tokenAddress: string, maxAmount: string): string {\n return relayerLibrary.encodeFunctionData('approveVault', [\n tokenAddress,\n maxAmount,\n ]);\n }\n\n static encodeSetRelayerApproval(\n relayerAdress: string,\n approved: boolean,\n authorisation: string\n ): string {\n return relayerLibrary.encodeFunctionData('setRelayerApproval', [\n relayerAdress,\n approved,\n authorisation,\n ]);\n }\n\n static encodeGaugeWithdraw(\n gaugeAddress: string,\n sender: string,\n recipient: string,\n amount: string\n ): string {\n return relayerLibrary.encodeFunctionData('gaugeWithdraw', [\n gaugeAddress,\n sender,\n recipient,\n amount,\n ]);\n }\n\n static encodeGaugeDeposit(\n gaugeAddress: string,\n sender: string,\n recipient: string,\n amount: string\n ): string {\n return relayerLibrary.encodeFunctionData('gaugeDeposit', [\n gaugeAddress,\n sender,\n recipient,\n amount,\n ]);\n }\n\n static encodeSwap(params: Swap): string {\n return relayerLibrary.encodeFunctionData('swap', [\n params.request as SingleSwapStruct,\n params.funds as FundManagementStruct,\n params.limit,\n params.deadline as BigNumberish,\n params.value as BigNumberish,\n params.outputReference as BigNumberish,\n ]);\n }\n\n static encodeBatchSwap(params: EncodeBatchSwapInput): string {\n return relayerLibrary.encodeFunctionData('batchSwap', [\n params.swapType,\n params.swaps,\n params.assets,\n params.funds,\n params.limits,\n params.deadline,\n params.value,\n params.outputReferences,\n ]);\n }\n\n static encodeExitPool(params: EncodeExitPoolInput): string {\n return relayerLibrary.encodeFunctionData('exitPool', [\n params.poolId,\n params.poolKind,\n params.sender,\n params.recipient,\n params.exitPoolRequest,\n params.outputReferences,\n ]);\n }\n\n static encodeJoinPool(params: EncodeJoinPoolInput): string {\n return relayerLibrary.encodeFunctionData('joinPool', [\n params.poolId,\n params.kind,\n params.sender,\n params.recipient,\n params.joinPoolRequest,\n params.value,\n params.outputReference,\n ]);\n }\n\n static encodeWrapAaveDynamicToken(\n params: EncodeWrapAaveDynamicTokenInput\n ): string {\n return relayerLibrary.encodeFunctionData('wrapAaveDynamicToken', [\n params.staticToken,\n params.sender,\n params.recipient,\n params.amount,\n params.fromUnderlying,\n params.outputReference,\n ]);\n }\n\n static encodeUnwrapAaveStaticToken(\n params: EncodeUnwrapAaveStaticTokenInput\n ): string {\n return relayerLibrary.encodeFunctionData('unwrapAaveStaticToken', [\n params.staticToken,\n params.sender,\n params.recipient,\n params.amount,\n params.toUnderlying,\n params.outputReference,\n ]);\n }\n\n static encodeUnwrapWstETH(params: EncodeUnwrapWstETHInput): string {\n return relayerLibrary.encodeFunctionData('unwrapWstETH', [\n params.sender,\n params.recipient,\n params.amount,\n params.outputReference,\n ]);\n }\n\n static encodeUnwrap(\n params: EncodeUnwrapInput,\n linearPoolType: string\n ): string {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let unwrapType: any;\n\n /**\n * Other unwrap types available on BatchRelayerLibrary that does not seem to\n * have a respective Linear pool type in the SDK:\n * - unwrapUnbuttonToken\n * - unwrapWstETH\n */\n\n switch (linearPoolType) {\n case 'AaveLinear':\n return this.encodeUnwrapAaveStaticToken({\n staticToken: params.wrappedToken,\n sender: params.sender,\n recipient: params.recipient,\n amount: params.amount,\n toUnderlying: true,\n outputReference: params.outputReference,\n });\n case 'BeefyLinear':\n case 'ERC4626Linear':\n unwrapType = 'unwrapERC4626';\n break;\n case 'EulerLinear':\n unwrapType = 'unwrapEuler';\n break;\n case 'GearboxLinear':\n unwrapType = 'unwrapGearbox';\n break;\n case 'ReaperLinear':\n unwrapType = 'unwrapReaperVaultToken';\n break;\n case 'TetuLinear':\n unwrapType = 'unwrapTetu';\n break;\n case 'YearnLinear':\n unwrapType = 'unwrapYearn';\n break;\n case 'MidasLinear':\n unwrapType = 'unwrapCompoundV2';\n break;\n case 'SiloLinear':\n unwrapType = 'unwrapShareToken';\n break;\n default:\n throw new Error(\n 'Unwrapping not supported for this pool type: ' + linearPoolType\n );\n }\n\n return relayerLibrary.encodeFunctionData(unwrapType, [\n params.wrappedToken,\n params.sender,\n params.recipient,\n params.amount,\n params.outputReference,\n ]);\n }\n\n static encodePeekChainedReferenceValue(reference: BigNumberish): string {\n return relayerLibrary.encodeFunctionData('peekChainedReferenceValue', [\n reference,\n ]);\n }\n\n static toChainedReference(key: BigNumberish, isTemporary = true): BigNumber {\n const prefix = isTemporary\n ? Relayer.CHAINED_REFERENCE_TEMP_PREFIX\n : Relayer.CHAINED_REFERENCE_READONLY_PREFIX;\n // The full padded prefix is 66 characters long, with 64 hex characters and the 0x prefix.\n const paddedPrefix = `0x${prefix}${'0'.repeat(64 - prefix.length)}`;\n return BigNumber.from(paddedPrefix).add(key);\n }\n\n static fromChainedReference(ref: string, isTemporary = true): BigNumber {\n const prefix = isTemporary\n ? Relayer.CHAINED_REFERENCE_TEMP_PREFIX\n : Relayer.CHAINED_REFERENCE_READONLY_PREFIX;\n // The full padded prefix is 66 characters long, with 64 hex characters and the 0x prefix.\n const paddedPrefix = `0x${prefix}${'0'.repeat(64 - prefix.length)}`;\n return BigNumber.from(ref).sub(BigNumber.from(paddedPrefix));\n }\n\n /**\n * Returns true if `amount` is not actually an amount, but rather a chained reference.\n */\n static isChainedReference(amount: string): boolean {\n const amountBn = BigNumber.from(amount);\n const mask = BigNumber.from(\n '0xfff0000000000000000000000000000000000000000000000000000000000000'\n );\n const readonly =\n '0xba10000000000000000000000000000000000000000000000000000000000000';\n const check = amountBn.toBigInt() & mask.toBigInt();\n return readonly === BigNumber.from(check)._hex.toString();\n }\n\n static formatExitPoolInput(params: ExitPoolData): EncodeExitPoolInput {\n const {\n assets,\n minAmountsOut,\n userData,\n toInternalBalance,\n poolId,\n poolKind,\n sender,\n recipient,\n outputReferences,\n } = params;\n\n const exitPoolRequest: ExitPoolRequest = {\n assets,\n minAmountsOut,\n userData,\n toInternalBalance,\n };\n\n const exitPoolInput: EncodeExitPoolInput = {\n poolId,\n poolKind,\n sender,\n recipient,\n outputReferences,\n exitPoolRequest,\n };\n return exitPoolInput;\n }\n\n static formatJoinPoolInput(params: JoinPoolData): EncodeJoinPoolInput {\n const {\n assets,\n maxAmountsIn,\n userData,\n fromInternalBalance,\n poolId,\n kind,\n sender,\n recipient,\n value,\n outputReference,\n } = params;\n\n const joinPoolRequest: JoinPoolRequest = {\n assets,\n maxAmountsIn,\n userData,\n fromInternalBalance,\n };\n\n const joinPoolInput: EncodeJoinPoolInput = {\n poolId,\n kind,\n sender,\n recipient,\n value,\n outputReference,\n joinPoolRequest,\n };\n\n return joinPoolInput;\n }\n\n static signRelayerApproval = async (\n relayerAddress: string,\n signerAddress: string,\n signer: JsonRpcSigner,\n vault: Vault\n ): Promise => {\n const approval = vault.interface.encodeFunctionData('setRelayerApproval', [\n signerAddress,\n relayerAddress,\n true,\n ]);\n\n const signature =\n await RelayerAuthorization.signSetRelayerApprovalAuthorization(\n vault,\n signer,\n relayerAddress,\n approval\n );\n\n const calldata = RelayerAuthorization.encodeCalldataAuthorization(\n '0x',\n MaxUint256,\n signature\n );\n\n return calldata;\n };\n}\n","import { BalancerSdkConfig } from '@/types';\nimport { GraphQLClient } from 'graphql-request';\nimport { getNetworkConfig } from '../sdk.helpers';\nimport { getSdk } from './generated/balancer-subgraph-types';\nimport { SubgraphClient } from './subgraph';\n\nexport class Subgraph {\n public readonly url: string;\n public readonly client: SubgraphClient;\n\n constructor(config: BalancerSdkConfig) {\n this.url = getNetworkConfig(config).urls.subgraph;\n this.client = this.initClient();\n }\n\n private initClient(): SubgraphClient {\n const client = new GraphQLClient(this.url);\n return getSdk(client);\n }\n}\n","import { Swaps } from '@/modules/swaps/swaps.module';\nimport { BalancerSdkConfig } from '@/types';\nimport {\n SubgraphPoolBase,\n ZERO,\n parseToPoolsDict,\n getSpotPriceAfterSwapForPath,\n} from '@balancer-labs/sor';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\n\nexport class Pricing {\n private readonly swaps: Swaps;\n\n constructor(config: BalancerSdkConfig, swaps?: Swaps) {\n if (swaps) {\n this.swaps = swaps;\n } else {\n this.swaps = new Swaps(config);\n }\n }\n\n /**\n * Retrieves pools using poolDataService.\n * @returns {boolean} Boolean indicating whether pools data was fetched correctly (true) or not (false).\n */\n async fetchPools(): Promise {\n return this.swaps.fetchPools();\n }\n\n /**\n * Get currently saved pools list (fetched using fetchPools()).\n * @returns {SubgraphPoolBase[]} pools list.\n */\n public getPools(): SubgraphPoolBase[] {\n return this.swaps.getPools();\n }\n\n /**\n * Calculates Spot Price for a token pair - finds most liquid path and uses this as reference SP.\n * @param { string } tokenIn Token in address.\n * @param { string } tokenOut Token out address.\n * @param { SubgraphPoolBase[] } pools Optional - Pool data. Will be fetched via dataProvider if not supplied.\n * @returns { string } Spot price.\n */\n async getSpotPrice(\n tokenIn: string,\n tokenOut: string,\n pools: SubgraphPoolBase[] = []\n ): Promise {\n // If pools list isn't supplied fetch it from swaps data provider\n if (pools.length === 0) {\n await this.fetchPools();\n pools = this.getPools();\n }\n\n // We find the path for the pair with the highest liquidity and use this as the ref SP\n const poolsDict = parseToPoolsDict(pools, 0);\n // This creates all paths for tokenIn>Out ordered by liquidity\n const paths = this.swaps.sor.routeProposer.getCandidatePathsFromDict(\n tokenIn,\n tokenOut,\n 0,\n poolsDict,\n 4\n );\n\n if (paths.length === 0)\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_PAIR);\n return getSpotPriceAfterSwapForPath(paths[0], 0, ZERO).toString();\n }\n}\n","import { Contract } from '@ethersproject/contracts';\nimport { Provider } from '@ethersproject/providers';\nimport { Signer } from '@ethersproject/abstract-signer';\n\nconst abi = [\n 'function getPoolId() view returns (bytes32)',\n 'function getSwapFeePercentage() view returns (uint256)',\n 'function getProtocolFeesCollector() view returns (address)',\n 'function inRecoveryMode() view returns (bool)',\n];\n\nexport const BasePool = (\n address: string,\n signerOrProvider: Signer | Provider\n): Contract => new Contract(address, abi, signerOrProvider);\n","import { set } from 'lodash';\nimport { Fragment, JsonFragment, Interface, Result } from '@ethersproject/abi';\nimport { CallOverrides } from '@ethersproject/contracts';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { Multicall } from '@/contracts';\n\nexport class Multicaller {\n private interface: Interface;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private calls: [string, string, any][] = [];\n private paths: string[] = [];\n\n constructor(\n private multicall: Multicall,\n abi: string | Array,\n private options: CallOverrides = {}\n ) {\n this.interface = new Interface(abi);\n }\n\n call(\n path: string,\n address: string,\n functionName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n params?: any[]\n ): Multicaller {\n this.calls.push([address, functionName, params]);\n this.paths.push(path);\n return this;\n }\n\n async execute(\n from: Record = {}\n ): Promise> {\n const obj = from;\n const results = await this.executeMulticall();\n results.forEach((result, i) =>\n set(obj, this.paths[i], result.length > 1 ? result : result[0])\n );\n this.calls = [];\n this.paths = [];\n return obj;\n }\n\n private async executeMulticall(): Promise {\n const [, res] = await this.multicall.callStatic.aggregate(\n this.calls.map(([address, functionName, params]) => ({\n target: address,\n callData: this.interface.encodeFunctionData(functionName, params),\n })),\n this.options\n );\n\n return res.map((result: BytesLike, i: number) =>\n this.interface.decodeFunctionResult(this.calls[i][1], result)\n );\n }\n}\n","export const oneSecondInMs = 1000;\nexport const twentyFourHoursInSecs = 24 * 60 * 60;\n\nexport function toJsTimestamp(unixTimestamp: number): number {\n return unixTimestamp * oneSecondInMs;\n}\n\nexport function toUnixTimestamp(jsTimestamp: number): number {\n return Math.round(jsTimestamp / oneSecondInMs);\n}\n\nexport function isLessThan24Hours(incomingDateInSec: number): boolean {\n const now = Math.round(Date.now() / 1000);\n const difference = now - incomingDateInSec;\n\n return difference < twentyFourHoursInSecs;\n}\n","import { JsonFragment } from '@ethersproject/abi';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { formatUnits } from '@ethersproject/units';\nimport { Multicall, VeBal__factory } from '@/contracts';\nimport { Multicaller } from '@/lib/utils/multiCaller';\nimport { toJsTimestamp } from '@/lib/utils/time';\n\nexport type VeBalLockInfo = {\n lockedEndDate: number;\n lockedAmount: string;\n totalSupply: string;\n epoch: string;\n hasExistingLock: boolean;\n isExpired: boolean;\n};\n\ntype VeBalLockInfoResult = {\n locked: BigNumber[];\n epoch: BigNumber;\n totalSupply: BigNumber;\n};\n\nexport class VeBal {\n constructor(private veBalAddress: string, private multicall: Multicall) {}\n\n public async getLockInfo(\n account: string\n ): Promise {\n if (!this.veBalAddress) throw new Error('veBal address must be defined');\n\n const multicaller = new Multicaller(this.multicall, [\n ...(VeBal__factory.abi as readonly JsonFragment[]),\n ]);\n\n multicaller.call('locked', this.veBalAddress, 'locked', [account]);\n multicaller.call('epoch', this.veBalAddress, 'epoch');\n multicaller.call('totalSupply', this.veBalAddress, 'totalSupply()');\n\n const result = await multicaller.execute();\n\n return this.formatLockInfo(result);\n }\n\n public formatLockInfo(lockInfo: VeBalLockInfoResult): VeBalLockInfo {\n const [lockedAmount, lockedEndDate] = lockInfo.locked;\n\n const hasExistingLock = lockedAmount.gt(0);\n const lockedEndDateNormalised = toJsTimestamp(lockedEndDate.toNumber());\n const isExpired = hasExistingLock && Date.now() > lockedEndDateNormalised;\n\n return {\n lockedEndDate: lockedEndDateNormalised,\n lockedAmount: formatUnits(lockedAmount),\n totalSupply: formatUnits(lockInfo.totalSupply),\n epoch: formatUnits(lockInfo.epoch, 0),\n hasExistingLock,\n isExpired,\n };\n }\n}\n","import { Provider } from '@ethersproject/providers';\nimport { Contract } from '@ethersproject/contracts';\nimport { formatUnits } from '@ethersproject/units';\n\nimport { VeDelegationProxy__factory } from '@/contracts';\nimport { ContractAddresses } from '@/types';\n\nexport class VeBalProxy {\n instance: Contract;\n\n constructor(addresses: ContractAddresses, provider: Provider) {\n if (!addresses.veBalProxy)\n throw new Error('veBalProxy address must be defined');\n this.instance = VeDelegationProxy__factory.connect(\n addresses.veBalProxy,\n provider\n );\n }\n\n async getAdjustedBalance(account: string): Promise {\n const balance = await this.instance.adjustedBalanceOf(account);\n return formatUnits(balance);\n }\n}\n","import { Contract } from '@ethersproject/contracts';\nimport { Provider } from '@ethersproject/providers';\nimport { Signer } from '@ethersproject/abstract-signer';\n\nimport { BasePool } from './implementations/base-pool';\nimport { VeBal } from './implementations/veBAL';\nimport { VeBalProxy } from './implementations/veBAL-proxy';\nimport {\n AaveLinearPoolFactory,\n AaveLinearPoolFactory__factory,\n BalancerHelpers,\n BalancerHelpers__factory,\n BalancerRelayer__factory,\n ComposableStablePoolFactory,\n ComposableStablePoolFactory__factory,\n ERC20,\n ERC20__factory,\n ERC4626LinearPoolFactory,\n ERC4626LinearPoolFactory__factory,\n EulerLinearPoolFactory,\n EulerLinearPoolFactory__factory,\n GaugeClaimHelper,\n GaugeClaimHelper__factory,\n GearboxLinearPoolFactory,\n GearboxLinearPoolFactory__factory,\n GyroConfig,\n GyroConfig__factory,\n LidoRelayer,\n LidoRelayer__factory,\n LiquidityGaugeV5__factory,\n Multicall,\n Multicall__factory,\n Vault,\n Vault__factory,\n WeightedPoolFactory,\n WeightedPoolFactory__factory,\n YearnLinearPoolFactory,\n YearnLinearPoolFactory__factory,\n} from '@/contracts';\nimport { Network } from '@/lib/constants/network';\nimport { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { ContractAddresses } from '@/types';\n\ntype ContractFactory = (\n address: string,\n signerOrProvider: Signer | Provider\n) => Contract;\n\nexport interface ContractInstances {\n aaveLinearPoolFactory?: AaveLinearPoolFactory;\n balancerHelpers: BalancerHelpers;\n BasePool: ContractFactory;\n composableStablePoolFactory?: ComposableStablePoolFactory;\n ERC20: ContractFactory;\n erc4626LinearPoolFactory?: ERC4626LinearPoolFactory;\n eulerLinearPoolFactory?: EulerLinearPoolFactory;\n gaugeClaimHelper?: GaugeClaimHelper;\n gearboxLinearPoolFactory?: GearboxLinearPoolFactory;\n gyroConfig?: GyroConfig;\n lidoRelayer?: LidoRelayer;\n liquidityGauge: ContractFactory;\n multicall: Multicall;\n relayer: Contract;\n vault: Vault;\n veBal?: VeBal;\n veBalProxy?: VeBalProxy;\n weightedPoolFactory?: WeightedPoolFactory;\n yearnLinearPoolFactory?: YearnLinearPoolFactory;\n}\n\nexport class Contracts {\n contractAddresses: ContractAddresses;\n private instances: ContractInstances;\n\n /**\n * Create instances of Balancer contracts connected to passed provider.\n * @param { Network | ContractAddresses } networkOrAddresses\n * @param { Provider } provider\n */\n constructor(\n networkOrAddresses: Network | ContractAddresses,\n provider: Provider\n ) {\n // Access addresses using passed network if available\n if (typeof networkOrAddresses === 'number') {\n this.contractAddresses =\n BALANCER_NETWORK_CONFIG[networkOrAddresses].addresses.contracts;\n } else {\n this.contractAddresses = networkOrAddresses;\n }\n\n const vault: Vault = Vault__factory.connect(\n this.contractAddresses.vault,\n provider\n );\n const balancerHelpers: BalancerHelpers = BalancerHelpers__factory.connect(\n this.contractAddresses.balancerHelpers,\n provider\n );\n let lidoRelayer: undefined | LidoRelayer;\n if (this.contractAddresses.lidoRelayer)\n lidoRelayer = LidoRelayer__factory.connect(\n this.contractAddresses.lidoRelayer,\n provider\n );\n\n const multicall: Multicall = Multicall__factory.connect(\n this.contractAddresses.multicall,\n provider\n );\n const relayer = BalancerRelayer__factory.connect(\n this.contractAddresses.balancerRelayer,\n provider\n );\n let veBal: undefined | VeBal;\n if (this.contractAddresses.veBal) {\n veBal = new VeBal(this.contractAddresses.veBal, multicall);\n }\n let veBalProxy: undefined | VeBalProxy;\n if (this.contractAddresses.veBalProxy) {\n veBalProxy = new VeBalProxy(this.contractAddresses, provider);\n }\n let gaugeClaimHelper: undefined | GaugeClaimHelper;\n if (this.contractAddresses.gaugeClaimHelper)\n gaugeClaimHelper = GaugeClaimHelper__factory.connect(\n this.contractAddresses.gaugeClaimHelper,\n provider\n );\n let composableStablePoolFactory: undefined | ComposableStablePoolFactory;\n if (this.contractAddresses.composableStablePoolFactory) {\n composableStablePoolFactory =\n ComposableStablePoolFactory__factory.connect(\n this.contractAddresses.composableStablePoolFactory,\n provider\n );\n }\n let weightedPoolFactory: undefined | WeightedPoolFactory;\n if (this.contractAddresses.weightedPoolFactory) {\n weightedPoolFactory = WeightedPoolFactory__factory.connect(\n this.contractAddresses.weightedPoolFactory,\n provider\n );\n }\n let aaveLinearPoolFactory: undefined | AaveLinearPoolFactory;\n if (this.contractAddresses.aaveLinearPoolFactory) {\n aaveLinearPoolFactory = AaveLinearPoolFactory__factory.connect(\n this.contractAddresses.aaveLinearPoolFactory,\n provider\n );\n }\n let erc4626LinearPoolFactory: undefined | ERC4626LinearPoolFactory;\n if (this.contractAddresses.erc4626LinearPoolFactory) {\n erc4626LinearPoolFactory = ERC4626LinearPoolFactory__factory.connect(\n this.contractAddresses.erc4626LinearPoolFactory,\n provider\n );\n }\n let eulerLinearPoolFactory: undefined | EulerLinearPoolFactory;\n if (this.contractAddresses.eulerLinearPoolFactory) {\n eulerLinearPoolFactory = EulerLinearPoolFactory__factory.connect(\n this.contractAddresses.eulerLinearPoolFactory,\n provider\n );\n }\n let gearboxLinearPoolFactory: undefined | GearboxLinearPoolFactory;\n if (this.contractAddresses.gearboxLinearPoolFactory) {\n gearboxLinearPoolFactory = GearboxLinearPoolFactory__factory.connect(\n this.contractAddresses.gearboxLinearPoolFactory,\n provider\n );\n }\n let yearnLinearPoolFactory: undefined | YearnLinearPoolFactory;\n if (this.contractAddresses.yearnLinearPoolFactory) {\n yearnLinearPoolFactory = YearnLinearPoolFactory__factory.connect(\n this.contractAddresses.yearnLinearPoolFactory,\n provider\n );\n }\n let gyroConfig: undefined | GyroConfig;\n if (this.contractAddresses.gyroConfigProxy) {\n gyroConfig = GyroConfig__factory.connect(\n this.contractAddresses.gyroConfigProxy,\n provider\n );\n }\n\n this.instances = {\n aaveLinearPoolFactory,\n balancerHelpers,\n BasePool: this.getBasePool,\n composableStablePoolFactory,\n ERC20: this.getErc20,\n erc4626LinearPoolFactory,\n eulerLinearPoolFactory,\n gaugeClaimHelper,\n gearboxLinearPoolFactory,\n gyroConfig,\n liquidityGauge: this.getLiquidityGauge,\n lidoRelayer,\n multicall,\n relayer,\n veBal,\n veBalProxy,\n weightedPoolFactory,\n yearnLinearPoolFactory,\n vault,\n };\n }\n\n /**\n * Expose contract instances.\n */\n get contracts(): ContractInstances {\n return this.instances;\n }\n\n /**\n * Helper to create ERC20 contract.\n * @param { string } address ERC20 address.\n * @param { Signer | Provider } signerOrProvider Signer or Provider.\n * @returns Contract.\n */\n getErc20(address: string, signerOrProvider: Signer | Provider): ERC20 {\n return ERC20__factory.connect(address, signerOrProvider);\n }\n\n /**\n * Helper to create base pool contract.\n * @param { string } address pool address.\n * @param { Signer | Provider } signerOrProvider Signer or Provider.\n * @returns Contract.\n */\n getBasePool(address: string, signerOrProvider: Signer | Provider): Contract {\n return BasePool(address, signerOrProvider);\n }\n\n /**\n * Helper to create LiquidityGauge contract.\n * @param { string } address Gauge address.\n * @param { Signer | Provider} signerOrProvider Signer or Provider.\n * @returns Contract.\n */\n getLiquidityGauge = LiquidityGaugeV5__factory.connect;\n}\n","/**\n * Calculate the Impermanent Loss for a given pool and user.\n *\n * 1. Prepare the data:\n * a. get exit price for pools' tokens\n * b. get entry price for pools' tokens\n * 2. calculate delta values for tokens in pools\n * 3. calculate and return the impermanent loss as percentage rounded to 2 decimal places.\n *\n */\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Findable, Pool, PoolToken, Price } from '@/types';\nimport { Logger } from '@/lib/utils/logger';\n\ntype Asset = {\n priceDelta: number;\n weight: number;\n};\n\ntype TokenPrices = {\n [key: string]: number;\n};\n\nexport class ImpermanentLossService {\n constructor(\n private tokenPrices: Findable,\n private tokenHistoricalPrices: Findable\n ) {}\n\n /**\n * entry point to calculate impermanent loss.\n *\n * The function will\n * - retrieve the tokens' historical value at the desired time in the future\n * - calculate the relative variation between current and historical value\n * - return the IL in percentage rounded to 2 decimal places\n *\n * @param timestamp UNIX timestamp from which the IL is desired\n * @param pool the pool\n * @returns the impermanent loss as percentage rounded to 2 decimal places\n */\n async calcImpLoss(timestamp: number, pool: Pool): Promise {\n if (timestamp * 1000 >= Date.now()) {\n console.error(\n `[ImpermanentLossService][calcImpLoss]Error: ${BalancerError.getMessage(\n BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE\n )}`\n );\n throw new BalancerError(BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE);\n }\n const assets = await this.prepareData(timestamp, pool);\n\n const poolValueDelta = this.getPoolValueDelta(assets);\n const holdValueDelta = this.getHoldValueDelta(assets);\n\n const impLoss = this.calculateImpermanentLoss(\n poolValueDelta,\n holdValueDelta\n );\n return impLoss;\n }\n\n calculateImpermanentLoss(\n poolValueDelta: number,\n holdValueDelta: number\n ): number {\n return (\n Math.floor(Math.abs(poolValueDelta / holdValueDelta - 1) * 100 * 100) /\n 100\n );\n }\n\n getPoolValueDelta(assets: Asset[]): number {\n return assets.reduce(\n (result, asset) =>\n result * Math.pow(Math.abs(asset.priceDelta + 1), asset.weight),\n 1\n );\n }\n\n getHoldValueDelta(assets: Asset[]): number {\n return assets.reduce(\n (result, asset) => result + Math.abs(asset.priceDelta + 1) * asset.weight,\n 0\n );\n }\n\n /**\n * prepare the data for calculating the impermanent loss\n *\n * @param entryTimestamp UNIX timestamp from which the IL is desired\n * @param pool the pool\n * @returns a list of pair weight/price delta for each token in the pool\n * @throws BalancerError if\n * 1. a token's price is unknown\n * 2. a token's weight is unknown\n * 3. the user has no liquidity invested in the pool\n */\n async prepareData(entryTimestamp: number, pool: Pool): Promise {\n const poolTokens = pool.tokens.filter(\n (token) => token.address !== pool.address\n );\n\n const weights = this.getWeights(poolTokens);\n\n const tokenAddresses = poolTokens.map((t) => t.address);\n\n const entryPrices = await this.getEntryPrices(\n entryTimestamp,\n tokenAddresses\n );\n const exitPrices: TokenPrices = await this.getExitPrices(poolTokens);\n\n return this.getAssets(poolTokens, exitPrices, entryPrices, weights);\n }\n\n getAssets(\n poolTokens: PoolToken[],\n exitPrices: TokenPrices,\n entryPrices: TokenPrices,\n weights: number[]\n ): Asset[] {\n return poolTokens.map((token, i) => ({\n priceDelta: this.getDelta(\n entryPrices[token.address],\n exitPrices[token.address]\n ),\n weight: weights[i],\n }));\n }\n\n getDelta(entryPrice: number, exitPrice: number): number {\n if (entryPrice === 0) {\n console.error(\n `[ImpermanentLossService][getDelta]Error: ${BalancerError.getMessage(\n BalancerErrorCode.ILLEGAL_PARAMETER\n )}: entry price is 0`\n );\n throw new BalancerError(BalancerErrorCode.ILLEGAL_PARAMETER);\n }\n return (exitPrice - entryPrice) / entryPrice;\n }\n\n /**\n * returns the list of token's weights.\n *\n * @param poolTokens the pools' tokens\n * @returns the list of token's weights\n * @throws BalancerError if a token's weight is missing\n *\n */\n getWeights(poolTokens: PoolToken[]): number[] {\n const noWeights = poolTokens.every((token) => !token.weight);\n const uniformWeight = Math.round((1 / poolTokens.length) * 100) / 100;\n const weights: number[] = noWeights\n ? poolTokens.map(() => uniformWeight) // if no weight is returned we assume the tokens are balanced uniformly in the pool\n : poolTokens.map((token) => Number(token.weight ?? 0));\n\n if (weights.some((w) => w === 0)) {\n console.error(\n `[ImpermanentLossService][getWeights]Error: ${BalancerError.getMessage(\n BalancerErrorCode.MISSING_WEIGHT\n )}`\n );\n throw new BalancerError(BalancerErrorCode.MISSING_WEIGHT);\n }\n return weights;\n }\n\n /**\n * get the current's tokens' prices\n * @param tokens the pools' tokens\n * @returns a list of tokens with prices\n */\n async getExitPrices(tokens: PoolToken[]): Promise {\n const prices = await Promise.all(\n tokens.map((token) => this.tokenPrices.find(token.address))\n ).catch(() => []);\n\n if (!prices.length || prices.some((price) => price?.usd === undefined)) {\n console.error(\n `[ImpermanentLossService][getExitPrices]Error: ${BalancerError.getMessage(\n BalancerErrorCode.MISSING_PRICE_RATE\n )}`\n );\n throw new BalancerError(BalancerErrorCode.MISSING_PRICE_RATE);\n }\n\n const tokensWithPrice = tokens.map((token, i) => ({\n ...token,\n price: prices[i],\n }));\n\n const tokenPrices: TokenPrices = {};\n for (const token of tokensWithPrice) {\n if (token.price?.usd) tokenPrices[token.address] = +token.price.usd; // price.usd is never undefined but JS complains\n }\n return tokenPrices;\n }\n\n /**\n * get the tokens' price at a given time\n *\n * @param timestamp the Unix timestamp\n * @param tokenAddresses the tokens' addresses\n * @returns a map of tokens' price\n */\n async getEntryPrices(\n timestamp: number,\n tokenAddresses: string[]\n ): Promise {\n const prices: TokenPrices = {};\n for (const address of tokenAddresses) {\n const price = await this.tokenHistoricalPrices\n .findBy(address, timestamp)\n .catch((reason) => {\n const logger = Logger.getInstance();\n logger.warn(\n `[ImpermanentLossService][getEntryPrices]Error: ${reason.message}`\n );\n return undefined;\n });\n if (!price?.usd) {\n const logger = Logger.getInstance();\n logger.warn(\n `[ImpermanentLossService][getEntryPrices]Error: ${BalancerError.getMessage(\n BalancerErrorCode.MISSING_PRICE_RATE\n )}`\n );\n throw new BalancerError(BalancerErrorCode.MISSING_PRICE_RATE);\n }\n prices[address] = +price.usd;\n }\n return prices;\n }\n}\n","/**\n * Weekly Bal emissions are fixed / year according to:\n * https://docs.google.com/spreadsheets/d/1FY0gi596YWBOTeu_mrxhWcdF74SwKMNhmu0qJVgs0KI/edit#gid=0\n *\n * Using regular numbers for simplicity assuming frontend use only.\n *\n * Calculation source\n * https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/liquidity-mining/contracts/BalancerTokenAdmin.sol\n */\n\nexport const INITIAL_RATE = 145000;\nexport const START_EPOCH_TIME = 1648465251;\nconst RATE_REDUCTION_TIME = 365 * 86400;\nconst RATE_REDUCTION_COEFFICIENT = 2 ** (1 / 4);\n\n/**\n * Weekly BAL emissions\n *\n * @param currentTimestamp used to get the epoch\n * @returns BAL emitted in a week\n */\nexport const weekly = (\n currentTimestamp: number = Math.round(new Date().getTime() / 1000)\n): number => {\n const miningEpoch = Math.floor(\n (currentTimestamp - START_EPOCH_TIME) / RATE_REDUCTION_TIME\n );\n\n const rate = INITIAL_RATE * RATE_REDUCTION_COEFFICIENT ** -miningEpoch;\n\n return rate;\n};\n\n/**\n * Total BAL emitted in epoch (1 year)\n *\n * @param epoch starting from 0 for the first year of emissions\n * @returns BAL emitted in epoch\n */\nexport const total = (epoch: number): number => {\n const weeklyRate = INITIAL_RATE * RATE_REDUCTION_COEFFICIENT ** -epoch;\n const dailyRate = weeklyRate / 7;\n\n return dailyRate * 365;\n};\n\n/**\n * Total BAL emitted between two timestamps\n *\n * @param start starting timestamp\n * @param end ending timestamp\n * @returns BAL emitted in period\n */\nexport const between = (start: number, end: number): number => {\n if (start < START_EPOCH_TIME) {\n throw 'start timestamp before emission schedule deployment';\n }\n if (end < start) {\n throw 'cannot finish before starting';\n }\n\n let totalEmissions = 0;\n\n const startingEpoch = Math.floor(\n (start - START_EPOCH_TIME) / RATE_REDUCTION_TIME\n );\n const endingEpoch = Math.floor(\n (end - START_EPOCH_TIME) / RATE_REDUCTION_TIME\n );\n\n for (\n let currentEpoch = startingEpoch;\n currentEpoch <= endingEpoch;\n currentEpoch++\n ) {\n totalEmissions += total(currentEpoch);\n }\n\n // Subtract what isn't emmited within the time range\n const startingEpochEnd =\n START_EPOCH_TIME + RATE_REDUCTION_TIME * (startingEpoch + 1);\n const endingEpochStart = START_EPOCH_TIME + RATE_REDUCTION_TIME * endingEpoch;\n\n const secondsInStartingEpoch = startingEpochEnd - start;\n const secondsInEndingEpoch = end - endingEpochStart;\n\n totalEmissions -=\n (total(startingEpoch) * (RATE_REDUCTION_TIME - secondsInStartingEpoch)) /\n RATE_REDUCTION_TIME;\n totalEmissions -=\n (total(endingEpoch) * (RATE_REDUCTION_TIME - secondsInEndingEpoch)) /\n RATE_REDUCTION_TIME;\n\n return totalEmissions;\n};\n","import { Findable, Price } from '@/types';\nimport { BaseFeeDistributor } from '@/modules/data';\n\nexport interface ProtocolRevenueData {\n lastWeekBalRevenue: number;\n lastWeekBBAUsdRevenue: number;\n veBalSupply: number;\n}\n\nexport class ProtocolRevenue {\n constructor(\n private repository: BaseFeeDistributor,\n private tokenPrices: Findable\n ) {}\n\n async data(now = Date.now()): Promise {\n const data = await this.repository.multicallData(now);\n const balPrice = await this.tokenPrices.find(data.balAddress);\n\n if (!balPrice || !balPrice.usd) {\n throw `No BAL USD price found`;\n }\n\n return {\n lastWeekBalRevenue: data.balAmount * parseFloat(balPrice.usd),\n lastWeekBBAUsdRevenue: data.bbAUsdAmount * data.bbAUsdPrice,\n veBalSupply: data.veBalSupply,\n };\n }\n}\n","/**\n * Calculates pool fees\n *\n * 1. Pool fees in last 24hrs\n */\nimport { isLessThan24Hours } from '@/lib/utils/time';\nimport { Pool, Findable, PoolAttribute } from '@/types';\n\nexport class PoolFees {\n constructor(\n private yesterdaysPools: Findable | undefined\n ) {}\n\n // 🚨 this is adding 1 call to get yesterday's block height and 2nd call to fetch yesterday's pools data from subgraph\n // TODO: find a better data source for that eg. add blocks to graph, replace with a database, or dune\n async last24h(pool: Pool): Promise {\n let yesterdaysPool;\n if (this.yesterdaysPools) {\n yesterdaysPool = await this.yesterdaysPools.find(pool.id);\n }\n if (!pool.totalSwapFee) {\n return 0;\n }\n\n if (!yesterdaysPool?.totalSwapFee) {\n // Process edge case when pool creation time is less that 24h\n if (pool.createTime && isLessThan24Hours(pool.createTime)) {\n return parseFloat(pool.totalSwapFee);\n }\n return 0;\n }\n\n return (\n parseFloat(pool.totalSwapFee) - parseFloat(yesterdaysPool.totalSwapFee)\n );\n }\n}\n","import { formatUnits } from '@ethersproject/units';\nimport * as emissions from '@/modules/data/bal/emissions';\nimport type {\n Findable,\n Pool,\n PoolAttribute,\n Price,\n Token,\n TokenAttribute,\n LiquidityGauge,\n Network,\n PoolToken,\n} from '@/types';\nimport { BaseFeeDistributor } from '@/modules/data';\nimport { ProtocolRevenue } from './protocol-revenue';\nimport { Liquidity } from '@/modules/liquidity/liquidity.module';\nimport { identity, zipObject, pickBy } from 'lodash';\nimport { PoolFees } from '../fees/fees';\nimport { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { Logger } from '@/lib/utils/logger';\nimport { GyroConfigRepository } from '@/modules/data/gyro-config/repository';\nimport { POOLS_TO_IGNORE } from '@/lib/constants/poolsToIgnore';\n\nexport interface AprBreakdown {\n swapFees: number;\n tokenAprs: {\n total: number;\n breakdown: { [address: string]: number };\n };\n stakingApr: {\n min: number;\n max: number;\n };\n rewardAprs: {\n total: number;\n breakdown: { [address: string]: number };\n };\n protocolApr: number;\n min: number;\n max: number;\n}\n\n/**\n * Calculates pool APR via summing up sources of APR:\n *\n * 1. Swap fees (pool level) data coming from subgraph\n * 2. Yield bearing pool tokens, with data from external sources eg: http endpoints, subgraph, onchain\n * * stETH\n * * aave\n * * usd+\n * map token: calculatorFn\n * 3. Staking rewards based from veBal gauges\n */\nexport class PoolApr {\n constructor(\n private pools: Findable,\n private tokenPrices: Findable,\n private tokenMeta: Findable,\n private tokenYields: Findable,\n private feeCollector: Findable,\n private yesterdaysPools?: Findable,\n private liquidityGauges?: Findable,\n private feeDistributor?: BaseFeeDistributor,\n private gyroConfigRepository?: GyroConfigRepository\n ) {}\n\n /**\n * Pool revenue via swap fees.\n * Fees and liquidity are takes from subgraph as USD floats.\n *\n * @returns APR [bsp] from fees accumulated over last 24h\n */\n async swapFees(pool: Pool): Promise {\n // 365 * dailyFees * (1 - protocolFees) / totalLiquidity\n const last24hFees = await this.last24hFees(pool);\n const totalLiquidity = await this.totalLiquidity(pool);\n // TODO: what to do when we are missing last24hFees or totalLiquidity?\n // eg: stable phantom returns 0\n if (!last24hFees || !totalLiquidity) {\n return 0;\n }\n const dailyFees =\n last24hFees * (1 - (await this.protocolSwapFeePercentage(pool)));\n const feesDailyBsp = 10000 * (dailyFees / parseFloat(totalLiquidity));\n\n return Math.round(365 * feesDailyBsp);\n }\n\n /**\n * Pool revenue from holding yield-bearing wrapped tokens.\n *\n * @returns APR [bsp] from tokens contained in the pool\n */\n async tokenAprs(pool: Pool): Promise {\n if (!pool.tokens) {\n return {\n total: 0,\n breakdown: {},\n };\n }\n\n const totalLiquidity = await this.totalLiquidity(pool);\n\n // Filter out BPT: token with the same address as the pool\n // TODO: move this to data layer\n const bptFreeTokens = pool.tokens.filter((token) => {\n return token.address !== pool.address;\n });\n\n // Get each token APRs\n const aprs = await Promise.all(\n bptFreeTokens.map(async (token) => {\n let apr = 0;\n const tokenYield = await this.tokenYields.find(token.address);\n if (tokenYield) {\n // metastable pools incorrectly apply the swap fee to the yield earned.\n // they don't have the concept of a yield fee like the newer pools do.\n if (\n pool.poolType === 'MetaStable' ||\n pool.poolType.includes('Gyro')\n ) {\n apr =\n tokenYield * (1 - (await this.protocolSwapFeePercentage(pool)));\n } else if (\n pool.poolType === 'ComposableStable' ||\n (pool.poolType === 'Weighted' && pool.poolTypeVersion >= 2)\n ) {\n if (token.isExemptFromYieldProtocolFee) {\n apr = tokenYield;\n } else {\n apr =\n tokenYield *\n (1 - parseFloat(pool.protocolYieldFeeCache || '0.5'));\n }\n } else {\n apr = tokenYield;\n }\n } else {\n // Handle subpool APRs with recursive call to get the subPool APR\n const subPool = await this.pools.findBy('address', token.address);\n\n if (subPool) {\n // INFO: Liquidity mining APR can't cascade to other pools\n const subSwapFees = await this.swapFees(subPool);\n const subtokenAprs = await this.tokenAprs(subPool);\n let subApr = subtokenAprs.total;\n if (\n pool.poolType === 'ComposableStable' ||\n (pool.poolType === 'Weighted' && pool.poolTypeVersion === 2)\n ) {\n if (!token.isExemptFromYieldProtocolFee) {\n subApr =\n subApr *\n (1 - parseFloat(pool.protocolYieldFeeCache || '0.5'));\n }\n }\n apr = subSwapFees + subApr;\n }\n }\n\n return apr;\n })\n );\n\n // Get token weights normalised by usd price\n const getWeight = async (token: PoolToken): Promise => {\n let tokenPrice: string | undefined;\n if (token.weight) {\n return parseFloat(token.weight);\n } else if (token.token?.pool?.poolType) {\n const poolToken = await this.pools.findBy('address', token.address);\n if (poolToken) {\n tokenPrice = (await this.bptPrice(poolToken)).toString();\n }\n } else {\n tokenPrice =\n token.price?.usd ||\n (await this.tokenPrices.find(token.address))?.usd ||\n token.token?.latestUSDPrice;\n }\n if (tokenPrice) {\n // using floats assuming frontend purposes with low precision needs\n const tokenValue = parseFloat(token.balance) * parseFloat(tokenPrice);\n return tokenValue / parseFloat(totalLiquidity);\n } else {\n throw `No price for ${token.address}`;\n }\n };\n\n // Normalise tokenAPRs according to weights\n const weightedAprs = await Promise.all(\n bptFreeTokens.map(async (token, idx) => {\n if (aprs[idx] === 0) {\n return 0;\n }\n\n // Handle missing token weights, usually due to missing token prices\n try {\n const weight = await getWeight(token);\n return Math.round(aprs[idx] * weight);\n } catch (e) {\n const logger = Logger.getInstance();\n logger.error(e as string);\n return 0;\n }\n })\n );\n\n // sum them up to get pool APRs\n const apr = weightedAprs.reduce((sum, apr) => sum + apr, 0);\n const breakdown = pickBy(\n zipObject(\n bptFreeTokens.map((t) => t.address),\n weightedAprs\n ),\n identity\n );\n\n return {\n total: apr,\n breakdown,\n };\n }\n\n /**\n * Calculates staking rewards based on veBal gauges deployed with Curve Finance contracts.\n * https://curve.readthedocs.io/dao-gauges.html\n *\n * Terminology:\n * - LP token of a gauge is a BPT of a pool\n * - Depositing into a gauge is called staking on the frontend\n * - gauge totalSupply - BPT tokens deposited to a gauge\n * - gauge workingSupply - effective BPT tokens participating in reward distribution. sum of 40% deposit + 60% boost from individual user's veBal\n * - gauge relative weight - weight of this gauge in bal inflation distribution [0..1] scaled to 1e18\n *\n * APR sources:\n * - gauge BAL emissions = min: 40% of totalSupply, max: 40% of totalSupply + 60% of totalSupply * gauge LPs voting power\n * https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/liquidity-mining/contracts/gauges/ethereum/LiquidityGaugeV5.vy#L338\n * - gauge reward tokens: Admin or designated depositor has an option to deposit additional reward with a weekly accruing cadence.\n * https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/liquidity-mining/contracts/gauges/ethereum/LiquidityGaugeV5.vy#L641\n * rate: amount of token per second\n *\n * @param pool\n * @param boost range between 1 and 2.5\n * @returns APR [bsp] from protocol rewards.\n */\n async stakingApr(pool: Pool, boost = 1): Promise {\n if (!this.liquidityGauges) {\n return 0;\n }\n\n // Data resolving\n const gauge = await this.liquidityGauges.findBy('poolId', pool.id);\n if (\n !gauge ||\n (pool.chainId == 1 && gauge.workingSupply === 0) ||\n (pool.chainId > 1 && gauge.totalSupply === 0) ||\n (pool.chainId > 1 && gauge.balInflationRate === 0)\n ) {\n return 0;\n }\n\n const bal =\n BALANCER_NETWORK_CONFIG[pool.chainId as Network].addresses.tokens.bal;\n if (!bal) {\n return 0;\n }\n\n const [balPrice, bptPriceUsd] = await Promise.all([\n this.tokenPrices.find(bal), // BAL\n this.bptPrice(pool),\n ]);\n\n if (!balPrice?.usd) {\n throw 'Missing BAL price';\n }\n\n const gaugeSupply = (gauge.workingSupply + 0.4) / 0.4; // Only 40% of LP token staked accrue emissions, totalSupply = workingSupply * 2.5\n const gaugeSupplyUsd = gaugeSupply * bptPriceUsd;\n\n // Handle child chain gauges with inflation_rate\n // balInflationRate - amount of BAL tokens per second as a float\n if (gauge.balInflationRate) {\n const reward =\n gauge.balInflationRate * 86400 * 365 * parseFloat(balPrice.usd);\n return Math.round((boost * 10000 * reward) / gaugeSupplyUsd);\n } else if (pool.chainId > 1) {\n // TODO: remove after all gauges are migrated (around 01-07-2023), Subgraph is returning BAL staking rewards as reward tokens for L2 gauges.\n if (!gauge.rewardTokens) {\n return 0;\n }\n\n const balReward = bal && gauge.rewardTokens[bal];\n if (balReward) {\n let reward: { address: string; value: number };\n try {\n reward = await this.rewardTokenApr(bal, balReward);\n const totalSupplyUsd = gauge.totalSupply * bptPriceUsd;\n const rewardValue = reward.value / totalSupplyUsd;\n return Math.round(10000 * rewardValue);\n } catch (e) {\n return 0;\n }\n } else {\n return 0;\n }\n }\n\n // Handle mainnet gauges\n const balPriceUsd = parseFloat(balPrice.usd);\n const now = Math.round(new Date().getTime() / 1000);\n const totalBalEmissions = (emissions.weekly(now) / 7) * 365;\n const gaugeBalEmissions = totalBalEmissions * gauge.relativeWeight;\n const gaugeBalEmissionsUsd = gaugeBalEmissions * balPriceUsd;\n const gaugeBalAprBps = Math.round(\n (boost * 10000 * gaugeBalEmissionsUsd) / gaugeSupplyUsd\n );\n\n return gaugeBalAprBps;\n }\n\n /**\n * Some gauges are holding tokens distributed as rewards to LPs.\n *\n * @param pool\n * @returns APR [bsp] from token rewards.\n */\n async rewardAprs(pool: Pool): Promise {\n if (!this.liquidityGauges) {\n return { total: 0, breakdown: {} };\n }\n\n // Data resolving\n const gauge = await this.liquidityGauges.findBy('poolId', pool.id);\n if (\n !gauge ||\n !gauge.rewardTokens ||\n Object.keys(gauge.rewardTokens).length < 1\n ) {\n return { total: 0, breakdown: {} };\n }\n\n // BAL rewards already returned as stakingApr, so we can filter them out\n const bal =\n BALANCER_NETWORK_CONFIG[pool.chainId as Network].addresses.tokens.bal;\n const rewardTokenAddresses = Object.keys(gauge.rewardTokens).filter(\n (a) => a != bal\n );\n\n // Gets each tokens rate, extrapolate to a year and convert to USD\n const rewards = rewardTokenAddresses.map(async (tAddress) => {\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n const data = gauge!.rewardTokens![tAddress];\n try {\n const reward = await this.rewardTokenApr(tAddress, data);\n return reward;\n } catch (e) {\n return { address: tAddress, value: 0 };\n }\n });\n\n // Get the gauge totalSupplyUsd\n const bptPriceUsd = await this.bptPrice(pool);\n const totalSupplyUsd = gauge.totalSupply * bptPriceUsd;\n\n if (totalSupplyUsd == 0) {\n return { total: 0, breakdown: {} };\n }\n\n const rewardTokensBreakdown: Record = {};\n\n let total = 0;\n for await (const reward of Object.values(rewards)) {\n const rewardValue = reward.value / totalSupplyUsd;\n const rewardValueScaled = Math.round(10000 * rewardValue);\n total += rewardValueScaled;\n rewardTokensBreakdown[reward.address] = rewardValueScaled;\n }\n\n return {\n total,\n breakdown: rewardTokensBreakdown,\n };\n }\n\n /**\n * 80BAL-20WETH pool is accruing protocol revenue.\n *\n * @param pool\n * @returns accrued protocol revenue as APR [bsp]\n */\n async protocolApr(pool: Pool): Promise {\n const veBalPoolId =\n '0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014';\n\n if (pool.id != veBalPoolId || !this.feeDistributor) {\n return 0;\n }\n\n const revenue = new ProtocolRevenue(this.feeDistributor, this.tokenPrices);\n\n const { lastWeekBalRevenue, lastWeekBBAUsdRevenue, veBalSupply } =\n await revenue.data();\n\n const bptPrice = await this.bptPrice(pool);\n if (!bptPrice) {\n throw 'bptPrice for veBal pool missing';\n }\n\n const dailyRevenue = (lastWeekBalRevenue + lastWeekBBAUsdRevenue) / 7;\n const apr = Math.round(\n (10000 * (365 * dailyRevenue)) / (bptPrice * veBalSupply)\n );\n\n return apr;\n }\n\n /**\n * Composes all sources for total pool APR.\n *\n * @returns pool APR split [bsp]\n */\n async apr(pool: Pool): Promise {\n if (POOLS_TO_IGNORE.includes(pool.id)) {\n return {\n swapFees: 0,\n tokenAprs: {\n total: 0,\n breakdown: {},\n },\n stakingApr: {\n min: 0,\n max: 0,\n },\n rewardAprs: {\n total: 0,\n breakdown: {},\n },\n protocolApr: 0,\n min: 0,\n max: 0,\n };\n }\n const [\n swapFees,\n tokenAprs,\n minStakingApr,\n maxStakingApr,\n rewardAprs,\n protocolApr,\n ] = await Promise.all([\n this.swapFees(pool), // pool snapshot for last 24h fees dependency\n this.tokenAprs(pool),\n this.stakingApr(pool),\n this.stakingApr(pool, 2.5),\n this.rewardAprs(pool),\n this.protocolApr(pool),\n ]);\n\n return {\n swapFees,\n tokenAprs,\n stakingApr: {\n min: minStakingApr,\n max: maxStakingApr,\n },\n rewardAprs,\n protocolApr,\n min: swapFees + tokenAprs.total + rewardAprs.total + minStakingApr,\n max:\n swapFees +\n tokenAprs.total +\n rewardAprs.total +\n protocolApr +\n maxStakingApr,\n };\n }\n\n private async last24hFees(pool: Pool): Promise {\n const poolFees = new PoolFees(this.yesterdaysPools);\n return poolFees.last24h(pool);\n }\n\n /**\n * Total Liquidity based on USD token prices taken from external price feed, eg: coingecko.\n *\n * @param pool\n * @returns Pool liquidity in USD\n */\n private async totalLiquidity(pool: Pool): Promise {\n try {\n const liquidityService = new Liquidity(this.pools, this.tokenPrices);\n const liquidity = await liquidityService.getLiquidity(pool);\n return liquidity;\n } catch (err) {\n const logger = Logger.getInstance();\n logger.warn('Liquidity calculcation failed, falling back to subgraph');\n return pool.totalLiquidity;\n }\n }\n\n /**\n * BPT price as pool totalLiquidity / pool total Shares\n * Total Liquidity is calculated based on USD token prices taken from external price feed, eg: coingecko.\n *\n * @param pool\n * @returns BPT price in USD\n */\n private async bptPrice(pool: Pool) {\n return (\n parseFloat(await this.totalLiquidity(pool)) / parseFloat(pool.totalShares)\n );\n }\n\n private async protocolSwapFeePercentage(pool: Pool) {\n let fee = 0.5;\n if (pool.poolType.includes('Gyro') && this.gyroConfigRepository) {\n fee = await this.gyroConfigRepository.getGyroProtocolFee(pool.address);\n } else if (pool.protocolSwapFeeCache) {\n fee = parseFloat(pool.protocolSwapFeeCache);\n } else {\n fee = (await this.feeCollector.find('')) || 0.5;\n }\n return fee;\n }\n\n private async rewardTokenApr(\n tokenAddress: string,\n rewardData: { rate: BigNumber; period_finish: BigNumber; decimals?: number }\n ) {\n if (rewardData.period_finish.toNumber() < Date.now() / 1000) {\n return {\n address: tokenAddress,\n value: 0,\n };\n } else {\n const yearlyReward = rewardData.rate.mul(86400).mul(365);\n const price = await this.tokenPrices.find(tokenAddress);\n if (price && price.usd) {\n let decimals = 18;\n if (rewardData.decimals) {\n decimals = rewardData.decimals;\n } else {\n const meta = await this.tokenMeta.find(tokenAddress);\n decimals = meta?.decimals || 18;\n }\n const yearlyRewardUsd =\n parseFloat(formatUnits(yearlyReward, decimals)) *\n parseFloat(price.usd);\n return {\n address: tokenAddress,\n value: yearlyRewardUsd,\n };\n } else {\n throw `No USD price for ${tokenAddress}`;\n }\n }\n }\n}\n","import { BigNumber, parseFixed } from '@ethersproject/bignumber';\nimport { Zero, WeiPerEther } from '@ethersproject/constants';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { isSameAddress, parsePoolInfo } from '@/lib/utils';\nimport { _downscaleDown } from '@/lib/utils/solidityMaths';\nimport { Pool, PoolAttribute, PoolType } from '@/types';\n\nimport { Findable } from '../data/types';\nimport { PoolTypeConcerns } from '../pools/pool-type-concerns';\n\ntype SpotPrices = { [tokenIn: string]: string };\n\nconst supportedPoolTypes: string[] = Object.values(PoolType);\nexport interface Node {\n address: string;\n id: string;\n joinAction: JoinAction;\n exitAction: ExitAction;\n isProportionalExit: boolean;\n type: string;\n children: Node[];\n marked: boolean;\n index: string;\n proportionOfParent: BigNumber;\n parent: Node | undefined;\n isLeaf: boolean;\n spotPrices: SpotPrices;\n decimals: number;\n balance: string;\n priceRate: string;\n}\n\ntype JoinAction = 'input' | 'batchSwap' | 'wrap' | 'joinPool';\nconst joinActions = new Map();\nsupportedPoolTypes.forEach((type) => {\n if (type.includes('Linear') && supportedPoolTypes.includes(type))\n joinActions.set(type as PoolType, 'batchSwap');\n});\njoinActions.set(PoolType.Element, 'batchSwap');\njoinActions.set(PoolType.Investment, 'joinPool');\njoinActions.set(PoolType.LiquidityBootstrapping, 'joinPool');\njoinActions.set(PoolType.MetaStable, 'joinPool');\njoinActions.set(PoolType.Stable, 'joinPool');\njoinActions.set(PoolType.StablePhantom, 'batchSwap');\njoinActions.set(PoolType.Weighted, 'joinPool');\njoinActions.set(PoolType.ComposableStable, 'joinPool');\n\ntype ExitAction = 'output' | 'batchSwap' | 'unwrap' | 'exitPool';\nconst exitActions = new Map();\nsupportedPoolTypes.forEach((type) => {\n if (type.includes('Linear') && supportedPoolTypes.includes(type))\n exitActions.set(type as PoolType, 'batchSwap');\n});\nexitActions.set(PoolType.Element, 'batchSwap');\nexitActions.set(PoolType.Investment, 'exitPool');\nexitActions.set(PoolType.LiquidityBootstrapping, 'exitPool');\nexitActions.set(PoolType.MetaStable, 'exitPool');\nexitActions.set(PoolType.Stable, 'exitPool');\nexitActions.set(PoolType.StablePhantom, 'batchSwap');\nexitActions.set(PoolType.Weighted, 'exitPool');\nexitActions.set(PoolType.ComposableStable, 'exitPool');\n\nexport class PoolGraph {\n constructor(private pools: Findable) {}\n\n async buildGraphFromRootPool(\n poolId: string,\n tokensToUnwrap: string[]\n ): Promise {\n const rootPool = await this.pools.find(poolId);\n if (!rootPool) throw new BalancerError(BalancerErrorCode.POOL_DOESNT_EXIST);\n const nodeIndex = 0;\n const rootNode = await this.buildGraphFromPool(\n rootPool.address,\n nodeIndex,\n undefined,\n WeiPerEther,\n tokensToUnwrap\n );\n return rootNode[0];\n }\n\n getTokenTotal(pool: Pool): BigNumber {\n const bptIndex = pool.tokensList.indexOf(pool.address);\n let total = Zero;\n const { balancesEvm } = parsePoolInfo(pool);\n balancesEvm.forEach((balance, i) => {\n // Ignore phantomBpt balance\n if (bptIndex !== i) {\n total = total.add(balance);\n }\n });\n return total;\n }\n\n async buildGraphFromPool(\n address: string,\n nodeIndex: number,\n parent: Node | undefined,\n proportionOfParent: BigNumber,\n tokensToUnwrap: string[]\n ): Promise<[Node, number]> {\n const pool = await this.pools.findBy('address', address);\n\n if (!pool) {\n if (!parent) {\n // If pool not found by address and is root pool (without parent), then throw error\n throw new BalancerError(BalancerErrorCode.POOL_DOESNT_EXIST);\n } else {\n // If pool not found by address, but it has parent, assume it's a leaf token and add a leafTokenNode\n const parentPool = (await this.pools.findBy(\n 'address',\n parent.address\n )) as Pool;\n const tokenIndex = parentPool.tokensList.indexOf(address);\n const leafTokenDecimals = parentPool.tokens[tokenIndex].decimals ?? 18;\n const { balancesEvm } = parsePoolInfo(parentPool);\n\n const nodeInfo = PoolGraph.createInputTokenNode(\n nodeIndex,\n address,\n leafTokenDecimals,\n parent,\n proportionOfParent,\n balancesEvm[tokenIndex].toString()\n );\n return nodeInfo;\n }\n }\n\n const joinAction = joinActions.get(pool.poolType);\n const exitAction = exitActions.get(pool.poolType);\n if (!joinAction || !exitAction)\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n\n const tokenTotal = this.getTokenTotal(pool);\n // Spot price service\n const { spotPriceCalculator } = PoolTypeConcerns.from(pool.poolType);\n const spotPrices: SpotPrices = {};\n let decimals = 18;\n // Spot price of a path is product of the sp of each pool in path. We calculate the sp for each pool token here to use as required later.\n pool.tokens.forEach((token) => {\n if (isSameAddress(token.address, pool.address)) {\n // Updated node with BPT token decimal\n decimals = token.decimals ? token.decimals : 18;\n return;\n }\n const sp = spotPriceCalculator.calcPoolSpotPrice(\n token.address,\n pool.address,\n pool\n );\n spotPrices[token.address] = sp;\n });\n\n let poolNode: Node = {\n address: pool.address,\n id: pool.id,\n type: pool.poolType,\n joinAction,\n exitAction,\n isProportionalExit: false,\n children: [],\n marked: false,\n index: nodeIndex.toString(),\n parent,\n proportionOfParent,\n isLeaf: false,\n spotPrices,\n decimals,\n balance: pool.totalShares,\n priceRate: WeiPerEther.toString(),\n };\n this.updateNodeIfProportionalExit(pool, poolNode);\n nodeIndex++;\n if (pool.poolType.toString().includes('Linear')) {\n [poolNode, nodeIndex] = this.createLinearNodeChildren(\n poolNode,\n nodeIndex,\n pool,\n tokensToUnwrap\n );\n } else {\n const { balancesEvm } = parsePoolInfo(pool);\n for (let i = 0; i < pool.tokens.length; i++) {\n // ignore any phantomBpt tokens\n if (isSameAddress(pool.tokens[i].address, pool.address)) continue;\n let proportion: BigNumber;\n // If the pool is a weighted pool we can use the actual tokenWeight as proportion\n if (pool.poolType === 'Weighted') {\n const tokenWeight = pool.tokens[i].weight as string;\n proportion = parseFixed(tokenWeight, 18);\n } else {\n proportion = BigNumber.from(balancesEvm[i])\n .mul((1e18).toString())\n .div(tokenTotal);\n }\n const finalProportion = proportion\n .mul(proportionOfParent)\n .div((1e18).toString());\n const childNode = await this.buildGraphFromPool(\n pool.tokens[i].address,\n nodeIndex,\n poolNode,\n finalProportion,\n tokensToUnwrap\n );\n nodeIndex = childNode[1];\n if (childNode[0]) poolNode.children.push(childNode[0]);\n }\n }\n return [poolNode, nodeIndex];\n }\n\n /**\n * Updates isProportionalExit for Node if the pool supports it\n * @param pool\n * @param node\n */\n updateNodeIfProportionalExit(pool: Pool, node: Node): void {\n if (pool.poolType === PoolType.Weighted) node.isProportionalExit = true;\n else if (\n pool.poolType === PoolType.ComposableStable &&\n pool.poolTypeVersion > 2\n )\n node.isProportionalExit = true;\n }\n\n createLinearNodeChildren(\n linearPoolNode: Node,\n nodeIndex: number,\n linearPool: Pool,\n tokensToUnwrap: string[]\n ): [Node, number] {\n // Main token\n if (linearPool.mainIndex === undefined)\n throw new Error('Issue With Linear Pool');\n\n if (\n tokensToUnwrap\n .map((t) => t.toLowerCase())\n .includes(linearPool.tokensList[linearPool.mainIndex].toLowerCase())\n ) {\n // Linear pool will be joined via wrapped token. This will be the child node.\n const wrappedNodeInfo = this.createWrappedTokenNode(\n linearPool,\n nodeIndex,\n linearPoolNode,\n linearPoolNode.proportionOfParent\n );\n linearPoolNode.children.push(wrappedNodeInfo[0]);\n return [linearPoolNode, wrappedNodeInfo[1]];\n } else {\n const { balancesEvm } = parsePoolInfo(linearPool);\n const mainTokenDecimals =\n linearPool.tokens[linearPool.mainIndex].decimals ?? 18;\n\n const nodeInfo = PoolGraph.createInputTokenNode(\n nodeIndex,\n linearPool.tokensList[linearPool.mainIndex],\n mainTokenDecimals,\n linearPoolNode,\n linearPoolNode.proportionOfParent,\n balancesEvm[linearPool.mainIndex].toString()\n );\n linearPoolNode.children.push(nodeInfo[0]);\n nodeIndex = nodeInfo[1];\n return [linearPoolNode, nodeIndex];\n }\n }\n\n createWrappedTokenNode(\n linearPool: Pool,\n nodeIndex: number,\n parent: Node | undefined,\n proportionOfParent: BigNumber\n ): [Node, number] {\n if (\n linearPool.wrappedIndex === undefined ||\n linearPool.mainIndex === undefined\n )\n throw new Error('Issue With Linear Pool');\n\n const { balancesEvm, upScaledBalances, scalingFactorsRaw, priceRates } =\n parsePoolInfo(linearPool);\n\n const wrappedTokenNode: Node = {\n type: 'WrappedToken',\n address: linearPool.tokensList[linearPool.wrappedIndex],\n id: 'N/A',\n children: [],\n marked: false,\n joinAction: 'wrap',\n exitAction: 'unwrap',\n isProportionalExit: false,\n index: nodeIndex.toString(),\n parent,\n proportionOfParent,\n isLeaf: false,\n spotPrices: {},\n decimals: 18,\n balance: balancesEvm[linearPool.wrappedIndex].toString(),\n priceRate: priceRates[linearPool.wrappedIndex].toString(),\n };\n nodeIndex++;\n\n const mainTokenDecimals =\n linearPool.tokens[linearPool.mainIndex].decimals ?? 18;\n\n /**\n * - upscaledBalances takes price rate into account, which is equivalent to unwrapping tokens\n * - downscaling with scalingFactorsRaw will downscale the unwrapped balance to the main token decimals\n */\n const unwrappedBalance = _downscaleDown(\n upScaledBalances[linearPool.wrappedIndex],\n scalingFactorsRaw[linearPool.mainIndex]\n ).toString();\n\n const inputNode = PoolGraph.createInputTokenNode(\n nodeIndex,\n linearPool.tokensList[linearPool.mainIndex],\n mainTokenDecimals,\n wrappedTokenNode,\n proportionOfParent,\n unwrappedBalance\n );\n wrappedTokenNode.children = [inputNode[0]];\n nodeIndex = inputNode[1];\n return [wrappedTokenNode, nodeIndex];\n }\n\n static createInputTokenNode(\n nodeIndex: number,\n address: string,\n decimals: number,\n parent: Node | undefined,\n proportionOfParent: BigNumber,\n balance: string\n ): [Node, number] {\n return [\n {\n address,\n id: 'N/A',\n type: 'Input',\n children: [],\n marked: false,\n joinAction: 'input',\n exitAction: 'output',\n isProportionalExit: false,\n index: nodeIndex.toString(), // This will be updated with real amounts in join construction.\n parent,\n proportionOfParent,\n isLeaf: true,\n spotPrices: {},\n decimals,\n balance,\n priceRate: WeiPerEther.toString(),\n },\n nodeIndex + 1,\n ];\n }\n\n static orderByBfs(root: Node): Node[] {\n // Breadth first traversal of graph\n const nodes: Node[] = [];\n const orderedNodes: Node[] = [];\n root.marked = true;\n nodes.push(root);\n while (nodes.length > 0) {\n const currentNode = nodes.shift(); // removes first\n if (currentNode) orderedNodes.push(currentNode);\n currentNode?.children.forEach((c) => {\n if (!c.marked) {\n c.marked = true;\n nodes.push(c);\n }\n });\n }\n return orderedNodes;\n }\n\n // Return a list of leaf token addresses\n static getLeafAddresses(nodes: Node[]): string[] {\n return nodes.filter((n) => n.isLeaf).map((n) => n.address);\n }\n\n /**\n * Checks if list of Nodes only contains pools that support proportional exits\n * @param nodes\n * @returns\n */\n static isProportionalPools(nodes: Node[]): boolean {\n return nodes.every((node) => {\n if (node.children.length > 1) return node.isProportionalExit;\n else return true;\n });\n }\n\n // Get full graph from root pool and return ordered nodes\n getGraphNodes = async (\n isJoin: boolean,\n poolId: string,\n tokensToUnwrap: string[]\n ): Promise => {\n const rootPool = await this.pools.find(poolId);\n if (!rootPool) throw new BalancerError(BalancerErrorCode.POOL_DOESNT_EXIST);\n\n const rootNode = await this.buildGraphFromRootPool(poolId, tokensToUnwrap);\n\n if (rootNode.id !== poolId) throw new Error('Error creating graph nodes');\n\n if (isJoin) return PoolGraph.orderByBfs(rootNode).reverse();\n else return PoolGraph.orderByBfs(rootNode);\n };\n}\n","import { defaultAbiCoder, Result } from '@ethersproject/abi';\n\nexport class WeightedPoolDecoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Decodes the userData parameter for providing the initial liquidity to a WeightedPool\n * @param data - encoded data\n */\n static joinInit = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256[]'], data);\n\n /**\n * Decodes the userData parameter for joining a WeightedPool with exact token inputs\n * @param data - encoded data\n */\n static joinExactTokensInForBPTOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256[]', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for joining a WeightedPool with a single token to receive an exact amount of BPT\n * @param data - encoded data\n */\n static joinTokenInForExactBPTOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for joining a WeightedPool proportionally to receive an exact amount of BPT\n * @param data - encoded data\n */\n static joinAllTokensInForExactBPTOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for exiting a WeightedPool by removing a single token in return for an exact amount of BPT\n * @param data - encoded data\n */\n static exitExactBPTInForOneTokenOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for exiting a WeightedPool by removing tokens in return for an exact amount of BPT\n * @param data - encoded data\n *\n */\n static exitExactBPTInForTokensOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for exiting a WeightedPool by removing exact amounts of tokens\n * @param data - encoded data\n */\n static exitBPTInForExactTokensOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256[]', 'uint256'], data);\n}\n","import { parseFixed, BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { defaultAbiCoder } from '@ethersproject/abi';\nimport { Zero } from '@ethersproject/constants';\nimport { bnum } from '@balancer-labs/sor';\n\nimport { PoolDictionary, Pool } from '../poolSource';\nimport { WeightedPoolDecoder } from '@/pool-weighted/decoder';\nimport { WeightedPoolJoinKind } from '@/pool-weighted/encoder';\nimport { isSameAddress } from '@/lib/utils';\nimport { Relayer } from '@/modules/relayer/relayer.module';\nimport { RelayerModel } from '../relayer';\nimport { ActionType } from '../vaultModel.module';\nimport { PoolToken } from '@/types';\n\nexport interface JoinPoolRequest {\n actionType: ActionType.Join;\n poolId: string;\n encodedUserData: string;\n outputReference: string;\n}\n\nexport class JoinModel {\n constructor(private relayerModel: RelayerModel) {}\n\n /**\n * Finds join kind given encoded user data.\n * @param encodedUserData\n * @returns\n */\n joinKind(encodedUserData: string): WeightedPoolJoinKind {\n const decodedUserData = defaultAbiCoder.decode(\n ['uint256'],\n encodedUserData\n );\n const joinKind = decodedUserData[0] as BigNumber;\n if (!joinKind) throw new Error('No exit kind.');\n return joinKind.toNumber() as WeightedPoolJoinKind;\n }\n\n /**\n * Decodes user join data and returns token input amounts\n * @param encodedUserData\n * @param joinKind\n * @returns\n */\n decodeJoinData(\n encodedUserData: string,\n joinKind: WeightedPoolJoinKind\n ): string | string[] {\n // At the moment all pools have same structure so just use WeightedPoolDecoded for all\n if (joinKind === WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT) {\n const bptAmountOut =\n WeightedPoolDecoder.joinAllTokensInForExactBPTOut(encodedUserData);\n return bptAmountOut.toString();\n } else if (joinKind === WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT) {\n const [, amountsIn] =\n WeightedPoolDecoder.joinExactTokensInForBPTOut(encodedUserData);\n return amountsIn;\n } else if (joinKind === WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT) {\n const [, bptAmountOut, tokenIndex] =\n WeightedPoolDecoder.joinTokenInForExactBPTOut(encodedUserData);\n return [bptAmountOut.toString(), tokenIndex];\n } else throw new Error('Non supported join data');\n }\n\n allTokensInForExactBPTOut(): string {\n throw new Error('joinAllTokensInForExactBPTOut not supported');\n /*\n We need maths for _calcAllTokensInGivenExactBptOut\n From SC:\n uint256 bptAmountOut = userData.allTokensInForExactBptOut();\n // Note that there is no maximum amountsIn parameter: this is handled by `IVault.joinPool`.\n \n uint256[] memory amountsIn = WeightedMath._calcAllTokensInGivenExactBptOut(balances, bptAmountOut, totalSupply);\n \n return (bptAmountOut, amountsIn);\n \n const bptAmountOut = this.decodeJoinData(\n encodedUserData,\n PoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT\n );\n */\n }\n\n joinExactTokensInForBPTOut(\n encodedUserData: string,\n pool: Pool\n ): [string, string[], string[]] {\n // This does not include a value for pre-minted BPT\n const amountsInWithRef = this.decodeJoinData(\n encodedUserData,\n WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT\n ) as string[];\n\n const amountsIn =\n this.relayerModel.doChainedRefReplacements(amountsInWithRef);\n // Calculate amount of BPT out given exact amounts in\n const bptAmountOut = pool._calcBptOutGivenExactTokensIn(\n amountsIn.map((a) => BigNumber.from(a))\n );\n\n // Updates BPT/totalShares value for pool\n if (\n pool.SubgraphType == 'StablePhantom' ||\n pool.SubgraphType == 'ComposableStable'\n ) {\n // Update BPT balance\n // totalShares will be updated as a side effect within SOR\n const bptAsPoolToken = pool.tokens.find((t: PoolToken) =>\n isSameAddress(t.address, pool.address)\n );\n if (!bptAsPoolToken)\n throw new Error('Pool does not contain BPT as a token');\n const bptBalanceEVM = parseFixed(\n bptAsPoolToken.balance.toString(),\n bptAsPoolToken.decimals\n );\n // subtract value because joining pool reduces pre-minted BPT being held by the pool\n pool.updateTokenBalanceForPool(\n pool.address,\n bptBalanceEVM.sub(bptAmountOut)\n );\n } else {\n // For pools that do not contain BPT as a token, update totalShares directly\n pool.updateTokenBalanceForPool(\n pool.address,\n pool.totalShares.add(bptAmountOut)\n );\n }\n\n const tokensWithoutBpt = pool.tokens.filter(\n (t: PoolToken) => !isSameAddress(t.address, pool.address)\n );\n // Update each tokens balance\n amountsIn.forEach((amount, i) => {\n const balanceEvm = parseFixed(\n tokensWithoutBpt[i].balance.toString(),\n tokensWithoutBpt[i].decimals\n );\n pool.updateTokenBalanceForPool(\n tokensWithoutBpt[i].address,\n balanceEvm.add(amount)\n );\n });\n return [\n bptAmountOut.toString(),\n tokensWithoutBpt.map((t: PoolToken) => t.address),\n amountsIn,\n ];\n }\n\n joinTokenInForExactBPTOut(\n encodedUserData: string,\n pool: Pool\n ): [string, string, string] {\n const [bptAmountOutWithRef, tokenInIndex] = this.decodeJoinData(\n encodedUserData,\n WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT\n ) as string;\n\n const bptAmountOut =\n this.relayerModel.doChainedRefReplacement(bptAmountOutWithRef);\n // Uses an existing SOR functionality so need to deal with pairData and scaling\n const pairData = pool.parsePoolPairData(\n pool.tokensList[Number(tokenInIndex)],\n pool.address\n );\n\n const bptAmountOutHuman = formatFixed(bptAmountOut, 18);\n // Needs human scale\n const amountInHuman = pool\n ._tokenInForExactTokenOut(\n pairData as never,\n bnum(bptAmountOutHuman.toString())\n )\n .dp(pairData.decimalsIn);\n const amountInEvm = parseFixed(\n amountInHuman.toString(),\n pairData.decimalsIn\n );\n\n // Update balances of tokenIn and tokenOut - use EVM scale\n pool.updateTokenBalanceForPool(\n pairData.tokenIn,\n pairData.balanceIn.add(amountInEvm)\n );\n // For a join we have to add the extra BPT to the balance as this is equivalent to bptTotalSupply\n pool.updateTokenBalanceForPool(\n pairData.tokenOut,\n pairData.balanceOut.add(bptAmountOut)\n );\n\n return [amountInEvm.toString(), pairData.tokenIn, amountInEvm.toString()];\n }\n\n /**\n * Perform the specified exit type.\n * @param joinPoolRequest\n * @returns tokens out\n */\n async doJoinPool(\n joinPoolRequest: JoinPoolRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n const pool = pools[joinPoolRequest.poolId];\n const joinKind = this.joinKind(joinPoolRequest.encodedUserData);\n let bptOut = '0';\n let tokens: string[] = [];\n let amounts: string[] = [];\n if (joinKind === WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT) {\n // Returns amount of tokens in - This isn't currently implemented\n bptOut = this.allTokensInForExactBPTOut();\n } else if (joinKind === WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT) {\n // Returns amount of BPT out\n [bptOut, tokens, amounts] = this.joinExactTokensInForBPTOut(\n joinPoolRequest.encodedUserData,\n pool\n );\n } else if (joinKind === WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT) {\n // Returns amount of tokenIn\n let tokenIn: string, amountIn: string;\n [bptOut, tokenIn, amountIn] = this.joinTokenInForExactBPTOut(\n joinPoolRequest.encodedUserData,\n pool\n );\n tokens.push(tokenIn);\n amounts.push(amountIn);\n } else throw new Error('Exit type not implemented');\n\n tokens.push(pool.address);\n // -ve because coming from Vault\n amounts.push(Zero.sub(bptOut).toString());\n\n if (\n joinPoolRequest.outputReference &&\n Relayer.isChainedReference(joinPoolRequest.outputReference)\n ) {\n this.relayerModel.setChainedReferenceValue(\n joinPoolRequest.outputReference,\n bptOut\n );\n }\n return [tokens, amounts];\n }\n}\n","import { parseFixed, BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { defaultAbiCoder } from '@ethersproject/abi';\nimport { Zero } from '@ethersproject/constants';\nimport { bnum } from '@balancer-labs/sor';\n\nimport { PoolDictionary, Pool } from '../poolSource';\nimport { ComposableStablePoolExitKind } from '@/pool-composable-stable';\nimport { WeightedPoolDecoder } from '@/pool-weighted/decoder';\nimport { WeightedPoolExitKind } from '@/pool-weighted/encoder';\nimport { isSameAddress } from '@/lib/utils';\nimport { RelayerModel } from '../relayer';\nimport { ActionType } from '../vaultModel.module';\nimport { OutputReference } from '@/modules/relayer/types';\nimport { PoolToken } from '@/types';\n\nexport interface ExitPoolRequest {\n actionType: ActionType.Exit;\n poolId: string;\n encodedUserData: string;\n outputReferences: OutputReference[];\n}\n\nfunction getBalancesForTokens(pool: Pool, tokens: string[]): string[] {\n const balances: string[] = [];\n tokens.forEach((t) => {\n const tokenIndex = pool.tokens.findIndex((pt: PoolToken) =>\n isSameAddress(pt.address, t)\n );\n if (tokenIndex < 0) throw 'Pool does not contain tokenIn';\n balances.push(\n parseFixed(\n pool.tokens[tokenIndex].balance,\n pool.tokens[tokenIndex].decimals\n ).toString()\n );\n });\n return balances;\n}\n\nexport class ExitModel {\n constructor(private relayerModel: RelayerModel) {}\n\n /**\n * Finds exit kind given encoded user data and pool type.\n * @param poolType\n * @param encodedUserData\n * @returns\n */\n exitKind(poolType: string, encodedUserData: string): WeightedPoolExitKind {\n const decodedUserData = defaultAbiCoder.decode(\n ['uint256'],\n encodedUserData\n );\n const exitKind = decodedUserData[0] as BigNumber;\n if (!exitKind) throw new Error('No exit kind.');\n if (poolType === 'ComposableStable') {\n if (\n exitKind.toNumber() ===\n ComposableStablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT\n )\n return WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT;\n if (\n exitKind.toNumber() ===\n ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT\n )\n return WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT;\n else {\n return WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT;\n }\n } else {\n return exitKind.toNumber() as WeightedPoolExitKind;\n }\n }\n\n /**\n * Decodes user exit data and returns token input amounts\n * @param encodedUserData\n * @param exitKind\n * @returns\n */\n decodeExitData(\n encodedUserData: string,\n exitKind: WeightedPoolExitKind\n ): string[] {\n // At the moment all pools have same structure so just use WeightedPoolDecoded for all\n if (exitKind === WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT) {\n const [, amountsOut, maxBPTAmountIn] =\n WeightedPoolDecoder.exitBPTInForExactTokensOut(encodedUserData);\n return [amountsOut.toString(), maxBPTAmountIn.toString()];\n } else if (\n exitKind === WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT\n ) {\n const [, bptIn, tokenIndex] =\n WeightedPoolDecoder.exitExactBPTInForOneTokenOut(encodedUserData);\n return [bptIn.toString(), tokenIndex.toString()];\n } else if (exitKind === WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT) {\n const [, bptIn] =\n WeightedPoolDecoder.exitExactBPTInForTokensOut(encodedUserData);\n return [bptIn.toString()];\n } else throw new Error('Non supported exit data');\n }\n\n /**\n * Exit pool, BPT in to tokens out.\n * Updates pool balances.\n * @param encodedUserData\n * @param pool\n * @returns tokensOut\n */\n exactBptInForTokensOut(\n encodedUserData: string,\n pool: Pool\n ): [string, string[], string[]] {\n const [bptInWithRef] = this.decodeExitData(\n encodedUserData,\n WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT\n );\n\n const bptIn = this.relayerModel.doChainedRefReplacement(bptInWithRef);\n // Calculate amount of tokens out given an exact amount of BPT in\n const amountsOut = pool\n ._calcTokensOutGivenExactBptIn(BigNumber.from(bptIn))\n .map((a: BigNumber) => a.toString());\n\n // Updates BPT/totalShares value for pool\n if (\n pool.SubgraphType == 'StablePhantom' ||\n pool.SubgraphType == 'ComposableStable'\n ) {\n // Update BPT balance\n // totalShares will be updated as a side effect within SOR\n const bptAsPoolToken = pool.tokens.find((t: PoolToken) =>\n isSameAddress(t.address, pool.address)\n );\n if (!bptAsPoolToken)\n throw new Error('Pool does not contain BPT as a token');\n const bptBalanceEVM = parseFixed(\n bptAsPoolToken.balance.toString(),\n bptAsPoolToken.decimals\n );\n pool.updateTokenBalanceForPool(\n pool.address,\n bptBalanceEVM.add(bptIn) // add value because exiting pool increases pre-minted BPT being held by the pool\n );\n } else {\n // For pools that do not contain BPT as a token, update totalShares directly\n pool.updateTokenBalanceForPool(pool.address, pool.totalShares.sub(bptIn));\n }\n\n const tokensWithoutBpt = pool.tokens.filter(\n (t: PoolToken) => !isSameAddress(t.address, pool.address)\n );\n // Update each tokens balance\n amountsOut.forEach((amountOut: string, i: number) => {\n const balanceEvm = parseFixed(\n tokensWithoutBpt[i].balance.toString(),\n tokensWithoutBpt[i].decimals\n );\n pool.updateTokenBalanceForPool(\n tokensWithoutBpt[i].address,\n balanceEvm.sub(amountOut)\n );\n });\n return [\n bptIn,\n tokensWithoutBpt.map((t: PoolToken) => t.address),\n amountsOut,\n ];\n }\n\n /**\n * Exit pool, BPT in to single token out.\n * Updates pool balances.\n * @param encodedUserData\n * @param pool\n * @returns tokens out\n */\n exactBptInForOneTokenOut(\n encodedUserData: string,\n pool: Pool\n ): [string, string[], string[]] {\n const [bptInWithRef, tokenIndex] = this.decodeExitData(\n encodedUserData,\n WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT\n );\n const bptIn = this.relayerModel.doChainedRefReplacement(bptInWithRef);\n // Uses an existing SOR functionality so need to deal with pairData and scaling\n const pairData = pool.parsePoolPairData(\n pool.address,\n pool.tokensList[Number(tokenIndex)]\n );\n // Calculation requires floating point number input\n const amountInHuman: string = formatFixed(bptIn, pairData.decimalsIn);\n // Calculate amount of token out given an exact amount of BPT in\n const amountOutHuman = pool\n ._exactTokenInForTokenOut(pairData as never, bnum(amountInHuman))\n .dp(pairData.decimalsOut);\n const amountOutEvm = parseFixed(\n amountOutHuman.toString(),\n pairData.decimalsOut\n );\n\n // Update balances use EVM scaled\n const poolBalances = getBalancesForTokens(pool, [\n pool.address,\n pairData.tokenOut,\n ]);\n // Subtract token out amount from pool\n pool.updateTokenBalanceForPool(\n pairData.tokenOut,\n BigNumber.from(poolBalances[1]).sub(amountOutEvm)\n );\n\n if (\n pool.SubgraphType == 'StablePhantom' ||\n pool.SubgraphType == 'ComposableStable'\n ) {\n // Add value because exiting pool increases pre-minted BPT being held by the pool\n // totalShares is updated as a side effect on SOR\n pool.updateTokenBalanceForPool(\n pool.address,\n BigNumber.from(poolBalances[0]).add(bptIn)\n );\n } else {\n // Exiting a pool is equivalent to removing from totalSupply (totalShares) so must sub here\n pool.updateTokenBalanceForPool(pool.address, pool.totalShares.sub(bptIn));\n }\n\n const tokensWithoutBpt = pool.tokensList.filter(\n (t: string) => !isSameAddress(t, pool.address)\n );\n const amountsOut = new Array(tokensWithoutBpt.length).fill('0');\n amountsOut[Number(tokenIndex)] = amountOutEvm.toString();\n return [bptIn, tokensWithoutBpt, amountsOut];\n }\n\n /**\n * Perform the specified exit type.\n * @param exitPoolRequest\n * @returns tokens out\n */\n async doExitPool(\n exitPoolRequest: ExitPoolRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n const pool = pools[exitPoolRequest.poolId];\n const exitKind = this.exitKind(\n pool.SubgraphType,\n exitPoolRequest.encodedUserData\n );\n let amountsOut: string[] = [];\n let bptIn: string;\n let tokensOut: string[] = [];\n const tokens: string[] = [];\n const deltas: string[] = [];\n if (exitKind === WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT) {\n [bptIn, tokensOut, amountsOut] = this.exactBptInForTokensOut(\n exitPoolRequest.encodedUserData,\n pool\n );\n } else if (\n exitKind === WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT\n ) {\n [bptIn, tokensOut, amountsOut] = this.exactBptInForOneTokenOut(\n exitPoolRequest.encodedUserData,\n pool\n );\n } else throw new Error('Exit type not implemented');\n\n // Save any chained references\n for (let i = 0; i < exitPoolRequest.outputReferences.length; i++) {\n const tokenOut =\n pool.tokensList[exitPoolRequest.outputReferences[i].index];\n const tokenOutIndex = tokensOut.indexOf(tokenOut);\n if (tokenOutIndex === -1) throw new Error('Token out not found');\n this.relayerModel.setChainedReferenceValue(\n exitPoolRequest.outputReferences[i].key.toString(),\n amountsOut[tokenOutIndex]\n );\n }\n tokens.push(pool.address, ...tokensOut);\n deltas.push(bptIn, ...amountsOut.map((a) => Zero.sub(a).toString()));\n return [tokens, deltas];\n }\n}\n","import { parseFixed, BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { Zero } from '@ethersproject/constants';\nimport { bnum } from '@balancer-labs/sor';\n\nimport { PoolDictionary, Pool } from '../poolSource';\nimport { EncodeBatchSwapInput } from '@/modules/relayer/types';\nimport { Swap, SwapType } from '@/modules/swaps/types';\nimport { Relayer } from '@/modules/relayer/relayer.module';\nimport { RelayerModel } from '../relayer';\nimport { ActionType } from '../vaultModel.module';\n\nexport interface SwapRequest\n extends Pick {\n actionType: ActionType.Swap;\n}\n\nexport interface BatchSwapRequest\n extends Pick<\n EncodeBatchSwapInput,\n 'swaps' | 'assets' | 'funds' | 'swapType' | 'outputReferences'\n > {\n actionType: ActionType.BatchSwap;\n}\n\nexport class SwapModel {\n constructor(private relayerModel: RelayerModel) {}\n\n /**\n * Performs a single swap with one pool.\n * @param swapRequest\n * @returns Returns the net Vault asset balance delta. Positive amount represent token (or ETH) sent to the Vault, and negative amount represent token (or ETH) sent by the Vault. Delta corresponds to the asset out.\n */\n async doSingleSwap(\n swapRequest: SwapRequest,\n pools: PoolDictionary\n ): Promise {\n const amountIn = this.relayerModel.doChainedRefReplacement(\n swapRequest.request.amount.toString()\n );\n\n const pool = pools[swapRequest.request.poolId];\n const [, amountOutEvm] = this.doSwap(\n swapRequest.request.assetIn,\n swapRequest.request.assetOut,\n pool,\n swapRequest.request.kind,\n amountIn\n );\n\n const delta = Zero.sub(amountOutEvm);\n if (!swapRequest.outputReference)\n throw new Error('Missing outputReference');\n\n // Swap return values are signed, as they are Vault deltas (positive values correspond to assets sent\n // to the Vault, and negative values are assets received from the Vault). To simplify the chained reference\n // value model, we simply store the absolute value.\n this.relayerModel.setChainedReferenceValue(\n swapRequest.outputReference.toString(),\n delta.abs().toString()\n );\n return [delta.toString(), amountIn];\n }\n\n /**\n * Performs a series of swaps with one or multiple Pools.\n * @param batchSwapRequest\n * @returns Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at the same index in the `assets` array.\n */\n async doBatchSwap(\n batchSwapRequest: BatchSwapRequest,\n pools: PoolDictionary\n ): Promise {\n const assets = batchSwapRequest.assets;\n const deltas = new Array(assets.length).fill(Zero);\n // Used for multihop swaps where previous swap return is used as input to next swap\n let previousAmount: string;\n\n for (let i = 0; i < batchSwapRequest.swaps.length; ++i) {\n const amount = batchSwapRequest.swaps[i].amount;\n if (Relayer.isChainedReference(amount)) {\n batchSwapRequest.swaps[i].amount =\n this.relayerModel.getChainedReferenceValue(amount);\n }\n }\n\n // Handle each swap in order\n batchSwapRequest.swaps.forEach((swap) => {\n const tokenIn = assets[swap.assetInIndex];\n const tokenOut = assets[swap.assetOutIndex];\n const pool = pools[swap.poolId];\n let amount = swap.amount;\n if (amount === '0') amount = previousAmount;\n const [amountInEvm, amountOutEvm] = this.doSwap(\n tokenIn,\n tokenOut,\n pool,\n batchSwapRequest.swapType,\n amount\n );\n\n previousAmount =\n batchSwapRequest.swapType === SwapType.SwapExactIn\n ? amountOutEvm.toString()\n : amountInEvm.toString();\n\n deltas[swap.assetInIndex] = deltas[swap.assetInIndex].add(amountInEvm);\n deltas[swap.assetOutIndex] = deltas[swap.assetOutIndex].sub(amountOutEvm);\n });\n\n for (let i = 0; i < batchSwapRequest.outputReferences.length; i++) {\n // Batch swap return values are signed, as they are Vault deltas (positive values correspond to assets sent\n // to the Vault, and negative values are assets received from the Vault). To simplify the chained reference\n // value model, we simply store the absolute value.\n this.relayerModel.setChainedReferenceValue(\n batchSwapRequest.outputReferences[i].key.toString(),\n deltas[batchSwapRequest.outputReferences[i].index].abs().toString()\n );\n }\n return deltas.map((d) => d.toString());\n }\n\n /**\n * Perform swap against a pool (and update balances)\n * @param tokenIn\n * @param tokenOut\n * @param pool\n * @param swapType\n * @param amount (EVM Scale)\n * @returns\n */\n doSwap(\n tokenIn: string,\n tokenOut: string,\n pool: Pool,\n swapType: SwapType,\n amount: string\n ): BigNumber[] {\n const pairData = pool.parsePoolPairData(tokenIn, tokenOut);\n const isExactIn = swapType === SwapType.SwapExactIn;\n let amountInEvm: string | BigNumber = isExactIn\n ? BigNumber.from(amount)\n : Zero;\n let amountOutEvm: string | BigNumber = isExactIn\n ? Zero\n : BigNumber.from(amount);\n const amountInHuman: string | BigNumber = formatFixed(\n amountInEvm,\n pairData.decimalsIn\n );\n const amountOutHuman: string | BigNumber = formatFixed(\n amountOutEvm,\n pairData.decimalsOut\n );\n\n if (isExactIn) {\n // Needs human scale\n const amountOutHuman = pool\n ._exactTokenInForTokenOut(\n pairData as never,\n bnum(amountInHuman.toString())\n )\n .dp(pairData.decimalsOut);\n amountOutEvm = parseFixed(\n amountOutHuman.toString(),\n pairData.decimalsOut\n );\n } else {\n // Needs human scale\n const amountInHuman = pool\n ._tokenInForExactTokenOut(\n pairData as never,\n bnum(amountOutHuman.toString())\n )\n .dp(pairData.decimalsIn);\n amountInEvm = parseFixed(amountInHuman.toString(), pairData.decimalsIn);\n }\n // Update balances of tokenIn and tokenOut - use EVM scale\n pool.updateTokenBalanceForPool(\n pairData.tokenIn,\n pairData.balanceIn.add(amountInEvm)\n );\n pool.updateTokenBalanceForPool(\n pairData.tokenOut,\n pairData.balanceOut.sub(amountOutEvm)\n );\n return [amountInEvm, amountOutEvm];\n }\n}\n","import { LinearPool } from '@balancer-labs/sor';\nimport { parseFixed } from '@ethersproject/bignumber';\n\nimport { EncodeUnwrapAaveStaticTokenInput } from '@/modules/relayer/types';\n\nimport { PoolDictionary } from '../poolSource';\nimport { RelayerModel } from '../relayer';\nimport { ActionType } from '../vaultModel.module';\nimport { WeiPerEther, Zero } from '@ethersproject/constants';\nimport { SolidityMaths } from '@/lib/utils/solidityMaths';\n\nexport interface UnwrapRequest\n extends Pick {\n poolId: string;\n actionType: ActionType.Unwrap;\n}\n\nexport class UnwrapModel {\n constructor(private relayerModel: RelayerModel) {}\n\n /**\n * Perform the specified unwrap type.\n * @param unwrapRequest\n * @param pools\n * @returns tokens out and their respective deltas\n */\n async doUnwrap(\n unwrapRequest: UnwrapRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n const pool = pools[unwrapRequest.poolId] as LinearPool;\n const wrappedToken = pool.tokens[pool.wrappedIndex];\n const underlyingToken = pool.tokens[pool.mainIndex];\n\n const amountIn = this.relayerModel.doChainedRefReplacement(\n unwrapRequest.amount.toString()\n );\n\n // must be negative because is leaving the vault\n const amountOut = SolidityMaths.divDownFixed(\n SolidityMaths.mulDownFixed(\n BigInt(amountIn),\n parseFixed(wrappedToken.priceRate, 18).toBigInt()\n ),\n WeiPerEther.toBigInt()\n ).toString();\n\n // Save chained references\n this.relayerModel.setChainedReferenceValue(\n unwrapRequest.outputReference.toString(),\n amountOut\n );\n\n const tokens = [wrappedToken.address, underlyingToken.address];\n const deltas = [amountIn, Zero.sub(amountOut).toString()];\n return [tokens, deltas];\n }\n}\n","import { PoolDictionary } from '../poolSource';\nimport { RelayerModel } from '../relayer';\nimport { JoinModel, JoinPoolRequest } from './join';\nimport { ExitModel, ExitPoolRequest } from './exit';\nimport { SwapModel, BatchSwapRequest, SwapRequest } from './swap';\nimport { UnwrapModel, UnwrapRequest } from './unwrap';\n\nexport class PoolModel {\n joinModel: JoinModel;\n exitModel: ExitModel;\n swapModel: SwapModel;\n unwrapModel: UnwrapModel;\n\n constructor(private relayerModel: RelayerModel) {\n this.joinModel = new JoinModel(relayerModel);\n this.exitModel = new ExitModel(relayerModel);\n this.swapModel = new SwapModel(relayerModel);\n this.unwrapModel = new UnwrapModel(relayerModel);\n }\n\n async doJoin(\n joinPoolRequest: JoinPoolRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n return this.joinModel.doJoinPool(joinPoolRequest, pools);\n }\n\n async doExit(\n exitPoolRequest: ExitPoolRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n return this.exitModel.doExitPool(exitPoolRequest, pools);\n }\n\n async doBatchSwap(\n batchSwapRequest: BatchSwapRequest,\n pools: PoolDictionary\n ): Promise {\n return this.swapModel.doBatchSwap(batchSwapRequest, pools);\n }\n\n async doSingleSwap(\n swapRequest: SwapRequest,\n pools: PoolDictionary\n ): Promise {\n return this.swapModel.doSingleSwap(swapRequest, pools);\n }\n\n async doUnwrap(\n unwrapRequest: UnwrapRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n return this.unwrapModel.doUnwrap(unwrapRequest, pools);\n }\n}\n","import { Relayer } from '@/modules/relayer/relayer.module';\n\nexport class RelayerModel {\n chainedRefs: Record = {};\n\n /**\n * Stores `value` as the amount referenced by chained reference `ref`.\n * @param ref\n * @param value\n */\n setChainedReferenceValue(ref: string, value: string): void {\n this.chainedRefs[ref] = value;\n }\n\n /**\n * Returns the amount referenced by chained reference `ref`.\n * @param ref\n * @returns\n */\n getChainedReferenceValue(ref: string): string {\n return this.chainedRefs[ref];\n }\n\n doChainedRefReplacement(amount: string): string {\n if (Relayer.isChainedReference(amount.toString())) {\n return this.getChainedReferenceValue(amount.toString());\n } else return amount;\n }\n\n doChainedRefReplacements(amounts: string[]): string[] {\n return amounts.map((amount) =>\n this.doChainedRefReplacement(amount).toString()\n );\n }\n}\n","import { cloneDeep } from 'lodash';\nimport {\n SubgraphPoolBase,\n SubgraphToken,\n PoolDataService,\n WeightedPool,\n StablePool,\n MetaStablePool,\n LinearPool,\n PhantomStablePool,\n ComposableStablePool,\n} from '@balancer-labs/sor';\nimport { Logger } from '@/lib/utils/logger';\n\nexport interface PoolDictionary {\n [poolId: string]: Pool;\n}\n\nexport type Pool =\n | (\n | WeightedPool\n | StablePool\n | LinearPool\n | MetaStablePool\n | PhantomStablePool\n | ComposableStablePool\n ) & { SubgraphType: string };\n\nexport class PoolsSource {\n poolsArray: SubgraphPoolBase[] = [];\n poolsDict: PoolDictionary = {};\n constructor(\n private poolDataService: PoolDataService,\n private wrappedNativeAsset: string\n ) {}\n dataSource(): PoolDataService {\n return this.poolDataService;\n }\n\n async all(refresh = false): Promise {\n if (refresh || this.poolsArray.length === 0) {\n const list = cloneDeep(await this.dataSource().getPools());\n for (const pool of list) {\n // For non pre-minted BPT pools we add the BPT to the token list. This makes the SOR functions work for joins/exits\n if (\n [\n 'Weighted',\n 'Investment',\n 'Stable',\n 'LiquidityBootstrapping',\n ].includes(pool.poolType)\n ) {\n const BptAsToken: SubgraphToken = {\n address: pool.address,\n balance: pool.totalShares,\n decimals: 18,\n priceRate: '1',\n weight: '0',\n };\n pool.tokens.push(BptAsToken);\n pool.tokensList.push(pool.address);\n }\n }\n this.poolsArray = list;\n }\n return this.poolsArray;\n }\n\n parseToPoolsDict(pools: SubgraphPoolBase[]): PoolDictionary {\n return Object.fromEntries(\n cloneDeep(pools)\n .filter(\n (pool) => pool.tokensList.length > 0 && pool.tokens[0].balance !== '0'\n )\n .map((pool) => [pool.id, this.parseNewPool(pool)])\n .filter(([, pool]) => pool !== undefined)\n );\n }\n\n parseNewPool(subgraphPool: SubgraphPoolBase): Pool | undefined {\n // We're not interested in any pools which don't allow swapping\n if (!subgraphPool.swapEnabled) return undefined;\n\n let pool: Pool = {} as Pool;\n\n try {\n if (\n ['Weighted', 'Investment', 'LiquidityBootstrapping'].includes(\n subgraphPool.poolType\n )\n ) {\n const sorPool = WeightedPool.fromPool(subgraphPool, false);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType === 'Stable') {\n const sorPool = StablePool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType === 'MetaStable') {\n const sorPool = MetaStablePool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType.toString().includes('Linear')) {\n const sorPool = LinearPool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType === 'StablePhantom') {\n const sorPool = PhantomStablePool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType === 'ComposableStable') {\n const sorPool = ComposableStablePool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else {\n const logger = Logger.getInstance();\n logger.warn(\n `Unknown pool type or type field missing: ${subgraphPool.poolType} ${subgraphPool.id}`\n );\n return undefined;\n }\n if (!pool) throw new Error('Issue with Pool');\n pool.SubgraphType = subgraphPool.poolType;\n } catch (err) {\n console.error(`Error parseNewPool`);\n return undefined;\n }\n return pool;\n }\n\n /**\n * Converts Subgraph array into PoolDictionary\n * @param refresh\n * @returns\n */\n async poolsDictionary(refresh = false): Promise {\n if (refresh || Object.keys(this.poolsDict).length === 0) {\n const poolsArray = await this.all(refresh);\n this.poolsDict = this.parseToPoolsDict(poolsArray);\n }\n return this.poolsDict;\n }\n}\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { Zero } from '@ethersproject/constants';\nimport { PoolDataService } from '@balancer-labs/sor';\n\nimport { PoolModel } from './poolModel/poolModel';\nimport { JoinPoolRequest } from './poolModel/join';\nimport { ExitPoolRequest } from './poolModel/exit';\nimport { BatchSwapRequest, SwapRequest } from './poolModel/swap';\nimport { UnwrapRequest } from './poolModel/unwrap';\nimport { RelayerModel } from './relayer';\nimport { PoolsSource } from './poolSource';\nimport {\n EncodeBatchSwapInput,\n EncodeJoinPoolInput,\n EncodeExitPoolInput,\n} from '../relayer/types';\nimport { Swap } from '../swaps/types';\n\nexport enum ActionType {\n BatchSwap,\n Join,\n Exit,\n Swap,\n Unwrap,\n}\n\nexport type Requests =\n | BatchSwapRequest\n | JoinPoolRequest\n | ExitPoolRequest\n | SwapRequest\n | UnwrapRequest;\n\n/**\n * Controller / use-case layer for interacting with pools data.\n */\nexport class VaultModel {\n poolsSource: PoolsSource;\n\n constructor(poolDataService: PoolDataService, wrappedNativeAsset: string) {\n this.poolsSource = new PoolsSource(poolDataService, wrappedNativeAsset);\n }\n\n updateDeltas(\n deltas: Record,\n assets: string[],\n amounts: string[]\n ): Record {\n assets.forEach((t, i) => {\n if (!deltas[t]) deltas[t] = Zero;\n deltas[t] = deltas[t].add(amounts[i]);\n });\n return deltas;\n }\n\n async multicall(\n rawCalls: Requests[],\n refresh = false\n ): Promise> {\n const relayerModel = new RelayerModel();\n const poolModel = new PoolModel(relayerModel);\n const pools = await this.poolsSource.poolsDictionary(refresh);\n const deltas: Record = {};\n for (const call of rawCalls) {\n let tokens: string[] = [];\n let amounts: string[] = [];\n switch (call.actionType) {\n case ActionType.Join: {\n [tokens, amounts] = await poolModel.doJoin(call, pools);\n break;\n }\n case ActionType.Exit: {\n [tokens, amounts] = await poolModel.doExit(call, pools);\n break;\n }\n case ActionType.BatchSwap: {\n tokens = call.assets;\n amounts = await poolModel.doBatchSwap(call, pools);\n break;\n }\n case ActionType.Swap: {\n tokens = [call.request.assetOut, call.request.assetIn];\n amounts = await poolModel.doSingleSwap(call, pools);\n break;\n }\n case ActionType.Unwrap: {\n [tokens, amounts] = await poolModel.doUnwrap(call, pools);\n break;\n }\n default:\n break;\n }\n this.updateDeltas(deltas, tokens, amounts);\n }\n return deltas;\n }\n\n static mapSwapRequest(call: Swap): SwapRequest {\n const swapRequest: SwapRequest = {\n actionType: ActionType.Swap,\n request: call.request,\n funds: call.funds,\n outputReference: call.outputReference,\n };\n return swapRequest;\n }\n\n static mapBatchSwapRequest(call: EncodeBatchSwapInput): BatchSwapRequest {\n const batchSwapRequest: BatchSwapRequest = {\n actionType: ActionType.BatchSwap,\n swaps: call.swaps,\n assets: call.assets,\n funds: call.funds,\n swapType: call.swapType,\n outputReferences: call.outputReferences,\n };\n return batchSwapRequest;\n }\n\n static mapJoinPoolRequest(call: EncodeJoinPoolInput): JoinPoolRequest {\n const joinPoolRequest: JoinPoolRequest = {\n actionType: ActionType.Join,\n poolId: call.poolId,\n encodedUserData: call.joinPoolRequest.userData,\n outputReference: call.outputReference,\n };\n return joinPoolRequest;\n }\n\n static mapExitPoolRequest(call: EncodeExitPoolInput): ExitPoolRequest {\n const exitPoolRequest: ExitPoolRequest = {\n actionType: ActionType.Exit,\n poolId: call.poolId,\n encodedUserData: call.exitPoolRequest.userData,\n outputReferences: call.outputReferences,\n };\n return exitPoolRequest;\n }\n\n static mapUnwrapRequest(\n amount: BigNumberish,\n outputReference: BigNumberish,\n poolId: string\n ): UnwrapRequest {\n const unwrapRequest: UnwrapRequest = {\n actionType: ActionType.Unwrap,\n poolId,\n amount,\n outputReference,\n };\n return unwrapRequest;\n }\n}\n","import { cloneDeep } from 'lodash';\nimport { BigNumber, BigNumberish, parseFixed } from '@ethersproject/bignumber';\nimport { AddressZero, WeiPerEther, Zero } from '@ethersproject/constants';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { EncodeJoinPoolInput, Relayer } from '@/modules/relayer/relayer.module';\nimport {\n FundManagement,\n SingleSwap,\n Swap,\n SwapType,\n} from '@/modules/swaps/types';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport { BalancerNetworkConfig, JoinPoolRequest, PoolType } from '@/types';\nimport { PoolGraph, Node } from '../graph/graph';\n\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { networkAddresses } from '@/lib/constants/config';\nimport { AssetHelpers, getEthValue, isSameAddress, replace } from '@/lib/utils';\nimport {\n SolidityMaths,\n _computeScalingFactor,\n _upscale,\n} from '@/lib/utils/solidityMaths';\nimport { calcPriceImpact } from '../pricing/priceImpact';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { getPoolAddress } from '@/pool-utils';\nimport { Simulation, SimulationType } from '../simulation/simulation.module';\nimport { Requests, VaultModel } from '../vaultModel/vaultModel.module';\nimport { SwapRequest } from '../vaultModel/poolModel/swap';\nimport { JoinPoolRequest as JoinPoolModelRequest } from '../vaultModel/poolModel/join';\nimport { JsonRpcSigner } from '@ethersproject/providers';\nimport { BalancerRelayer__factory } from '@/contracts/factories/BalancerRelayer__factory';\nimport { Logger } from '@/lib/utils/logger';\n\nconst balancerRelayerInterface = BalancerRelayer__factory.createInterface();\n\n// Quickly switch useful debug logs on/off\nconst DEBUG = false;\n\nfunction debugLog(log: string) {\n const logger = Logger.getInstance();\n if (DEBUG) logger.info(log);\n}\n\nexport class Join {\n private relayer: string;\n private wrappedNativeAsset;\n constructor(\n private poolGraph: PoolGraph,\n networkConfig: BalancerNetworkConfig,\n private simulationService: Simulation\n ) {\n const { tokens, contracts } = networkAddresses(networkConfig.chainId);\n this.relayer = contracts.balancerRelayer;\n this.wrappedNativeAsset = tokens.wrappedNativeAsset;\n }\n\n private checkInputs(tokensIn: string[], amountsIn: string[]) {\n if (tokensIn.length === 0)\n throw new BalancerError(BalancerErrorCode.MISSING_TOKENS);\n\n if (amountsIn.every((a) => a === '0'))\n throw new BalancerError(BalancerErrorCode.JOIN_WITH_ZERO_AMOUNT);\n\n if (tokensIn.length != amountsIn.length)\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n\n if (\n tokensIn.some((t) => t === AddressZero) &&\n tokensIn.some(\n (t) => t.toLowerCase() === this.wrappedNativeAsset.toLowerCase()\n )\n )\n throw new BalancerError(BalancerErrorCode.INPUT_TOKEN_INVALID);\n }\n\n async joinPool(\n poolId: string,\n tokensIn: string[],\n amountsIn: string[],\n userAddress: string,\n slippage: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType,\n authorisation?: string\n ): Promise<{\n to: string;\n encodedCall: string;\n expectedOut: string;\n minOut: string;\n priceImpact: string;\n value: BigNumberish;\n }> {\n this.checkInputs(tokensIn, amountsIn);\n\n // Create nodes for each pool/token interaction and order by breadth first\n const orderedNodes = await this.poolGraph.getGraphNodes(true, poolId, []);\n\n const nativeAssetIndex = tokensIn.findIndex((t) => t === AddressZero);\n const isNativeAssetJoin = nativeAssetIndex !== -1;\n const tokensInWithoutNativeAsset = replace(\n tokensIn,\n nativeAssetIndex,\n this.wrappedNativeAsset.toLowerCase()\n );\n\n const joinPaths = Join.getJoinPaths(\n orderedNodes,\n tokensInWithoutNativeAsset,\n amountsIn\n );\n\n const totalBptZeroPi = Join.totalBptZeroPriceImpact(joinPaths);\n /*\n - Create calls with 0 min bpt for each root join\n - static call (or V4 special call) to get actual amounts for each root join\n - Apply slippage to amounts\n - Recreate calls with minAmounts === actualAmountsWithSlippage\n - Return minAmoutOut (sum actualAmountsWithSlippage), UI would use this to display to user\n - Return updatedCalls, UI would use this to execute tx\n */\n // Create calls with 0 expected for each root join\n // Peek is enabled here so we can static call the returned amounts and use these to set limits\n debugLog(`\\n--- Simulation Calls ---`);\n const {\n multiRequests,\n encodedCall: queryData,\n outputIndexes,\n } = await this.createCalls(\n joinPaths,\n userAddress,\n isNativeAssetJoin,\n undefined,\n authorisation\n );\n\n // TODO: add this back once relayerV6 is released and we're able to peek while joining with ETH\n // const simulationValue = isNativeAssetJoin\n // ? simulationDeltas[this.wrappedNativeAsset.toLowerCase()]\n // : Zero;\n\n // static call (or V4 special call) to get actual amounts for each root join\n const { amountsOut, totalAmountOut } = await this.amountsOutByJoinPath(\n userAddress,\n multiRequests,\n queryData,\n tokensInWithoutNativeAsset,\n outputIndexes,\n signer,\n simulationType,\n '0' // TODO: change to simulationValue.tosString() once relayerV6 is released\n );\n\n const { minAmountsOut, totalMinAmountOut } = this.minAmountsOutByJoinPath(\n slippage,\n amountsOut,\n totalAmountOut\n );\n const priceImpact = calcPriceImpact(\n BigInt(totalAmountOut),\n totalBptZeroPi.toBigInt(),\n true\n ).toString();\n\n // Create calls with minAmountsOut\n debugLog(`\\n--- Final Calls ---`);\n const { encodedCall, deltas } = await this.createCalls(\n joinPaths,\n userAddress,\n isNativeAssetJoin,\n minAmountsOut,\n authorisation\n );\n\n const value = isNativeAssetJoin\n ? deltas[this.wrappedNativeAsset.toLowerCase()]\n : Zero;\n debugLog(`Total value: ${value.toString()}`);\n\n this.assertDeltas(\n poolId,\n deltas,\n tokensInWithoutNativeAsset,\n amountsIn,\n totalMinAmountOut\n );\n\n return {\n to: this.relayer,\n encodedCall,\n expectedOut: totalAmountOut,\n minOut: totalMinAmountOut,\n priceImpact,\n value,\n };\n }\n\n private assertDeltas(\n poolId: string,\n deltas: Record,\n tokensIn: string[],\n amountsIn: string[],\n minBptOut: string\n ): void {\n const poolAddress = getPoolAddress(poolId);\n const outDiff = deltas[poolAddress.toLowerCase()].add(minBptOut);\n\n if (outDiff.abs().gt(3)) {\n console.error(\n `join assertDeltas, bptOut: `,\n poolAddress,\n minBptOut,\n deltas[poolAddress.toLowerCase()]?.toString()\n );\n throw new BalancerError(BalancerErrorCode.JOIN_DELTA_AMOUNTS);\n }\n delete deltas[poolAddress.toLowerCase()];\n\n tokensIn.forEach((token, i) => {\n if (\n !BigNumber.from(amountsIn[i]).eq(0) &&\n deltas[token.toLowerCase()]?.toString() !== amountsIn[i]\n ) {\n console.error(\n `join assertDeltas, tokenIn: `,\n token,\n amountsIn[i],\n deltas[token.toLowerCase()]?.toString()\n );\n throw new BalancerError(BalancerErrorCode.JOIN_DELTA_AMOUNTS);\n }\n delete deltas[token.toLowerCase()];\n });\n\n for (const token in deltas) {\n if (deltas[token].toString() !== '0') {\n console.error(\n `join assertDeltas, non-input token should be 0: `,\n token,\n deltas[token].toString()\n );\n throw new BalancerError(BalancerErrorCode.JOIN_DELTA_AMOUNTS);\n }\n }\n }\n\n // Create join paths from tokensIn all the way to the root node.\n static getJoinPaths = (\n orderedNodes: Node[],\n tokensIn: string[],\n amountsIn: string[]\n ): Node[][] => {\n const joinPaths: Node[][] = [];\n\n // Filter all nodes that contain a token in the tokensIn array\n const inputNodes = orderedNodes.filter((node) =>\n tokensIn\n .filter((t, i) => BigNumber.from(amountsIn[i]).gt(0)) // Remove input tokens with 0 amounts\n .map((tokenIn) => tokenIn.toLowerCase())\n .includes(node.address.toLowerCase())\n );\n\n // If inputNodes contain at least one leaf token, then add path to join proportionally with all leaf tokens contained in tokensIn\n const containsLeafNode = inputNodes.some((node) => node.isLeaf);\n if (containsLeafNode) {\n joinPaths.push(orderedNodes);\n }\n\n // Add a join path for each non-leaf input node\n const nonLeafInputNodes = inputNodes.filter((node) => !node.isLeaf);\n nonLeafInputNodes.forEach((nonLeafInputNode) => {\n // Get amount in for current node\n const nonLeafAmountIn = amountsIn.find((amountIn, i) =>\n isSameAddress(tokensIn[i], nonLeafInputNode.address)\n ) as string;\n // Split amount in between nodes with same non-leaf input token based on proportionOfParent\n const totalProportions = nonLeafInputNodes\n .filter((node) => isSameAddress(node.address, nonLeafInputNode.address))\n .reduce(\n (total, node) => total.add(node.proportionOfParent),\n BigNumber.from(0)\n );\n const proportionalNonLeafAmountIn = BigNumber.from(nonLeafAmountIn)\n .mul(nonLeafInputNode.proportionOfParent)\n .div(totalProportions)\n .toString();\n // Create input node for current non-leaf input token\n const [inputTokenNode] = PoolGraph.createInputTokenNode(\n 0, // temp value that will be updated after creation\n nonLeafInputNode.address,\n nonLeafInputNode.decimals,\n nonLeafInputNode.parent,\n WeiPerEther,\n nonLeafInputNode.balance\n );\n // Update index to be actual amount in\n inputTokenNode.index = proportionalNonLeafAmountIn;\n inputTokenNode.isLeaf = false;\n // Start join path with input node\n const nonLeafJoinPath = [inputTokenNode];\n // Add each parent to the join path until we reach the root node\n let parent = inputTokenNode.parent;\n let currentChild = inputTokenNode;\n while (parent) {\n const parentCopy = cloneDeep(parent);\n parentCopy.children = parentCopy.children.map((child) => {\n if (child.address === currentChild.address) {\n // Replace original child with current child that was modified to handle the non-leaf join\n return currentChild;\n } else {\n // Update index of siblings that are not within the join path to be 0\n return { ...child, index: '0' };\n }\n });\n nonLeafJoinPath.push(parentCopy);\n currentChild = parentCopy;\n parent = parentCopy.parent;\n }\n // Add join path to list of join paths\n joinPaths.push(nonLeafJoinPath);\n });\n\n // After creating all join paths, update the index of each input node to be the amount in for that node\n // All other node indexes will be used as a reference to store the amounts out for that node\n this.updateInputAmounts(joinPaths, tokensIn, amountsIn);\n\n return joinPaths;\n };\n\n /*\n AmountsIn should be adjusted after being split between tokensIn to fix eventual rounding issues.\n This prevents the transaction to leave out dust amounts.\n */\n private static updateInputAmounts = (\n joinPaths: Node[][],\n tokensIn: string[],\n amountsIn: string[]\n ): void => {\n // Helper function to calculate and adjust amount difference for each token in\n const ajdustAmountInDiff = (\n tokenInInputNodes: Node[],\n amountIn: string\n ): void => {\n if (tokenInInputNodes.length > 1) {\n // Sum of amountsIn from each input node with same tokenIn\n const amountsInSumforTokenIn = tokenInInputNodes.reduce(\n (sum, currentNode) => sum.add(currentNode.index),\n BigNumber.from(0)\n );\n // Compare total amountIn with sum of amountIn split between each input node with same tokenIn\n const diff = BigNumber.from(amountIn).sub(amountsInSumforTokenIn);\n // Apply difference to first input node with same tokenIn\n tokenInInputNodes[0].index = diff\n .add(tokenInInputNodes[0].index)\n .toString();\n }\n };\n\n // Update amountsIn within leaf join path\n const leafJoinPath = joinPaths.find((joinPath) => joinPath[0].isLeaf);\n if (leafJoinPath) {\n // Update input proportions so inputs are shared correctly between leaf nodes with same tokenIn\n const totalProportions = this.updateTotalProportions(leafJoinPath);\n // Update input nodes to have correct input amount\n leafJoinPath.forEach((node) => {\n if (node.joinAction === 'input')\n node = this.updateNodeAmount(\n node,\n tokensIn,\n amountsIn,\n totalProportions\n );\n });\n // Adjust amountIn for each tokenIn to fix eventual rounding issues\n tokensIn.forEach((tokenIn, i) => {\n const tokenInInputNodes = leafJoinPath.filter(\n (inputNode) =>\n inputNode.isLeaf && isSameAddress(inputNode.address, tokenIn)\n );\n ajdustAmountInDiff(tokenInInputNodes, amountsIn[i]);\n });\n }\n\n // Adjust amountsIn shared between non-leaf join paths with same tokenIn\n const nonLeafJoinPaths = joinPaths.filter(\n (joinPath) => !joinPath[0].isLeaf\n );\n if (nonLeafJoinPaths.length > 1) {\n tokensIn.forEach((tokenIn, i) => {\n const tokenInInputNodes = nonLeafJoinPaths\n .map((path) => path[0])\n .filter((node) => isSameAddress(node.address, tokenIn));\n ajdustAmountInDiff(tokenInInputNodes, amountsIn[i]);\n });\n }\n };\n\n private createCalls = async (\n joinPaths: Node[][],\n userAddress: string,\n isNativeAssetJoin: boolean,\n minAmountsOut?: string[], // one for each joinPath\n authorisation?: string\n ): Promise<{\n multiRequests: Requests[][];\n encodedCall: string;\n outputIndexes: number[];\n deltas: Record;\n }> => {\n // Create calls for both leaf and non-leaf inputs\n const { multiRequests, encodedCalls, outputIndexes, deltas } =\n this.createActionCalls(\n joinPaths,\n userAddress,\n isNativeAssetJoin,\n minAmountsOut\n );\n\n if (authorisation) {\n encodedCalls.unshift(this.createSetRelayerApproval(authorisation));\n }\n const encodedCall = balancerRelayerInterface.encodeFunctionData(\n 'multicall',\n [encodedCalls]\n );\n\n return {\n multiRequests,\n encodedCall,\n outputIndexes: authorisation\n ? outputIndexes.map((i) => i + 1)\n : outputIndexes,\n deltas,\n };\n };\n\n /*\n 1. For each input token:\n 1. recursively find the spot price for each pool in the path of the join\n 2. take the product to get the spot price of the path\n 3. multiply the input amount of that token by the path spot price to get the \"zeroPriceImpact\" amount of BPT for that token\n 2. Sum each tokens zeroPriceImpact BPT amount to get total zeroPriceImpact BPT\n */\n static totalBptZeroPriceImpact = (joinPaths: Node[][]): BigNumber => {\n // Add bptZeroPriceImpact for all inputs\n let totalBptZeroPi = BigNumber.from('0');\n joinPaths.forEach((joinPath) => {\n const isLeafJoin = joinPath[0].isLeaf;\n if (isLeafJoin) {\n // Calculate bptZeroPriceImpact for leaf inputs\n const leafNodes = joinPath.filter((node) => node.isLeaf);\n leafNodes.forEach((leafNode) => {\n const bptOut = this.bptOutZeroPiForInputNode(leafNode);\n totalBptZeroPi = totalBptZeroPi.add(bptOut);\n });\n } else {\n // Calculate bptZeroPriceImpact for non-leaf inputs\n const bptOut = this.bptOutZeroPiForInputNode(joinPath[0]);\n totalBptZeroPi = totalBptZeroPi.add(bptOut);\n }\n });\n return totalBptZeroPi;\n };\n\n /*\n 1. recursively find the spot price for each pool in the path of the join\n 2. take the product to get the spot price of the path\n 3. multiply the input amount of that token by the path spot price to get the \"zeroPriceImpact\" amount of BPT for that token \n */\n static bptOutZeroPiForInputNode = (inputNode: Node): bigint => {\n if (inputNode.index === '0' || inputNode.joinAction !== 'input')\n return BigInt(0);\n let spProduct = 1;\n let parentNode: Node | undefined = inputNode.parent;\n let childAddress = inputNode.address;\n // Traverse up graph until we reach root adding each node\n while (parentNode !== undefined) {\n if (\n parentNode.joinAction === 'batchSwap' ||\n parentNode.joinAction === 'joinPool'\n ) {\n const sp = parentNode.spotPrices[childAddress.toLowerCase()];\n spProduct = spProduct * parseFloat(sp);\n childAddress = parentNode.address;\n }\n parentNode = parentNode.parent;\n }\n const spPriceScaled = parseFixed(spProduct.toFixed(18), 18);\n const scalingFactor = _computeScalingFactor(BigInt(inputNode.decimals));\n const inputAmountScaled = _upscale(BigInt(inputNode.index), scalingFactor);\n const bptOut = SolidityMaths.divDownFixed(\n inputAmountScaled,\n spPriceScaled.toBigInt()\n );\n return bptOut;\n };\n\n /*\n Simulate transaction and decodes each output of interest.\n */\n private amountsOutByJoinPath = async (\n userAddress: string,\n multiRequests: Requests[][],\n callData: string,\n tokensIn: string[],\n outputIndexes: number[],\n signer: JsonRpcSigner,\n simulationType: SimulationType,\n value: string\n ): Promise<{ amountsOut: string[]; totalAmountOut: string }> => {\n const amountsOut = await this.simulationService.simulateGeneralisedJoin(\n this.relayer,\n multiRequests,\n callData,\n outputIndexes,\n userAddress,\n tokensIn,\n signer,\n simulationType,\n value\n );\n\n const totalAmountOut = amountsOut\n .reduce((sum, amount) => sum.add(BigNumber.from(amount)), Zero)\n .toString();\n\n return {\n amountsOut,\n totalAmountOut,\n };\n };\n\n /*\n Apply slippage to amounts\n */\n private minAmountsOutByJoinPath = (\n slippage: string,\n amounts: string[],\n totalAmountOut: string\n ): { minAmountsOut: string[]; totalMinAmountOut: string } => {\n const minAmountsOut = amounts.map((amount) =>\n subSlippage(BigNumber.from(amount), BigNumber.from(slippage)).toString()\n );\n const totalMinAmountOut = subSlippage(\n BigNumber.from(totalAmountOut),\n BigNumber.from(slippage)\n ).toString();\n\n return {\n minAmountsOut,\n totalMinAmountOut,\n };\n };\n\n private updateDeltas(\n deltas: Record,\n assets: string[],\n amounts: string[]\n ): Record {\n assets.forEach((t, i) => {\n const asset = t.toLowerCase();\n if (!deltas[asset]) deltas[asset] = Zero;\n deltas[asset] = deltas[asset].add(amounts[i]);\n });\n return deltas;\n }\n\n // Create actions for each Node and return in multicall array\n // Create calls for each path, use value stored in minBptAmounts if available\n private createActionCalls = (\n joinPaths: Node[][],\n userAddress: string,\n isNativeAssetJoin: boolean,\n minAmountsOut?: string[]\n ): {\n multiRequests: Requests[][];\n encodedCalls: string[];\n outputIndexes: number[];\n deltas: Record;\n } => {\n const multiRequests: Requests[][] = [];\n const encodedCalls: string[] = [];\n const outputIndexes: number[] = [];\n const isSimulation = !minAmountsOut;\n const deltas: Record = {};\n\n joinPaths.forEach((joinPath, j) => {\n const isLeafJoin = joinPath[0].isLeaf;\n const modelRequests: Requests[] = [];\n\n joinPath.forEach((node, i) => {\n // Prevent adding action calls with input amounts equal 0\n if (\n node.children.length > 0 &&\n node.children.filter((c) => this.shouldBeConsidered(c)).length === 0\n ) {\n node.index = '0';\n return;\n }\n\n // Sender's rule\n // 1. If any child node is an input node, tokens are coming from the user\n const hasChildInput = node.children\n .filter((c) => this.shouldBeConsidered(c))\n .some((c) => c.joinAction === 'input');\n const sender = hasChildInput ? userAddress : this.relayer;\n\n // Recipient's rule\n // 1. Transactions with sibling input node must be sent to user because it will be the sender of the following transaction (per sender's rule above)\n // e.g. boostedMetaAlt - MAI/bbausd - joining with MAI from user and bbausd from earlier actions. MAI needs to come from user.\n // 2. Last transaction must be sent to the user\n // 3. Otherwise relayer\n // Note: scenario 1 usually happens with joinPool transactions that have both BPT and undelying tokens as tokensIn\n const isLastChainedCall = i === joinPath.length - 1;\n const hasSiblingInput =\n (isLeafJoin && // non-leaf joins don't have siblings that should be considered\n node.parent?.children\n .filter((s) => this.shouldBeConsidered(s))\n .some((s) => s.joinAction === 'input')) ??\n false;\n const recipient =\n isLastChainedCall || hasSiblingInput ? userAddress : this.relayer;\n\n // Last action will use minBptOut to protect user. Middle calls can safely have 0 minimum as tx will revert if last fails.\n const minOut =\n isLastChainedCall && minAmountsOut ? minAmountsOut[j] : '0';\n\n switch (node.joinAction) {\n case 'batchSwap':\n {\n const { modelRequest, encodedCall, assets, amounts } =\n this.createSwap(\n node,\n j,\n minOut,\n sender,\n recipient,\n isNativeAssetJoin,\n isSimulation\n );\n modelRequests.push(modelRequest);\n encodedCalls.push(encodedCall);\n this.updateDeltas(deltas, assets, amounts);\n }\n break;\n case 'joinPool':\n {\n const { modelRequest, encodedCall, assets, amounts, minBptOut } =\n this.createJoinPool(\n node,\n j,\n minOut,\n sender,\n recipient,\n isNativeAssetJoin,\n isSimulation\n );\n modelRequests.push(modelRequest);\n encodedCalls.push(encodedCall);\n this.updateDeltas(\n deltas,\n [node.address, ...assets],\n [minBptOut, ...amounts]\n );\n }\n break;\n default:\n return;\n }\n });\n if (isSimulation) {\n const outputRef = 100 * j;\n const encodedPeekCall = Relayer.encodePeekChainedReferenceValue(\n Relayer.toChainedReference(outputRef, false)\n );\n encodedCalls.push(encodedPeekCall);\n outputIndexes.push(encodedCalls.indexOf(encodedPeekCall));\n }\n multiRequests.push(modelRequests);\n });\n\n return { multiRequests, encodedCalls, outputIndexes, deltas };\n };\n\n /**\n * Creates a map of node address and total proportion. Used for the case where there may be multiple inputs using same token, e.g. DAI input to 2 pools.\n * @param nodes nodes to consider.\n */\n static updateTotalProportions = (\n nodes: Node[]\n ): Record => {\n const totalProportions: Record = {};\n nodes.forEach((node) => {\n if (!totalProportions[node.address])\n totalProportions[node.address] = node.proportionOfParent;\n else {\n totalProportions[node.address] = totalProportions[node.address].add(\n node.proportionOfParent\n );\n }\n });\n return totalProportions;\n };\n\n /**\n * Uses relayer to approve itself to act in behalf of the user\n *\n * @param authorisation Encoded authorisation call.\n * @returns relayer approval call\n */\n private createSetRelayerApproval = (authorisation: string): string => {\n return Relayer.encodeSetRelayerApproval(this.relayer, true, authorisation);\n };\n\n static updateNodeAmount = (\n node: Node,\n tokensIn: string[],\n amountsIn: string[],\n totalProportions: Record\n ): Node => {\n /*\n An input node requires a real amount (not an outputRef) as it is first node in chain.\n This amount will be used when chaining to parent.\n Amounts are split proportionally between all inputs with same token.\n */\n const tokenIndex = tokensIn\n .map((t) => t.toLowerCase())\n .indexOf(node.address.toLowerCase());\n if (tokenIndex === -1) {\n node.index = '0';\n return node;\n }\n\n // Calculate proportional split\n const totalProportion = totalProportions[node.address];\n const inputProportion = node.proportionOfParent\n .mul((1e18).toString())\n .div(totalProportion);\n const inputAmount = inputProportion\n .mul(amountsIn[tokenIndex])\n .div((1e18).toString());\n // Update index with actual value\n node.index = inputAmount.toString();\n // console.log(\n // `${node.type} ${node.address} prop: ${node.proportionOfParent.toString()}\n // ${node.joinAction} (\n // Inputs: ${inputAmount.toString()}\n // OutputRef: ${node.index}\n // )`\n // );\n return node;\n };\n\n private createSwap = (\n node: Node,\n joinPathIndex: number,\n expectedOut: string,\n sender: string,\n recipient: string,\n isNativeAssetJoin: boolean,\n isSimulation: boolean\n ): {\n modelRequest: SwapRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n } => {\n // We only need swaps for main > linearBpt so shouldn't be more than token > token\n if (node.children.length !== 1) throw new Error('Unsupported swap');\n const tokenIn = node.children[0].address;\n const amountIn = this.getOutputRefValue(joinPathIndex, node.children[0]);\n\n // Single swap limits are always positive\n // Swap within generalisedJoin is always exactIn, so use minAmountOut to set limit\n const limit: string = expectedOut;\n\n const assetIn =\n isNativeAssetJoin && !isSimulation\n ? this.replaceWrappedNativeAsset([tokenIn])[0]\n : tokenIn;\n\n const request: SingleSwap = {\n poolId: node.id,\n kind: SwapType.SwapExactIn,\n assetIn,\n assetOut: node.address,\n amount: amountIn.value,\n userData: '0x',\n };\n\n const fromInternalBalance = this.allImmediateChildrenSendToInternal(node);\n const toInternalBalance = this.allSiblingsSendToInternal(node);\n\n const funds: FundManagement = {\n sender,\n recipient,\n fromInternalBalance,\n toInternalBalance,\n };\n\n const outputReference = BigNumber.from(\n this.getOutputRefValue(joinPathIndex, node).value\n );\n\n const value =\n isNativeAssetJoin && !isSimulation\n ? getEthValue([assetIn], [amountIn.value])\n : Zero;\n\n const call: Swap = {\n request,\n funds,\n limit,\n deadline: BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value,\n outputReference,\n };\n\n const encodedCall = Relayer.encodeSwap(call);\n\n debugLog(`\\nSwap:`);\n debugLog(`${JSON.stringify(call)}`);\n debugLog(`Partial value: ${JSON.stringify(call.value?.toString())}`);\n\n const modelRequest = VaultModel.mapSwapRequest(call);\n\n const hasChildInput = node.children.some((c) => c.joinAction === 'input');\n // If node has no child input the swap is part of a chain and token in shouldn't be considered for user deltas\n const userTokenIn = !hasChildInput ? '0' : amountIn.value;\n // If node has parent the swap is part of a chain and BPT out shouldn't be considered for user deltas\n const userBptOut =\n node.parent != undefined\n ? '0'\n : BigNumber.from(expectedOut).mul(-1).toString(); // needs to be negative because it's handled by the vault model as an amount going out of the vault\n\n const assets = [node.address, tokenIn];\n const amounts = [userBptOut, userTokenIn];\n\n return { modelRequest, encodedCall, assets, amounts };\n };\n\n private createJoinPool = (\n node: Node,\n joinPathIndex: number,\n minAmountOut: string,\n sender: string,\n recipient: string,\n isNativeAssetJoin: boolean,\n isSimulation: boolean\n ): {\n modelRequest: JoinPoolModelRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n minBptOut: string;\n } => {\n const inputTokens: string[] = [];\n const inputAmts: string[] = [];\n\n // inputTokens needs to include each asset even if it has 0 amount\n node.children.forEach((child) => {\n inputTokens.push(child.address);\n // non-leaf joins should set input amounts only for children that are in their joinPath\n if (this.shouldBeConsidered(child)) {\n inputAmts.push(this.getOutputRefValue(joinPathIndex, child).value);\n } else {\n inputAmts.push('0');\n }\n });\n\n if (node.type === PoolType.ComposableStable) {\n // assets need to include the phantomPoolToken\n inputTokens.push(node.address);\n // need to add a placeholder so sorting works\n inputAmts.push('0');\n }\n\n // sort inputs\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [sortedTokens, sortedAmounts] = assetHelpers.sortTokens(\n inputTokens,\n inputAmts\n ) as [string[], string[]];\n\n // userData amounts should not include the BPT of the pool being joined\n let userDataAmounts = [];\n const bptIndex = sortedTokens\n .map((t) => t.toLowerCase())\n .indexOf(node.address.toLowerCase());\n if (bptIndex === -1) {\n userDataAmounts = sortedAmounts;\n } else {\n userDataAmounts = [\n ...sortedAmounts.slice(0, bptIndex),\n ...sortedAmounts.slice(bptIndex + 1),\n ];\n }\n\n let userData: string;\n if (node.type === PoolType.Weighted) {\n userData = WeightedPoolEncoder.joinExactTokensInForBPTOut(\n userDataAmounts,\n minAmountOut\n );\n } else {\n userData = StablePoolEncoder.joinExactTokensInForBPTOut(\n userDataAmounts,\n minAmountOut\n );\n }\n\n const value =\n isNativeAssetJoin && !isSimulation\n ? getEthValue(\n this.replaceWrappedNativeAsset(sortedTokens),\n sortedAmounts\n )\n : Zero;\n\n const fromInternalBalance = this.allImmediateChildrenSendToInternal(node);\n\n const call: EncodeJoinPoolInput = Relayer.formatJoinPoolInput({\n poolId: node.id,\n kind: 0,\n sender,\n recipient,\n value,\n outputReference: this.getOutputRefValue(joinPathIndex, node).value,\n joinPoolRequest: {} as JoinPoolRequest,\n assets:\n isNativeAssetJoin && !isSimulation\n ? this.replaceWrappedNativeAsset(sortedTokens)\n : sortedTokens, // Must include BPT token\n maxAmountsIn: sortedAmounts,\n userData,\n fromInternalBalance,\n });\n const encodedCall = Relayer.encodeJoinPool(call);\n\n debugLog(`\\nJoin:`);\n debugLog(JSON.stringify(call));\n debugLog(`Partial value: ${JSON.stringify(call.value?.toString())}`);\n const modelRequest = VaultModel.mapJoinPoolRequest(call);\n\n const userAmountsTokenIn = sortedAmounts.map((a) =>\n Relayer.isChainedReference(a) ? '0' : a\n );\n const userAmountOut = Relayer.isChainedReference(minAmountOut)\n ? '0'\n : minAmountOut;\n\n const hasChildInput = node.children\n .filter((c) => this.shouldBeConsidered(c))\n .some((c) => c.joinAction === 'input');\n // If node has no child input the join is part of a chain and amounts in shouldn't be considered for user deltas\n const assets = !hasChildInput ? [] : sortedTokens;\n const amounts = !hasChildInput ? [] : userAmountsTokenIn;\n // If node has parent the join is part of a chain and shouldn't be considered for user deltas\n const minBptOut =\n node.parent != undefined\n ? Zero.toString()\n : Zero.sub(userAmountOut).toString(); // -ve because coming from Vault\n\n return { modelRequest, encodedCall, assets, amounts, minBptOut };\n };\n\n private getOutputRefValue = (\n joinPathIndex: number,\n node: Node\n ): { value: string; isRef: boolean } => {\n if (node.joinAction === 'input') {\n // Input nodes have their indexes set as the actual input amount, instead of a chained reference\n return { value: node.index, isRef: false };\n } else if (node.index !== '0' || !node.parent) {\n // Root node (parent === undefined) has index zero, but should still pass chained reference as outputRef value\n return {\n value: Relayer.toChainedReference(\n BigNumber.from(node.index).add(joinPathIndex * 100)\n ).toString(),\n isRef: true,\n };\n } else {\n return {\n value: '0',\n isRef: true,\n };\n }\n };\n\n // Nodes with index 0 won't affect transactions so they shouldn't be considered\n private shouldBeConsidered = (node: Node): boolean => {\n return node.index !== '0';\n };\n\n // joinPool transaction always sends to non-internal balance\n // input always behave as sending to non-internal balance\n private sendsToInternalBalance = (node: Node): boolean => {\n return node.joinAction !== 'input' && node.joinAction !== 'joinPool';\n };\n\n private allImmediateChildrenSendToInternal = (node: Node): boolean => {\n const children = node.children.filter((c) => this.shouldBeConsidered(c));\n if (children.length === 0) return false;\n return (\n children.filter((c) => this.sendsToInternalBalance(c)).length ===\n children.length\n );\n };\n\n private allSiblingsSendToInternal = (node: Node): boolean => {\n if (!node.parent) return false;\n const siblings = node.parent.children.filter((s) =>\n this.shouldBeConsidered(s)\n );\n return (\n siblings.filter((s) => this.sendsToInternalBalance(s)).length ===\n siblings.length\n );\n };\n\n private replaceWrappedNativeAsset = (tokens: string[]): string[] => {\n const wrappedNativeAssetIndex = tokens.findIndex(\n (t) => t.toLowerCase() === this.wrappedNativeAsset.toLowerCase()\n );\n return replace(tokens, wrappedNativeAssetIndex, AddressZero);\n };\n}\n","import axios from 'axios';\nimport { AddressZero, MaxInt256 } from '@ethersproject/constants';\nimport { parseFixed } from '@ethersproject/bignumber';\n\nimport { networkAddresses } from '@/lib/constants/config';\nimport { BalancerTenderlyConfig } from '@/types';\n\ntype StateOverrides = {\n [address: string]: { value: { [key: string]: string } };\n};\n\nexport default class TenderlyHelper {\n private vaultAddress;\n private tenderlyUrl;\n private opts?;\n private blockNumber: number | undefined;\n\n constructor(private chainId: number, tenderlyConfig: BalancerTenderlyConfig) {\n const { contracts } = networkAddresses(this.chainId);\n this.vaultAddress = contracts.vault as string;\n this.tenderlyUrl = `https://api.tenderly.co/api/v1/account/${tenderlyConfig.user}/project/${tenderlyConfig.project}/`;\n this.opts = {\n headers: {\n 'X-Access-Key': tenderlyConfig.accessKey,\n },\n };\n\n this.blockNumber = tenderlyConfig.blockNumber;\n }\n\n simulateMulticall = async (\n to: string,\n data: string,\n userAddress: string,\n tokens: string[],\n value = '0'\n ): Promise => {\n const tokensOverrides = await this.encodeBalanceAndAllowanceOverrides(\n userAddress,\n tokens\n );\n const relayerApprovalOverride = await this.encodeRelayerApprovalOverride(\n userAddress,\n to\n );\n const encodedStateOverrides = {\n ...tokensOverrides,\n ...relayerApprovalOverride,\n };\n return this.simulateTransaction(\n to,\n data,\n userAddress,\n encodedStateOverrides,\n value\n );\n };\n\n simulateTransaction = async (\n to: string,\n data: string,\n userAddress: string,\n encodedStateOverrides: StateOverrides,\n value: string\n ): Promise => {\n // Map encoded-state response into simulate request body by replacing property names\n const stateOverrides = Object.fromEntries(\n Object.keys(encodedStateOverrides).map((address) => {\n // Object.fromEntries require format [key, value] instead of {key: value}\n return [address, { storage: encodedStateOverrides[address].value }];\n })\n );\n\n // Set user balance to 1000 ETH to make sure the simulation doesn't fail due to insufficient balance\n const state_objects = {\n ...stateOverrides,\n [userAddress]: {\n balance: parseFixed('100', 18).toHexString(),\n },\n };\n\n const body = {\n // -- Standard TX fields --\n network_id: this.chainId.toString(),\n block_number: this.blockNumber,\n from: userAddress,\n to,\n input: data,\n // gas: 8000000,\n // gas_price: '0',\n value,\n // -- Simulation config (tenderly specific) --\n save_if_fails: true,\n // save: true,\n simulation_type: 'quick', // remove this while developing/debugging\n state_objects,\n };\n\n const SIMULATE_URL = this.tenderlyUrl + 'simulate';\n\n const resp = await axios.post(SIMULATE_URL, body, this.opts);\n\n const simulatedTransactionOutput =\n resp.data.transaction.transaction_info.call_trace.output;\n\n return simulatedTransactionOutput;\n };\n\n // Encode relayer approval state override\n encodeRelayerApprovalOverride = async (\n userAddress: string,\n relayerAddress: string\n ): Promise => {\n const stateOverrides: StateOverrides = {\n [`${this.vaultAddress}`]: {\n value: {\n [`_approvedRelayers[${userAddress}][${relayerAddress}]`]:\n true.toString(),\n },\n },\n };\n\n const encodedStateOverrides = await this.requestStateOverrides(\n stateOverrides\n );\n\n return encodedStateOverrides;\n };\n\n // Encode token balances and allowances overrides to max value\n encodeBalanceAndAllowanceOverrides = async (\n userAddress: string,\n tokens: string[]\n ): Promise => {\n const tokensWithoutNativeAsset = tokens.filter(\n (token) => token !== AddressZero\n );\n\n if (tokensWithoutNativeAsset.length === 0) return {};\n\n // Create balances and allowances overrides for each token address provided\n let stateOverrides: StateOverrides = {};\n tokensWithoutNativeAsset.forEach(\n (token) =>\n (stateOverrides = {\n ...stateOverrides,\n [`${token}`]: {\n value: {\n [`_balances[${userAddress}]`]: MaxInt256.toString(),\n [`_allowances[${userAddress}][${this.vaultAddress}]`]:\n MaxInt256.toString(),\n [`balanceOf[${userAddress}]`]: MaxInt256.toString(),\n [`allowance[${userAddress}][${this.vaultAddress}]`]:\n MaxInt256.toString(),\n [`balances[${userAddress}]`]: MaxInt256.toString(),\n [`allowed[${userAddress}][${this.vaultAddress}]`]:\n MaxInt256.toString(),\n },\n },\n })\n );\n\n const encodedStateOverrides = await this.requestStateOverrides(\n stateOverrides\n );\n\n if (\n Object.keys(encodedStateOverrides).some((k) => {\n return Object.keys(encodedStateOverrides[k].value).length !== 2;\n })\n )\n throw new Error(\n \"Couldn't encode state overrides - states should match the ones in the contracts\"\n );\n\n return encodedStateOverrides;\n };\n\n private requestStateOverrides = async (\n stateOverrides: StateOverrides\n ): Promise => {\n const ENCODE_STATES_URL = this.tenderlyUrl + 'contracts/encode-states';\n const body = {\n networkID: this.chainId.toString(),\n stateOverrides,\n };\n\n const encodedStatesResponse = await axios.post(\n ENCODE_STATES_URL,\n body,\n this.opts\n );\n const encodedStateOverrides = encodedStatesResponse.data\n .stateOverrides as StateOverrides;\n\n if (\n !encodedStateOverrides ||\n Object.keys(encodedStateOverrides).length !==\n Object.keys(stateOverrides).length\n )\n throw new Error(\n \"Couldn't encode state overrides - contracts should be verified and whitelisted on Tenderly\"\n );\n\n return encodedStateOverrides;\n };\n}\n","import { PoolDataService } from '@balancer-labs/sor';\nimport { defaultAbiCoder } from '@ethersproject/abi';\nimport { JsonRpcSigner } from '@ethersproject/providers';\n\nimport TenderlyHelper from '@/lib/utils/tenderlyHelper';\nimport { BalancerNetworkConfig } from '@/types';\n\nimport { VaultModel, Requests } from '../vaultModel/vaultModel.module';\n\nexport enum SimulationType {\n Tenderly,\n VaultModel,\n Static,\n}\n\n/**\n * Simulation module is responsible for simulating the results of a generalised\n * join or exit using different types of simulation, such as:\n * - Tenderly: uses Tenderly Simulation API (third party service)\n * - VaultModel: uses TS math, which may be less accurate (min. 99% accuracy)\n * - Static: uses staticCall, which is 100% accurate but requires vault approval\n *\n * This module allows a user to perform a simulation and check for expected\n * amounts out in order to make an informed decision on whether to proceed with\n * the transaction. These expected amounts out can be used as limits to prevent\n * frontrunning and ensure that the transaction will return minimum amounts out.\n */\n\nexport class Simulation {\n private tenderlyHelper?: TenderlyHelper;\n private vaultModel: VaultModel | undefined;\n constructor(\n networkConfig: BalancerNetworkConfig,\n poolDataService?: PoolDataService\n ) {\n if (networkConfig.tenderly) {\n this.tenderlyHelper = new TenderlyHelper(\n networkConfig.chainId,\n networkConfig.tenderly\n );\n }\n if (!poolDataService) {\n this.vaultModel = undefined;\n } else {\n this.vaultModel = new VaultModel(\n poolDataService,\n networkConfig.addresses.tokens.wrappedNativeAsset\n );\n }\n }\n\n simulateGeneralisedJoin = async (\n to: string,\n multiRequests: Requests[][],\n encodedCall: string,\n outputIndexes: number[],\n userAddress: string,\n tokensIn: string[],\n signer: JsonRpcSigner,\n simulationType: SimulationType,\n value: string\n ): Promise => {\n const amountsOut: string[] = [];\n switch (simulationType) {\n case SimulationType.Tenderly: {\n if (!this.tenderlyHelper) {\n throw new Error('Missing Tenderly config');\n }\n const simulationResult = await this.tenderlyHelper.simulateMulticall(\n to,\n encodedCall,\n userAddress,\n tokensIn,\n value\n );\n amountsOut.push(...this.decodeResult(simulationResult, outputIndexes));\n break;\n }\n\n case SimulationType.VaultModel: {\n const requestResult = await this.simulateRequests(multiRequests);\n amountsOut.push(...requestResult);\n break;\n }\n case SimulationType.Static: {\n const staticResult = await signer.call({\n to,\n data: encodedCall,\n value,\n });\n\n try {\n amountsOut.push(...this.decodeResult(staticResult, outputIndexes));\n } catch (_) {\n // decoding output failed, so we assume the response contains an error message and try to decode it instead\n const decodedResponse = Buffer.from(\n staticResult.split('x')[1],\n 'hex'\n ).toString('utf8');\n throw new Error(\n `Transaction reverted with error: ${decodedResponse}`\n );\n }\n break;\n }\n default:\n throw new Error('Simulation type not supported');\n }\n return amountsOut;\n };\n\n simulateGeneralisedExit = async (\n to: string,\n multiRequests: Requests[][],\n encodedCall: string,\n outputIndexes: number[],\n userAddress: string,\n tokenIn: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType\n ): Promise => {\n const amountsOut: string[] = [];\n switch (simulationType) {\n case SimulationType.Tenderly: {\n if (!this.tenderlyHelper) {\n throw new Error('Missing Tenderly config');\n }\n const simulationResult = await this.tenderlyHelper.simulateMulticall(\n to,\n encodedCall,\n userAddress,\n [tokenIn]\n );\n amountsOut.push(...this.decodeResult(simulationResult, outputIndexes));\n break;\n }\n\n case SimulationType.VaultModel: {\n const requestResult = await this.simulateRequests(multiRequests);\n amountsOut.push(...requestResult);\n break;\n }\n case SimulationType.Static: {\n const staticResult = await signer.call({\n to,\n data: encodedCall,\n });\n try {\n amountsOut.push(...this.decodeResult(staticResult, outputIndexes));\n } catch (_) {\n // decoding output failed, so we assume the response contains an error message and try to decode it instead\n const decodedResponse = Buffer.from(\n staticResult.split('x')[1],\n 'hex'\n ).toString('utf8');\n throw new Error(\n `Transaction reverted with error: ${decodedResponse}`\n );\n }\n break;\n }\n default:\n throw new Error('Simulation type not supported');\n }\n return amountsOut;\n };\n\n private decodeResult = (result: string, outputIndexes: number[]) => {\n const multicallResult = defaultAbiCoder.decode(\n ['bytes[]'],\n result\n )[0] as string[];\n\n // Decode each root output\n const amountsOut = outputIndexes.map((outputIndex) => {\n const result = defaultAbiCoder.decode(\n ['uint256'],\n multicallResult[outputIndex]\n );\n return result.toString();\n });\n\n return amountsOut;\n };\n\n private simulateRequests = async (multiRequests: Requests[][]) => {\n if (this.vaultModel === undefined)\n throw new Error('Missing Vault Model Config.');\n // make one multicall for each exitPath\n // take only bptOut/tokenOut delta into account\n const amountsOut: string[] = [];\n for (const [i, requests] of multiRequests.entries()) {\n const deltas = await this.vaultModel.multicall(requests, i === 0);\n const tokenOutDeltas = Object.values(deltas).filter((d) => d.lt(0));\n if (tokenOutDeltas.length === 0)\n throw new Error('No delta found for token out.');\n amountsOut.push(...tokenOutDeltas.map((d) => d.mul(-1).toString()));\n }\n return amountsOut;\n };\n}\n","import { cloneDeep } from 'lodash';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { WeiPerEther, Zero } from '@ethersproject/constants';\nimport { JsonRpcSigner } from '@ethersproject/providers';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { BalancerRelayer__factory } from '@/contracts/factories/BalancerRelayer__factory';\nimport { networkAddresses } from '@/lib/constants/config';\nimport { AssetHelpers, subSlippage } from '@/lib/utils';\nimport { PoolGraph, Node } from '@/modules/graph/graph';\nimport { Join } from '@/modules/joins/joins.module';\nimport { calcPriceImpact } from '@/modules/pricing/priceImpact';\nimport {\n EncodeUnwrapInput,\n OutputReference,\n Relayer,\n EncodeBatchSwapInput,\n} from '@/modules/relayer/relayer.module';\nimport {\n Simulation,\n SimulationType,\n} from '@/modules/simulation/simulation.module';\nimport {\n FundManagement,\n SingleSwap,\n Swap,\n SwapType,\n BatchSwapStep,\n} from '@/modules/swaps/types';\nimport { ExitPoolRequest as ExitPoolModelRequest } from '@/modules/vaultModel/poolModel/exit';\nimport {\n BatchSwapRequest,\n SwapRequest,\n} from '@/modules/vaultModel/poolModel/swap';\nimport { UnwrapRequest } from '@/modules/vaultModel/poolModel/unwrap';\nimport { Requests, VaultModel } from '@/modules/vaultModel/vaultModel.module';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport { getPoolAddress } from '@/pool-utils';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { BalancerNetworkConfig, ExitPoolRequest, PoolType } from '@/types';\nimport { Logger } from '@/lib/utils/logger';\n\nconst balancerRelayerInterface = BalancerRelayer__factory.createInterface();\n\nexport interface GeneralisedExitOutput {\n to: string;\n encodedCall: string;\n tokensOut: string[];\n expectedAmountsOut: string[];\n minAmountsOut: string[];\n priceImpact: string;\n}\n\nexport interface ExitInfo {\n tokensOut: string[];\n estimatedAmountsOut: string[];\n priceImpact: string;\n tokensToUnwrap: string[];\n}\n\n// Quickly switch useful debug logs on/off\nconst DEBUG = false;\n\nfunction debugLog(log: string) {\n const logger = Logger.getInstance();\n if (DEBUG) logger.info(log);\n}\n\nexport class Exit {\n private wrappedNativeAsset: string;\n private relayer: string;\n\n constructor(\n private poolGraph: PoolGraph,\n networkConfig: BalancerNetworkConfig,\n private simulationService: Simulation\n ) {\n const { tokens, contracts } = networkAddresses(networkConfig.chainId);\n this.wrappedNativeAsset = tokens.wrappedNativeAsset;\n this.relayer = contracts.balancerRelayer;\n }\n\n async getExitInfo(\n poolId: string,\n amountBptIn: string,\n userAddress: string,\n signer: JsonRpcSigner\n ): Promise<{\n tokensOut: string[];\n estimatedAmountsOut: string[];\n priceImpact: string;\n tokensToUnwrap: string[];\n }> {\n debugLog(`\\n--- getExitInfo()`);\n /*\n Overall exit flow description:\n - Create calls with 0 expected min amount for each token out\n - static call (or V4 special call) to get actual amounts for each token out\n - Apply slippage to amountsOut\n - Recreate calls with minAmounts === actualAmountsWithSlippage\n - Return minAmoutsOut, UI would use this to display to user\n - Return updatedCalls, UI would use this to execute tx\n */\n const exit = await this.getExit(\n poolId,\n amountBptIn,\n userAddress,\n signer,\n [],\n SimulationType.VaultModel\n );\n\n return {\n tokensOut: exit.tokensOut,\n estimatedAmountsOut: exit.expectedAmountsOut,\n priceImpact: exit.priceImpact,\n tokensToUnwrap: exit.tokensToUnwrap,\n };\n }\n\n async buildExitCall(\n poolId: string,\n amountBptIn: string,\n userAddress: string,\n slippage: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType.Static | SimulationType.Tenderly,\n authorisation?: string,\n tokensToUnwrap?: string[]\n ): Promise<{\n to: string;\n encodedCall: string;\n tokensOut: string[];\n expectedAmountsOut: string[];\n minAmountsOut: string[];\n priceImpact: string;\n }> {\n debugLog(\n `\\n--- exitPool(): simulationType: ${simulationType} - tokensToUnwrap: ${tokensToUnwrap}`\n );\n /*\n Overall exit flow description:\n - Create calls with 0 expected min amount for each token out\n - static call (or V4 special call) to get actual amounts for each token out\n - Apply slippage to amountsOut\n - Recreate calls with minAmounts === actualAmountsWithSlippage\n - Return minAmoutsOut, UI would use this to display to user\n - Return updatedCalls, UI would use this to execute tx\n */\n\n const exit = await this.getExit(\n poolId,\n amountBptIn,\n userAddress,\n signer,\n tokensToUnwrap ?? [],\n simulationType,\n authorisation\n );\n\n const { minAmountsOutByExitPath, minAmountsOutByTokenOut } =\n this.minAmountsOut(\n exit.expectedAmountsOutByExitPath,\n exit.expectedAmountsOut,\n slippage\n );\n\n debugLog(`------------ Updating limits...`);\n // Create calls with minimum expected amount out for each exit path\n const { encodedCall, deltas } = await this.createCalls(\n exit.exitPaths,\n userAddress,\n exit.isProportional,\n minAmountsOutByExitPath,\n authorisation\n );\n\n this.assertDeltas(\n poolId,\n deltas,\n amountBptIn,\n exit.tokensOut,\n minAmountsOutByTokenOut\n );\n\n return {\n to: this.relayer,\n encodedCall,\n tokensOut: exit.tokensOut,\n expectedAmountsOut: exit.expectedAmountsOut,\n minAmountsOut: minAmountsOutByTokenOut,\n priceImpact: exit.priceImpact,\n };\n }\n\n private async getExit(\n poolId: string,\n amountBptIn: string,\n userAddress: string,\n signer: JsonRpcSigner,\n tokensToUnwrap: string[],\n simulationType: SimulationType,\n authorisation?: string\n ): Promise<{\n tokensToUnwrap: string[];\n tokensOut: string[];\n exitPaths: Node[][];\n isProportional: boolean;\n expectedAmountsOut: string[];\n expectedAmountsOutByExitPath: string[];\n priceImpact: string;\n }> {\n // Create nodes and order by breadth first - initially trys with no unwrapping\n const orderedNodes = await this.poolGraph.getGraphNodes(\n false,\n poolId,\n tokensToUnwrap\n );\n\n const isProportional = PoolGraph.isProportionalPools(orderedNodes);\n debugLog(`\\nisProportional = ${isProportional}`);\n\n let exitPaths: Node[][] = [];\n let tokensOutByExitPath: string[] = [];\n let tokensOut: string[] = [];\n\n const outputNodes = orderedNodes.filter((n) => n.exitAction === 'output');\n tokensOutByExitPath = outputNodes.map((n) => n.address.toLowerCase());\n\n tokensOut = [...new Set(tokensOutByExitPath)].sort();\n\n if (isProportional) {\n // All proportional will have single path from root node, exiting proportionally by ref all the way to leafs\n const path = orderedNodes.map((node, i) => {\n // First node should exit with full BPT amount in\n if (i === 0) node.index = amountBptIn;\n return node;\n });\n exitPaths[0] = path;\n } else {\n // Create exit paths for each output node and splits amount in proportionally between them\n exitPaths = this.getExitPaths(outputNodes, amountBptIn);\n }\n\n // Create calls with minimum expected amount out for each exit path\n const {\n multiRequests,\n encodedCall: queryData,\n outputIndexes,\n } = await this.createCalls(\n exitPaths,\n userAddress,\n isProportional,\n undefined,\n authorisation\n );\n\n const expectedAmountsOutByExitPath = await this.amountsOutByExitPath(\n userAddress,\n multiRequests,\n queryData,\n orderedNodes[0].address,\n outputIndexes,\n signer,\n simulationType\n );\n\n const tokensWithInsufficientBalance = outputNodes\n .filter((outputNode, i) =>\n BigNumber.from(expectedAmountsOutByExitPath[i]).gt(outputNode.balance)\n )\n .map((node) => node.address.toLowerCase());\n\n if (\n tokensToUnwrap.some((t) =>\n tokensWithInsufficientBalance.includes(t.toLowerCase())\n )\n ) {\n /**\n * This means there is not enough balance to exit to main or wrapped tokens only\n */\n throw new Error(\n 'Insufficient pool balance to perform generalised exit - try exitting with smaller amounts'\n );\n } else if (tokensWithInsufficientBalance.length > 0) {\n return await this.getExit(\n poolId,\n amountBptIn,\n userAddress,\n signer,\n [...new Set(tokensWithInsufficientBalance)].sort(),\n simulationType,\n authorisation\n );\n } else {\n const expectedAmountsOut = this.amountsOutByTokenOut(\n tokensOut,\n tokensOutByExitPath,\n expectedAmountsOutByExitPath\n );\n\n const priceImpact = await this.calculatePriceImpact(\n poolId,\n this.poolGraph,\n tokensOut,\n expectedAmountsOut,\n amountBptIn\n );\n\n return {\n tokensToUnwrap,\n tokensOut,\n exitPaths,\n isProportional,\n expectedAmountsOut,\n expectedAmountsOutByExitPath,\n priceImpact,\n };\n }\n }\n\n /*\n (From Fernando)\n 1. Given a bpt amount in find the expect token amounts out (proportionally)\n 2. Uses bptZeroPi = _bptForTokensZeroPriceImpact (the same is used for joins too)\n 3. PI = bptAmountIn / bptZeroPi - 1\n */\n private async calculatePriceImpact(\n poolId: string,\n poolGraph: PoolGraph,\n tokensOut: string[],\n amountsOut: string[],\n amountBptIn: string\n ): Promise {\n // Create nodes for each pool/token interaction and order by breadth first\n const orderedNodesForJoin = await poolGraph.getGraphNodes(true, poolId, []);\n const joinPaths = Join.getJoinPaths(\n orderedNodesForJoin,\n tokensOut,\n amountsOut\n );\n const totalBptZeroPi = Join.totalBptZeroPriceImpact(joinPaths);\n const priceImpact = calcPriceImpact(\n BigInt(amountBptIn),\n totalBptZeroPi.toBigInt(),\n false\n ).toString();\n return priceImpact;\n }\n\n private assertDeltas(\n poolId: string,\n deltas: Record,\n bptIn: string,\n tokensOut: string[],\n amountsOut: string[]\n ): void {\n const poolAddress = getPoolAddress(poolId);\n const outDiff = deltas[poolAddress.toLowerCase()].sub(bptIn);\n\n if (outDiff.abs().gt(3)) {\n console.error(\n `exit assertDeltas, bptIn: `,\n poolAddress,\n bptIn,\n deltas[poolAddress.toLowerCase()]?.toString()\n );\n throw new BalancerError(BalancerErrorCode.EXIT_DELTA_AMOUNTS);\n }\n delete deltas[poolAddress.toLowerCase()];\n\n tokensOut.forEach((token, i) => {\n const diff = deltas[token.toLowerCase()].add(amountsOut[i]);\n if (diff.abs().gt(1)) {\n console.error(\n `exit assertDeltas, tokenOut: `,\n token,\n amountsOut[i],\n deltas[token.toLowerCase()]?.toString()\n );\n throw new BalancerError(BalancerErrorCode.EXIT_DELTA_AMOUNTS);\n }\n delete deltas[token.toLowerCase()];\n });\n\n for (const token in deltas) {\n if (deltas[token].toString() !== '0') {\n console.error(\n `exit assertDeltas, non-input token should be 0: `,\n token,\n deltas[token].toString()\n );\n throw new BalancerError(BalancerErrorCode.EXIT_DELTA_AMOUNTS);\n }\n }\n }\n\n // Query amounts out through static call and return decoded result\n private amountsOutByExitPath = async (\n userAddress: string,\n multiRequests: Requests[][],\n callData: string,\n tokenIn: string,\n outputIndexes: number[],\n signer: JsonRpcSigner,\n simulationType: SimulationType\n ): Promise => {\n const amountsOutByExitPath =\n await this.simulationService.simulateGeneralisedExit(\n this.relayer,\n multiRequests,\n callData,\n outputIndexes,\n userAddress,\n tokenIn,\n signer,\n simulationType\n );\n\n return amountsOutByExitPath;\n };\n\n // Aggregate amounts out by exit path into amounts out by token out\n private amountsOutByTokenOut = (\n tokensOut: string[],\n tokensOutByExitPath: string[],\n expectedAmountsOutByExitPath: string[]\n ) => {\n // Aggregate amountsOutByExitPath into expectedAmountsOut\n const expectedAmountsOutMap: Record = {};\n tokensOutByExitPath.forEach(\n (tokenOut, i) =>\n (expectedAmountsOutMap[tokenOut] = (\n expectedAmountsOutMap[tokenOut] ?? Zero\n ).add(expectedAmountsOutByExitPath[i]))\n );\n const expectedAmountsOut = tokensOut.map((tokenOut) =>\n expectedAmountsOutMap[tokenOut].toString()\n );\n\n return expectedAmountsOut;\n };\n\n // Apply slippage tolerance to expected amounts out\n private minAmountsOut = (\n expectedAmountsOutByExitPath: string[],\n expectedAmountsOutByTokenOut: string[],\n slippage: string\n ) => {\n // Apply slippage tolerance on expected amount out for each exit path\n const minAmountsOutByExitPath = expectedAmountsOutByExitPath.map(\n (expectedAmountOut) =>\n subSlippage(\n BigNumber.from(expectedAmountOut),\n BigNumber.from(slippage)\n ).toString()\n );\n\n // Apply slippage tolerance on expected amount out for each token out\n const minAmountsOutByTokenOut = expectedAmountsOutByTokenOut.map(\n (expectedAmountOut) =>\n subSlippage(\n BigNumber.from(expectedAmountOut),\n BigNumber.from(slippage)\n ).toString()\n );\n\n return { minAmountsOutByExitPath, minAmountsOutByTokenOut };\n };\n\n // Create one exit path for each output node\n private getExitPaths = (outputNodes: Node[], amountIn: string): Node[][] => {\n const exitPaths = outputNodes.map((outputNode) => {\n const exitPath = [outputNode];\n while (exitPath[0].parent) {\n exitPath.unshift(cloneDeep(exitPath[0].parent));\n }\n /*\n The input/root node requires a real amount (not a reference/index) as it is first node in chain.\n This amount will be used when chaining to children.\n */\n exitPath[0].index = exitPath[exitPath.length - 1].proportionOfParent\n .mul(amountIn)\n .div(WeiPerEther)\n .toString();\n return exitPath;\n });\n\n /*\n Amounts in for exit paths should be adjusted after caculated to fix eventual rounding issues\n */\n // Sum amountIn for each exit path\n const amountsInSum = exitPaths.reduce((accumulator, currentExitPath) => {\n const amountInForCurrentExitPath = currentExitPath[0].index;\n return BigNumber.from(amountInForCurrentExitPath).add(accumulator);\n }, Zero);\n // Compare total amountIn with sum of calculated amountIn for each exit path\n const amountsInDiff = BigNumber.from(amountIn).sub(amountsInSum);\n // Add diff to last exit path amountIn\n exitPaths[exitPaths.length - 1][0].index = amountsInDiff\n .add(exitPaths[exitPaths.length - 1][0].index)\n .toString();\n\n return exitPaths;\n };\n\n private async createCalls(\n exitPaths: Node[][],\n userAddress: string,\n isProportional: boolean,\n minAmountsOut?: string[],\n authorisation?: string\n ): Promise<{\n multiRequests: Requests[][];\n encodedCall: string;\n outputIndexes: number[];\n deltas: Record;\n }> {\n const { multiRequests, calls, outputIndexes, deltas } =\n this.createActionCalls(\n cloneDeep(exitPaths),\n userAddress,\n isProportional,\n minAmountsOut\n );\n\n if (authorisation) {\n calls.unshift(\n Relayer.encodeSetRelayerApproval(this.relayer, true, authorisation)\n );\n }\n\n const encodedCall = balancerRelayerInterface.encodeFunctionData(\n 'multicall',\n [calls]\n );\n\n return {\n multiRequests,\n encodedCall,\n outputIndexes: authorisation\n ? outputIndexes.map((i) => i + 1)\n : outputIndexes,\n deltas,\n };\n }\n\n private updateDeltas(\n deltas: Record,\n assets: string[],\n amounts: string[]\n ): Record {\n assets.forEach((t, i) => {\n const asset = t.toLowerCase();\n if (!deltas[asset]) deltas[asset] = Zero;\n deltas[asset] = deltas[asset].add(amounts[i]);\n });\n return deltas;\n }\n\n private createActionCalls(\n exitPaths: Node[][],\n userAddress: string,\n isProportional: boolean,\n minAmountsOut?: string[]\n ): {\n multiRequests: Requests[][];\n calls: string[];\n outputIndexes: number[];\n deltas: Record;\n } {\n const multiRequests: Requests[][] = [];\n const calls: string[] = [];\n const outputIndexes: number[] = [];\n const isPeek = !minAmountsOut;\n const deltas: Record = {};\n\n const getSenderAddress = (exitPath: Node[], node: Node) => {\n // Calls from root node are sent by the user\n if (!node.parent) return userAddress;\n // Otherwise sent by the parent's recipient\n return getRecipientAddress(exitPath, node.parent);\n };\n\n const getRecipientAddress = (exitPath: Node[], node: Node) => {\n // Always send to user on calls that contain outputs, otherwise send to relayer\n const exitChildren = node.children.filter((child) =>\n exitPath.map((n) => n.index).includes(child.index)\n );\n const hasOutputChild = exitChildren.some(\n (c) => c.exitAction === 'output'\n );\n return hasOutputChild ? userAddress : this.relayer;\n };\n\n // Create actions for each Node and return in multicall array\n\n exitPaths.forEach((exitPath, i) => {\n const modelRequests: Requests[] = [];\n const outputNodes = exitPath.filter(\n (node) => node.exitAction === 'output'\n );\n exitPath.forEach((node) => {\n // Find the exit child node\n const exitChild = node.children.find((child) =>\n exitPath.map((n) => n.index).includes(child.index)\n );\n\n const sender = getSenderAddress(exitPath, node);\n const recipient = getRecipientAddress(exitPath, node);\n\n const exitChildren = node.children.filter((child) =>\n exitPath.map((n) => n.index).includes(child.index)\n );\n // An action that has either outputs or unwraps as child actions is the last action where we're able to set limits on expected output amounts\n const isLastActionWithLimits = exitChildren.some(\n (c) => c.exitAction === 'output' || c.exitAction === 'unwrap'\n );\n\n // Last calls will use minAmountsOut to protect user. Middle calls can safely have 0 minimum as tx will revert if last fails.\n let minAmountOut = '0';\n const minAmountsOutProportional = Array(node.children.length).fill('0');\n if (minAmountsOut && isLastActionWithLimits) {\n if (isProportional) {\n // Proportional exits have a minAmountOut for each output node within a single exit path\n\n /**\n * minAmountsOut is related to the whole multicall transaction, while\n * minAmountsOutProportional is related only to the current node/transaction\n * This section is responsible for mapping each minAmountOut to their\n * respective position on the minAmountsOutProportional array\n * TODO: extract to a function so it's easier to understand\n */\n node.children.forEach((child, i) => {\n let outputChildIndex: number;\n if (child.exitAction === 'unwrap') {\n outputChildIndex = outputNodes.indexOf(child.children[0]);\n minAmountOut = WeiPerEther.mul(minAmountsOut[outputChildIndex])\n .div(child.priceRate)\n .toString();\n } else if (child.exitAction === 'output') {\n outputChildIndex = outputNodes.indexOf(child);\n minAmountOut = minAmountsOut[outputChildIndex];\n } else {\n minAmountOut = '0'; // clears minAmountOut if it's not an output or unwrap\n }\n minAmountsOutProportional[i] = minAmountOut;\n });\n } else {\n // Non-proportional exits have a minAmountOut for each exit path\n if (exitChild?.exitAction === 'unwrap') {\n minAmountOut = WeiPerEther.mul(minAmountsOut[i])\n .div(exitChild.priceRate)\n .toString();\n } else {\n minAmountOut = minAmountsOut[i];\n }\n }\n }\n\n switch (node.exitAction) {\n case 'unwrap': {\n const { modelRequest, encodedCall, assets, amounts } =\n this.createUnwrap(\n node,\n exitChild as Node,\n i,\n minAmountOut,\n sender,\n recipient\n );\n modelRequests.push(modelRequest);\n calls.push(encodedCall);\n this.updateDeltas(deltas, assets, amounts);\n break;\n }\n case 'batchSwap': {\n const { modelRequest, encodedCall, assets, amounts } =\n this.createSwap(\n node,\n exitChild as Node,\n i,\n minAmountOut,\n sender,\n recipient\n );\n modelRequests.push(modelRequest);\n calls.push(encodedCall);\n this.updateDeltas(deltas, assets, amounts);\n break;\n }\n case 'exitPool': {\n let exit;\n if (isProportional) {\n exit = this.createExitPoolProportional(\n node,\n minAmountsOutProportional,\n sender,\n recipient\n );\n } else {\n exit = this.createExitPool(\n node,\n exitChild as Node,\n i,\n minAmountOut,\n sender,\n recipient\n );\n }\n const { modelRequest, encodedCall, bptIn, tokensOut, amountsOut } =\n exit;\n modelRequests.push(modelRequest);\n calls.push(encodedCall);\n this.updateDeltas(\n deltas,\n [node.address, ...tokensOut],\n [bptIn, ...amountsOut]\n );\n break;\n }\n case 'output':\n if (isPeek) {\n calls.push(\n Relayer.encodePeekChainedReferenceValue(\n Relayer.toChainedReference(\n this.getOutputRef(i, node.index),\n false\n )\n )\n );\n outputIndexes.push(calls.length - 1);\n }\n break;\n default:\n return;\n }\n });\n multiRequests.push(modelRequests);\n });\n\n return { multiRequests, calls, outputIndexes, deltas };\n }\n\n private createUnwrap = (\n node: Node,\n exitChild: Node,\n exitPathIndex: number,\n minAmountOut: string,\n sender: string,\n recipient: string\n ): {\n modelRequest: UnwrapRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n } => {\n const amount = Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, node.index)\n ).toString();\n const outputReference = Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, exitChild.index)\n );\n\n const linearPoolType = node.parent?.type as string;\n\n const call: EncodeUnwrapInput = {\n wrappedToken: node.address,\n sender,\n recipient,\n amount,\n outputReference,\n };\n\n const encodedCall = Relayer.encodeUnwrap(call, linearPoolType);\n\n debugLog(`linear type: , ${linearPoolType}`);\n debugLog('\\nUwrap:');\n debugLog(JSON.stringify(call));\n\n const modelRequest = VaultModel.mapUnwrapRequest(\n amount,\n outputReference,\n node.parent?.id as string // linear pool id\n );\n\n const assets = [exitChild.address];\n const amounts = [Zero.sub(minAmountOut).toString()]; // needs to be negative because it's handled by the vault model as an amount going out of the vault\n return { modelRequest, encodedCall, assets, amounts };\n };\n\n private createSwap(\n node: Node,\n exitChild: Node,\n exitPathIndex: number,\n minAmountOut: string,\n sender: string,\n recipient: string\n ): {\n modelRequest: SwapRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n } {\n const isRootNode = !node.parent;\n const amountIn = isRootNode\n ? node.index\n : Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, node.index)\n ).toString();\n\n const tokenOut = exitChild.address;\n const assets = [tokenOut, node.address];\n\n // Single swap limits are always positive\n // Swap within generalisedExit is always exactIn, so use minAmountOut to set limit\n const limit: string = minAmountOut;\n\n const request: SingleSwap = {\n poolId: node.id,\n kind: SwapType.SwapExactIn,\n assetIn: node.address,\n assetOut: tokenOut,\n amount: amountIn,\n userData: '0x',\n };\n\n const fromInternalBalance = this.receivesFromInternal(node);\n const toInternalBalance = this.receivesFromInternal(exitChild);\n\n const funds: FundManagement = {\n sender,\n recipient,\n fromInternalBalance,\n toInternalBalance,\n };\n\n const outputReference = Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, exitChild.index)\n );\n\n const call: Swap = {\n request,\n funds,\n limit,\n deadline: BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value: '0', // TODO: check if swap with ETH is possible in this case and handle it\n outputReference,\n };\n debugLog('\\nSwap:');\n debugLog(JSON.stringify(call));\n\n const encodedCall = Relayer.encodeSwap(call);\n\n const modelRequest = VaultModel.mapSwapRequest(call);\n\n // If node isn't rootNode, the swap is part of a chain and shouldn't be considered for user deltas\n const bptIn = !isRootNode ? '0' : amountIn;\n // If child exit action is not output, the swap is part of a chain and shouldn't be considered for user deltas\n const userTokenOutAmount =\n exitChild.exitAction !== 'output'\n ? '0'\n : BigNumber.from(minAmountOut).mul(-1).toString(); // needs to be negative because it's handled by the vault model as an amount going out of the vault\n const amounts = [userTokenOutAmount, bptIn];\n\n return { modelRequest, encodedCall, assets, amounts };\n }\n\n private createBatchSwap(\n node: Node,\n exitChildren: Node[],\n exitPathIndex: number,\n minAmountsOut: string[],\n sender: string,\n recipient: string\n ): {\n modelRequest: BatchSwapRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n } {\n const isRootNode = !node.parent;\n const amountIn = isRootNode\n ? node.index\n : Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, node.index)\n ).toString();\n\n const tokensOut = exitChildren.map((n) => n.address);\n const assets = [...tokensOut, node.address];\n // TODO - setting these right?\n const limits = [...minAmountsOut];\n limits.push(amountIn);\n const batchSwapSteps: BatchSwapStep[] = [];\n const outputReferences: OutputReference[] = [];\n exitChildren.forEach((child, i) => {\n // TODO - Is this correct?\n const amount = child.proportionOfParent\n .mul(amountIn)\n .div(WeiPerEther)\n .toString();\n const swapStep: BatchSwapStep = {\n poolId: node.id,\n assetInIndex: assets.length - 1,\n assetOutIndex: i,\n amount,\n userData: '0x',\n };\n batchSwapSteps.push(swapStep);\n // TODO - Is this right?\n outputReferences.push({\n index: i,\n key: Relayer.toChainedReference(this.getOutputRef(0, child.index)),\n });\n });\n\n const total = batchSwapSteps.reduce((acc, swap) => {\n return acc.add(swap.amount);\n }, BigNumber.from(0));\n const dust = BigNumber.from(amountIn).sub(total);\n batchSwapSteps[0].amount = dust.add(batchSwapSteps[0].amount).toString();\n\n const fromInternalBalance = this.receivesFromInternal(node);\n // TODO - This is assuming that all exit to same, is this right?\n const toInternalBalance = this.receivesFromInternal(exitChildren[0]);\n\n const funds: FundManagement = {\n sender,\n recipient,\n fromInternalBalance,\n toInternalBalance,\n };\n\n const call: EncodeBatchSwapInput = {\n swapType: SwapType.SwapExactIn,\n swaps: batchSwapSteps,\n assets,\n funds,\n limits,\n deadline: BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value: '0', // TODO: check if swap with ETH is possible in this case and handle it\n outputReferences,\n };\n debugLog('\\nBatchSwap:');\n debugLog(JSON.stringify(call));\n\n const encodedCall = Relayer.encodeBatchSwap(call);\n\n const modelRequest = VaultModel.mapBatchSwapRequest(call);\n\n // If node isn't rootNode, the swap is part of a chain and shouldn't be considered for user deltas\n const bptIn = !isRootNode ? '0' : amountIn;\n // If child exit action is not output, the swap is part of a chain and shouldn't be considered for user deltas\n const userTokensOut = exitChildren.map((child, i) => {\n const userTokenOutAmount =\n child.exitAction !== 'output'\n ? '0'\n : BigNumber.from(minAmountsOut[i]).mul(-1).toString(); // needs to be negative because it's handled by the vault model as an amount going out of the vault\n return userTokenOutAmount;\n });\n\n const amounts = [...userTokensOut, bptIn];\n\n return { modelRequest, encodedCall, assets, amounts };\n }\n\n private createExitPool(\n node: Node,\n exitChild: Node,\n exitPathIndex: number,\n minAmountOut: string,\n sender: string,\n recipient: string\n ): {\n modelRequest: ExitPoolModelRequest;\n encodedCall: string;\n bptIn: string;\n tokensOut: string[];\n amountsOut: string[];\n } {\n const tokenOut = exitChild.address;\n const isRootNode = !node.parent;\n const amountIn = isRootNode\n ? node.index\n : Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, node.index)\n ).toString();\n\n const tokensOut: string[] = [];\n const amountsOut: string[] = [];\n\n // tokensOut needs to include each asset even if it has 0 amount\n node.children.forEach((child) => {\n tokensOut.push(child.address);\n amountsOut.push(child.address === tokenOut ? minAmountOut : '0');\n });\n\n if (node.type === PoolType.ComposableStable) {\n // assets need to include the phantomPoolToken\n tokensOut.push(node.address);\n // need to add a placeholder so sorting works\n amountsOut.push('0');\n }\n\n // sort inputs\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [sortedTokens, sortedAmounts] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n // userData amounts should not include the BPT of the pool being joined\n let userDataTokens = [];\n const bptIndex = sortedTokens\n .map((t) => t.toLowerCase())\n .indexOf(node.address.toLowerCase());\n if (bptIndex === -1) {\n userDataTokens = sortedTokens;\n } else {\n userDataTokens = [\n ...sortedTokens.slice(0, bptIndex),\n ...sortedTokens.slice(bptIndex + 1),\n ];\n }\n\n let userData: string;\n if (node.type === PoolType.Weighted) {\n userData = WeightedPoolEncoder.exitExactBPTInForOneTokenOut(\n amountIn,\n userDataTokens.indexOf(tokenOut)\n );\n } else {\n userData = StablePoolEncoder.exitExactBPTInForOneTokenOut(\n amountIn,\n userDataTokens.indexOf(tokenOut)\n );\n }\n\n const outputReferences = [\n {\n index: sortedTokens\n .map((t) => t.toLowerCase())\n .indexOf(tokenOut.toLowerCase()),\n key: Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, exitChild.index)\n ),\n },\n ];\n\n const toInternalBalance = this.receivesFromInternal(exitChild);\n\n const call = Relayer.formatExitPoolInput({\n poolId: node.id,\n poolKind: 0,\n sender,\n recipient,\n outputReferences,\n exitPoolRequest: {} as ExitPoolRequest,\n assets: sortedTokens,\n minAmountsOut: sortedAmounts,\n userData,\n toInternalBalance,\n });\n debugLog('\\nExit:');\n debugLog(JSON.stringify(call));\n\n const encodedCall = Relayer.encodeExitPool(call);\n const modelRequest = VaultModel.mapExitPoolRequest(call);\n\n const userAmountTokensOut = sortedAmounts.map((a) =>\n Relayer.isChainedReference(a) ? '0' : Zero.sub(a).toString()\n );\n const userBptIn = Relayer.isChainedReference(amountIn) ? '0' : amountIn;\n // If node isn't rootNode, the exit is part of a chain and shouldn't be considered for user deltas\n const deltaBptIn = !isRootNode ? Zero.toString() : userBptIn;\n // // If child exit action is not output, the exit is part of a chain and shouldn't be considered for user deltas\n const deltaTokensOut =\n exitChild.exitAction !== 'output' ? [] : sortedTokens;\n const deltaAmountsOut =\n exitChild.exitAction !== 'output' ? [] : userAmountTokensOut;\n\n return {\n modelRequest,\n encodedCall,\n bptIn: deltaBptIn,\n tokensOut: deltaTokensOut,\n amountsOut: deltaAmountsOut,\n };\n }\n\n private createExitPoolProportional(\n node: Node,\n minAmountsOut: string[],\n sender: string,\n recipient: string\n ): {\n modelRequest: ExitPoolModelRequest;\n encodedCall: string;\n bptIn: string;\n tokensOut: string[];\n amountsOut: string[];\n } {\n const isRootNode = !node.parent;\n const amountIn = isRootNode\n ? node.index\n : Relayer.toChainedReference(this.getOutputRef(0, node.index)).toString();\n\n const tokensOut = node.children.map((child) => child.address);\n const amountsOut = [...minAmountsOut];\n\n if (node.type === PoolType.ComposableStable) {\n // assets need to include the phantomPoolToken\n tokensOut.push(node.address);\n // need to add a placeholder so sorting works\n amountsOut.push('0');\n }\n\n // TODO: we shoule consider let the graph handle sorting instead of manipulating\n // token order within actions - specially now that we have different sorting\n // cases and that the subgraph is already handling them properly\n\n // sort inputs\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [sortedTokens, sortedAmounts] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n let userData: string;\n if (node.type === PoolType.Weighted) {\n userData = WeightedPoolEncoder.exitExactBPTInForTokensOut(amountIn);\n } else if (node.type === PoolType.ComposableStable) {\n userData =\n ComposableStablePoolEncoder.exitExactBPTInForAllTokensOut(amountIn);\n } else {\n // TODO: double check if it's ok to set the Stable Pool Encoder as the default/else case\n userData = StablePoolEncoder.exitExactBPTInForTokensOut(amountIn);\n }\n\n const outputReferences = node.children.map((child) => {\n return {\n index: sortedTokens\n .map((t) => t.toLowerCase())\n .indexOf(child.address.toLowerCase()),\n key: Relayer.toChainedReference(this.getOutputRef(0, child.index)),\n };\n });\n // We have to use correct pool type based off following from Relayer:\n // enum PoolKind { WEIGHTED, LEGACY_STABLE, COMPOSABLE_STABLE, COMPOSABLE_STABLE_V2 }\n // (note only Weighted and COMPOSABLE_STABLE_V2 will support proportional exits)\n let kind = 0;\n if (node.type === PoolType.ComposableStable) {\n kind = 3;\n }\n\n const allChildrenReceiveFromInternal = node.children.every((child) =>\n this.receivesFromInternal(child)\n );\n\n const call = Relayer.formatExitPoolInput({\n poolId: node.id,\n poolKind: kind,\n sender,\n recipient,\n outputReferences,\n exitPoolRequest: {} as ExitPoolRequest,\n assets: sortedTokens,\n minAmountsOut: sortedAmounts,\n userData,\n toInternalBalance: allChildrenReceiveFromInternal,\n });\n debugLog('\\nExitProportional:');\n debugLog(JSON.stringify(call));\n const encodedCall = Relayer.encodeExitPool(call);\n const modelRequest = VaultModel.mapExitPoolRequest(call);\n\n const userAmountTokensOut = sortedAmounts.map((a) =>\n Relayer.isChainedReference(a) ? '0' : Zero.sub(a).toString()\n );\n const userBptIn = Relayer.isChainedReference(amountIn) ? '0' : amountIn;\n // If current node is the root node the exit the delta BPT in should be considered for user deltas\n const deltaBptIn = isRootNode ? userBptIn : Zero.toString();\n // If the respective child node is an output, it should be considered for user deltas\n const deltaTokensOut = sortedTokens.filter((t) =>\n node.children\n .filter((c) => c.exitAction === 'output')\n .map((c) => c.address)\n .includes(t)\n );\n const deltaAmountsOut = userAmountTokensOut.filter((_, i) =>\n deltaTokensOut.includes(sortedTokens[i])\n );\n\n return {\n modelRequest,\n encodedCall,\n bptIn: deltaBptIn,\n tokensOut: deltaTokensOut,\n amountsOut: deltaAmountsOut,\n };\n }\n\n private getOutputRef = (exitPathIndex: number, nodeIndex: string): number => {\n return exitPathIndex * 100 + parseInt(nodeIndex);\n };\n\n // node without parent is the root node and it receives from non-internal balance\n // exitPool always expects amounts from non-internal balance\n // output always behave as receiving from non-internal balance\n // others should always receive from internal balance\n private receivesFromInternal = (node: Node): boolean => {\n if (!node.parent) return false;\n return (\n node.exitAction !== 'output' &&\n node.exitAction !== 'unwrap' &&\n node.exitAction !== 'exitPool'\n );\n };\n}\n","/**\n * Calculates pool fees\n *\n * 1. Pool fees in last 24hrs\n */\nimport { isLessThan24Hours } from '@/lib/utils/time';\nimport { Pool, Findable, PoolAttribute } from '@/types';\n\nexport class PoolVolume {\n constructor(\n private yesterdaysPools: Findable | undefined\n ) {}\n\n // 🚨 this is adding 1 call to get yesterday's block height and 2nd call to fetch yesterday's pools data from subgraph\n // TODO: find a better data source for that eg. add blocks to graph, replace with a database, or dune\n async last24h(pool: Pool): Promise {\n let yesterdaysPool;\n if (this.yesterdaysPools) {\n yesterdaysPool = await this.yesterdaysPools.find(pool.id);\n }\n\n if (!pool.totalSwapVolume) {\n return 0;\n }\n\n if (!yesterdaysPool?.totalSwapVolume) {\n // Process edge case when pool creation time is less that 24h\n if (pool.createTime && isLessThan24Hours(pool.createTime)) {\n return parseFloat(pool.totalSwapVolume);\n }\n return 0;\n }\n\n return (\n parseFloat(pool.totalSwapVolume) -\n parseFloat(yesterdaysPool.totalSwapVolume)\n );\n }\n}\n","import { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport {\n ComposableStableCreatePoolParameters,\n InitJoinPoolAttributes,\n InitJoinPoolParameters,\n JoinPoolDecodedAttributes,\n JoinPoolRequestDecodedAttributes,\n} from '@/modules/pools/factory/types';\nimport { balancerVault, networkAddresses } from '@/lib/constants/config';\nimport { AssetHelpers, getRandomBytes32 } from '@/lib/utils';\nimport { PoolFactory } from '@/modules/pools/factory/pool-factory';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { BalancerNetworkConfig } from '@/types';\nimport {\n ComposableStablePool__factory,\n ComposableStablePoolFactory__factory,\n} from '@/contracts';\nimport { JsonRpcProvider, TransactionReceipt } from '@ethersproject/providers';\nimport { LogDescription } from '@ethersproject/abi';\nimport { findEventInReceiptLogs } from '@/lib/utils';\nimport { Contract } from '@ethersproject/contracts';\nimport { ContractInstances } from '@/modules/contracts/contracts.module';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { ComposableStablePoolInterface } from '@/contracts/ComposableStablePool';\n\nexport class ComposableStableFactory implements PoolFactory {\n private wrappedNativeAsset: string;\n private contracts: ContractInstances;\n\n constructor(\n networkConfig: BalancerNetworkConfig,\n contracts: ContractInstances\n ) {\n const { tokens } = networkAddresses(networkConfig.chainId);\n this.wrappedNativeAsset = tokens.wrappedNativeAsset;\n this.contracts = contracts;\n }\n\n /**\n * Builds a transaction for a composable pool create operation.\n * @param name The name of the pool\n * @param symbol The symbol of the pool\n * @param tokenAddresses The token's addresses\n * @param amplificationParameter The amplification parameter(must be greater than 1)\n * @param rateProviders The addresses of the rate providers for each token, ordered\n * @param tokenRateCacheDurations the Token Rate Cache Duration of each token\n * @param exemptFromYieldProtocolFeeFlags Array containing boolean for each token exemption from yield protocol fee flags\n * @param swapFeeEvm The swapFee for the owner of the pool in string format parsed to evm(100% is 1e18, 10% is 1e17, 1% is 1e16)\n * @param owner The address of the owner of the pool\n * @returns A TransactionRequest object, which can be directly inserted in the transaction to create a composable stable pool\n */\n create({\n name,\n symbol,\n tokenAddresses,\n amplificationParameter,\n rateProviders,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n swapFeeEvm,\n owner,\n salt,\n }: ComposableStableCreatePoolParameters): { to?: string; data: BytesLike } {\n this.checkCreateInputs({\n rateProviders,\n tokenAddresses,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n swapFeeEvm,\n });\n const params = this.parseCreateParamsForEncoding({\n name,\n symbol,\n tokenAddresses,\n amplificationParameter,\n rateProviders,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n swapFeeEvm,\n owner,\n salt,\n });\n const encodedFunctionData = this.encodeCreateFunctionData(params);\n return {\n to: this.contracts.composableStablePoolFactory?.address,\n data: encodedFunctionData,\n };\n }\n\n checkCreateInputs = ({\n tokenAddresses,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n rateProviders,\n swapFeeEvm,\n }: Pick<\n ComposableStableCreatePoolParameters,\n | 'rateProviders'\n | 'tokenRateCacheDurations'\n | 'tokenAddresses'\n | 'exemptFromYieldProtocolFeeFlags'\n | 'swapFeeEvm'\n >): void => {\n if (\n tokenAddresses.length !== tokenRateCacheDurations.length ||\n tokenRateCacheDurations.length !==\n exemptFromYieldProtocolFeeFlags.length ||\n exemptFromYieldProtocolFeeFlags.length !== rateProviders.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n if (BigInt(swapFeeEvm) <= BigInt(0) || BigInt(swapFeeEvm) > BigInt(1e17)) {\n throw new BalancerError(BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE);\n }\n };\n parseCreateParamsForEncoding = ({\n name,\n symbol,\n tokenAddresses,\n amplificationParameter,\n rateProviders,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n swapFeeEvm,\n owner,\n salt,\n }: ComposableStableCreatePoolParameters): [\n string,\n string,\n string[],\n string,\n string[],\n string[],\n boolean[],\n string,\n string,\n BytesLike\n ] => {\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [\n sortedTokens,\n sortedRateProviders,\n sortedTokenRateCacheDurations,\n sortedExemptFromYieldProtocols,\n ] = assetHelpers.sortTokens(\n tokenAddresses,\n rateProviders,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags\n ) as [string[], string[], string[], boolean[]];\n const params = [\n name,\n symbol,\n sortedTokens,\n amplificationParameter,\n sortedRateProviders,\n sortedTokenRateCacheDurations,\n sortedExemptFromYieldProtocols,\n swapFeeEvm.toString(),\n owner,\n salt || getRandomBytes32(),\n ] as [\n string,\n string,\n string[],\n string,\n string[],\n string[],\n boolean[],\n string,\n string,\n BytesLike\n ];\n return params;\n };\n\n encodeCreateFunctionData = (\n params: [\n string,\n string,\n string[],\n string,\n string[],\n string[],\n boolean[],\n string,\n string,\n BytesLike\n ]\n ): string => {\n const composablePoolFactoryInterface =\n ComposableStablePoolFactory__factory.createInterface();\n return composablePoolFactoryInterface.encodeFunctionData('create', params);\n };\n\n /**\n * Builds a transaction for a composable pool init join operation.\n * @param joiner The address of the joiner of the pool\n * @param poolId The id of the pool\n * @param poolAddress The address of the pool\n * @param tokensIn Array with the address of the tokens\n * @param amountsIn Array with the amount of each token\n * @returns A InitJoinPoolAttributes object, which can be directly inserted in the transaction to init join a composable stable pool\n */\n buildInitJoin({\n joiner,\n poolId,\n poolAddress,\n tokensIn,\n amountsIn,\n }: InitJoinPoolParameters): InitJoinPoolAttributes {\n this.checkInitJoinInputs({\n tokensIn,\n amountsIn,\n poolId,\n poolAddress,\n });\n const { attributes, params } = this.parseParamsForInitJoin({\n joiner,\n poolId,\n poolAddress,\n tokensIn,\n amountsIn,\n });\n const { functionName, data } = this.encodeInitJoinFunctionData(params);\n\n return {\n to: balancerVault,\n functionName,\n data,\n attributes,\n };\n }\n\n checkInitJoinInputs = ({\n poolId,\n poolAddress,\n tokensIn,\n amountsIn,\n }: Pick<\n InitJoinPoolParameters,\n 'tokensIn' | 'amountsIn' | 'poolId' | 'poolAddress'\n >): void => {\n if (!poolId || !poolAddress) {\n throw new BalancerError(BalancerErrorCode.NO_POOL_DATA);\n }\n if (tokensIn.length !== amountsIn.length) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n };\n\n parseParamsForInitJoin = ({\n joiner,\n poolId,\n poolAddress,\n tokensIn,\n amountsIn,\n }: InitJoinPoolParameters): {\n attributes: JoinPoolDecodedAttributes;\n params: [string, string, string, JoinPoolRequestDecodedAttributes];\n } => {\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n // sort inputs\n const tokensWithBpt = [...tokensIn, poolAddress];\n const amountsWithBpt = [...amountsIn, '0'];\n const maxAmountsWithBpt = [\n ...amountsIn,\n // this max amount needs to be >= PREMINT - bptAmountOut,\n // The vault returns BAL#506 if it's not,\n // PREMINT is around 2^111, but here we set the max amount of BPT as MAX_UINT_256-1 for safety\n BigInt.asUintN(256, BigInt(-1)).toString(),\n ];\n const [sortedTokens, sortedAmounts, sortedMaxAmounts] =\n assetHelpers.sortTokens(\n tokensWithBpt,\n amountsWithBpt,\n maxAmountsWithBpt\n ) as [string[], string[], string[]];\n\n const userData = ComposableStablePoolEncoder.joinInit(sortedAmounts);\n\n const attributes: JoinPoolDecodedAttributes = {\n poolId: poolId,\n sender: joiner,\n recipient: joiner,\n joinPoolRequest: {\n assets: sortedTokens,\n maxAmountsIn: sortedMaxAmounts,\n userData,\n fromInternalBalance: false,\n },\n };\n return {\n attributes,\n params: [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ],\n };\n };\n encodeInitJoinFunctionData = (\n params: [string, string, string, JoinPoolRequestDecodedAttributes]\n ): {\n functionName: string;\n data: string;\n } => {\n const functionName = 'joinPool';\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, params);\n\n return { functionName, data };\n };\n\n getPoolAddressAndIdWithReceipt = async (\n provider: JsonRpcProvider,\n receipt: TransactionReceipt\n ): Promise<{\n poolId: string;\n poolAddress: string;\n }> => {\n const poolCreationEvent: LogDescription = findEventInReceiptLogs({\n receipt,\n to: this.contracts.composableStablePoolFactory?.address || '',\n contractInterface: ComposableStablePoolFactory__factory.createInterface(),\n logName: 'PoolCreated',\n });\n\n const poolAddress = poolCreationEvent.args.pool;\n const composableStablePoolInterface = this.getPoolInterface();\n const pool = new Contract(\n poolAddress,\n composableStablePoolInterface,\n provider\n );\n const poolId = await pool.getPoolId();\n return {\n poolAddress,\n poolId,\n };\n };\n\n getPoolInterface(): ComposableStablePoolInterface {\n return ComposableStablePool__factory.createInterface();\n }\n}\n","import { LogDescription } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\nimport { Contract } from '@ethersproject/contracts';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { JsonRpcProvider, TransactionReceipt } from '@ethersproject/providers';\n\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { WeightedPoolFactory__factory } from '@/contracts/factories/WeightedPoolFactory__factory';\nimport { balancerVault, networkAddresses } from '@/lib/constants/config';\nimport {\n AssetHelpers,\n findEventInReceiptLogs,\n getRandomBytes32,\n} from '@/lib/utils';\nimport { ContractInstances } from '@/modules/contracts/contracts.module';\nimport { PoolFactory } from '@/modules/pools/factory/pool-factory';\nimport {\n InitJoinPoolAttributes,\n InitJoinPoolParameters,\n JoinPoolDecodedAttributes,\n JoinPoolRequestDecodedAttributes,\n WeightedCreatePoolParameters,\n} from '@/modules/pools/factory/types';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { BalancerNetworkConfig } from '@/types';\nimport { WeightedPool__factory } from '@/contracts';\nimport { SolidityMaths } from '@/lib/utils/solidityMaths';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { WeightedPoolInterface } from '@/contracts/WeightedPool';\n\nexport class WeightedFactory implements PoolFactory {\n private wrappedNativeAsset: string;\n private contracts: ContractInstances;\n\n constructor(\n networkConfig: BalancerNetworkConfig,\n contracts: ContractInstances\n ) {\n const { tokens } = networkAddresses(networkConfig.chainId);\n this.wrappedNativeAsset = tokens.wrappedNativeAsset;\n this.contracts = contracts;\n }\n\n /**\n * Builds a transaction for a weighted pool create operation.\n * @param factoryAddress The address of the factory for weighted pool (contract address)\n * @param name The name of the pool\n * @param symbol The symbol of the pool\n * @param tokenAddresses The token's addresses\n * @param normalizedWeights The weights for each token, ordered\n * @param rateProviders The rate providers for each token, ordered\n * @param swapFeeEvm The swapFee for the owner of the pool in string or bigint formatted to evm(100% is 1e18, 10% is 1e17, 1% is 1e16)\n * @param owner The address of the owner of the pool\n * @param salt The salt of the pool (bytes32)\n * @returns TransactionRequest object, which can be directly inserted in the transaction to create a weighted pool\n */\n create({\n name,\n symbol,\n tokenAddresses,\n normalizedWeights,\n rateProviders,\n swapFeeEvm,\n owner,\n salt,\n }: WeightedCreatePoolParameters): {\n to?: string;\n data: BytesLike;\n } {\n this.checkCreateInputs({\n tokenAddresses,\n normalizedWeights,\n swapFeeEvm,\n rateProviders,\n });\n const params = this.parseCreateParamsForEncoding({\n name,\n symbol,\n tokenAddresses,\n normalizedWeights,\n rateProviders,\n swapFeeEvm,\n owner,\n salt,\n });\n const encodedFunctionData = this.encodeCreateFunctionData(params);\n return {\n to: this.contracts.weightedPoolFactory?.address,\n data: encodedFunctionData,\n };\n }\n\n checkCreateInputs({\n tokenAddresses,\n normalizedWeights,\n swapFeeEvm,\n rateProviders,\n }: Pick<\n WeightedCreatePoolParameters,\n 'tokenAddresses' | 'normalizedWeights' | 'swapFeeEvm' | 'rateProviders'\n >): void {\n if (\n tokenAddresses.length !== normalizedWeights.length ||\n normalizedWeights.length !== rateProviders.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n if (tokenAddresses.length < 2) {\n throw new BalancerError(BalancerErrorCode.BELOW_MIN_TOKENS);\n }\n if (tokenAddresses.length > 8) {\n throw new BalancerError(BalancerErrorCode.ABOVE_MAX_TOKENS);\n }\n if (BigInt(swapFeeEvm) <= BigInt(0) || BigInt(swapFeeEvm) > BigInt(1e17)) {\n throw new BalancerError(BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE);\n }\n const normalizedWeightsSum = (normalizedWeights as string[]).reduce(\n (acc, cur) => SolidityMaths.add(acc, BigInt(cur)),\n BigInt(0)\n );\n if (normalizedWeightsSum !== BigInt(1e18)) {\n throw new BalancerError(BalancerErrorCode.INVALID_WEIGHTS);\n }\n }\n\n parseCreateParamsForEncoding = ({\n name,\n symbol,\n tokenAddresses,\n normalizedWeights,\n rateProviders,\n swapFeeEvm,\n owner,\n salt,\n }: WeightedCreatePoolParameters): [\n string,\n string,\n string[],\n BigNumberish[],\n string[],\n string,\n string,\n BytesLike\n ] => {\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [sortedTokens, sortedNormalizedWeights, sortedRateProviders] =\n assetHelpers.sortTokens(\n tokenAddresses,\n normalizedWeights,\n rateProviders\n ) as [string[], BigNumberish[], string[]];\n return [\n name,\n symbol,\n sortedTokens,\n sortedNormalizedWeights,\n sortedRateProviders,\n swapFeeEvm.toString(),\n owner,\n salt || getRandomBytes32(),\n ];\n };\n\n encodeCreateFunctionData = (\n params: [\n string,\n string,\n string[],\n BigNumberish[],\n string[],\n string,\n string,\n BytesLike\n ]\n ): string => {\n const weightedPoolInterface =\n WeightedPoolFactory__factory.createInterface();\n\n return weightedPoolInterface.encodeFunctionData('create', params);\n };\n\n /**\n * Returns a InitJoinPoolAttributes to make a init join transaction\n * @param joiner The address of the joiner of the pool\n * @param poolId The id of the pool\n * @param tokensIn Array with the address of the tokens\n * @param amountsIn Array with the amount of each token\n * @returns InitJoinPoolAttributes object, which can be directly inserted in the transaction to init join a weighted pool\n */\n buildInitJoin({\n joiner,\n poolId,\n tokensIn,\n amountsIn,\n }: InitJoinPoolParameters): InitJoinPoolAttributes {\n this.checkInitJoinInputs({\n poolId,\n tokensIn,\n amountsIn,\n });\n const { attributes, params } = this.parseParamsForInitJoin({\n joiner,\n poolId,\n tokensIn,\n amountsIn,\n });\n const { functionName, data } = this.encodeInitJoinFunctionData(params);\n\n return {\n to: balancerVault,\n functionName,\n data,\n attributes,\n };\n }\n\n parseParamsForInitJoin = ({\n joiner,\n poolId,\n tokensIn,\n amountsIn,\n }: Omit): {\n attributes: JoinPoolDecodedAttributes;\n params: [string, string, string, JoinPoolRequestDecodedAttributes];\n } => {\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n\n const [sortedTokens, sortedAmounts] = assetHelpers.sortTokens(\n tokensIn,\n amountsIn\n ) as [string[], string[]];\n\n const userData = WeightedPoolEncoder.joinInit(sortedAmounts);\n\n const attributes = {\n poolId: poolId,\n sender: joiner,\n recipient: joiner,\n joinPoolRequest: {\n assets: sortedTokens,\n maxAmountsIn: sortedAmounts,\n userData,\n fromInternalBalance: false,\n },\n };\n\n return {\n attributes,\n params: [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ],\n };\n };\n\n encodeInitJoinFunctionData = (\n params: [string, string, string, JoinPoolRequestDecodedAttributes]\n ): {\n functionName: string;\n data: string;\n } => {\n const functionName = 'joinPool';\n\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, params);\n return { functionName, data };\n };\n checkInitJoinInputs = ({\n poolId,\n tokensIn,\n amountsIn,\n }: Pick<\n InitJoinPoolParameters,\n 'tokensIn' | 'amountsIn' | 'poolId'\n >): void => {\n if (!poolId) {\n throw new BalancerError(BalancerErrorCode.NO_POOL_DATA);\n }\n if (tokensIn.length !== amountsIn.length) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n };\n\n async getPoolAddressAndIdWithReceipt(\n provider: JsonRpcProvider,\n receipt: TransactionReceipt\n ): Promise<{ poolId: string; poolAddress: string }> {\n const poolCreationEvent: LogDescription = findEventInReceiptLogs({\n receipt,\n to: this.contracts.weightedPoolFactory?.address || '',\n contractInterface: WeightedPoolFactory__factory.createInterface(),\n logName: 'PoolCreated',\n });\n\n const poolAddress = poolCreationEvent.args.pool;\n const weightedPoolInterface = this.getPoolInterface();\n const pool = new Contract(poolAddress, weightedPoolInterface, provider);\n const poolId = await pool.getPoolId();\n return {\n poolAddress,\n poolId,\n };\n }\n\n getPoolInterface(): WeightedPoolInterface {\n return WeightedPool__factory.createInterface();\n }\n}\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { JoinPool } from '@/modules/pools/pool-types/concerns/types';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { ERC4626LinearPoolInterface } from '@/contracts/ERC4626LinearPool';\nimport { GearboxLinearPoolInterface } from '@/contracts/GearboxLinearPool';\nimport { EulerLinearPoolInterface } from '@/contracts/EulerLinearPool';\nimport { AaveLinearPoolInterface } from '@/contracts/AaveLinearPool';\nimport { YearnLinearPoolInterface } from '@/contracts/YearnLinearPool';\nimport { AaveLinearPoolFactoryInterface } from '@/contracts/AaveLinearPoolFactory';\nimport { ERC4626LinearPoolFactoryInterface } from '@/contracts/ERC4626LinearPoolFactory';\nimport { EulerLinearPoolFactoryInterface } from '@/contracts/EulerLinearPoolFactory';\nimport { GearboxLinearPoolFactoryInterface } from '@/contracts/GearboxLinearPoolFactory';\nimport { YearnLinearPoolFactoryInterface } from '@/contracts/YearnLinearPoolFactory';\n\nexport type CreatePoolParameters = {\n name: string;\n symbol: string;\n tokenAddresses: string[];\n swapFeeEvm: string;\n owner: string;\n salt?: BytesLike;\n};\n\nexport interface ComposableStableCreatePoolParameters\n extends CreatePoolParameters {\n amplificationParameter: string;\n rateProviders: string[];\n tokenRateCacheDurations: string[];\n exemptFromYieldProtocolFeeFlags: boolean[];\n\n salt?: BytesLike;\n}\n\nexport interface WeightedCreatePoolParameters extends CreatePoolParameters {\n rateProviders: string[];\n normalizedWeights: BigNumberish[];\n}\n\nexport type LinearCreatePoolParameters = Pick<\n CreatePoolParameters,\n 'name' | 'symbol' | 'swapFeeEvm' | 'owner' | 'salt'\n> & {\n mainToken: string;\n wrappedToken: string;\n upperTargetEvm: string;\n protocolId: ProtocolId;\n};\n\nexport interface InitJoinPoolParameters {\n joiner: string;\n poolId: string;\n poolAddress: string;\n tokensIn: string[];\n amountsIn: string[];\n}\n\nexport interface InitJoinPoolAttributes {\n to: string;\n functionName: string;\n attributes: JoinPool;\n data: string;\n value?: BigNumber;\n}\n\n// Source of the protocolId's: https://github.com/balancer/balancer-v2-monorepo/blob/647320a4a375c724276af8e1ae26948de8fa411b/pkg/interfaces/contracts/standalone-utils/IProtocolIdRegistry.sol#L54-L72\nexport enum ProtocolId {\n AAVE_V1 = 0,\n AAVE_V2 = 1,\n AAVE_V3 = 2,\n AMPLEFORTH = 3,\n BEEFY = 4,\n EULER = 5,\n GEARBOX = 6,\n IDLE = 7,\n MORPHO = 8,\n RADIANT = 9,\n REAPER = 10,\n SILO = 11,\n STARGATE = 12,\n STURDY = 13,\n TESSERA = 14,\n TETU = 15,\n YEARN = 16,\n MIDAS = 17,\n AGAVE = 18,\n}\n\nexport type JoinPoolDecodedAttributes = {\n poolId: string;\n sender: string;\n recipient: string;\n joinPoolRequest: JoinPoolRequestDecodedAttributes;\n};\n\nexport type JoinPoolRequestDecodedAttributes = {\n assets: string[];\n maxAmountsIn: string[];\n userData: string;\n fromInternalBalance: boolean;\n};\n\nexport type LinearPoolInterface =\n | ERC4626LinearPoolInterface\n | EulerLinearPoolInterface\n | AaveLinearPoolInterface\n | YearnLinearPoolInterface\n | GearboxLinearPoolInterface;\n\nexport type LinearPoolFactoryInterface =\n | AaveLinearPoolFactoryInterface\n | ERC4626LinearPoolFactoryInterface\n | EulerLinearPoolFactoryInterface\n | GearboxLinearPoolFactoryInterface\n | YearnLinearPoolFactoryInterface;\n","import { LogDescription } from '@ethersproject/abi';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { Contract } from '@ethersproject/contracts';\nimport { JsonRpcProvider, TransactionReceipt } from '@ethersproject/providers';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport {\n AaveLinearPool__factory,\n AaveLinearPoolFactory__factory,\n ERC4626LinearPool__factory,\n ERC4626LinearPoolFactory__factory,\n EulerLinearPool__factory,\n EulerLinearPoolFactory__factory,\n GearboxLinearPool__factory,\n GearboxLinearPoolFactory__factory,\n YearnLinearPool__factory,\n YearnLinearPoolFactory__factory,\n} from '@/contracts';\nimport { AaveLinearPoolInterface } from '@/contracts/AaveLinearPool';\nimport { ERC4626LinearPoolInterface } from '@/contracts/ERC4626LinearPool';\nimport { EulerLinearPoolInterface } from '@/contracts/EulerLinearPool';\nimport { EulerLinearPoolFactoryInterface } from '@/contracts/EulerLinearPoolFactory';\nimport { GearboxLinearPoolInterface } from '@/contracts/GearboxLinearPool';\nimport { YearnLinearPoolInterface } from '@/contracts/YearnLinearPool';\nimport { ContractInstances } from '@/modules/contracts/contracts.module';\nimport { PoolFactory } from '@/modules/pools/factory/pool-factory';\nimport {\n InitJoinPoolAttributes,\n LinearCreatePoolParameters,\n LinearPoolFactoryInterface,\n ProtocolId,\n} from '@/modules/pools/factory/types';\nimport { PoolType } from '@/types';\nimport { findEventInReceiptLogs, getRandomBytes32 } from '@/lib/utils';\n\ntype LinearPoolParamsToEncode = [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n BytesLike\n];\n\ntype EulerLinearPoolParamsToEncode = [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string\n];\n\nexport class LinearFactory implements PoolFactory {\n private contracts: ContractInstances;\n private readonly poolType: PoolType;\n\n constructor(contracts: ContractInstances, poolType: PoolType) {\n this.contracts = contracts;\n this.poolType = poolType;\n }\n\n getPoolFactoryInterface = (): LinearPoolFactoryInterface => {\n switch (this.poolType) {\n case PoolType.AaveLinear:\n return AaveLinearPoolFactory__factory.createInterface();\n case PoolType.Linear:\n case PoolType.ERC4626Linear:\n return ERC4626LinearPoolFactory__factory.createInterface();\n case PoolType.EulerLinear:\n return EulerLinearPoolFactory__factory.createInterface();\n case PoolType.GearboxLinear:\n return GearboxLinearPoolFactory__factory.createInterface();\n case PoolType.YearnLinear:\n return YearnLinearPoolFactory__factory.createInterface();\n default:\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n };\n\n getPoolInterface = ():\n | AaveLinearPoolInterface\n | ERC4626LinearPoolInterface\n | EulerLinearPoolInterface\n | GearboxLinearPoolInterface\n | YearnLinearPoolInterface => {\n switch (this.poolType) {\n case PoolType.AaveLinear:\n return AaveLinearPool__factory.createInterface();\n case PoolType.Linear:\n case PoolType.ERC4626Linear:\n return ERC4626LinearPool__factory.createInterface();\n case PoolType.EulerLinear:\n return EulerLinearPool__factory.createInterface();\n case PoolType.GearboxLinear:\n return GearboxLinearPool__factory.createInterface();\n case PoolType.YearnLinear:\n return YearnLinearPool__factory.createInterface();\n default:\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n };\n\n buildInitJoin(): InitJoinPoolAttributes {\n // Linear Pools doesn't need to be initialized, they are initialized on deploy\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n\n /**\n *\n * @param name The name of the pool\n * @param symbol The symbol of the pool (BPT name)\n * @param mainToken The main token\n * @param wrappedToken The wrapped token\n * @param upperTargetEvm The maximum balance of the main token\n * @param swapFeeEvm The swap fee of the pool\n * @param owner The address of the owner of the pool\n * @param protocolId The protocolId, to check the available value\n */\n create({\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId,\n salt,\n }: LinearCreatePoolParameters): {\n to?: string;\n data: BytesLike;\n } {\n this.checkCreateInputs({ swapFeeEvm, protocolId });\n const params = this.parseCreateParamsForEncoding({\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId,\n salt,\n });\n const data = this.encodeCreateFunctionData(params);\n return {\n to: this.getFactoryAddress(),\n data,\n };\n }\n\n checkCreateInputs = ({\n swapFeeEvm,\n protocolId,\n }: {\n swapFeeEvm: string;\n protocolId: ProtocolId;\n }): void => {\n if (!ProtocolId[protocolId]) {\n throw new BalancerError(BalancerErrorCode.INVALID_PROTOCOL_ID);\n }\n if (BigInt(swapFeeEvm) <= BigInt(0) || BigInt(swapFeeEvm) > BigInt(1e17)) {\n throw new BalancerError(BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE);\n }\n this.getFactoryAddress();\n };\n\n parseCreateParamsForEncoding = ({\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId,\n salt,\n }: Omit):\n | LinearPoolParamsToEncode\n | EulerLinearPoolParamsToEncode => {\n if (this.poolType === PoolType.EulerLinear) {\n return [\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId.toString(),\n ] as [string, string, string, string, string, string, string, string];\n }\n return [\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId.toString(),\n salt || getRandomBytes32(),\n ] as [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n BytesLike\n ];\n };\n\n encodeCreateFunctionData = (\n params: LinearPoolParamsToEncode | EulerLinearPoolParamsToEncode\n ): string => {\n const linearPoolInterface: LinearPoolFactoryInterface =\n this.getPoolFactoryInterface();\n const encodedData =\n // YearnLinearPools doesn't have protocolId, the encoding of the params is different\n this.poolType === PoolType.EulerLinear\n ? (\n linearPoolInterface as EulerLinearPoolFactoryInterface\n ).encodeFunctionData(\n 'create',\n params as EulerLinearPoolParamsToEncode\n )\n : (\n linearPoolInterface as Exclude<\n LinearPoolFactoryInterface,\n EulerLinearPoolFactoryInterface\n >\n ).encodeFunctionData('create', params as LinearPoolParamsToEncode);\n return encodedData;\n };\n\n getFactoryAddress = (): string => {\n switch (this.poolType) {\n case PoolType.AaveLinear:\n if (this.contracts.aaveLinearPoolFactory) {\n return this.contracts.aaveLinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n case PoolType.Linear:\n case PoolType.ERC4626Linear:\n if (this.contracts.erc4626LinearPoolFactory) {\n return this.contracts.erc4626LinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n case PoolType.EulerLinear:\n if (this.contracts.eulerLinearPoolFactory) {\n return this.contracts.eulerLinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n case PoolType.GearboxLinear:\n if (this.contracts.gearboxLinearPoolFactory) {\n return this.contracts.gearboxLinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n case PoolType.YearnLinear:\n if (this.contracts.yearnLinearPoolFactory) {\n return this.contracts.yearnLinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n default:\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n };\n\n getPoolAddressAndIdWithReceipt = async (\n provider: JsonRpcProvider,\n receipt: TransactionReceipt\n ): Promise<{ poolId: string; poolAddress: string }> => {\n const poolCreationEvent: LogDescription = findEventInReceiptLogs({\n receipt,\n to: this.getFactoryAddress() || '',\n contractInterface: this.getPoolFactoryInterface(),\n logName: 'PoolCreated',\n });\n\n const poolAddress = poolCreationEvent.args.pool;\n const linearPoolInterface = this.getPoolInterface();\n const pool = new Contract(poolAddress, linearPoolInterface, provider);\n const poolId = await pool.getPoolId();\n return {\n poolAddress,\n poolId,\n };\n };\n}\n","import { BalancerNetworkConfig, PoolType } from '@/types';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { PoolFactory } from '@/modules/pools/factory/pool-factory';\nimport { ComposableStableFactory } from '@/modules/pools/factory/composable-stable/composable-stable.factory';\nimport { WeightedFactory } from '@/modules/pools/factory/weighted/weighted.factory';\nimport {\n ContractInstances,\n Contracts,\n} from '@/modules/contracts/contracts.module';\nimport { LinearFactory } from '@/modules/pools/factory/linear/linear.factory';\n\n/**\n * Wrapper around pool type specific methods.\n *\n * Returns a class instance of a type specific factory.\n */\nexport class PoolFactory__factory {\n networkConfig: BalancerNetworkConfig;\n contracts: ContractInstances;\n\n constructor(\n networkConfig: BalancerNetworkConfig,\n balancerContracts: Contracts\n ) {\n this.networkConfig = networkConfig;\n this.contracts = balancerContracts.contracts;\n }\n\n of(poolType: PoolType): PoolFactory {\n switch (poolType) {\n case 'Weighted':\n return new WeightedFactory(this.networkConfig, this.contracts);\n case 'Investment':\n case 'LiquidityBootstrapping': {\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n case 'Stable': {\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n case 'ComposableStable': {\n return new ComposableStableFactory(this.networkConfig, this.contracts);\n }\n case 'MetaStable': {\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n case 'StablePhantom': {\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n case 'Linear':\n case 'AaveLinear':\n case 'ERC4626Linear':\n case 'EulerLinear':\n case 'GearboxLinear':\n case 'YearnLinear': {\n return new LinearFactory(this.contracts, poolType);\n }\n default:\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n }\n}\n","import * as PoolQueries from './types';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero, Zero, MaxUint256 } from '@ethersproject/constants';\nimport { getEncoder } from './get_encoder';\nimport { removeItem } from '@/lib/utils';\n\n/**\n * Builds parameters quering join / exit liquidity functions in the Balancer Helpers contract.\n */\nexport class ParamsBuilder implements PoolQueries.ParamsBuilder {\n private encoder: PoolQueries.Encoder;\n\n constructor(private pool: PoolQueries.Pool) {\n const encoder = getEncoder(pool.poolType);\n if (encoder) {\n this.encoder = encoder;\n } else {\n throw 'Pool type not supported';\n }\n }\n\n /**\n * Encodes the query to get expected amount of BPT when joining a Pool with exact token inputs\n * @param maxAmountsInByToken - The amounts each of token, mapped by token address, to deposit in the pool as liquidity,\n * doesn't need to have all tokens, only the ones that will be deposited\n * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens (optional)\n */\n buildQueryJoinExactIn({\n maxAmountsInByToken,\n minimumBPT = Zero,\n }: PoolQueries.JoinExactInParams): PoolQueries.queryJoinParams {\n const bptIndex = this.pool.tokensList.findIndex((token) =>\n this.pool.id.includes(token)\n );\n\n const assets = [...this.pool.tokensList];\n\n const maxAmountsIn = this.pool.tokensList.map(\n (tokenAddress) =>\n maxAmountsInByToken.get(tokenAddress) ?? BigNumber.from('0')\n );\n\n let maxInWithoutBpt;\n\n // Remove BPT token from amounts for user data\n if (bptIndex > -1) {\n maxInWithoutBpt = removeItem(maxAmountsIn, bptIndex);\n } else {\n maxInWithoutBpt = maxAmountsIn;\n }\n\n const userData = this.encoder.joinExactTokensInForBPTOut(\n maxInWithoutBpt,\n minimumBPT\n );\n\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets,\n maxAmountsIn,\n userData,\n fromInternalBalance: false, // from internal balance is ignored on query join, can be just false\n },\n ] as PoolQueries.queryJoinParams;\n\n return params;\n }\n\n /**\n * Encodes the query to get expected token amount when joining a Pool specifying fixed BPT out.\n *\n * @param maxAmountIn - The max expected amount for tokenIn (optional)\n * @param bptOut - the expected BPT for providing liquidity\n * @param tokenIn - address of a token joining the pool\n */\n buildQueryJoinExactOut({\n maxAmountIn,\n bptOut,\n tokenIn,\n }: PoolQueries.JoinExactOutParams): PoolQueries.queryJoinParams {\n const bptIndex = this.pool.tokensList.findIndex((token) =>\n this.pool.id.includes(token)\n );\n let tokensWithoutBpt = [...this.pool.tokensList];\n if (bptIndex > -1) {\n tokensWithoutBpt = removeItem(this.pool.tokensList, bptIndex);\n }\n const tokenIndex = tokensWithoutBpt.indexOf(tokenIn);\n\n const userData = this.encoder.joinTokenInForExactBPTOut(bptOut, tokenIndex);\n const maxAmountsIn = maxAmountIn\n ? this.pool.tokensList.map((tokenAddress) =>\n tokenAddress === tokenIn ? maxAmountIn : '0'\n )\n : [];\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets: this.pool.tokensList,\n maxAmountsIn,\n userData,\n fromInternalBalance: false, // from internal balance is ignored on query join, can be just false\n },\n ] as PoolQueries.queryJoinParams;\n\n return params;\n }\n\n /**\n * Encodes the query for exiting the pool to a single token\n *\n * @param minAmountOut - minimum expected amount for token out\n * @param bptIn - BPT, shares of the pool liquidity\n * @param tokenOut - address of an exit liquidity token\n */\n buildQueryExitToSingleToken({\n minAmountOut,\n bptIn,\n tokenOut,\n }: PoolQueries.ExitToSingleTokenParams): PoolQueries.queryExitParams {\n const bptIndex = this.pool.tokensList.findIndex((token) =>\n this.pool.id.includes(token)\n );\n let tokensWithoutBpt = [...this.pool.tokensList];\n if (bptIndex > -1) {\n tokensWithoutBpt = removeItem(this.pool.tokensList, bptIndex);\n }\n const tokenIndex = tokensWithoutBpt.indexOf(tokenOut);\n\n const userData = this.encoder.exitExactBPTInForOneTokenOut(\n bptIn,\n tokenIndex\n );\n const minAmountsOut = minAmountOut\n ? this.pool.tokensList.map((tokenAddress) =>\n tokenAddress === tokenOut ? minAmountOut : '0'\n )\n : [];\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets: this.pool.tokensList,\n minAmountsOut,\n userData,\n toInternalBalance: false, // to internal balance is ignored on query join, can be just false\n },\n ] as PoolQueries.queryExitParams;\n\n return params;\n }\n\n /**\n * Encodes the query for exiting the pool with all underlying tokens proportionally.\n * Not supported by ComposableStable\n *\n * @param minAmountsOut - minimum expected amounts, can be set to zero for a query, ordered same as pool.tokensList\n * @param bptIn - BPT, shares of the pool liquidity\n */\n buildQueryExitProportionally({\n minAmountsOut = [],\n bptIn,\n }: PoolQueries.ExitProportionallyParams): PoolQueries.queryExitParams {\n if (!this.encoder.exitExactBPTInForTokensOut) {\n throw 'Proportional exit not implemented';\n }\n\n const userData = this.encoder.exitExactBPTInForTokensOut(bptIn);\n\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets: this.pool.tokensList,\n minAmountsOut,\n userData,\n toInternalBalance: false,\n },\n ] as PoolQueries.queryExitParams;\n\n return params;\n }\n\n /**\n * Encodes calldata to query expected BPT for known amounts out.\n *\n * @param minAmountsOut - minimum expected amounts, ordered same as pool.tokensList\n * @param maxBptIn - BPT, shares of the pool liquidity, can be set to zero for a query\n */\n buildQueryExitExactOut({\n minAmountsOut,\n maxBptIn = MaxUint256,\n }: PoolQueries.ExitExactOutParams): PoolQueries.queryExitParams {\n const bptIndex = this.pool.tokensList.findIndex((token) =>\n this.pool.id.includes(token)\n );\n\n let minAmountsOutWithoutBpt = [...minAmountsOut];\n // Remove BPT token from amounts\n if (bptIndex > -1) {\n minAmountsOutWithoutBpt = removeItem(minAmountsOut, bptIndex);\n }\n\n const userData = this.encoder.exitBPTInForExactTokensOut(\n minAmountsOutWithoutBpt,\n maxBptIn\n );\n\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets: this.pool.tokensList,\n minAmountsOut,\n userData,\n toInternalBalance: false, // to internal balance is ignored on query join, can be just false\n },\n ] as PoolQueries.queryExitParams;\n\n return params;\n }\n}\n","import { WeightedPoolEncoder } from '@/pool-weighted/encoder';\nimport { StablePoolEncoder } from '@/pool-stable/encoder';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { PoolType } from '@/types';\nimport { isLinearish } from '@/lib/utils';\n\nexport const getEncoder = (\n poolType: PoolType\n):\n | typeof WeightedPoolEncoder\n | typeof StablePoolEncoder\n | typeof ComposableStablePoolEncoder\n | undefined => {\n switch (poolType) {\n case PoolType.Weighted:\n return WeightedPoolEncoder;\n\n case PoolType.Stable:\n case PoolType.MetaStable:\n case PoolType.StablePhantom:\n case PoolType.Element:\n case PoolType.Gyro2:\n case PoolType.Gyro3:\n return StablePoolEncoder;\n\n case PoolType.ComposableStable:\n return ComposableStablePoolEncoder;\n\n default: {\n if (isLinearish(poolType)) return StablePoolEncoder;\n break;\n }\n }\n};\n","import * as emissions from '@/modules/data/bal/emissions';\nimport { Findable, LiquidityGauge } from '@/types';\n\n/**\n * Returns BAL emissions per pool\n */\nexport class EmissionsService {\n constructor(private liquidityGaugesRepository: Findable) {}\n\n async relativeWeight(poolId: string): Promise {\n const gauge = await this.liquidityGaugesRepository.findBy('poolId', poolId);\n\n if (gauge) {\n return gauge.relativeWeight;\n }\n\n return 0;\n }\n\n async weekly(poolId: string): Promise {\n const perWeek = emissions.weekly();\n const relativeWeight = await this.relativeWeight(poolId);\n\n return perWeek * relativeWeight;\n }\n}\n","import { parseUnits } from '@ethersproject/units';\nimport { BigNumber } from '@ethersproject/bignumber';\n\n/**\n * Calculates the proportional amounts of tokens in relation to a given token and amount.\n * Useful for calculating the amounts of tokens to be sent to a pool when joining or swapping.\n * When using proportional amounts to join a pool the price impact will be minimal.\n *\n * @param pool - Pool object\n * @param token - Token address in relation to which the amounts are calculated\n * @param amount - Amount of token\n * @returns Object with tokens and amounts\n * @example\n * const pool = {\n * id: '0x0000',\n * tokens: [\n * { address: '0x1234', balance: '10' },\n * { address: '0x5678', balance: '20' }\n * ]\n * }\n *\n * const { tokens, amounts } = proportionalAmounts(pool, '0x1234', '1000000000000000000')\n */\nexport const proportionalAmounts = (\n pool: {\n id: string;\n tokens: { address: string; balance: string; decimals?: number }[];\n },\n token: string,\n amount: string\n): {\n tokens: string[];\n amounts: string[];\n} => {\n const tokensWithoutBpt = pool.tokens.filter(\n (t) => !pool.id.toLowerCase().includes(t.address.toLowerCase())\n );\n const referenceTokenIndex = tokensWithoutBpt.findIndex(\n (t) => t.address.toLowerCase() === token.toLowerCase()\n );\n\n if (referenceTokenIndex == -1) {\n throw new Error('Token not found in pool');\n }\n\n const balances = tokensWithoutBpt.map((t) =>\n parseUnits(t.balance, t.decimals)\n );\n const amountBn = BigNumber.from(amount);\n const proportionalAmounts = balances.map((b) =>\n b.mul(amountBn).div(balances[referenceTokenIndex])\n );\n\n return {\n tokens: tokensWithoutBpt.map((t) => t.address),\n amounts: proportionalAmounts.map((a) => a.toString()),\n };\n};\n","import { BigNumberish } from '@ethersproject/bignumber';\nimport { JsonRpcSigner } from '@ethersproject/providers';\n\nimport { BalancerError } from '@/balancerErrors';\nimport { Contracts } from '@/modules/contracts/contracts.module';\nimport { ImpermanentLossService } from '@/modules/pools/impermanentLoss/impermanentLossService';\nimport type {\n BalancerNetworkConfig,\n BalancerDataRepositories,\n Findable,\n Searchable,\n Pool,\n PoolWithMethods,\n AprBreakdown,\n PoolAttribute,\n} from '@/types';\nimport { Logger } from '@/lib/utils/logger';\n\nimport {\n ExitExactBPTInAttributes,\n JoinPoolAttributes,\n} from './pool-types/concerns/types';\nimport { PoolTypeConcerns } from './pool-type-concerns';\nimport { PoolApr } from './apr/apr';\nimport { Liquidity } from '../liquidity/liquidity.module';\nimport { Join } from '../joins/joins.module';\nimport { Exit, GeneralisedExitOutput, ExitInfo } from '../exits/exits.module';\nimport { PoolVolume } from './volume/volume';\nimport { PoolFees } from './fees/fees';\nimport { Simulation, SimulationType } from '../simulation/simulation.module';\nimport { PoolGraph } from '../graph/graph';\nimport { PoolFactory__factory } from './pool-factory__factory';\nimport * as Queries from './queries';\nimport { EmissionsService } from './emissions';\nimport { proportionalAmounts } from './proportional-amounts';\n\nconst notImplemented = (poolType: string, name: string) => () => {\n throw `${name} for poolType ${poolType} not implemented`;\n};\n\n/**\n * Controller / use-case layer for interacting with pools data.\n */\nexport class Pools implements Findable {\n aprService;\n liquidityService;\n joinService;\n exitService;\n feesService;\n volumeService;\n simulationService;\n poolFactory;\n impermanentLossService;\n graphService;\n emissionsService;\n proportionalAmounts;\n\n constructor(\n private networkConfig: BalancerNetworkConfig,\n private repositories: BalancerDataRepositories,\n private balancerContracts: Contracts\n ) {\n this.aprService = new PoolApr(\n this.repositories.pools,\n this.repositories.tokenPrices,\n this.repositories.tokenMeta,\n this.repositories.tokenYields,\n this.repositories.feeCollector,\n this.repositories.yesterdaysPools,\n this.repositories.liquidityGauges,\n this.repositories.feeDistributor,\n this.repositories.gyroConfigRepository\n );\n this.liquidityService = new Liquidity(\n repositories.pools,\n repositories.tokenPrices\n );\n this.simulationService = new Simulation(\n networkConfig,\n this.repositories.poolsForSimulations\n );\n this.graphService = new PoolGraph(this.repositories.poolsOnChain);\n this.joinService = new Join(\n this.graphService,\n networkConfig,\n this.simulationService\n );\n this.exitService = new Exit(\n this.graphService,\n networkConfig,\n this.simulationService\n );\n this.feesService = new PoolFees(repositories.yesterdaysPools);\n this.volumeService = new PoolVolume(repositories.yesterdaysPools);\n this.poolFactory = new PoolFactory__factory(\n networkConfig,\n balancerContracts\n );\n this.impermanentLossService = new ImpermanentLossService(\n repositories.tokenPrices,\n repositories.tokenHistoricalPrices\n );\n if (repositories.liquidityGauges) {\n this.emissionsService = new EmissionsService(\n repositories.liquidityGauges\n );\n }\n this.proportionalAmounts = proportionalAmounts;\n }\n\n static wrap(\n pool: Pool,\n networkConfig: BalancerNetworkConfig\n ): PoolWithMethods {\n let concerns: ReturnType;\n let queries: Queries.ParamsBuilder;\n let methods;\n try {\n concerns = PoolTypeConcerns.from(pool.poolType);\n methods = {\n buildJoin: (\n joiner: string,\n tokensIn: string[],\n amountsIn: string[],\n slippage: string\n ): JoinPoolAttributes => {\n return concerns.join.buildJoin({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n });\n },\n calcPriceImpact: async (\n tokenAmounts: string[],\n bptAmount: string,\n isJoin: boolean\n ) =>\n concerns.priceImpactCalculator.calcPriceImpact(\n pool,\n tokenAmounts.map(BigInt),\n BigInt(bptAmount),\n isJoin\n ),\n buildExitExactBPTIn: (\n exiter: string,\n bptIn: string,\n slippage: string,\n shouldUnwrapNativeAsset = false,\n singleTokenOut?: string,\n toInternalBalance = false\n ) => {\n if (concerns.exit.buildExitExactBPTIn) {\n return concerns.exit.buildExitExactBPTIn({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n });\n } else {\n throw 'ExitExactBPTIn not supported';\n }\n },\n buildExitExactTokensOut: (\n exiter: string,\n tokensOut: string[],\n amountsOut: string[],\n slippage: string,\n toInternalBalance = false\n ) =>\n concerns.exit.buildExitExactTokensOut({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }),\n buildRecoveryExit: (\n exiter: string,\n bptIn: string,\n slippage: string,\n toInternalBalance = false\n ) =>\n concerns.exit.buildRecoveryExit({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }),\n\n // TODO: spotPrice fails, because it needs a subgraphType,\n // either we refetch or it needs a type transformation from SDK internal to SOR (subgraph)\n // spotPrice: async (tokenIn: string, tokenOut: string) =>\n // methods.spotPriceCalculator.calcPoolSpotPrice(tokenIn, tokenOut, data),\n calcSpotPrice: (tokenIn: string, tokenOut: string) =>\n concerns.spotPriceCalculator.calcPoolSpotPrice(\n tokenIn,\n tokenOut,\n pool\n ),\n calcProportionalAmounts: (token: string, amount: string) => {\n return proportionalAmounts(pool, token, amount);\n },\n };\n } catch (error) {\n if ((error as BalancerError).code != 'UNSUPPORTED_POOL_TYPE') {\n const logger = Logger.getInstance();\n logger.warn(error as string);\n }\n\n methods = {\n buildJoin: notImplemented(pool.poolType, 'buildJoin'),\n calcPriceImpact: notImplemented(pool.poolType, 'calcPriceImpact'),\n buildExitExactBPTIn: notImplemented(\n pool.poolType,\n 'buildExitExactBPTIn'\n ),\n buildExitExactTokensOut: notImplemented(\n pool.poolType,\n 'buildExitExactTokensOut'\n ),\n calcSpotPrice: notImplemented(pool.poolType, 'calcSpotPrice'),\n buildRecoveryExit: notImplemented(pool.poolType, 'buildRecoveryExit'),\n };\n }\n\n try {\n queries = new Queries.ParamsBuilder(pool);\n methods = {\n ...methods,\n buildQueryJoinExactIn: queries.buildQueryJoinExactIn.bind(queries),\n buildQueryJoinExactOut: queries.buildQueryJoinExactOut.bind(queries),\n buildQueryExitExactOut: queries.buildQueryExitExactOut.bind(queries),\n buildQueryExitToSingleToken:\n queries.buildQueryExitToSingleToken.bind(queries),\n buildQueryExitProportionally:\n queries.buildQueryExitProportionally.bind(queries),\n };\n } catch (error) {\n methods = {\n ...methods,\n buildQueryJoinExactIn: notImplemented(\n pool.poolType,\n 'buildQueryJoinExactIn'\n ),\n buildQueryJoinExactOut: notImplemented(\n pool.poolType,\n 'buildQueryJoinExactOut'\n ),\n buildQueryExitExactOut: notImplemented(\n pool.poolType,\n 'buildQueryExitExactOut'\n ),\n buildQueryExitToSingleToken: notImplemented(\n pool.poolType,\n 'buildQueryExitToSingleToken'\n ),\n buildQueryExitProportionally: notImplemented(\n pool.poolType,\n 'buildQueryExitProportionally'\n ),\n };\n }\n const wrappedNativeAsset =\n networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase();\n const bptIndex = pool.tokensList.indexOf(pool.address);\n return {\n ...pool,\n ...methods,\n bptIndex,\n };\n }\n\n dataSource(): Findable & Searchable {\n // TODO: Add API data repository to data and use liveModelProvider as fallback\n return this.repositories.pools;\n }\n\n /**\n * Calculates APR on any pool data\n *\n * @param pool\n * @returns\n */\n async apr(pool: Pool): Promise {\n return this.aprService.apr(pool);\n }\n\n /**\n * Calculates Impermanent Loss on any pool data\n *\n * @param timestamp\n * @param pool\n * @returns\n */\n async impermanentLoss(timestamp: number, pool: Pool): Promise {\n return this.impermanentLossService.calcImpLoss(timestamp, pool);\n }\n\n /**\n * Calculates total pool liquidity in USD\n *\n * @param pool\n * @returns total pool liquidity in USD\n */\n async liquidity(pool: Pool): Promise {\n return this.liquidityService.getLiquidity(pool);\n }\n\n /**\n * Calculates pool's BPT price in USD\n *\n * @param pool\n * @returns pool's BPT price in USD\n */\n async bptPrice(pool: Pool): Promise {\n return this.liquidityService.getBptPrice(pool);\n }\n\n /**\n * Builds join transaction\n *\n * @param pool Pool\n * @param tokensIn Token addresses\n * @param amountsIn Token amounts in EVM scale\n * @param userAddress User address\n * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%.\n * @returns Transaction object\n * @throws Error if pool type is not implemented\n */\n buildJoin({\n pool,\n tokensIn,\n amountsIn,\n userAddress,\n slippage,\n }: {\n pool: Pool;\n tokensIn: string[];\n amountsIn: string[];\n userAddress: string;\n slippage: string;\n }): JoinPoolAttributes {\n const concerns = PoolTypeConcerns.from(pool.poolType);\n\n if (!concerns)\n throw `buildJoin for poolType ${pool.poolType} not implemented`;\n\n return concerns.join.buildJoin({\n joiner: userAddress,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset:\n this.networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase(),\n });\n }\n\n buildExitExactBPTIn({\n pool,\n bptAmount,\n userAddress,\n slippage,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n }: {\n pool: Pool;\n bptAmount: string;\n userAddress: string;\n slippage: string;\n shouldUnwrapNativeAsset?: boolean;\n singleTokenOut?: string;\n }): ExitExactBPTInAttributes {\n const concerns = PoolTypeConcerns.from(pool.poolType);\n if (!concerns || !concerns.exit.buildExitExactBPTIn)\n throw `buildExit for poolType ${pool.poolType} not implemented`;\n\n return concerns.exit.buildExitExactBPTIn({\n pool,\n exiter: userAddress,\n bptIn: bptAmount,\n slippage,\n wrappedNativeAsset:\n this.networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase(),\n shouldUnwrapNativeAsset: shouldUnwrapNativeAsset ?? false,\n singleTokenOut: singleTokenOut ?? undefined,\n toInternalBalance: false,\n });\n }\n\n buildRecoveryExit({\n pool,\n bptAmount,\n userAddress,\n slippage,\n toInternalBalance,\n }: {\n pool: Pool;\n bptAmount: string;\n userAddress: string;\n slippage: string;\n toInternalBalance?: boolean;\n }): ExitExactBPTInAttributes {\n const concerns = PoolTypeConcerns.from(pool.poolType);\n if (!concerns || !concerns.exit.buildRecoveryExit)\n throw `buildRecoveryExit for poolType ${pool.poolType} not implemented`;\n\n return concerns.exit.buildRecoveryExit({\n exiter: userAddress,\n pool,\n bptIn: bptAmount,\n slippage,\n toInternalBalance: !!toInternalBalance,\n });\n }\n\n /**\n * Builds generalised join transaction\n *\n * @param poolId Pool id\n * @param tokens Token addresses\n * @param amounts Token amounts in EVM scale\n * @param userAddress User address\n * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%.\n * @param signer JsonRpcSigner that will sign the staticCall transaction if Static simulation chosen\n * @param simulationType Simulation type (VaultModel, Tenderly or Static)\n * @param authorisation Optional auhtorisation call to be added to the chained transaction\n * @returns transaction data ready to be sent to the network along with min and expected BPT amounts out.\n */\n async generalisedJoin(\n poolId: string,\n tokens: string[],\n amounts: string[],\n userAddress: string,\n slippage: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType,\n authorisation?: string\n ): Promise<{\n to: string;\n encodedCall: string;\n minOut: string;\n expectedOut: string;\n priceImpact: string;\n value: BigNumberish;\n }> {\n return this.joinService.joinPool(\n poolId,\n tokens,\n amounts,\n userAddress,\n slippage,\n signer,\n simulationType,\n authorisation\n );\n }\n\n /**\n * Builds generalised exit transaction\n *\n * @param poolId Pool id\n * @param amount Token amount in EVM scale\n * @param userAddress User address\n * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%.\n * @param signer JsonRpcSigner that will sign the staticCall transaction if Static simulation chosen\n * @param simulationType Simulation type (Tenderly or Static) - VaultModel should not be used to build exit transaction\n * @param authorisation Optional auhtorisation call to be added to the chained transaction\n * @param tokensToUnwrap List all tokens that requires exit by unwrapping - info provided by getExitInfo\n * @returns transaction data ready to be sent to the network along with tokens, min and expected amounts out.\n */\n async generalisedExit(\n poolId: string,\n amount: string,\n userAddress: string,\n slippage: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType.Static | SimulationType.Tenderly,\n authorisation?: string,\n tokensToUnwrap?: string[]\n ): Promise {\n return this.exitService.buildExitCall(\n poolId,\n amount,\n userAddress,\n slippage,\n signer,\n simulationType,\n authorisation,\n tokensToUnwrap\n );\n }\n\n /**\n * Calculates price impact for an action on a pool\n *\n * @param pool\n * @returns percentage as a string in EVM scale\n */\n calcPriceImpact({\n pool,\n tokenAmounts,\n bptAmount,\n isJoin,\n }: {\n pool: Pool;\n tokenAmounts: string[];\n bptAmount: string;\n isJoin: boolean;\n }): string {\n const concerns = PoolTypeConcerns.from(pool.poolType);\n return concerns.priceImpactCalculator.calcPriceImpact(\n pool,\n tokenAmounts.map(BigInt),\n BigInt(bptAmount),\n isJoin\n );\n }\n\n /**\n * Gets info required to build generalised exit transaction\n *\n * @param poolId Pool id\n * @param amountBptIn BPT amount in EVM scale\n * @param userAddress User address\n * @param signer JsonRpcSigner that will sign the staticCall transaction if Static simulation chosen\n * @returns info required to build a generalised exit transaction including whether tokens need to be unwrapped\n */\n async getExitInfo(\n poolId: string,\n amountBptIn: string,\n userAddress: string,\n signer: JsonRpcSigner\n ): Promise {\n return this.exitService.getExitInfo(\n poolId,\n amountBptIn,\n userAddress,\n signer\n );\n }\n\n /**\n * Calculates total fees for the pool in the last 24 hours\n *\n * @param pool\n * @returns\n */\n async fees(pool: Pool): Promise {\n return this.feesService.last24h(pool);\n }\n\n /**\n * Calculates total volume of the pool in the last 24 hours\n *\n * @param pool\n * @returns\n */\n async volume(pool: Pool): Promise {\n return this.volumeService.last24h(pool);\n }\n\n async find(id: string): Promise {\n const data = await this.dataSource().find(id);\n if (!data) return;\n\n return Pools.wrap(data, this.networkConfig);\n }\n\n async findBy(\n param: string,\n value: string\n ): Promise {\n if (param == 'id') {\n return this.find(value);\n } else if (param == 'address') {\n const data = await this.dataSource().findBy('address', value);\n if (!data) return;\n\n return Pools.wrap(data, this.networkConfig);\n } else {\n throw `search by ${param} not implemented`;\n }\n }\n\n async all(): Promise {\n const list = await this.dataSource().all();\n if (!list) return [];\n\n return list\n .map((data: Pool) => Pools.wrap(data, this.networkConfig))\n .filter((p) => p) as PoolWithMethods[];\n }\n\n async where(filter: (pool: Pool) => boolean): Promise {\n const list = await this.dataSource().where(filter);\n if (!list) return [];\n\n const wrapped = list.map((data: Pool) =>\n Pools.wrap(data, this.networkConfig)\n );\n\n return wrapped.filter((p) => p) as PoolWithMethods[];\n }\n}\n","export const version = \"strings/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n///////////////////////////////\nexport var UnicodeNormalizationForm;\n(function (UnicodeNormalizationForm) {\n UnicodeNormalizationForm[\"current\"] = \"\";\n UnicodeNormalizationForm[\"NFC\"] = \"NFC\";\n UnicodeNormalizationForm[\"NFD\"] = \"NFD\";\n UnicodeNormalizationForm[\"NFKC\"] = \"NFKC\";\n UnicodeNormalizationForm[\"NFKD\"] = \"NFKD\";\n})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {}));\n;\nexport var Utf8ErrorReason;\n(function (Utf8ErrorReason) {\n // A continuation byte was present where there was nothing to continue\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"UNEXPECTED_CONTINUE\"] = \"unexpected continuation byte\";\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"BAD_PREFIX\"] = \"bad codepoint prefix\";\n // The string is too short to process the expected codepoint\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"OVERRUN\"] = \"string overrun\";\n // A missing continuation byte was expected but not found\n // - offset = the index the continuation byte was expected at\n Utf8ErrorReason[\"MISSING_CONTINUE\"] = \"missing continuation byte\";\n // The computed code point is outside the range for UTF-8\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\n Utf8ErrorReason[\"OUT_OF_RANGE\"] = \"out of UTF-8 range\";\n // UTF-8 strings may not contain UTF-16 surrogate pairs\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\n Utf8ErrorReason[\"UTF16_SURROGATE\"] = \"UTF-16 surrogate\";\n // The string is an overlong representation\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; already bounds checked\n Utf8ErrorReason[\"OVERLONG\"] = \"overlong representation\";\n})(Utf8ErrorReason || (Utf8ErrorReason = {}));\n;\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n return logger.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === Utf8ErrorReason.OVERRUN) {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === Utf8ErrorReason.OVERLONG) {\n output.push(badCodepoint);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n// Common error handing strategies\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n bytes = arrayify(bytes);\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\n }\n else {\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nexport function toUtf8Bytes(str, form = UnicodeNormalizationForm.current) {\n if (form != UnicodeNormalizationForm.current) {\n logger.checkNormalize();\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new Error(\"invalid utf-8 string\");\n }\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return arrayify(result);\n}\n;\nfunction escapeChar(value) {\n const hex = (\"0000\" + value.toString(16));\n return \"\\\\u\" + hex.substring(hex.length - 4);\n}\nexport function _toEscapedUtf8String(bytes, onError) {\n return '\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\n if (codePoint < 256) {\n switch (codePoint) {\n case 8: return \"\\\\b\";\n case 9: return \"\\\\t\";\n case 10: return \"\\\\n\";\n case 13: return \"\\\\r\";\n case 34: return \"\\\\\\\"\";\n case 92: return \"\\\\\\\\\";\n }\n if (codePoint >= 32 && codePoint < 127) {\n return String.fromCharCode(codePoint);\n }\n }\n if (codePoint <= 0xffff) {\n return escapeChar(codePoint);\n }\n codePoint -= 0x10000;\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\n }).join(\"\") + '\"';\n}\nexport function _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\nexport function toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","\"use strict\";\nimport { HashZero } from \"@ethersproject/constants\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes, toUtf8String } from \"./utf8\";\nexport function formatBytes32String(text) {\n // Get the bytes\n const bytes = toUtf8Bytes(text);\n // Check we have room for null-termination\n if (bytes.length > 31) {\n throw new Error(\"bytes32 string must be less than 32 bytes\");\n }\n // Zero-pad (implicitly null-terminates)\n return hexlify(concat([bytes, HashZero]).slice(0, 32));\n}\nexport function parseBytes32String(bytes) {\n const data = arrayify(bytes);\n // Must be 32 bytes with a null-termination\n if (data.length !== 32) {\n throw new Error(\"invalid bytes32 - not 32 bytes long\");\n }\n if (data[31] !== 0) {\n throw new Error(\"invalid bytes32 string - no null terminator\");\n }\n // Find the null termination\n let length = 31;\n while (data[length - 1] === 0) {\n length--;\n }\n // Determine the string value\n return toUtf8String(data.slice(0, length));\n}\n//# sourceMappingURL=bytes32.js.map","/**\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\n *\n * @version 0.8.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2015-2018\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n 'use strict';\n\n var INPUT_ERROR = 'input is invalid type';\n var FINALIZE_ERROR = 'finalize already called';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_SHA3_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\n var PADDING = [6, 1536, 393216, 100663296];\n var SHIFT = [0, 8, 16, 24];\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\n var BITS = [224, 256, 384, 512];\n var SHAKE_BITS = [128, 256];\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\n var CSHAKE_BYTEPAD = {\n '128': 168,\n '256': 136\n };\n\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n var createOutputMethod = function (bits, padding, outputType) {\n return function (message) {\n return new Keccak(bits, padding, bits).update(message)[outputType]();\n };\n };\n\n var createShakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits) {\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\n };\n };\n\n var createCshakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits, n, s) {\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\n };\n };\n\n var createKmacOutputMethod = function (bits, padding, outputType) {\n return function (key, message, outputBits, s) {\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\n };\n };\n\n var createOutputMethods = function (method, createMethod, bits, padding) {\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createMethod(bits, padding, type);\n }\n return method;\n };\n\n var createMethod = function (bits, padding) {\n var method = createOutputMethod(bits, padding, 'hex');\n method.create = function () {\n return new Keccak(bits, padding, bits);\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n return createOutputMethods(method, createOutputMethod, bits, padding);\n };\n\n var createShakeMethod = function (bits, padding) {\n var method = createShakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits) {\n return new Keccak(bits, padding, outputBits);\n };\n method.update = function (message, outputBits) {\n return method.create(outputBits).update(message);\n };\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\n };\n\n var createCshakeMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createCshakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits, n, s) {\n if (!n && !s) {\n return methods['shake' + bits].create(outputBits);\n } else {\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\n }\n };\n method.update = function (message, outputBits, n, s) {\n return method.create(outputBits, n, s).update(message);\n };\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\n };\n\n var createKmacMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createKmacOutputMethod(bits, padding, 'hex');\n method.create = function (key, outputBits, s) {\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\n };\n method.update = function (key, message, outputBits, s) {\n return method.create(key, outputBits, s).update(message);\n };\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\n };\n\n var algorithms = [\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\n ];\n\n var methods = {}, methodNames = [];\n\n for (var i = 0; i < algorithms.length; ++i) {\n var algorithm = algorithms[i];\n var bits = algorithm.bits;\n for (var j = 0; j < bits.length; ++j) {\n var methodName = algorithm.name + '_' + bits[j];\n methodNames.push(methodName);\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\n if (algorithm.name !== 'sha3') {\n var newMethodName = algorithm.name + bits[j];\n methodNames.push(newMethodName);\n methods[newMethodName] = methods[methodName];\n }\n }\n }\n\n function Keccak(bits, padding, outputBits) {\n this.blocks = [];\n this.s = [];\n this.padding = padding;\n this.outputBits = outputBits;\n this.reset = true;\n this.finalized = false;\n this.block = 0;\n this.start = 0;\n this.blockCount = (1600 - (bits << 1)) >> 5;\n this.byteCount = this.blockCount << 2;\n this.outputBlocks = outputBits >> 5;\n this.extraBytes = (outputBits & 31) >> 3;\n\n for (var i = 0; i < 50; ++i) {\n this.s[i] = 0;\n }\n }\n\n Keccak.prototype.update = function (message) {\n if (this.finalized) {\n throw new Error(FINALIZE_ERROR);\n }\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\n\n while (index < length) {\n if (this.reset) {\n this.reset = false;\n blocks[0] = this.block;\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n if (notString) {\n for (i = this.start; index < length && i < byteCount; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < byteCount; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n this.lastByteIndex = i;\n if (i >= byteCount) {\n this.start = i - byteCount;\n this.block = blocks[blockCount];\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n this.reset = true;\n } else {\n this.start = i;\n }\n }\n return this;\n };\n\n Keccak.prototype.encode = function (x, right) {\n var o = x & 255, n = 1;\n var bytes = [o];\n x = x >> 8;\n o = x & 255;\n while (o > 0) {\n bytes.unshift(o);\n x = x >> 8;\n o = x & 255;\n ++n;\n }\n if (right) {\n bytes.push(n);\n } else {\n bytes.unshift(n);\n }\n this.update(bytes);\n return bytes.length;\n };\n\n Keccak.prototype.encodeString = function (str) {\n var notString, type = typeof str;\n if (type !== 'string') {\n if (type === 'object') {\n if (str === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\n str = new Uint8Array(str);\n } else if (!Array.isArray(str)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var bytes = 0, length = str.length;\n if (notString) {\n bytes = length;\n } else {\n for (var i = 0; i < str.length; ++i) {\n var code = str.charCodeAt(i);\n if (code < 0x80) {\n bytes += 1;\n } else if (code < 0x800) {\n bytes += 2;\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes += 3;\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\n bytes += 4;\n }\n }\n }\n bytes += this.encode(bytes * 8);\n this.update(str);\n return bytes;\n };\n\n Keccak.prototype.bytepad = function (strs, w) {\n var bytes = this.encode(w);\n for (var i = 0; i < strs.length; ++i) {\n bytes += this.encodeString(strs[i]);\n }\n var paddingBytes = w - bytes % w;\n var zeros = [];\n zeros.length = paddingBytes;\n this.update(zeros);\n return this;\n };\n\n Keccak.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\n blocks[i >> 2] |= this.padding[i & 3];\n if (this.lastByteIndex === this.byteCount) {\n blocks[0] = blocks[blockCount];\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n blocks[blockCount - 1] |= 0x80000000;\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n };\n\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var hex = '', block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\n }\n if (j % blockCount === 0) {\n f(s);\n i = 0;\n }\n }\n if (extraBytes) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\n if (extraBytes > 1) {\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\n }\n if (extraBytes > 2) {\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\n }\n }\n return hex;\n };\n\n Keccak.prototype.arrayBuffer = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var bytes = this.outputBits >> 3;\n var buffer;\n if (extraBytes) {\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\n } else {\n buffer = new ArrayBuffer(bytes);\n }\n var array = new Uint32Array(buffer);\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n array[j] = s[i];\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n array[i] = s[i];\n buffer = buffer.slice(0, bytes);\n }\n return buffer;\n };\n\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\n\n Keccak.prototype.digest = Keccak.prototype.array = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var array = [], offset, block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n array[offset + 1] = (block >> 8) & 0xFF;\n array[offset + 2] = (block >> 16) & 0xFF;\n array[offset + 3] = (block >> 24) & 0xFF;\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n if (extraBytes > 1) {\n array[offset + 1] = (block >> 8) & 0xFF;\n }\n if (extraBytes > 2) {\n array[offset + 2] = (block >> 16) & 0xFF;\n }\n }\n return array;\n };\n\n function Kmac(bits, padding, outputBits) {\n Keccak.call(this, bits, padding, outputBits);\n }\n\n Kmac.prototype = new Keccak();\n\n Kmac.prototype.finalize = function () {\n this.encode(this.outputBits, true);\n return Keccak.prototype.finalize.call(this);\n };\n\n var f = function (s) {\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\n for (n = 0; n < 48; n += 2) {\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\n\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\n s[0] ^= h;\n s[1] ^= l;\n s[10] ^= h;\n s[11] ^= l;\n s[20] ^= h;\n s[21] ^= l;\n s[30] ^= h;\n s[31] ^= l;\n s[40] ^= h;\n s[41] ^= l;\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\n s[2] ^= h;\n s[3] ^= l;\n s[12] ^= h;\n s[13] ^= l;\n s[22] ^= h;\n s[23] ^= l;\n s[32] ^= h;\n s[33] ^= l;\n s[42] ^= h;\n s[43] ^= l;\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\n s[4] ^= h;\n s[5] ^= l;\n s[14] ^= h;\n s[15] ^= l;\n s[24] ^= h;\n s[25] ^= l;\n s[34] ^= h;\n s[35] ^= l;\n s[44] ^= h;\n s[45] ^= l;\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\n s[6] ^= h;\n s[7] ^= l;\n s[16] ^= h;\n s[17] ^= l;\n s[26] ^= h;\n s[27] ^= l;\n s[36] ^= h;\n s[37] ^= l;\n s[46] ^= h;\n s[47] ^= l;\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\n s[8] ^= h;\n s[9] ^= l;\n s[18] ^= h;\n s[19] ^= l;\n s[28] ^= h;\n s[29] ^= l;\n s[38] ^= h;\n s[39] ^= l;\n s[48] ^= h;\n s[49] ^= l;\n\n b0 = s[0];\n b1 = s[1];\n b32 = (s[11] << 4) | (s[10] >>> 28);\n b33 = (s[10] << 4) | (s[11] >>> 28);\n b14 = (s[20] << 3) | (s[21] >>> 29);\n b15 = (s[21] << 3) | (s[20] >>> 29);\n b46 = (s[31] << 9) | (s[30] >>> 23);\n b47 = (s[30] << 9) | (s[31] >>> 23);\n b28 = (s[40] << 18) | (s[41] >>> 14);\n b29 = (s[41] << 18) | (s[40] >>> 14);\n b20 = (s[2] << 1) | (s[3] >>> 31);\n b21 = (s[3] << 1) | (s[2] >>> 31);\n b2 = (s[13] << 12) | (s[12] >>> 20);\n b3 = (s[12] << 12) | (s[13] >>> 20);\n b34 = (s[22] << 10) | (s[23] >>> 22);\n b35 = (s[23] << 10) | (s[22] >>> 22);\n b16 = (s[33] << 13) | (s[32] >>> 19);\n b17 = (s[32] << 13) | (s[33] >>> 19);\n b48 = (s[42] << 2) | (s[43] >>> 30);\n b49 = (s[43] << 2) | (s[42] >>> 30);\n b40 = (s[5] << 30) | (s[4] >>> 2);\n b41 = (s[4] << 30) | (s[5] >>> 2);\n b22 = (s[14] << 6) | (s[15] >>> 26);\n b23 = (s[15] << 6) | (s[14] >>> 26);\n b4 = (s[25] << 11) | (s[24] >>> 21);\n b5 = (s[24] << 11) | (s[25] >>> 21);\n b36 = (s[34] << 15) | (s[35] >>> 17);\n b37 = (s[35] << 15) | (s[34] >>> 17);\n b18 = (s[45] << 29) | (s[44] >>> 3);\n b19 = (s[44] << 29) | (s[45] >>> 3);\n b10 = (s[6] << 28) | (s[7] >>> 4);\n b11 = (s[7] << 28) | (s[6] >>> 4);\n b42 = (s[17] << 23) | (s[16] >>> 9);\n b43 = (s[16] << 23) | (s[17] >>> 9);\n b24 = (s[26] << 25) | (s[27] >>> 7);\n b25 = (s[27] << 25) | (s[26] >>> 7);\n b6 = (s[36] << 21) | (s[37] >>> 11);\n b7 = (s[37] << 21) | (s[36] >>> 11);\n b38 = (s[47] << 24) | (s[46] >>> 8);\n b39 = (s[46] << 24) | (s[47] >>> 8);\n b30 = (s[8] << 27) | (s[9] >>> 5);\n b31 = (s[9] << 27) | (s[8] >>> 5);\n b12 = (s[18] << 20) | (s[19] >>> 12);\n b13 = (s[19] << 20) | (s[18] >>> 12);\n b44 = (s[29] << 7) | (s[28] >>> 25);\n b45 = (s[28] << 7) | (s[29] >>> 25);\n b26 = (s[38] << 8) | (s[39] >>> 24);\n b27 = (s[39] << 8) | (s[38] >>> 24);\n b8 = (s[48] << 14) | (s[49] >>> 18);\n b9 = (s[49] << 14) | (s[48] >>> 18);\n\n s[0] = b0 ^ (~b2 & b4);\n s[1] = b1 ^ (~b3 & b5);\n s[10] = b10 ^ (~b12 & b14);\n s[11] = b11 ^ (~b13 & b15);\n s[20] = b20 ^ (~b22 & b24);\n s[21] = b21 ^ (~b23 & b25);\n s[30] = b30 ^ (~b32 & b34);\n s[31] = b31 ^ (~b33 & b35);\n s[40] = b40 ^ (~b42 & b44);\n s[41] = b41 ^ (~b43 & b45);\n s[2] = b2 ^ (~b4 & b6);\n s[3] = b3 ^ (~b5 & b7);\n s[12] = b12 ^ (~b14 & b16);\n s[13] = b13 ^ (~b15 & b17);\n s[22] = b22 ^ (~b24 & b26);\n s[23] = b23 ^ (~b25 & b27);\n s[32] = b32 ^ (~b34 & b36);\n s[33] = b33 ^ (~b35 & b37);\n s[42] = b42 ^ (~b44 & b46);\n s[43] = b43 ^ (~b45 & b47);\n s[4] = b4 ^ (~b6 & b8);\n s[5] = b5 ^ (~b7 & b9);\n s[14] = b14 ^ (~b16 & b18);\n s[15] = b15 ^ (~b17 & b19);\n s[24] = b24 ^ (~b26 & b28);\n s[25] = b25 ^ (~b27 & b29);\n s[34] = b34 ^ (~b36 & b38);\n s[35] = b35 ^ (~b37 & b39);\n s[44] = b44 ^ (~b46 & b48);\n s[45] = b45 ^ (~b47 & b49);\n s[6] = b6 ^ (~b8 & b0);\n s[7] = b7 ^ (~b9 & b1);\n s[16] = b16 ^ (~b18 & b10);\n s[17] = b17 ^ (~b19 & b11);\n s[26] = b26 ^ (~b28 & b20);\n s[27] = b27 ^ (~b29 & b21);\n s[36] = b36 ^ (~b38 & b30);\n s[37] = b37 ^ (~b39 & b31);\n s[46] = b46 ^ (~b48 & b40);\n s[47] = b47 ^ (~b49 & b41);\n s[8] = b8 ^ (~b0 & b2);\n s[9] = b9 ^ (~b1 & b3);\n s[18] = b18 ^ (~b10 & b12);\n s[19] = b19 ^ (~b11 & b13);\n s[28] = b28 ^ (~b20 & b22);\n s[29] = b29 ^ (~b21 & b23);\n s[38] = b38 ^ (~b30 & b32);\n s[39] = b39 ^ (~b31 & b33);\n s[48] = b48 ^ (~b40 & b42);\n s[49] = b49 ^ (~b41 & b43);\n\n s[0] ^= RC[n];\n s[1] ^= RC[n + 1];\n }\n };\n\n if (COMMON_JS) {\n module.exports = methods;\n } else {\n for (i = 0; i < methodNames.length; ++i) {\n root[methodNames[i]] = methods[methodNames[i]];\n }\n if (AMD) {\n define(function () {\n return methods;\n });\n }\n }\n})();\n","export const version = \"solidity/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { arrayify, concat, hexlify, zeroPad } from \"@ethersproject/bytes\";\nimport { keccak256 as hashKeccak256 } from \"@ethersproject/keccak256\";\nimport { sha256 as hashSha256 } from \"@ethersproject/sha2\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nconst regexBytes = new RegExp(\"^bytes([0-9]+)$\");\nconst regexNumber = new RegExp(\"^(u?int)([0-9]*)$\");\nconst regexArray = new RegExp(\"^(.*)\\\\[([0-9]*)\\\\]$\");\nconst Zeros = \"0000000000000000000000000000000000000000000000000000000000000000\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nfunction _pack(type, value, isArray) {\n switch (type) {\n case \"address\":\n if (isArray) {\n return zeroPad(value, 32);\n }\n return arrayify(value);\n case \"string\":\n return toUtf8Bytes(value);\n case \"bytes\":\n return arrayify(value);\n case \"bool\":\n value = (value ? \"0x01\" : \"0x00\");\n if (isArray) {\n return zeroPad(value, 32);\n }\n return arrayify(value);\n }\n let match = type.match(regexNumber);\n if (match) {\n //let signed = (match[1] === \"int\")\n let size = parseInt(match[2] || \"256\");\n if ((match[2] && String(size) !== match[2]) || (size % 8 !== 0) || size === 0 || size > 256) {\n logger.throwArgumentError(\"invalid number type\", \"type\", type);\n }\n if (isArray) {\n size = 256;\n }\n value = BigNumber.from(value).toTwos(size);\n return zeroPad(value, size / 8);\n }\n match = type.match(regexBytes);\n if (match) {\n const size = parseInt(match[1]);\n if (String(size) !== match[1] || size === 0 || size > 32) {\n logger.throwArgumentError(\"invalid bytes type\", \"type\", type);\n }\n if (arrayify(value).byteLength !== size) {\n logger.throwArgumentError(`invalid value for ${type}`, \"value\", value);\n }\n if (isArray) {\n return arrayify((value + Zeros).substring(0, 66));\n }\n return value;\n }\n match = type.match(regexArray);\n if (match && Array.isArray(value)) {\n const baseType = match[1];\n const count = parseInt(match[2] || String(value.length));\n if (count != value.length) {\n logger.throwArgumentError(`invalid array length for ${type}`, \"value\", value);\n }\n const result = [];\n value.forEach(function (value) {\n result.push(_pack(baseType, value, true));\n });\n return concat(result);\n }\n return logger.throwArgumentError(\"invalid type\", \"type\", type);\n}\n// @TODO: Array Enum\nexport function pack(types, values) {\n if (types.length != values.length) {\n logger.throwArgumentError(\"wrong number of values; expected ${ types.length }\", \"values\", values);\n }\n const tight = [];\n types.forEach(function (type, index) {\n tight.push(_pack(type, values[index]));\n });\n return hexlify(concat(tight));\n}\nexport function keccak256(types, values) {\n return hashKeccak256(pack(types, values));\n}\nexport function sha256(types, values) {\n return hashSha256(pack(types, values));\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nimport sha3 from \"js-sha3\";\nimport { arrayify } from \"@ethersproject/bytes\";\nexport function keccak256(data) {\n return '0x' + sha3.keccak_256(arrayify(data));\n}\n//# sourceMappingURL=index.js.map","import { formatBytes32String } from '@ethersproject/strings';\nimport { keccak256 } from '@ethersproject/solidity';\nimport { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { Provider } from '@ethersproject/providers';\nimport { GyroConfig, GyroConfig__factory, Multicall } from '@/contracts';\nimport { GyroConfigInterface } from '@/contracts/GyroConfig';\n\nexport interface GyroConfigRepository {\n getGyroProtocolFee(poolAddress: string): Promise;\n}\n\nconst protocolFeePercKey = formatBytes32String('PROTOCOL_SWAP_FEE_PERC');\nconst gyroPoolTypeKey = formatBytes32String('E-CLP');\nconst encodedPoolTypeKey = keccak256(\n ['bytes'],\n [\n defaultAbiCoder.encode(\n ['bytes32', 'bytes32'],\n [protocolFeePercKey, gyroPoolTypeKey]\n ),\n ]\n);\n\nexport class GyroConfigRepositoryImpl implements GyroConfigRepository {\n gyroConfigInterface: GyroConfigInterface;\n gyroConfig: GyroConfig;\n\n constructor(\n private gyroConfigAddress: string,\n private multicall: Multicall,\n provider: Provider\n ) {\n this.gyroConfigInterface = GyroConfig__factory.createInterface();\n this.gyroConfig = GyroConfig__factory.connect(gyroConfigAddress, provider);\n }\n\n async getGyroProtocolFee(poolAddress: string): Promise {\n let fee;\n const encodedPoolSpecificKey = keccak256(\n ['bytes'],\n [\n defaultAbiCoder.encode(\n ['bytes32', 'uint256'],\n [protocolFeePercKey, poolAddress]\n ),\n ]\n );\n const payload = [\n {\n target: this.gyroConfigAddress,\n callData: this.gyroConfigInterface.encodeFunctionData('hasKey', [\n encodedPoolSpecificKey,\n ]),\n },\n {\n target: this.gyroConfigAddress,\n callData: this.gyroConfigInterface.encodeFunctionData('hasKey', [\n encodedPoolTypeKey,\n ]),\n },\n {\n target: this.gyroConfigAddress,\n callData: this.gyroConfigInterface.encodeFunctionData('hasKey', [\n protocolFeePercKey,\n ]),\n },\n ];\n const [, [hasSpecificKeyHex, hasPoolTypeKeyHex, hasDefaultKeyHex]] =\n await this.multicall.callStatic.aggregate(payload);\n const hasSpecificKey = BigNumber.from(hasSpecificKeyHex).eq(1);\n const hasPoolTypeKey = BigNumber.from(hasPoolTypeKeyHex).eq(1);\n const hasDefaultKey = BigNumber.from(hasDefaultKeyHex).eq(1);\n if (hasSpecificKey) {\n fee = parseFloat(\n formatFixed(await this.gyroConfig.getUint(encodedPoolSpecificKey), 18)\n );\n } else if (hasPoolTypeKey) {\n fee = parseFloat(\n formatFixed(await this.gyroConfig.getUint(encodedPoolTypeKey), 18)\n );\n } else if (hasDefaultKey) {\n fee = parseFloat(\n formatFixed(await this.gyroConfig.getUint(protocolFeePercKey), 18)\n );\n } else {\n fee = 0;\n }\n return fee;\n }\n}\n","import { Interface } from '@ethersproject/abi';\nimport { getAddress } from '@ethersproject/address';\nimport { formatUnits } from '@ethersproject/units';\nimport { Multicall } from '@/contracts';\n\nconst gaugeControllerInterface = new Interface([\n 'function gauge_relative_weight(address gauge, uint timestamp) view returns (uint)',\n]);\n\nconst gaugeControllerCheckpointerInterface = new Interface([\n 'function gauge_relative_weight(address gauge) view returns (uint)',\n]);\n\nexport class GaugeControllerMulticallRepository {\n constructor(\n private multicall: Multicall,\n private gaugeControllerAddress: string,\n private gaugeControllerCheckpointerAddress?: string\n ) {}\n\n async getRelativeWeights(\n gaugeAddresses: string[],\n timestamp?: number\n ): Promise<{ [gaugeAddress: string]: number }> {\n const payload = gaugeAddresses.map((gaugeAddress) => {\n // The checkpointer only exists for mainnet, if the network is a testnet, it'll use the regular gauge controller\n if (this.gaugeControllerCheckpointerAddress && !timestamp) {\n return {\n target: this.gaugeControllerCheckpointerAddress,\n callData: gaugeControllerCheckpointerInterface.encodeFunctionData(\n 'gauge_relative_weight',\n [getAddress(gaugeAddress)]\n ),\n };\n }\n return {\n target: this.gaugeControllerAddress,\n callData: gaugeControllerInterface.encodeFunctionData(\n 'gauge_relative_weight',\n [getAddress(gaugeAddress), timestamp || Math.floor(Date.now() / 1000)]\n ),\n };\n });\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const weights = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseFloat(formatUnits(res[i], 18));\n return p;\n },\n {}\n );\n\n return weights;\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { Findable } from '@/types';\n\nexport abstract class AbstractSubgraphRepository\n implements Findable\n{\n protected abstract mapType(subgraphFragment: any): T;\n\n abstract query(args: any): Promise;\n\n async get(args: any): Promise {\n const result = await this.query(args);\n return result?.length > 0 ? result[0] : undefined;\n }\n\n async find(id: string): Promise {\n return this.get({ where: { id: id } });\n }\n\n async findBy(attribute: A, value: string): Promise {\n return this.get({ where: { [String(attribute)]: value } });\n }\n\n async findAllBy(\n attribute: A,\n value: string,\n first = 1000,\n skip = 0\n ): Promise {\n const args = {\n where: { [String(attribute)]: value },\n first: first,\n skip: skip,\n };\n return this.query(args);\n }\n}\n","import { Network } from '@/lib/constants/network';\nimport { AbstractSubgraphRepository } from './abstract-subgraph-repository';\nimport { createSubgraphClient, SubgraphClient } from '../subgraph';\n\nexport abstract class BalancerSubgraphRepository<\n T,\n A\n> extends AbstractSubgraphRepository {\n protected client: SubgraphClient;\n\n constructor(\n url: string,\n protected chainId: Network,\n protected blockHeight?: () => Promise\n ) {\n super();\n this.client = createSubgraphClient(url);\n }\n}\n","import { Network } from '@/lib/constants/network';\nimport { AbstractSubgraphRepository } from './abstract-subgraph-repository';\nimport { createGaugesClient, GaugesClient } from '../subgraph';\n\nexport abstract class GaugesSubgraphRepository<\n T,\n A\n> extends AbstractSubgraphRepository {\n protected client: GaugesClient;\n\n constructor(\n url: string,\n protected chainId: Network,\n protected blockHeight?: () => Promise\n ) {\n super();\n this.client = createGaugesClient(url);\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { GaugeShare, GaugeShareAttributes } from './types';\nimport { GaugesSubgraphRepository } from '@/modules/subgraph/repository';\nimport {\n SubgraphGaugeShareFragment,\n GaugeShare_OrderBy,\n OrderDirection,\n} from '@/modules/subgraph/generated/balancer-gauges';\n\nexport class GaugeSharesRepository extends GaugesSubgraphRepository<\n GaugeShare,\n GaugeShareAttributes\n> {\n async query(args: any): Promise {\n if (!args.orderBy) args.orderBy = GaugeShare_OrderBy.balance;\n if (!args.orderDirection) args.orderDirection = OrderDirection.desc;\n if (!args.block && this.blockHeight)\n args.block = { number: await this.blockHeight() };\n\n const { gaugeShares } = await this.client.GaugeShares(args);\n return gaugeShares.map(this.mapType);\n }\n\n mapType(subgraphGaugeShare: SubgraphGaugeShareFragment): GaugeShare {\n return {\n id: subgraphGaugeShare.id,\n balance: subgraphGaugeShare.balance,\n userAddress: subgraphGaugeShare.user?.id,\n gauge: {\n id: subgraphGaugeShare.gauge.id,\n poolId: subgraphGaugeShare.gauge.poolId || undefined,\n isKilled: subgraphGaugeShare.gauge.isKilled,\n totalSupply: subgraphGaugeShare.gauge.totalSupply,\n },\n };\n }\n\n async findByUser(\n userAddress: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(\n GaugeShareAttributes.UserAddress,\n userAddress,\n first,\n skip\n );\n }\n\n async findByGauge(\n gaugeId: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(GaugeShareAttributes.GaugeId, gaugeId, first, skip);\n }\n}\n","import { Multicall } from '@/contracts';\nimport { Interface } from '@ethersproject/abi';\nimport { formatUnits } from '@ethersproject/units';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport type { Network } from '@/types';\n\nconst liquidityGaugeV5Interface = new Interface([\n 'function totalSupply() view returns (uint)',\n 'function working_supply() view returns (uint)',\n 'function reward_count() view returns (uint)',\n 'function reward_tokens(uint rewardIndex) view returns (address)',\n 'function reward_data(address rewardToken) view returns (tuple(address token, address distributor, uint period_finish, uint rate, uint last_update, uint integral) data)',\n]);\n\nconst childLiquidityGaugeInterface = new Interface([\n 'function inflation_rate(uint currentWeekTimestamp) view returns (uint)',\n]);\n\nexport interface RewardData {\n token: string; // Always 0x0\n distributor: string;\n period_finish: BigNumber;\n rate: BigNumber; // per second\n last_update: BigNumber;\n integral: BigNumber; // sum accrued to date\n decimals?: number; // Provided by subgraph\n}\n\n/**\n * A lot of code to get liquidity gauge state via RPC multicall.\n * TODO: reseach helper contracts or extend subgraph\n */\nexport class LiquidityGaugesMulticallRepository {\n constructor(private multicall: Multicall, private chainId: Network) {}\n\n async getTotalSupplies(\n gaugeAddresses: string[]\n ): Promise<{ [gaugeAddress: string]: number }> {\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData('totalSupply', []),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n // Handle 0x\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n\n const totalSupplies = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseFloat(formatUnits(res0x[i], 18));\n return p;\n },\n {}\n );\n\n return totalSupplies;\n }\n\n async getWorkingSupplies(\n gaugeAddresses: string[]\n ): Promise<{ [gaugeAddress: string]: number }> {\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'working_supply',\n []\n ),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n // Handle 0x\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n\n const workingSupplies = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseFloat(formatUnits(res0x[i], 18));\n return p;\n },\n {}\n );\n\n return workingSupplies;\n }\n\n async getInflationRates(\n gaugeAddresses: string[]\n ): Promise<{ [gaugeAddress: string]: number }> {\n const currentWeek = Math.floor(Date.now() / 1000 / 604800);\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: childLiquidityGaugeInterface.encodeFunctionData(\n 'inflation_rate',\n [currentWeek]\n ),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n // Handle 0x\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n\n const inflationRates = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseFloat(formatUnits(res0x[i], 18));\n return p;\n },\n {}\n );\n\n return inflationRates;\n }\n\n async getRewardCounts(\n gaugeAddresses: string[]\n ): Promise<{ [gaugeAddress: string]: number }> {\n let rewardCounts;\n if (this.chainId == 1) {\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'reward_count',\n []\n ),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n // Handle 0x return values\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n\n rewardCounts = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseInt(res0x[i]);\n return p;\n },\n {}\n );\n } else {\n rewardCounts = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a) => {\n p[a] ||= 1;\n return p;\n },\n {}\n );\n }\n\n return rewardCounts;\n }\n\n async getRewardTokens(\n gaugeAddresses: string[],\n passingRewardCounts?: { [gaugeAddress: string]: number }\n ): Promise<{ [gaugeAddress: string]: string[] }> {\n const rewardCounts =\n passingRewardCounts || (await this.getRewardCounts(gaugeAddresses));\n const gaugesWithRewards = gaugeAddresses.filter(\n (gaugeAddress) => rewardCounts[gaugeAddress] > 0\n );\n const startIndexes = [0];\n const payload = gaugesWithRewards\n .map((gaugeAddress, gaugeIndex) => {\n const calls = [];\n for (let i = 0; i < rewardCounts[gaugeAddress]; i++) {\n calls.push({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'reward_tokens',\n [i]\n ),\n });\n }\n startIndexes[gaugeIndex + 1] =\n startIndexes[gaugeIndex] + rewardCounts[gaugeAddress];\n return calls;\n })\n .flat();\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const rewardTokens = gaugesWithRewards.reduce(\n (p: { [key: string]: string[] }, a, i) => {\n const start = startIndexes[i];\n const end = startIndexes[i + 1];\n const tokens: string[] = [];\n for (let i = start; i < end; i++) {\n tokens.push(\n liquidityGaugeV5Interface.decodeFunctionResult(\n 'reward_tokens',\n res[i]\n )[0]\n );\n }\n p[a] ||= tokens;\n return p;\n },\n {}\n );\n\n return rewardTokens;\n }\n\n async getRewardData(\n gaugeAddresses: string[],\n passingRewardTokens?: { [gaugeAddress: string]: string[] }\n ): Promise<{\n [gaugeAddress: string]: { [rewardTokenAddress: string]: RewardData };\n }> {\n const rewardTokens =\n passingRewardTokens || (await this.getRewardTokens(gaugeAddresses));\n\n const startIndexes = [0];\n const payload = Object.keys(rewardTokens)\n .map((gaugeAddress, gaugeIndex) => {\n const calls = [];\n for (let i = 0; i < rewardTokens[gaugeAddress].length; i++) {\n calls.push({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'reward_data',\n [rewardTokens[gaugeAddress][i]]\n ),\n });\n }\n startIndexes[gaugeIndex + 1] =\n startIndexes[gaugeIndex] + rewardTokens[gaugeAddress].length;\n return calls;\n })\n .flat();\n const [, res] = (await this.multicall.callStatic.aggregate(payload)) as [\n unknown,\n string[]\n ];\n const decoded = res.map(\n (r) => liquidityGaugeV5Interface.decodeFunctionResult('reward_data', r)[0]\n );\n\n const rewardData = Object.keys(rewardTokens).reduce(\n (p: { [key: string]: { [key: string]: RewardData } }, a, i) => {\n const start = startIndexes[i];\n const data = rewardTokens[a].reduce(\n (d: { [key: string]: RewardData }, t, x) => {\n d[t] ||= decoded[start + x] as RewardData;\n return d;\n },\n {}\n );\n p[a] ||= data;\n return p;\n },\n {}\n );\n\n return rewardData;\n }\n}\n","import { Findable } from '../types';\nimport {\n createGaugesClient,\n GaugesClient,\n SubgraphLiquidityGauge,\n} from '@/modules/subgraph/subgraph';\n\n/**\n * Access liquidity gauges indexed by subgraph.\n * Because we have ~100 gauges to save on repeated http calls we cache all results as `gauges` on an instance.\n * Balancer's subgraph URL: https://thegraph.com/hosted-service/subgraph/balancer-labs/balancer-gauges\n */\nexport class LiquidityGaugesSubgraphRepository\n implements Findable\n{\n private client: GaugesClient;\n public gauges: SubgraphLiquidityGauge[] = [];\n\n constructor(url: string) {\n this.client = createGaugesClient(url);\n }\n\n async fetch(): Promise {\n console.time('fetching liquidity gauges');\n const queryResult = await this.client.Pools({\n first: 1000,\n where: {\n preferentialGauge_not: null,\n },\n });\n const qauges = queryResult.pools.map((pool) => pool.preferentialGauge);\n // TODO: optionally convert subgraph type to sdk internal type\n this.gauges = qauges as SubgraphLiquidityGauge[];\n\n console.timeEnd('fetching liquidity gauges');\n return this.gauges;\n }\n\n async find(id: string): Promise {\n if (this.gauges.length == 0) {\n await this.fetch();\n }\n\n return this.gauges.find((gauge) => gauge.id == id);\n }\n\n async findBy(\n param: string,\n value: string\n ): Promise {\n if (this.gauges.length == 0) {\n await this.fetch();\n }\n\n if (param == 'id') {\n return this.find(value);\n } else if (param == 'poolId') {\n return this.gauges.find((gauge) => gauge.poolId == value);\n } else if (param == 'poolAddress') {\n return this.gauges.find((gauge) => gauge.poolAddress == value);\n } else {\n throw `search by ${param} not implemented`;\n }\n }\n}\n","import { GaugeControllerMulticallRepository } from '../gauge-controller/multicall';\nimport { LiquidityGaugesMulticallRepository, RewardData } from './multicall';\nimport { LiquidityGaugesSubgraphRepository } from './subgraph';\nimport { parseUnits } from '@ethersproject/units';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport type {\n Maybe,\n SubgraphLiquidityGauge,\n} from '@/modules/subgraph/subgraph';\nimport type { Findable } from '../types';\nimport type { Network } from '@/types';\nimport { Multicall } from '@/contracts';\n\nexport interface LiquidityGauge {\n id: string;\n address: string;\n name: string;\n poolId?: Maybe;\n poolAddress: string;\n totalSupply: number;\n workingSupply: number;\n relativeWeight: number;\n rewardTokens?: { [tokenAddress: string]: RewardData };\n claimableTokens?: { [tokenAddress: string]: BigNumber };\n balInflationRate?: number;\n}\n\nexport class LiquidityGaugeSubgraphRPCProvider\n implements Findable\n{\n gaugeController?: GaugeControllerMulticallRepository;\n multicall: LiquidityGaugesMulticallRepository;\n subgraph: LiquidityGaugesSubgraphRepository;\n workingSupplies: { [gaugeAddress: string]: number } = {};\n relativeWeights: { [gaugeAddress: string]: number } = {};\n inflationRates: { [gaugeAddress: string]: number } = {};\n rewardData: {\n [gaugeAddress: string]: { [tokenAddress: string]: RewardData };\n } = {};\n gauges?: Promise;\n\n constructor(\n subgraphUrl: string,\n multicall: Multicall,\n gaugeControllerAddress: string,\n private chainId: Network,\n gaugeControllerCheckpointerAddress?: string\n ) {\n if (gaugeControllerAddress) {\n this.gaugeController = new GaugeControllerMulticallRepository(\n multicall,\n gaugeControllerAddress,\n gaugeControllerCheckpointerAddress\n );\n }\n this.multicall = new LiquidityGaugesMulticallRepository(multicall, chainId);\n this.subgraph = new LiquidityGaugesSubgraphRepository(subgraphUrl);\n }\n\n async fetch(): Promise {\n const gauges: SubgraphLiquidityGauge[] = await this.subgraph.fetch();\n const gaugeAddresses = gauges.map((g) => g.id);\n if (this.chainId == 1) {\n console.time('Fetching multicall.getWorkingSupplies');\n this.workingSupplies = await this.multicall.getWorkingSupplies(\n gaugeAddresses\n );\n console.timeEnd('Fetching multicall.getWorkingSupplies');\n } else {\n // Filter out gauges that are not from the factory supporting inflation rate\n // Safe to remove this once all gauges are migrated to the new factory\n const oldFactories = [\n '0x3b8ca519122cdd8efb272b0d3085453404b25bd0', // Polygon\n '0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2', // Arbitrum\n '0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647', // Optimism\n '0x809b79b53f18e9bc08a961ed4678b901ac93213a', // Gnosis\n ];\n\n const childGaugeAddresses = gauges\n .filter((g) => !oldFactories.includes(g.factory.id.toLowerCase()))\n .map((g) => g.id);\n\n if (childGaugeAddresses.length > 0) {\n console.time('Fetching multicall.inflationRates');\n this.inflationRates = await this.multicall.getInflationRates(\n childGaugeAddresses\n );\n console.timeEnd('Fetching multicall.inflationRates');\n console.time('Fetching multicall.getWorkingSupplies');\n this.workingSupplies = await this.multicall.getWorkingSupplies(\n childGaugeAddresses\n );\n console.timeEnd('Fetching multicall.getWorkingSupplies');\n }\n }\n if (this.gaugeController) {\n console.time('Fetching gaugeController.getRelativeWeights');\n this.relativeWeights = await this.gaugeController.getRelativeWeights(\n gaugeAddresses\n );\n console.timeEnd('Fetching gaugeController.getRelativeWeights');\n }\n\n // Kept as a potential fallback for getting rewardData from RPC\n // this.rewardData = await this.multicall.getRewardData(\n // gaugeAddresses //,\n // // rewardTokens\n // );\n\n // Reward data was made available from subgraph, keeping it separate for potential RPC fallback\n this.rewardData = gauges.reduce(\n (r: { [key: string]: { [key: string]: RewardData } }, g) => {\n r[g.id] ||= g.tokens\n ? Object.fromEntries(\n g.tokens.map((t) => [\n t.id.split('-')[0],\n {\n distributor: '',\n last_update: BigNumber.from(0),\n integral: BigNumber.from(0),\n token: t.id.split('-')[0],\n decimals: t.decimals,\n rate: parseUnits(t.rate || '0', t.decimals),\n period_finish: BigNumber.from(\n (t.periodFinish as unknown as string) || '0'\n ),\n },\n ])\n )\n : {};\n\n return r;\n },\n {}\n );\n\n return gauges.map(this.compose.bind(this));\n }\n\n async find(id: string): Promise {\n if (!this.gauges) {\n this.gauges = this.fetch();\n }\n\n return (await this.gauges).find((g) => g.id == id);\n }\n\n async findBy(\n attribute: string,\n value: string\n ): Promise {\n if (!this.gauges) {\n this.gauges = this.fetch();\n }\n\n let gauge: LiquidityGauge | undefined;\n if (attribute == 'id') {\n return this.find(value);\n } else if (attribute == 'address') {\n return this.find(value);\n } else if (attribute == 'poolId') {\n gauge = (await this.gauges).find((g) => g.poolId == value);\n } else if (attribute == 'poolAddress') {\n gauge = (await this.gauges).find((g) => g.poolAddress == value);\n } else {\n throw `search by ${attribute} not implemented`;\n }\n\n return gauge;\n }\n\n private compose(subgraphGauge: SubgraphLiquidityGauge) {\n return {\n id: subgraphGauge.id,\n address: subgraphGauge.id,\n name: subgraphGauge.symbol,\n poolId: subgraphGauge.poolId,\n poolAddress: subgraphGauge.poolAddress,\n totalSupply: parseFloat(subgraphGauge.totalSupply),\n workingSupply: this.workingSupplies[subgraphGauge.id],\n relativeWeight: this.relativeWeights[subgraphGauge.id],\n rewardTokens: this.rewardData[subgraphGauge.id],\n balInflationRate: this.inflationRates[subgraphGauge.id],\n };\n }\n}\n","import axios from 'axios';\nimport { jsonToGraphQLQuery } from 'json-to-graphql-query';\n\nexport default class BalancerAPIClient {\n constructor(private readonly url: string, private readonly apiKey: string) {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public async get(query: unknown): Promise {\n try {\n const payload = this.toPayload(query);\n const { data } = await axios.post(this.url, payload, {\n headers: {\n 'x-api-key': this.apiKey,\n },\n });\n if (data.errors) {\n throw new Error(\n data.errors.map((error: Error) => error.message).join(',')\n );\n }\n return data.data;\n } catch (error) {\n console.error(error);\n throw error;\n }\n\n return [];\n }\n\n public toPayload(query: unknown): unknown {\n return JSON.stringify({ query: jsonToGraphQLQuery({ query }) });\n }\n}\n","import { Findable } from '../types';\nimport { PoolAttribute, PoolsRepositoryFetchOptions } from './types';\nimport { GraphQLQuery, Pool } from '@/types';\nimport BalancerAPIClient from '@/modules/api/balancer-api.client';\nimport {\n GraphQLArgsBuilder,\n BalancerAPIArgsFormatter,\n} from '@/lib/graphql/args-builder';\nimport { GraphQLArgs } from '@/lib/graphql/types';\n\ninterface PoolsBalancerAPIOptions {\n url: string;\n apiKey: string;\n query?: GraphQLQuery;\n}\n\nconst MAX_POOLS_PER_REQUEST = 1000;\nconst DEFAULT_SKIP = 0;\nconst DEFAULT_FIRST = 10;\nconst CHECK_TIMEOUT_SECONDS = 10;\nconst CHECK_INTERVAL_MS = 10;\nconst MAX_CHECKS = (CHECK_TIMEOUT_SECONDS * 1000) / CHECK_INTERVAL_MS;\n\nfunction timeout(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Access pools using the Balancer GraphQL Api.\n *\n * Balancer's API URL: https://api.balancer.fi/query/\n */\nexport class PoolsBalancerAPIRepository\n implements Findable\n{\n private client: BalancerAPIClient;\n public pools: Pool[] = [];\n public skip = 0; // Keep track of how many pools to skip on next fetch, so this functions similar to subgraph repository.\n public nextToken: string | undefined | null; // A token to pass to the next query to retrieve the next page of results. Undefined initially, null when there are no more results.\n private query: GraphQLQuery;\n private hasFetched = false;\n private isFetching = false;\n\n constructor(options: PoolsBalancerAPIOptions) {\n this.client = new BalancerAPIClient(options.url, options.apiKey);\n\n const defaultArgs: GraphQLArgs = {\n chainId: 1,\n orderBy: 'totalLiquidity',\n orderDirection: 'desc',\n where: {\n swapEnabled: {\n eq: true,\n },\n totalShares: {\n gt: 0.05,\n },\n },\n };\n\n const defaultAttributes = {\n id: true,\n address: true,\n };\n\n this.query = {\n args: Object.assign({}, options.query?.args || defaultArgs),\n attrs: Object.assign({}, options.query?.attrs || defaultAttributes),\n };\n\n // skip is not a valid argument for the Balancer API, it uses nextToken\n delete this.query.args.skip;\n }\n\n private fetchFromCache(first: number, skip: number): Pool[] {\n const pools = this.pools.slice(skip, first + skip);\n return pools;\n }\n\n async fetch(options?: PoolsRepositoryFetchOptions): Promise {\n const first = options?.first || DEFAULT_FIRST;\n const skip = options?.skip || DEFAULT_SKIP;\n\n if (!this.hasFetched) {\n this.fetchAll(options);\n }\n await this.awaitEnoughPoolsFetched(first, skip);\n return this.fetchFromCache(first, skip);\n }\n\n // Fetches all pools from the API in a loop and saves them to the cache.\n async fetchAll(options?: PoolsRepositoryFetchOptions): Promise {\n this.isFetching = true;\n this.hasFetched = true;\n\n if (this.nextToken) {\n this.query.args.nextToken = this.nextToken;\n }\n\n this.query.args.first = MAX_POOLS_PER_REQUEST;\n const formattedArgs = new GraphQLArgsBuilder(this.query.args).format(\n new BalancerAPIArgsFormatter()\n );\n\n const attrs = this.query.attrs;\n attrs.nextToken = true;\n\n const formattedQuery = {\n pools: {\n __args: formattedArgs,\n ...attrs,\n },\n };\n\n const apiResponse = await this.client.get(formattedQuery);\n const apiResponseData = apiResponse.pools;\n\n this.nextToken = apiResponseData.nextToken;\n this.pools = this.pools.concat(apiResponseData.pools.map(this.format));\n\n if (this.nextToken) return await this.fetchAll(options);\n\n this.isFetching = false;\n }\n\n // A function that waits until enough pools have been loaded into the cache\n // or fetching has finished. Used so that all pools can be fetched in the\n // background, while fetch returns the first results to the user quickly.\n async awaitEnoughPoolsFetched(first: number, skip: number): Promise {\n for (let totalChecks = 0; totalChecks < MAX_CHECKS; totalChecks++) {\n if (this.pools.length > first + skip) {\n return;\n }\n if (!this.isFetching) {\n return;\n }\n await timeout(CHECK_INTERVAL_MS);\n }\n\n return;\n }\n\n async find(id: string): Promise {\n if (this.pools.length == 0) {\n await this.fetch();\n }\n\n return this.findBy('id', id);\n }\n\n async findBy(param: PoolAttribute, value: string): Promise {\n if (this.pools.length == 0) {\n await this.fetch();\n }\n\n const pool = this.pools.find((pool) => pool[param] == value);\n if (pool) {\n return this.format(pool);\n }\n }\n\n /** Fixes any formatting issues from the subgraph\n * - GraphQL can't store a map so pool.apr.[rewardAprs/tokenAprs].breakdown\n * is JSON data that needs to be parsed so they match the Pool type correctly.\n */\n private format(pool: Pool): Pool {\n if (pool.apr?.rewardAprs.breakdown) {\n // GraphQL can't store this as a map so it's JSON that we must parse\n const rewardsBreakdown = JSON.parse(\n pool.apr?.rewardAprs.breakdown as unknown as string\n );\n pool.apr.rewardAprs.breakdown = rewardsBreakdown;\n }\n if (pool.apr?.tokenAprs.breakdown) {\n // GraphQL can't store this as a map so it's JSON that we must parse\n const tokenAprsBreakdown = JSON.parse(\n pool.apr?.tokenAprs.breakdown as unknown as string\n );\n pool.apr.tokenAprs.breakdown = tokenAprsBreakdown;\n }\n\n return pool;\n }\n}\n","import { Pool, PoolType, PoolToken, SubPool } from '@/.';\nimport {\n SubgraphPool,\n SubgraphPoolTokenFragment,\n SubgraphSubPoolFragment,\n SubgraphSubPoolTokenFragment,\n} from '@/modules/subgraph/subgraph';\n\ninterface SubgraphSubPoolToken extends SubgraphSubPoolTokenFragment {\n token?: SubgraphSubPoolMeta | null;\n}\n\ninterface SubgraphSubPoolMeta {\n latestUSDPrice?: string | null;\n pool?: SubgraphSubPool | null;\n}\n\ninterface SubgraphSubPool extends SubgraphSubPoolFragment {\n tokens: SubgraphSubPoolToken[];\n}\n\nexport const mapType = (subgraphPool: SubgraphPool, chainId: number): Pool => {\n return {\n id: subgraphPool.id,\n name: subgraphPool.name || '',\n address: subgraphPool.address,\n chainId: chainId,\n poolType: subgraphPool.poolType as PoolType,\n poolTypeVersion: subgraphPool.poolTypeVersion || 1,\n swapFee: subgraphPool.swapFee,\n swapEnabled: subgraphPool.swapEnabled,\n protocolYieldFeeCache: subgraphPool.protocolYieldFeeCache || '0.5', // Default protocol yield fee\n protocolSwapFeeCache: subgraphPool.protocolSwapFeeCache || '0.5', // Default protocol swap fee\n amp: subgraphPool.amp ?? undefined,\n owner: subgraphPool.owner ?? undefined,\n factory: subgraphPool.factory ?? undefined,\n symbol: subgraphPool.symbol ?? undefined,\n tokens: (subgraphPool.tokens || []).map(mapToken),\n tokensList: subgraphPool.tokensList,\n tokenAddresses: (subgraphPool.tokens || []).map((t) => t.address),\n totalLiquidity: subgraphPool.totalLiquidity,\n totalShares: subgraphPool.totalShares,\n totalSwapFee: subgraphPool.totalSwapFee,\n totalSwapVolume: subgraphPool.totalSwapVolume,\n priceRateProviders: subgraphPool.priceRateProviders ?? undefined,\n // onchain: subgraphPool.onchain,\n createTime: subgraphPool.createTime,\n mainIndex: subgraphPool.mainIndex ?? undefined,\n wrappedIndex: subgraphPool.wrappedIndex ?? undefined,\n // mainTokens: subgraphPool.mainTokens,\n // wrappedTokens: subgraphPool.wrappedTokens,\n // unwrappedTokens: subgraphPool.unwrappedTokens,\n // isNew: subgraphPool.isNew,\n // volumeSnapshot: subgraphPool.volumeSnapshot,\n // feesSnapshot: subgraphPool.???, // Approximated last 24h fees\n // boost: subgraphPool.boost,\n totalWeight: subgraphPool.totalWeight || '1',\n lowerTarget: subgraphPool.lowerTarget ?? '0',\n upperTarget: subgraphPool.upperTarget ?? '0',\n isInRecoveryMode: subgraphPool.isInRecoveryMode ?? false,\n isPaused: subgraphPool.isPaused ?? false,\n };\n};\n\nconst mapToken = (subgraphToken: SubgraphPoolTokenFragment): PoolToken => {\n const subPoolInfo = mapSubPools(\n // need to typecast as the fragment is 3 layers deep while the type is infinite levels deep\n subgraphToken.token as SubgraphSubPoolMeta\n );\n return {\n ...subgraphToken,\n isExemptFromYieldProtocolFee:\n subgraphToken.isExemptFromYieldProtocolFee || false,\n token: subPoolInfo,\n };\n};\n\nconst mapSubPools = (metadata: SubgraphSubPoolMeta) => {\n let subPool: SubPool | null = null;\n\n if (metadata.pool) {\n subPool = {\n id: metadata.pool.id,\n address: metadata.pool.address,\n totalShares: metadata.pool.totalShares,\n poolType: metadata.pool.poolType as PoolType,\n mainIndex: metadata.pool.mainIndex || 0,\n };\n\n if (metadata?.pool.tokens) {\n subPool.tokens = metadata.pool.tokens.map(mapSubPoolToken);\n }\n }\n\n return {\n pool: subPool,\n latestUSDPrice: metadata.latestUSDPrice || undefined,\n };\n};\n\nconst mapSubPoolToken = (token: SubgraphSubPoolToken) => {\n return {\n address: token.address,\n decimals: token.decimals,\n symbol: token.symbol,\n balance: token.balance,\n priceRate: token.priceRate,\n weight: token.weight,\n isExemptFromYieldProtocolFee:\n token.isExemptFromYieldProtocolFee || undefined,\n token: token.token ? mapSubPools(token.token) : undefined,\n };\n};\n","import { Findable, Searchable } from '../types';\nimport {\n createSubgraphClient,\n SubgraphClient,\n Pool_OrderBy,\n OrderDirection,\n} from '@/modules/subgraph/subgraph';\nimport {\n GraphQLArgsBuilder,\n SubgraphArgsFormatter,\n} from '@/lib/graphql/args-builder';\nimport { GraphQLArgs } from '@/lib/graphql/types';\nimport { PoolAttribute, PoolsRepositoryFetchOptions } from './types';\nimport { GraphQLQuery, Pool } from '@/types';\nimport { Network } from '@/lib/constants/network';\nimport { PoolsQueryVariables } from '../../subgraph/subgraph';\nimport { mapType } from './subgraph-helpers';\nimport { Logger } from '@/lib/utils/logger';\n\ninterface PoolsSubgraphRepositoryOptions {\n url: string;\n chainId: Network;\n blockHeight?: () => Promise;\n query?: GraphQLQuery;\n}\n\n/**\n * Access pools using generated subgraph client.\n *\n * Balancer's subgraph URL: https://thegraph.com/hosted-service/subgraph/balancer-labs/balancer-v2\n */\nexport class PoolsSubgraphRepository\n implements Findable, Searchable\n{\n private client: SubgraphClient;\n private chainId: Network;\n private pools?: Promise;\n public skip = 0;\n private blockHeight: undefined | (() => Promise);\n private query: GraphQLQuery;\n\n /**\n * Repository with optional lazy loaded blockHeight\n *\n * @param url subgraph URL\n * @param chainId current network, needed for L2s logic\n * @param blockHeight lazy loading blockHeigh resolver\n */\n constructor(options: PoolsSubgraphRepositoryOptions) {\n this.client = createSubgraphClient(options.url);\n this.blockHeight = options.blockHeight;\n this.chainId = options.chainId;\n\n const defaultArgs: GraphQLArgs = {\n orderBy: Pool_OrderBy.TotalLiquidity,\n orderDirection: OrderDirection.Desc,\n where: {\n totalShares: {\n gt: 0.000000000001,\n },\n },\n };\n\n const args = Object.assign({}, options.query?.args || defaultArgs);\n const attrs = Object.assign({}, options.query?.attrs || {});\n\n this.query = {\n args,\n attrs,\n };\n }\n\n /**\n * We need a list of all the pools, for calculating APRs (nested pools), and for SOR (path finding).\n * All the pools are fetched on page load and cachced for speedy lookups.\n *\n * @returns Promise resolving to pools list\n */\n private async fetchAllPools(): Promise {\n const logger = Logger.getInstance();\n logger.time('fetching pools');\n\n if (this.blockHeight) {\n this.query.args.block = { number: await this.blockHeight() };\n }\n const formattedQuery = new GraphQLArgsBuilder(this.query.args).format(\n new SubgraphArgsFormatter()\n ) as PoolsQueryVariables;\n\n const { pool0, pool1000, pool2000 } = await this.client.AllPools(\n formattedQuery\n );\n logger.timeEnd('fetching pools');\n\n return [...pool0, ...pool1000, ...pool2000].map((pool) =>\n mapType(pool, this.chainId)\n );\n }\n\n async fetch(options?: PoolsRepositoryFetchOptions): Promise {\n const logger = Logger.getInstance();\n logger.time('fetching pools');\n if (options?.skip) {\n this.query.args.skip = options.skip;\n }\n if (this.blockHeight) {\n this.query.args.block = { number: await this.blockHeight() };\n }\n\n this.query.args.first = options?.first || this.query.args.first || 1000;\n\n const formattedQuery = new GraphQLArgsBuilder(this.query.args).format(\n new SubgraphArgsFormatter()\n ) as PoolsQueryVariables;\n\n const { pools } = await this.client.Pools(formattedQuery);\n\n this.skip = (options?.skip || 0) + pools.length;\n logger.timeEnd('fetching pools');\n\n return pools.map((pool) => mapType(pool, this.chainId));\n }\n\n async find(id: string): Promise {\n return await this.findBy('id', id);\n }\n\n async findBy(param: PoolAttribute, value: string): Promise {\n if (!this.pools) {\n this.pools = this.fetchAllPools();\n }\n\n return (await this.pools).find((pool) => pool[param] == value);\n\n // TODO: @Nma - Fetching pools outside of default query is causing a lot of requests\n // on a frontend, because results aren't cached anywhere.\n // For fetching pools directly from subgraph with custom queries please use the client not this repository.\n // Code below kept for reference, to be removed later.\n //\n // if (this.pools) {\n // return (await this.pools).find((p) => p[param] === value);\n // }\n // const { pools } = await this.client.Pools({\n // where: {\n // [param]: value,\n // swapEnabled: true,\n // totalShares_gt: '0.000000000001',\n // },\n // block: await this.block(),\n // });\n // const poolsTab: Pool[] = pools.map(this.mapType.bind(this));\n // return poolsTab.length > 0 ? poolsTab[0] : undefined;\n }\n\n async all(): Promise {\n if (!this.pools) {\n this.pools = this.fetchAllPools();\n }\n return this.pools;\n }\n\n async block(): Promise<{ number: number | undefined } | undefined> {\n return this.blockHeight ? { number: await this.blockHeight() } : undefined;\n }\n\n async where(filter: (pool: Pool) => boolean): Promise {\n if (!this.pools) {\n this.pools = this.fetchAllPools();\n }\n\n return (await this.pools).filter(filter);\n }\n}\n","import { Cacheable, Findable, Searchable } from '../types';\nimport { Provider } from '@ethersproject/providers';\nimport { PoolAttribute, PoolsRepositoryFetchOptions } from './types';\nimport { Pool } from '@/types';\nimport { getOnChainBalances } from '../../../modules/sor/pool-data/onChainData3';\nimport { PoolsSubgraphRepository } from './subgraph';\nimport { Logger } from '@/lib/utils/logger';\n\ninterface PoolsSubgraphOnChainRepositoryOptions {\n provider: Provider;\n multicall: string;\n vault: string;\n}\n\n/**\n * Access pools using generated subgraph client and multicall.\n */\nexport class PoolsSubgraphOnChainRepository\n implements Findable, Searchable, Cacheable\n{\n private provider: Provider;\n private pools?: Promise;\n private multicall: string;\n private vault: string;\n public skip = 0;\n\n /**\n * Repository using multicall to get onchain data.\n *\n * @param poolsSubgraph subgraph repository\n * @param options options containing provider, multicall and vault addresses\n */\n constructor(\n private poolsSubgraph: PoolsSubgraphRepository,\n options: PoolsSubgraphOnChainRepositoryOptions,\n private readonly poolsToIgnore: string[] | undefined,\n private batchSize?: number\n ) {\n this.provider = options.provider;\n this.multicall = options.multicall;\n this.vault = options.vault;\n }\n\n private filterPools(pools: Pool[]): Pool[] {\n const filteredPools = pools.filter((p) => {\n if (p.swapEnabled === false) return false;\n if (!this.poolsToIgnore) return true;\n const index = this.poolsToIgnore.findIndex(\n (id) => id.toLowerCase() === p.id.toLowerCase()\n );\n return index === -1;\n });\n return filteredPools;\n }\n\n /**\n * We need a list of all the pools, for calculating APRs (nested pools), and for SOR (path finding).\n * All the pools are fetched on page load and cachced for speedy lookups.\n *\n * @returns Promise resolving to pools list\n */\n private async fetchDefault(): Promise {\n const pools = await this.poolsSubgraph.all();\n const filteredPools = this.filterPools(pools);\n\n const logger = Logger.getInstance();\n logger.time(`fetching onchain ${filteredPools.length} pools`);\n\n const onchainPools = await getOnChainBalances(\n filteredPools,\n this.multicall,\n this.vault,\n this.provider,\n this.batchSize\n );\n\n logger.timeEnd(`fetching onchain ${filteredPools.length} pools`);\n\n return onchainPools;\n }\n\n async fetch(options?: PoolsRepositoryFetchOptions): Promise {\n const pools = await this.poolsSubgraph.fetch(options);\n const filteredPools = this.filterPools(pools);\n\n const logger = Logger.getInstance();\n logger.time(`fetching onchain ${filteredPools.length} pools`);\n\n const onchainPools = await getOnChainBalances(\n filteredPools,\n this.multicall,\n this.vault,\n this.provider,\n this.batchSize\n );\n\n logger.timeEnd(`fetching onchain ${filteredPools.length} pools`);\n\n return onchainPools;\n }\n\n async find(id: string, forceRefresh = false): Promise {\n return await this.findBy('id', id, forceRefresh);\n }\n\n async findBy(\n param: PoolAttribute,\n value: string,\n forceRefresh = false\n ): Promise {\n if (!this.pools || forceRefresh) {\n this.pools = this.fetchDefault();\n }\n\n return (await this.pools).find((pool) => pool[param] == value);\n }\n\n async all(): Promise {\n if (!this.pools) {\n this.pools = this.fetchDefault();\n }\n return this.pools;\n }\n\n async where(filter: (pool: Pool) => boolean): Promise {\n if (!this.pools) {\n this.pools = this.fetchDefault();\n }\n\n return (await this.pools).filter(filter);\n }\n\n async refresh(pool: Pool): Promise {\n const onchainPool = await getOnChainBalances(\n [pool],\n this.multicall,\n this.vault,\n this.provider\n );\n\n // If the pool is already cached, replace it with the new one\n if (this.pools) {\n const index = (await this.pools).findIndex(\n (p) => p.address === pool.address\n );\n if (index !== -1) {\n this.pools = Promise.resolve([\n ...(await this.pools).splice(index, 1),\n onchainPool[0],\n ]);\n }\n }\n\n return onchainPool[0];\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { GaugesSubgraphRepository } from '@/modules/subgraph/repository';\nimport { PoolGauges, PoolGaugesAttributes } from './types';\n\nexport class PoolGaugesRepository extends GaugesSubgraphRepository<\n PoolGauges,\n PoolGaugesAttributes\n> {\n async query(args: any): Promise {\n if (!args.block && this.blockHeight)\n args.block = { number: await this.blockHeight() };\n\n const { pools } = await this.client.PoolGauges(args);\n return pools.map(this.mapType);\n }\n\n mapType(fragment: any): PoolGauges {\n return fragment as PoolGauges;\n }\n}\n","export enum PoolJoinExitAttributes {\n Pool = 'pool',\n Sender = 'sender',\n}\n\nexport interface PoolJoinExit {\n id: string;\n userAddress: string;\n poolId: string;\n timestamp: number;\n type: string;\n amounts: string[];\n tokens: string[];\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { PoolJoinExit, PoolJoinExitAttributes } from './types';\nimport { BalancerSubgraphRepository } from '@/modules/subgraph/repository';\nimport {\n JoinExit_OrderBy,\n OrderDirection,\n SubgraphJoinExitFragment,\n} from '@/modules/subgraph/generated/balancer-subgraph-types';\n\nexport class PoolJoinExitRepository extends BalancerSubgraphRepository<\n PoolJoinExit,\n PoolJoinExitAttributes\n> {\n async query(args: any): Promise {\n if (!args.orderBy) args.orderBy = JoinExit_OrderBy.Timestamp;\n if (!args.orderDirection) args.orderDirection = OrderDirection.Asc;\n if (!args.block && this.blockHeight)\n args.block = { number: await this.blockHeight() };\n\n const { joinExits } = await this.client.JoinExits(args);\n return joinExits.map(this.mapType);\n }\n\n mapType(item: SubgraphJoinExitFragment): PoolJoinExit {\n return {\n id: item.id,\n userAddress: item.user.id,\n poolId: item.pool.id,\n timestamp: item.timestamp,\n type: item.type,\n amounts: item.amounts,\n tokens: item.pool.tokensList,\n };\n }\n\n async findByUser(\n sender: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(PoolJoinExitAttributes.Sender, sender, first, skip);\n }\n\n async findJoins(sender: string, pool: string): Promise {\n return this.query({ where: { sender, pool, type: 'Join' } });\n }\n\n async findExits(sender: string, pool: string): Promise {\n return this.query({ where: { sender, pool, type: 'Exit' } });\n }\n\n async findByPool(\n poolId: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(PoolJoinExitAttributes.Pool, poolId, first, skip);\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { PoolShare, PoolShareAttributes } from './types';\nimport { BalancerSubgraphRepository } from '@/modules/subgraph/repository';\nimport {\n SubgraphPoolShareFragment,\n PoolShare_OrderBy,\n OrderDirection,\n} from '@/modules/subgraph/generated/balancer-subgraph-types';\n\nexport class PoolSharesRepository extends BalancerSubgraphRepository<\n PoolShare,\n PoolShareAttributes\n> {\n async query(args: any): Promise {\n if (!args.orderBy) args.orderBy = PoolShare_OrderBy.Balance;\n if (!args.orderDirection) args.orderDirection = OrderDirection.Desc;\n if (!args.block && this.blockHeight)\n args.block = { number: await this.blockHeight() };\n\n const { poolShares } = await this.client.PoolShares(args);\n return poolShares.map(this.mapType);\n }\n\n mapType(subgraphPoolShare: SubgraphPoolShareFragment): PoolShare {\n return {\n id: subgraphPoolShare.id,\n userAddress: subgraphPoolShare.userAddress.id,\n poolId: subgraphPoolShare.poolId.id,\n balance: subgraphPoolShare.balance,\n };\n }\n\n async findByUser(\n userAddress: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(\n PoolShareAttributes.UserAddress,\n userAddress,\n first,\n skip\n );\n }\n\n async findByPool(\n poolId: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(PoolShareAttributes.PoolId, poolId, first, skip);\n }\n}\n","import type { Findable, Token } from '@/types';\nimport type { TokenAttribute } from './types';\n\nexport class StaticTokenProvider implements Findable {\n constructor(private tokens: Token[]) {}\n\n async find(address: string): Promise {\n return this.tokens.find((token) => {\n return token.address.toLowerCase() === address.toLowerCase();\n });\n }\n\n async findBy(\n attribute: TokenAttribute,\n value: string\n ): Promise {\n return this.tokens.find((token) => {\n return token[attribute] === value;\n });\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport {\n CoingeckoConfig,\n Findable,\n Network,\n Price,\n TokenPrices,\n} from '@/types';\nimport axios, { AxiosError } from 'axios';\nimport { TOKENS } from '@/lib/constants/tokens';\nimport { Debouncer, tokenAddressForPricing } from '@/lib/utils';\nimport {\n getCoingeckoApiBaseUrl,\n getCoingeckoApiKeyHeaderName,\n} from '@/lib/utils/coingecko-api';\n\n/**\n * Simple coingecko price source implementation. Configurable by network and token addresses.\n */\nexport class CoingeckoPriceRepository implements Findable {\n prices: { [key: string]: Promise } = {};\n nativePrice?: Promise;\n private readonly url: string;\n private readonly urlNative: string;\n private readonly coingeckoApiKeyHeaderName: string;\n baseTokenAddresses: string[];\n debouncer: Debouncer;\n apiKey?: string;\n\n constructor(\n tokenAddresses: string[],\n private chainId: Network = 1,\n coingecko?: CoingeckoConfig\n ) {\n this.baseTokenAddresses = tokenAddresses.map(tokenAddressForPricing);\n this.url = `${getCoingeckoApiBaseUrl(\n coingecko?.isDemoApiKey\n )}simple/token_price/${this.platform(chainId)}?vs_currencies=usd,eth`;\n this.urlNative = `${getCoingeckoApiBaseUrl(\n coingecko?.isDemoApiKey\n )}simple/price/?vs_currencies=eth,usd&ids=`;\n this.coingeckoApiKeyHeaderName = getCoingeckoApiKeyHeaderName(\n coingecko?.isDemoApiKey\n );\n this.apiKey = coingecko?.coingeckoApiKey;\n this.debouncer = new Debouncer(\n this.fetch.bind(this),\n 200,\n coingecko?.tokensPerPriceRequest ?? 10\n );\n }\n\n private async fetch(\n addresses: string[],\n { signal }: { signal?: AbortSignal } = {}\n ): Promise {\n try {\n const { data } = await axios.get(\n `${this.url}&contract_addresses=${addresses.join(',')}`,\n {\n signal,\n headers: {\n [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '',\n },\n }\n );\n return data;\n } catch (error) {\n const message = ['Error fetching token prices from coingecko'];\n if ((error as AxiosError).isAxiosError) {\n if ((error as AxiosError).response?.status !== undefined) {\n message.push(`with status ${(error as AxiosError).response?.status}`);\n }\n } else {\n message.push(error as string);\n }\n return Promise.reject(message.join(' '));\n }\n }\n\n private fetchNative({\n signal,\n }: { signal?: AbortSignal } = {}): Promise {\n console.time(`fetching coingecko for native token`);\n enum Assets {\n ETH = 'ethereum',\n MATIC = 'matic-network',\n XDAI = 'xdai',\n }\n let assetId: Assets = Assets.ETH;\n if (this.chainId === 137) assetId = Assets.MATIC;\n if (this.chainId === 100) assetId = Assets.XDAI;\n return axios\n .get<{ [key in Assets]: Price }>(`${this.urlNative}${assetId}`, {\n signal,\n headers: {\n [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '',\n },\n })\n .then(({ data }) => {\n return data[assetId];\n })\n .catch((error) => {\n const message = ['Error fetching native token from coingecko'];\n if (error.isAxiosError) {\n if (error.response?.status) {\n message.push(`with status ${error.response.status}`);\n }\n } else {\n message.push(error);\n }\n return Promise.reject(message.join(' '));\n })\n .finally(() => {\n console.timeEnd(`fetching coingecko for native token`);\n });\n }\n\n find(inputAddress: string): Promise {\n const address = tokenAddressForPricing(inputAddress, this.chainId);\n if (!this.prices[address]) {\n // Make initial call with all the tokens we want to preload\n if (Object.keys(this.prices).length === 0) {\n for (const baseAddress of this.baseTokenAddresses) {\n this.prices[baseAddress] = this.debouncer\n .fetch(baseAddress)\n .then((prices) => prices[baseAddress]);\n }\n }\n\n // Handle native asset special case\n if (\n address === TOKENS(this.chainId).Addresses.nativeAsset.toLowerCase()\n ) {\n if (!this.nativePrice) {\n this.prices[address] = this.fetchNative();\n }\n\n return this.prices[address];\n }\n\n this.prices[address] = this.debouncer\n .fetch(address)\n .then((prices) => prices[address]);\n }\n\n return this.prices[address];\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute != 'address') {\n return undefined;\n }\n\n return this.find(value);\n }\n\n private platform(chainId: number): string {\n switch (chainId) {\n case 1:\n case 5:\n case 42:\n case 31337:\n return 'ethereum';\n case 100:\n return 'xdai';\n case 137:\n return 'polygon-pos';\n case 250:\n return 'fantom';\n case 1101:\n return 'polygon-zkevm';\n case 8453:\n return 'base';\n case 42161:\n return 'arbitrum-one';\n case 43114:\n return 'avalanche';\n }\n\n return '2';\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport {\n Price,\n Findable,\n TokenPrices,\n Network,\n HistoricalPrices,\n CoingeckoConfig,\n} from '@/types';\nimport axios, { AxiosError } from 'axios';\nimport { tokenAddressForPricing } from '@/lib/utils';\nimport {\n getCoingeckoApiBaseUrl,\n getCoingeckoApiKeyHeaderName,\n} from '@/lib/utils/coingecko-api';\n\nconst HOUR = 60 * 60;\n\n/**\n * Simple coingecko price source implementation. Configurable by network and token addresses.\n */\nexport class CoingeckoHistoricalPriceRepository implements Findable {\n prices: TokenPrices = {};\n nativePrice?: Promise;\n private readonly urlBase: string;\n private readonly apiKey?: string;\n private readonly coingeckoApiKeyHeaderName: string;\n constructor(private chainId: Network = 1, coingecko?: CoingeckoConfig) {\n this.urlBase = `${getCoingeckoApiBaseUrl(\n coingecko?.isDemoApiKey\n )}coins/${this.platform(\n chainId\n )}/contract/%TOKEN_ADDRESS%/market_chart/range?vs_currency=usd`;\n this.apiKey = coingecko?.coingeckoApiKey;\n this.coingeckoApiKeyHeaderName = getCoingeckoApiKeyHeaderName(\n coingecko?.isDemoApiKey\n );\n }\n\n private async fetch(\n address: string,\n timestamp: number,\n { signal }: { signal?: AbortSignal } = {}\n ): Promise {\n const url = this.urlRange(address, timestamp);\n console.time(`fetching coingecko historical for ${address}`);\n try {\n const { data } = await axios.get(url, {\n signal,\n headers: { [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '' },\n });\n console.timeEnd(`fetching coingecko historical for ${address}`);\n console.log(data);\n return data;\n } catch (error) {\n console.timeEnd(`fetching coingecko historical for ${address}`);\n if ((error as AxiosError).isAxiosError) {\n throw new Error(\n 'Error fetching historical token prices from coingecko - ' +\n (error as AxiosError).message +\n ' - ' +\n (error as AxiosError).response?.statusText\n );\n }\n throw new Error('Unknown Error: ' + error);\n }\n }\n\n /* eslint-disable @typescript-eslint/no-unused-vars */\n async find(address: string): Promise {\n throw `Historic price requires point-in-time timestamp, please use findBy(address, timestamp)`;\n }\n\n async findBy(\n inputAddress: string,\n timestamp: number\n ): Promise {\n const address = tokenAddressForPricing(inputAddress, this.chainId);\n const response = await this.fetch(address, timestamp);\n\n return {\n usd: `${response.prices[0][1]}`,\n };\n }\n\n private platform(chainId: number): string {\n switch (chainId) {\n case 1:\n case 5:\n case 42:\n case 31337:\n return 'ethereum';\n case 137:\n return 'polygon-pos';\n case 42161:\n return 'arbitrum-one';\n case 100:\n return 'xdai';\n }\n\n return '2';\n }\n\n private urlRange(address: string, timestamp: number): string {\n const range: { from: number; to: number } = {\n from: timestamp - HOUR,\n to: timestamp + HOUR,\n };\n return `${this.urlBase.replace('%TOKEN_ADDRESS%', address)}&from=${\n range.from\n }&to=${range.to}`;\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { Price, Findable, TokenPrices, Network } from '@/types';\nimport axios from 'axios';\nimport { Debouncer, tokenAddressForPricing } from '@/lib/utils';\n\ninterface SubgraphPricesResponse {\n data: {\n tokens: [\n {\n address: string;\n latestUSDPrice?: string;\n }\n ];\n };\n}\n\nexport class SubgraphPriceRepository implements Findable {\n prices: { [key: string]: Promise } = {};\n debouncer: Debouncer;\n\n constructor(private subgraphUrl: string, private chainId: Network = 1) {\n this.debouncer = new Debouncer(\n this.fetch.bind(this),\n 200\n );\n }\n\n private async fetch(\n addresses: string[],\n { signal }: { signal?: AbortSignal } = {}\n ): Promise {\n console.time(`fetching subgraph prices for ${addresses.length} tokens`);\n return axios\n .post(\n this.subgraphUrl,\n {\n variables: { addresses },\n query: `query($addresses: [String!]) {\n tokens(\n where: {\n id_in: $addresses\n }\n ) {\n address\n latestUSDPrice\n }\n }`,\n },\n { signal }\n )\n .then((response) => response.data.data)\n .then(({ tokens }) =>\n Object.fromEntries(\n tokens.map((token) => [\n token.address,\n { usd: token.latestUSDPrice || undefined },\n ])\n )\n )\n .finally(() => {\n console.timeEnd(\n `fetching subgraph prices for ${addresses.length} tokens`\n );\n });\n }\n\n async find(inputAddress: string): Promise {\n const address = tokenAddressForPricing(inputAddress, this.chainId);\n if (!this.prices[address]) {\n this.prices[address] = this.debouncer\n .fetch(address)\n .then((prices) => prices[address]);\n }\n\n return this.prices[address];\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute != 'address') {\n return undefined;\n }\n\n return this.find(value);\n }\n}\n","import type { Findable, Price } from '@/types';\nimport { IAaveRates } from './aave-rates';\nimport { Logger } from '@/lib/utils/logger';\n\nexport class TokenPriceProvider implements Findable {\n constructor(\n private coingeckoRepository: Findable,\n private subgraphRepository: Findable,\n private aaveRates: IAaveRates\n ) {}\n\n async find(address: string): Promise {\n let price;\n try {\n price = await this.coingeckoRepository.find(address);\n if (!price?.usd) {\n throw new Error('Price not found');\n }\n } catch (err) {\n const logger = Logger.getInstance();\n logger.warn(err as string);\n price = await this.subgraphRepository.find(address);\n }\n const rate = (await this.aaveRates.getRate(address)) || 1;\n if (price && price.usd) {\n return {\n ...price,\n usd: (parseFloat(price.usd) * rate).toString(),\n };\n } else {\n return price;\n }\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute === 'address') {\n return this.find(value);\n }\n throw `Token price search by ${attribute} not implemented`;\n }\n}\n","import type { Findable, Price } from '@/types';\nimport { IAaveRates } from './aave-rates';\n\nexport class HistoricalPriceProvider implements Findable {\n constructor(\n private coingeckoRepository: Findable,\n private aaveRates: IAaveRates\n ) {}\n\n /**\n * get the historical price at time of call\n *\n * @param address the token address\n */\n async find(address: string): Promise {\n return this.findBy(address, Math.floor(Date.now() / 1000));\n }\n\n /**\n * get the historical price at the given timestamp.\n *\n * @param address the token address\n * @param timestamp the UNIX timestamp\n * @private\n */\n async findBy(address: string, timestamp: number): Promise {\n const price = await this.coingeckoRepository.findBy(address, timestamp);\n const rate = (await this.aaveRates.getRate(address)) || 1;\n if (price && price.usd) {\n return {\n ...price,\n usd: (parseFloat(price.usd) * rate).toString(),\n };\n } else {\n return price;\n }\n }\n}\n","import { Contract } from '@ethersproject/contracts';\nimport { Provider } from '@ethersproject/providers';\n\nconst FeeDistributorAbi = [\n 'function claimTokens(address user, address[] tokens) returns (uint256[])',\n 'function claimToken(address user, address token) returns (uint256)',\n];\n\nexport const FeeDistributor = (address: string, provider: Provider): Contract =>\n new Contract(address, FeeDistributorAbi, provider);\n","import { TokenBalance } from '@/modules/claims/ClaimService';\nimport { FeeDistributor } from '@/modules/contracts/implementations/feeDistributor';\nimport { Multicall } from '@/contracts';\nimport { Interface } from '@ethersproject/abi';\nimport { getAddress } from '@ethersproject/address';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { Contract } from '@ethersproject/contracts';\nimport { Provider } from '@ethersproject/providers';\nimport { formatUnits } from '@ethersproject/units';\n\nexport interface FeeDistributorData {\n balAmount: number;\n bbAUsdAmount: number;\n veBalSupply: number;\n bbAUsdPrice: number;\n balAddress: string;\n}\n\nexport interface BaseFeeDistributor {\n multicallData: (ts: number) => Promise;\n getClaimableBalances(\n userAddress: string,\n claimableTokens: string[]\n ): Promise;\n claimBalances(userAddress: string, claimableTokens: string[]): string;\n}\n\nconst feeDistributorInterface = new Interface([\n 'function getTokensDistributedInWeek(address token, uint timestamp) view returns (uint)',\n 'function claimTokens(address user, address[] tokens) returns (uint256[])',\n 'function claimToken(address user, address token) returns (uint256)',\n]);\n\nconst veBalInterface = new Interface([\n 'function totalSupply() view returns (uint)',\n]);\n\n// const bbAUsdInterface = new Interface([\n// 'function getRate() view returns (uint)',\n// ]);\n\nexport class FeeDistributorRepository implements BaseFeeDistributor {\n feeDistributor: Contract;\n data?: FeeDistributorData;\n\n constructor(\n private multicall: Multicall,\n private feeDistributorAddress: string,\n private balAddress: string,\n private veBalAddress: string,\n private bbAUsdAddress: string,\n provider: Provider\n ) {\n this.feeDistributor = FeeDistributor(feeDistributorAddress, provider);\n }\n\n async fetch(timestamp: number): Promise {\n const previousWeek = this.getPreviousWeek(timestamp);\n const payload = [\n {\n target: this.feeDistributorAddress,\n callData: feeDistributorInterface.encodeFunctionData(\n 'getTokensDistributedInWeek',\n [getAddress(this.balAddress), previousWeek]\n ),\n },\n {\n target: this.feeDistributorAddress,\n callData: feeDistributorInterface.encodeFunctionData(\n 'getTokensDistributedInWeek',\n [getAddress(this.bbAUsdAddress), previousWeek]\n ),\n },\n {\n target: this.veBalAddress,\n callData: veBalInterface.encodeFunctionData('totalSupply', []),\n },\n // Removed while wrappers are broken\n // {\n // target: this.bbAUsdAddress,\n // callData: bbAUsdInterface.encodeFunctionData('getRate', []),\n // },\n ];\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const data = {\n balAmount: parseFloat(formatUnits(res[0], 18)),\n bbAUsdAmount: parseFloat(formatUnits(res[1], 18)),\n veBalSupply: parseFloat(formatUnits(res[2], 18)),\n // bbAUsdPrice: parseFloat(formatUnits(res[3], 18)),\n bbAUsdPrice: parseFloat('1.0'),\n balAddress: this.balAddress,\n };\n\n return data;\n }\n\n async multicallData(timestamp: number): Promise {\n if (!this.data) {\n this.data = await this.fetch(timestamp);\n }\n\n return this.data;\n }\n\n getPreviousWeek(fromTimestamp: number): number {\n const weeksToGoBack = 1;\n const midnight = new Date(fromTimestamp);\n midnight.setUTCHours(0);\n midnight.setUTCMinutes(0);\n midnight.setUTCSeconds(0);\n midnight.setUTCMilliseconds(0);\n\n let daysSinceThursday = midnight.getUTCDay() - 4;\n if (daysSinceThursday < 0) daysSinceThursday += 7;\n\n daysSinceThursday = daysSinceThursday + weeksToGoBack * 7;\n\n return Math.floor(midnight.getTime() / 1000) - daysSinceThursday * 86400;\n }\n\n async getClaimableBalances(\n userAddress: string,\n claimableTokens: string[]\n ): Promise {\n try {\n const amounts: BigNumber[] =\n await this.feeDistributor.callStatic.claimTokens(\n userAddress,\n claimableTokens\n );\n return this.extractTokenBalance(claimableTokens, amounts);\n } catch (e) {\n return {};\n }\n }\n\n claimBalances(userAddress: string, claimableTokens: string[]): string {\n return feeDistributorInterface.encodeFunctionData('claimTokens', [\n userAddress,\n claimableTokens,\n ]);\n }\n\n extractTokenBalance(\n claimableTokens: string[],\n amounts: (BigNumber | undefined | null)[]\n ): TokenBalance {\n return claimableTokens.reduce((tokens: TokenBalance, token, index) => {\n tokens[token] = (amounts[index] as BigNumber) ?? BigNumber.from(0);\n return tokens;\n }, {});\n }\n}\n","import { Interface } from '@ethersproject/abi';\nimport { Provider } from '@ethersproject/providers';\nimport { Contract } from '@ethersproject/contracts';\nimport { formatUnits } from '@ethersproject/units';\nimport { Findable } from '../types';\n\nconst vaultInterface = new Interface([\n 'function getProtocolFeesCollector() view returns (address)',\n]);\n\nconst protocolFeesCollectorInterface = new Interface([\n 'function getSwapFeePercentage() view returns (uint)',\n]);\n\n// Using singleton here, so subsequent calls will return the same promise\nlet swapFeePercentagePromise: Promise;\n\nexport class FeeCollectorRepository implements Findable {\n vault: Contract;\n swapFeePercentage?: number;\n\n constructor(vaultAddress: string, private provider: Provider) {\n this.vault = new Contract(vaultAddress, vaultInterface, this.provider);\n }\n\n async fetch(): Promise {\n const address = (await this.vault.getProtocolFeesCollector()) as string;\n\n const collector = new Contract(\n address,\n protocolFeesCollectorInterface,\n this.provider\n );\n const fees = (await collector.getSwapFeePercentage()) as string;\n\n return parseFloat(formatUnits(fees, 18));\n }\n\n async find(): Promise {\n if (!swapFeePercentagePromise) {\n swapFeePercentagePromise = this.fetch();\n }\n this.swapFeePercentage = await swapFeePercentagePromise;\n\n return this.swapFeePercentage;\n }\n\n async findBy(): Promise {\n return this.find();\n }\n}\n","// 0x97207B095e4D5C9a6e4cfbfcd2C3358E03B90c4A\n\nimport { Interface } from '@ethersproject/abi';\nimport { formatUnits } from '@ethersproject/units';\nimport { Multicall } from '@/contracts';\n\nconst iProtocolFeePercentagesProvider = new Interface([\n 'function getSwapFeePercentage() view returns (uint)',\n]);\n\nexport interface ProtocolFees {\n swapFee: number;\n yieldFee: number;\n}\n\n// Using singleton here, so subsequent calls will return the same promise\nlet feesPromise: Promise;\n\nexport class ProtocolFeesProvider {\n protocolFees?: ProtocolFees;\n\n constructor(\n private multicall: Multicall,\n private protocolFeePercentagesProviderAddress: string\n ) {}\n\n private async fetch(): Promise {\n const payload = [\n {\n target: this.protocolFeePercentagesProviderAddress,\n callData: iProtocolFeePercentagesProvider.encodeFunctionData(\n 'getFeeTypePercentage',\n [0]\n ),\n },\n {\n target: this.protocolFeePercentagesProviderAddress,\n callData: iProtocolFeePercentagesProvider.encodeFunctionData(\n 'getFeeTypePercentage',\n [2]\n ),\n },\n ];\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const fees = {\n swapFee: parseFloat(formatUnits(res[0], 18)),\n yieldFee: parseFloat(formatUnits(res[2], 18)),\n };\n\n return fees;\n }\n\n async getFees(): Promise {\n if (!feesPromise) {\n feesPromise = this.fetch();\n }\n this.protocolFees = await feesPromise;\n\n return this.protocolFees;\n }\n}\n","import axios from 'axios';\nimport { Findable } from '@/types';\nimport { Logger } from '@/lib/utils/logger';\n\nexport class TokenYieldsRepository implements Findable {\n private yields?: Promise<{ [address: string]: number }>;\n\n constructor(private url = 'https://yield-tokens.balancer.workers.dev/') {}\n\n async fetch(): Promise<{ [address: string]: number }> {\n let aprs = {};\n\n try {\n console.time(`fetching token yields`);\n const response = await axios.get(this.url);\n console.timeEnd(`fetching token yields`);\n\n aprs = response.data as {\n [key: string]: number;\n };\n } catch (error) {\n const logger = Logger.getInstance();\n logger.warn(`Failed to fetch yield tokens: ${error}`);\n }\n\n return aprs;\n }\n\n async find(address: string): Promise {\n const lc = address.toLocaleLowerCase();\n if (!this.yields) {\n this.yields = this.fetch();\n }\n\n return this.yields.then((r) => (r[lc] && r[lc] > 0 ? r[lc] : 0));\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute != 'address') {\n return 0;\n }\n\n return this.find(value);\n }\n}\n","import { Findable } from '../types';\nimport axios from 'axios';\n\nconst query = (timestamp: string) => `{\n blocks(first: 1, orderBy: timestamp, orderDirection: asc, where: { timestamp_gt: ${timestamp} }) {\n number\n }\n}`;\n\ninterface BlockNumberResponse {\n data: {\n blocks: [\n {\n number: string;\n }\n ];\n };\n}\n\nconst fetchBlockByTime = async (\n endpoint: string,\n timestamp: string\n): Promise => {\n const payload = {\n query: query(timestamp),\n };\n\n const response = await axios.post(endpoint, payload);\n\n const {\n data: { blocks },\n } = response.data as BlockNumberResponse;\n\n return parseInt(blocks[0].number);\n};\n\nexport class BlockNumberRepository implements Findable {\n blocks: { [ts: string]: Promise } = {};\n\n constructor(private endpoint: string) {}\n\n async find(from: string): Promise {\n if (from == 'dayAgo') {\n const dayAgo = `${Math.floor(Date.now() / 1000) - 86400}`;\n if (!this.blocks[dayAgo]) {\n this.blocks = {\n ...this.blocks,\n [dayAgo]: fetchBlockByTime(this.endpoint, dayAgo),\n };\n }\n return this.blocks[dayAgo];\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async findBy(attribute = '', value = ''): Promise {\n return;\n }\n}\n","import { GyroConfigRepositoryImpl } from '@/modules/data/gyro-config/repository';\n\nexport * as balEmissions from './bal/emissions';\nexport * from './gauge-controller/multicall';\nexport * from './gauge-shares';\nexport * from './liquidity-gauges';\nexport * from './pool';\nexport * from './pool-gauges';\nexport * from './pool-joinExit';\nexport * from './pool-shares';\nexport * from './token';\nexport * from './token-prices';\nexport * from './fee-distributor/repository';\nexport * from './fee-collector/repository';\nexport * from './protocol-fees/provider';\nexport * from './token-yields/repository';\nexport * from './block-number';\n\nimport {\n BalancerNetworkConfig,\n BalancerDataRepositories,\n GraphQLQuery,\n CoingeckoConfig,\n} from '@/types';\nimport { PoolsSubgraphRepository } from './pool/subgraph';\nimport { SubgraphPoolDataService } from '../sor/pool-data/subgraphPoolDataService';\nimport { PoolsSubgraphOnChainRepository } from './pool/subgraphOnChain';\nimport { PoolSharesRepository } from './pool-shares/repository';\nimport { PoolJoinExitRepository } from './pool-joinExit/repository';\nimport { PoolGaugesRepository } from './pool-gauges/repository';\nimport { GaugeSharesRepository } from './gauge-shares/repository';\nimport { BlockNumberRepository } from './block-number';\nimport {\n CoingeckoPriceRepository,\n AaveRates,\n TokenPriceProvider,\n HistoricalPriceProvider,\n CoingeckoHistoricalPriceRepository,\n} from './token-prices';\nimport { StaticTokenProvider } from './token/static';\nimport { LiquidityGaugeSubgraphRPCProvider } from './liquidity-gauges/provider';\nimport { FeeDistributorRepository } from './fee-distributor/repository';\nimport { FeeCollectorRepository } from './fee-collector/repository';\nimport { TokenYieldsRepository } from './token-yields/repository';\nimport { ProtocolFeesProvider } from './protocol-fees/provider';\nimport { Provider } from '@ethersproject/providers';\n\n// initialCoingeckoList are used to get the initial token list for coingecko\n// TODO: we might want to replace that with what frontend is using\nimport initialCoingeckoList from '@/modules/data/token-prices/initial-list.json';\nimport { SubgraphPriceRepository } from './token-prices/subgraph';\nimport { createSubgraphClient } from '../subgraph/subgraph';\nimport { Contracts } from '../contracts/contracts.module';\n\nexport class Data implements BalancerDataRepositories {\n pools;\n poolsForSimulations;\n poolsOnChain;\n yesterdaysPools;\n poolShares;\n poolGauges;\n gaugeShares;\n tokenPrices;\n tokenHistoricalPrices;\n tokenMeta;\n liquidityGauges;\n feeDistributor;\n feeCollector;\n protocolFees;\n tokenYields;\n blockNumbers;\n poolJoinExits;\n gyroConfigRepository;\n\n constructor(\n networkConfig: BalancerNetworkConfig,\n provider: Provider,\n contracts: Contracts,\n subgraphQuery?: GraphQLQuery,\n coingecko?: CoingeckoConfig\n ) {\n this.pools = new PoolsSubgraphRepository({\n url: networkConfig.urls.subgraph,\n chainId: networkConfig.chainId,\n query: subgraphQuery,\n });\n\n // Used for VaultModel and Simulations\n this.poolsForSimulations = new SubgraphPoolDataService(\n createSubgraphClient(networkConfig.urls.subgraph),\n provider,\n networkConfig,\n undefined,\n subgraphQuery\n );\n\n this.poolsOnChain = new PoolsSubgraphOnChainRepository(\n this.pools,\n {\n provider: provider,\n multicall: networkConfig.addresses.contracts.multicall,\n vault: networkConfig.addresses.contracts.vault,\n },\n networkConfig.poolsToIgnore,\n networkConfig.multicallBatchSize\n );\n\n this.poolShares = new PoolSharesRepository(\n networkConfig.urls.subgraph,\n networkConfig.chainId\n );\n\n this.poolJoinExits = new PoolJoinExitRepository(\n networkConfig.urls.subgraph,\n networkConfig.chainId\n );\n\n if (networkConfig.urls.gaugesSubgraph) {\n this.poolGauges = new PoolGaugesRepository(\n networkConfig.urls.gaugesSubgraph,\n networkConfig.chainId\n );\n\n this.gaugeShares = new GaugeSharesRepository(\n networkConfig.urls.gaugesSubgraph,\n networkConfig.chainId\n );\n }\n\n // 🚨 yesterdaysPools is used to calculate swapFees accumulated over last 24 hours\n // TODO: find a better data source for that, eg: maybe DUNE once API is available\n if (networkConfig.urls.blockNumberSubgraph) {\n this.blockNumbers = new BlockNumberRepository(\n networkConfig.urls.blockNumberSubgraph\n );\n\n const blockDayAgo = async () => {\n if (this.blockNumbers) {\n return await this.blockNumbers.find('dayAgo');\n }\n };\n\n this.yesterdaysPools = new PoolsSubgraphRepository({\n url: networkConfig.urls.subgraph,\n chainId: networkConfig.chainId,\n blockHeight: blockDayAgo,\n query: subgraphQuery,\n });\n } else if (networkConfig.averageBlockTime) {\n const blockDayAgo = async () => {\n const blockNumber = await provider.getBlockNumber();\n const blocksPerDay = Math.round(\n 86400 / (networkConfig.averageBlockTime || 2)\n );\n return blockNumber - blocksPerDay;\n };\n\n this.yesterdaysPools = new PoolsSubgraphRepository({\n url: networkConfig.urls.subgraph,\n chainId: networkConfig.chainId,\n blockHeight: blockDayAgo,\n query: subgraphQuery,\n });\n }\n\n const tokenAddresses = initialCoingeckoList\n .filter((t) => t.chainId == networkConfig.chainId)\n .map((t) => t.address);\n\n const coingeckoRepository = new CoingeckoPriceRepository(\n tokenAddresses,\n networkConfig.chainId,\n coingecko\n );\n\n const subgraphPriceRepository = new SubgraphPriceRepository(\n networkConfig.urls.subgraph,\n networkConfig.chainId\n );\n\n const aaveRates = new AaveRates(\n contracts.contracts.multicall,\n networkConfig.chainId\n );\n\n this.tokenPrices = new TokenPriceProvider(\n coingeckoRepository,\n subgraphPriceRepository,\n aaveRates\n );\n\n const coingeckoHistoricalRepository =\n new CoingeckoHistoricalPriceRepository(networkConfig.chainId, coingecko);\n\n this.tokenHistoricalPrices = new HistoricalPriceProvider(\n coingeckoHistoricalRepository,\n aaveRates\n );\n\n this.tokenMeta = new StaticTokenProvider([]);\n\n if (networkConfig.urls.gaugesSubgraph) {\n this.liquidityGauges = new LiquidityGaugeSubgraphRPCProvider(\n networkConfig.urls.gaugesSubgraph,\n contracts.contracts.multicall,\n networkConfig.addresses.contracts.gaugeController || '',\n networkConfig.chainId,\n networkConfig.addresses.contracts.gaugeControllerCheckpointer\n );\n }\n\n if (\n networkConfig.addresses.contracts.feeDistributor &&\n networkConfig.addresses.tokens.bal &&\n networkConfig.addresses.tokens.veBal &&\n networkConfig.addresses.tokens.bbaUsd\n ) {\n this.feeDistributor = new FeeDistributorRepository(\n contracts.contracts.multicall,\n networkConfig.addresses.contracts.feeDistributor,\n networkConfig.addresses.tokens.bal,\n networkConfig.addresses.tokens.veBal,\n networkConfig.addresses.tokens.bbaUsd,\n provider\n );\n }\n\n this.feeCollector = new FeeCollectorRepository(\n networkConfig.addresses.contracts.vault,\n provider\n );\n\n if (networkConfig.addresses.contracts.protocolFeePercentagesProvider) {\n this.protocolFees = new ProtocolFeesProvider(\n contracts.contracts.multicall,\n networkConfig.addresses.contracts.protocolFeePercentagesProvider\n );\n }\n\n this.tokenYields = new TokenYieldsRepository();\n\n if (networkConfig.addresses.contracts.gyroConfigProxy) {\n this.gyroConfigRepository = new GyroConfigRepositoryImpl(\n networkConfig.addresses.contracts.gyroConfigProxy,\n contracts.contracts.multicall,\n provider\n );\n }\n }\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { MaxInt256 } from '@ethersproject/constants';\nimport { BatchSwapStep, SwapType } from '../swaps/types';\nimport { Relayer } from './relayer.module';\nimport { OutputReference, PoolKind } from './types';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\n\n/**\n * Converts poolType and poolTypeVersion to PoolKind used by Relayer V5 defined in:\n * https://github.com/balancer/balancer-v2-monorepo/blob/9b78879ee3a0dcae57094bdfdae973873e4262cf/pkg/standalone-utils/contracts/relayer/VaultActions.sol#L105\n *\n * @internal\n * @param poolType\n * @param poolTypeVersion\n * @returns PoolKind\n */\nconst poolType2PoolKind = (\n poolType: string,\n poolTypeVersion: number\n): PoolKind => {\n if (poolType === 'Stable') {\n return PoolKind.LEGACY_STABLE;\n } else if (poolType === 'ComposableStable' && poolTypeVersion === 1) {\n return PoolKind.COMPOSABLE_STABLE;\n } else if (poolType === 'ComposableStable') {\n return PoolKind.COMPOSABLE_STABLE_V2;\n } else {\n return PoolKind.WEIGHTED;\n }\n};\n\nexport const setRelayerApproval = Relayer.encodeSetRelayerApproval;\nexport const gaugeWithdrawal = Relayer.encodeGaugeWithdraw;\nexport const gaugeDeposit = Relayer.encodeGaugeDeposit;\nexport const peekChainedReferenceValue =\n Relayer.encodePeekChainedReferenceValue;\n\n/**\n * Encodes exitPool callData.\n * Exit pool to underlying tokens and assigns output references to the exit amounts.\n *\n * @param poolId Pool ID.\n * @param poolType Pool type.\n * @param poolTypeVersion Pool type version.\n * @param assets Ordered pool tokens.\n * @param singleTokenExit When\n * @param outputReferences reference to exit amounts for the next transaction\n * @param amount Amount of BPT to exit with as a number with 18 digits of precision passed as a string.\n * @param sender Sender address.\n * @param recipient Recipient address.\n * @param isComposable Whether the poolType is ComposableStable or not.\n * @param toInternalBalance Use internal balance or not.\n * @returns Encoded exitPool call.\n */\nexport const exit = (\n poolId: string,\n poolType: string,\n poolTypeVersion: number,\n assets: string[],\n exitTokenIndex = -1,\n outputReferences: OutputReference[],\n amount: string,\n sender: string,\n recipient: string,\n toInternalBalance = true\n): string => {\n let userData: string;\n const isComposable = poolType === 'ComposableStable' && poolTypeVersion === 1;\n\n // Exit pool proportionally or to a singleToken\n if (exitTokenIndex > -1) {\n userData = StablePoolEncoder.exitExactBPTInForOneTokenOut(\n amount,\n exitTokenIndex\n );\n } else {\n const encoder = isComposable\n ? ComposableStablePoolEncoder.exitExactBPTInForAllTokensOut\n : StablePoolEncoder.exitExactBPTInForTokensOut;\n userData = encoder(amount);\n }\n\n // Relayer V5 introduces PoolKind\n const poolKind = poolType2PoolKind(poolType, poolTypeVersion);\n\n // Encode exit pool data\n const callData = Relayer.encodeExitPool({\n poolId,\n poolKind,\n sender,\n recipient,\n outputReferences,\n exitPoolRequest: {\n assets,\n minAmountsOut: new Array(assets.length).fill('0'),\n userData,\n toInternalBalance,\n },\n });\n\n return callData;\n};\n\n/**\n * Encodes joinPool callData.\n * Joins pool with underlying tokens and assigns output reference to the BPT amount.\n *\n * @param poolId Pool ID.\n * @param poolType Pool type.\n * @param poolTypeVersion Pool type version.\n * @param assets Ordered pool tokens.\n * @param amountsIn Amounts of tokens to join with as a number with 18 digits of precision passed as a string.\n * @param minimumBPT Minimum BPT amount to receive as a number with 18 digits of precision passed as a string.\n * @param outputReference reference to BPT amount for the next transaction\n * @param sender Sender address.\n * @param recipient Recipient address.\n * @param fromInternalBalance Use internal balance or not.\n * @returns Encoded joinPool call.\n */\nexport const join = (\n poolId: string,\n poolType: string,\n poolTypeVersion: number,\n assets: string[],\n amountsIn: string[],\n minimumBPT: string,\n outputReference: string,\n sender: string,\n recipient: string,\n fromInternalBalance = true\n): string => {\n const maxAmountsIn = assets.map(() => MaxInt256);\n\n // Encoding join pool data with the type exactTokensIn (1)\n // StablePoolEncoder.joinExactTokensInForBPTOut is the same for all pool types\n const userData = StablePoolEncoder.joinExactTokensInForBPTOut(\n amountsIn,\n minimumBPT\n );\n\n const kind = poolType2PoolKind(poolType, poolTypeVersion);\n\n const callData = Relayer.encodeJoinPool({\n poolId,\n kind,\n sender,\n recipient,\n joinPoolRequest: {\n assets,\n maxAmountsIn,\n userData,\n fromInternalBalance,\n },\n value: '0',\n outputReference,\n });\n\n return callData;\n};\n\n/**\n * Creates encoded batchSwap callData\n * outputReferences contain the output amount for swap's last token\n *\n * @param sender Sender address.\n * @param recipient Recipient address.\n * @param swaps List of swaps to execute.\n * @param deadline Deadline for the transaction.\n * @param toInternalBalance Use internal balance or not.\n * @returns Encoded batchSwap call\n */\nexport const swaps = (\n sender: string,\n recipient: string,\n swaps: {\n path: {\n poolId: string;\n assetIn: string;\n assetOut: string;\n }[];\n inputAmount: string;\n outputReference: BigNumber;\n }[],\n deadline?: string,\n toInternalBalance = true\n): string => {\n const assets: string[] = [];\n const limits: string[] = [];\n const outputReferences: { index: number; key: BigNumber }[] = [];\n const batchSwaps: BatchSwapStep[] = [];\n\n // Convert paths into batchSwap steps\n swaps.forEach((swap) => {\n const { path, inputAmount, outputReference } = swap;\n\n for (let i = 0; i < path.length; i++) {\n const { poolId, assetIn, assetOut } = path[i];\n\n assets.push(assetIn);\n assets.push(assetOut);\n\n limits.push(MaxInt256.toString());\n limits.push('0');\n\n const assetInIndex = i * 2;\n const assetOutIndex = i * 2 + 1;\n\n const swap: BatchSwapStep = {\n poolId,\n assetInIndex,\n assetOutIndex,\n amount: i === 0 ? inputAmount : '0',\n userData: '0x',\n };\n\n batchSwaps.push(swap);\n }\n\n // Add output reference for the last swap\n outputReferences.push({ index: path.length * 2 - 1, key: outputReference });\n });\n\n const funds = {\n sender,\n recipient,\n fromInternalBalance: true,\n toInternalBalance,\n };\n\n const encodedBatchSwap = Relayer.encodeBatchSwap({\n swapType: SwapType.SwapExactIn,\n swaps: batchSwaps,\n assets,\n funds,\n limits,\n deadline: deadline || BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value: '0',\n outputReferences,\n });\n\n return encodedBatchSwap;\n};\n","import { Findable, Pool, PoolAttribute } from '@/types';\nimport { BalancerRelayer__factory } from '@/contracts';\n\nexport const balancerRelayerInterface =\n BalancerRelayer__factory.createInterface();\n\n/**\n * Using array of objects to preserve the tokens order\n */\nexport interface MigrationPool {\n address: string;\n id?: string;\n poolType?: string;\n poolTypeVersion?: number;\n tokens?: MigrationPool[];\n mainIndex?: number;\n}\n\n/**\n * Foreach AaveLinear: AaveLinear > mainTokens > newAaveLinear\n *\n * @param fromTokens\n * @param toTokens\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const buildPaths = (\n fromTokens: MigrationPool[],\n toTokens: MigrationPool[],\n exitTokenIndex: number\n) => {\n // Get the main token address for each pool\n const getMainToken = ({ tokens, mainIndex }: MigrationPool) =>\n (tokens && mainIndex && tokens[mainIndex].address) || '';\n const mainFromTokens = fromTokens.flatMap(getMainToken);\n const mainToTokens = toTokens.flatMap(getMainToken);\n\n // Find the index of the main token in both from and to pools\n const pathIndexes = mainFromTokens.map(\n (token, idx) => (token && [idx, mainToTokens.indexOf(token)]) || [-1, -1]\n );\n\n // Build the paths from the indexes\n const exitSwaps = pathIndexes.map(([fromIdx, toIdx]) => {\n if (fromIdx === -1 || toIdx === -1) {\n return [];\n }\n const fromPool = fromTokens[fromIdx];\n const toPool = toTokens[toIdx];\n return buildPath(fromPool, toPool);\n });\n\n // If we want to exit a specific token, return only that path\n if (exitTokenIndex > -1) {\n return [exitSwaps[exitTokenIndex]];\n }\n\n return exitSwaps;\n};\n\nconst buildPath = (from: MigrationPool, to: MigrationPool) => {\n if (from.poolType?.match(/.*Linear.*/)) {\n return buildLinearPath(from, to);\n }\n\n return [];\n};\n\nconst buildLinearPath = (from: MigrationPool, to: MigrationPool) => {\n if (\n !from.id ||\n !to.id ||\n !from.tokens ||\n !to.tokens ||\n !from.mainIndex ||\n !to.mainIndex\n ) {\n throw 'Missing tokens';\n }\n const mainToken = from.tokens[from.mainIndex];\n\n const path = [\n {\n poolId: from.id,\n assetIn: from.address,\n assetOut: mainToken.address,\n },\n {\n poolId: to.id,\n assetIn: mainToken.address,\n assetOut: to.address,\n },\n ];\n\n return path;\n};\n\n/**\n * Converts Subgraph Pool to MigrationPool\n * Recursively builds tokens\n *\n * @param id\n * @param repository\n * @returns\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const buildMigrationPool = async (\n id: string,\n repository: Findable\n) => {\n const pool = await repository.find(id);\n if (!pool) throw `Pool ${id} not found`;\n\n const findTokens = async (token: string, parentPool: string) => {\n let tokens: Array = [{ address: token }];\n const pool = await repository.findBy('address', token);\n if (pool && token != parentPool) {\n const sortedTokens = pool.tokens.sort(cmpTokens);\n const nestedTokens = await Promise.all(\n sortedTokens.map(({ address }) => findTokens(address, pool.address))\n );\n tokens = [\n {\n address: token,\n id: pool.id,\n poolType: pool.poolType,\n poolTypeVersion: pool.poolTypeVersion,\n mainIndex: pool.mainIndex,\n tokens: nestedTokens.flat(),\n },\n ];\n }\n return tokens;\n };\n\n // Sorts amounts out into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const sortedTokens = pool.tokens.sort(cmpTokens);\n\n return {\n id,\n address: pool.address,\n tokens: (\n await Promise.all(\n sortedTokens.map(({ address }) => findTokens(address, pool.address))\n )\n ).flat(),\n poolType: pool.poolType,\n poolTypeVersion: pool.poolTypeVersion,\n mainIndex: pool.mainIndex,\n };\n};\n\nconst cmpTokens = (tokenA: MigrationPool, tokenB: MigrationPool): number =>\n tokenA.address.toLowerCase() > tokenB.address.toLowerCase() ? 1 : -1;\n","import { OutputReference, Relayer } from '@/modules/relayer/relayer.module';\nimport * as actions from '@/modules/relayer/actions';\nimport { buildPaths, MigrationPool, balancerRelayerInterface } from './helpers';\nimport { BigNumber } from '@ethersproject/bignumber';\n\n/**\n * Builds migration call data.\n *\n * @param account Address of the migrating account\n * @param relayer Address of the relayer\n * @param bptAmount Amount of BPT to migrate\n * @param minBptOut Minimal amount of BPT to receive\n * @param from Pool to migrate from\n * @param to Pool to migrate to\n * @param peek Add a peek call for the expected BPT amount, decodable by the `decodePeak` function\n * @param fromGauge Unstake from gauge before migrating\n * @param toGauge Restake to gauge after migrating\n * @param authorisation User's authorisation to approve relayer in the vault\n * @returns call data\n */\nexport const migrationBuilder = (\n account: string,\n relayer: string,\n bptAmount: string,\n minBptOut: string,\n from: MigrationPool,\n to: MigrationPool,\n peek = false,\n fromGauge?: string,\n toGauge?: string,\n authorisation?: string\n): string => {\n if (\n !from.id ||\n !to.id ||\n !from.tokens ||\n !to.tokens ||\n !from.poolType ||\n !to.poolType\n ) {\n throw 'Pool data is missing';\n }\n\n // Define tokens\n const fromTokens = from.tokens.flatMap(({ address }) => address);\n const toTokens = to.tokens.flatMap(({ address }) => address);\n\n // Prefer proportional exit, except for ComposableStableV1\n // Choose 0 as the exit token index\n // TODO: make default exit token dynamic\n const exitTokenIndex =\n from.poolType == 'ComposableStable' && from.poolTypeVersion == 1 ? 0 : -1;\n\n // Define output references\n let exitOutputReferences: OutputReference[];\n let swapOutputReferences: BigNumber[] = [];\n if (exitTokenIndex > -1) {\n exitOutputReferences = [\n {\n index: exitTokenIndex,\n key: Relayer.toChainedReference(`10${exitTokenIndex}`),\n },\n ];\n swapOutputReferences = [Relayer.toChainedReference(`20${exitTokenIndex}`)];\n } else {\n exitOutputReferences = fromTokens.map((_, idx) => ({\n index: idx,\n key: Relayer.toChainedReference(`10${idx}`),\n }));\n swapOutputReferences = fromTokens.map((_, idx) =>\n Relayer.toChainedReference(`20${idx}`)\n );\n }\n\n const joinAmount = Relayer.toChainedReference('999');\n\n // Configure migration steps\n const migrationSteps = [];\n let needsSwap = false; // only if from is ComposableStable\n\n if (from.poolType === 'ComposableStable') {\n needsSwap = true;\n }\n\n // 0. Set relayer approval\n if (authorisation) {\n migrationSteps.push(\n actions.setRelayerApproval(relayer, true, authorisation)\n );\n }\n\n // 1. Withdraw from old gauge\n if (fromGauge) {\n migrationSteps.push(\n actions.gaugeWithdrawal(fromGauge, account, relayer, bptAmount)\n );\n }\n\n // 2. Exit old pool\n migrationSteps.push(\n actions.exit(\n from.id,\n from.poolType,\n from.poolTypeVersion || 1,\n fromTokens,\n exitTokenIndex,\n exitOutputReferences,\n bptAmount,\n fromGauge ? relayer : account,\n relayer\n )\n );\n\n // 3. Swap\n const swapPaths = buildPaths(from.tokens, to.tokens, exitTokenIndex);\n if (swapPaths.flat().length > 0) {\n // Match exit to swap amounts\n const swaps = swapPaths\n .map((path, idx) => ({\n path,\n inputAmount: String(exitOutputReferences[idx].key),\n outputReference: swapOutputReferences[idx],\n }))\n .filter(({ path }) => path.length > 0);\n\n migrationSteps.push(actions.swaps(relayer, relayer, swaps));\n }\n\n // 3. Join\n // Match swap or exit references to the positions of join tokens\n // In case no reference is defined, the default is 0\n const references = toTokens\n .filter((address) => to.address != address)\n .map((to) => {\n const fromIdx = fromTokens.indexOf(to);\n return String(\n (needsSwap && swapOutputReferences[fromIdx]) ||\n exitOutputReferences[fromIdx]?.key ||\n 0\n );\n });\n\n migrationSteps.push(\n actions.join(\n to.id,\n to.poolType,\n to.poolTypeVersion || 1,\n toTokens,\n references,\n minBptOut,\n String(joinAmount),\n relayer,\n toGauge ? relayer : account,\n true\n )\n );\n\n // Peek the last join amount\n if (peek === true) {\n migrationSteps.push(actions.peekChainedReferenceValue(String(joinAmount)));\n }\n\n // 4. Deposit to the new gauge\n if (toGauge) {\n migrationSteps.push(\n actions.gaugeDeposit(toGauge, relayer, account, String(joinAmount))\n );\n }\n\n const callData = balancerRelayerInterface.encodeFunctionData('multicall', [\n migrationSteps,\n ]);\n\n return callData;\n};\n","import { Findable, Pool, PoolAttribute } from '@/types';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { SubgraphLiquidityGauge } from '../subgraph/subgraph';\nimport { migrationBuilder } from './migrations/builder';\nimport {\n balancerRelayerInterface,\n buildMigrationPool,\n} from './migrations/helpers';\nimport * as actions from '@/modules/relayer/actions';\n\n/**\n * @param user - user address\n * @param from - pool ID\n * @param to - pool ID\n * @param balance - amount of liquidity to migrate in WAL (wei-ether)\n * @param minBptOut - minimum amount of BPT to receive, when 0 it will include a peek for the amount\n * @param authorisation - signed user's authorisation to approve relayer in the vault\n */\ninterface MigrationParams {\n user: string;\n from: string;\n to: string;\n balance: string;\n minBptOut?: string;\n authorisation?: string;\n}\n\n/**\n * Class responsible for building liquidity migration transactions.\n */\nexport class Migrations {\n public relayerAddress: string;\n public poolsRepository: Findable;\n public gaugesRepository: Findable;\n public provider: JsonRpcProvider;\n\n /**\n * Instance of a class responsible for building liquidity migration transactions.\n *\n * @param relayerAddress Address of the relayer contract.\n * @param poolsRepository Repository of pools.\n * @param liquidityGaugesRepository Repository of liquidity gauges.\n * @param provider Provider to use for RPC data fetching.\n *\n * Available methods:\n * - `pool2pool` - Migrates liquidity from one pool to another.\n * - `pool2poolWithGauges` - Migrates liquidity from a pool's gauge to another gauge.\n * - `gauge2gauge` - Migrates liquidity from one gauge to another of the same pool.\n *\n * @example\n * ```typescript\n * const sdk = new BalancerSDK({\n * network: 1,\n * rpcUrl: 'https://rpc.ankr.com/eth',\n * })\n *\n * const migrations = new Migrations({\n * relayerAddress: sdk.networkConfig.addresses.contracts.relayerV4 as string,\n * poolsRepository: sdk.data.pools,\n * gaugesRepository: sdk.data.liquidityGauges.subgraph,\n * provider: sdk.provider\n * })\n *\n * const user = '0xfacec29Ae158B26e234B1a81Db2431F6Bd8F8cE8'\n * const from = '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080'\n * const to = '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080'\n * const balance = '1000000000000000000'\n * const { to, data } = await migrations.pool2pool({ user, from, to, balance })\n *\n * const tx = await sdk.provider.sendTransaction({ to, data })\n * ```\n */\n constructor({\n relayerAddress,\n poolsRepository,\n gaugesRepository,\n provider,\n }: {\n relayerAddress: string;\n poolsRepository: Findable;\n gaugesRepository: Findable;\n provider: JsonRpcProvider;\n }) {\n this.relayerAddress = relayerAddress;\n this.poolsRepository = poolsRepository;\n this.gaugesRepository = gaugesRepository;\n this.provider = provider;\n }\n\n /**\n * Takes user, from and to pool IDs as strings and returns the transaction data\n *\n * @returns transaction data\n */\n async pool2pool({\n user,\n from,\n to,\n balance,\n minBptOut = '0',\n authorisation,\n }: MigrationParams): Promise<{ to: string; data: string }> {\n const fromPool = await buildMigrationPool(from, this.poolsRepository);\n const toPool = await buildMigrationPool(to, this.poolsRepository);\n\n const data = migrationBuilder(\n user,\n this.relayerAddress,\n String(balance),\n minBptOut,\n fromPool,\n toPool,\n minBptOut == '0', // if minBptOut is 0, we peek for the join amount\n undefined,\n undefined,\n authorisation\n );\n\n return {\n to: this.relayerAddress,\n data,\n };\n }\n\n /**\n * Takes user, from and to pool IDs as strings and returns the transaction data\n * for a migration including unstaking and restaking\n *\n * @returns transaction data\n */\n async pool2poolWithGauges({\n user,\n from,\n to,\n balance,\n minBptOut = '0',\n authorisation,\n }: MigrationParams): Promise<{ to: string; data: string }> {\n const fromGauge = await this.gaugesRepository.findBy('poolId', from);\n const toGauge = await this.gaugesRepository.findBy('poolId', to);\n if (!fromGauge || !fromGauge.poolId || !toGauge || !toGauge.poolId) {\n throw new Error('Gauge not found');\n }\n const fromPool = await buildMigrationPool(\n fromGauge.poolId,\n this.poolsRepository\n );\n const toPool = await buildMigrationPool(\n toGauge.poolId,\n this.poolsRepository\n );\n\n const data = migrationBuilder(\n user,\n this.relayerAddress,\n String(balance),\n minBptOut,\n fromPool,\n toPool,\n minBptOut == '0', // if minBptOut is 0, we peek for the join amount\n fromGauge.id,\n toGauge.id,\n authorisation\n );\n\n return {\n to: this.relayerAddress,\n data,\n };\n }\n\n /**\n * Migrates staked liquidity for the same pool from one gauge to another.\n *\n * @returns transaction data\n */\n async gauge2gauge({\n user,\n from,\n to,\n balance,\n authorisation,\n }: MigrationParams): Promise<{ to: string; data: string }> {\n const steps = [\n actions.gaugeWithdrawal(from, user, this.relayerAddress, balance),\n actions.gaugeDeposit(to, this.relayerAddress, user, balance),\n ];\n\n if (authorisation) {\n steps.unshift(\n actions.setRelayerApproval(this.relayerAddress, true, authorisation)\n );\n }\n\n const data = balancerRelayerInterface.encodeFunctionData('multicall', [\n steps,\n ]);\n\n return {\n to: this.relayerAddress,\n data,\n };\n }\n\n /**\n * Decodes the relayer return value to get the expected BPT out.\n *\n * @param relayerReturnValue\n * @returns\n */\n static getExpectedBptOut = (relayerReturnValue: string): string => {\n // Get last two positions of the return value, bptOut is the last one or the second to last one in case there is a gauge deposit\n // join and gauge deposit are always 0x, so any other value means that's the bptOut\n const multicallResult = balancerRelayerInterface.decodeFunctionResult(\n 'multicall',\n relayerReturnValue\n );\n\n const expectedBptOut = multicallResult[0]\n .slice(-2)\n .filter((v: string) => v !== '0x');\n\n return String(BigInt(expectedBptOut));\n };\n\n getExpectedBptOut = Migrations.getExpectedBptOut;\n}\n","import { SubgraphPoolBase } from '@balancer-labs/sor';\nimport {\n EncodeJoinPoolInput,\n ExitPoolData,\n EncodeBatchSwapInput,\n} from '@/modules/relayer/relayer.module';\nimport { Join } from './join';\nimport { Exit } from './exit';\nimport { Swap } from './swap';\n\nexport enum ActionStep {\n Direct,\n TokenIn,\n TokenOut,\n Middle,\n}\n\nexport enum ActionType {\n BatchSwap,\n Join,\n Exit,\n}\n\nexport type Actions = Exit | Swap | Join;\n\nexport interface Action {\n type: ActionType.Join | ActionType.Exit | ActionType.BatchSwap;\n callData(pool: SubgraphPoolBase, wrappedNativeAsset: string): CallData;\n getAmountIn(): string;\n getAmountOut(): string;\n}\n\nexport interface CallData {\n params: EncodeJoinPoolInput | ExitPoolData | EncodeBatchSwapInput;\n encoded: string | string[];\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { ActionStep, ActionType } from './types';\nimport { Relayer, OutputReference } from '@/modules/relayer/relayer.module';\n\nexport class BaseAction {\n nextOpRefKey;\n hasTokenOut;\n hasTokenIn;\n sender;\n receiver;\n opRefStart;\n minOut;\n amountIn;\n\n constructor(\n mainTokenInIndex: number,\n mainTokenOutIndex: number,\n swapAssetInIndex: number,\n swapAssetOutIndex: number,\n swapAmount: string,\n swapReturn: string,\n opRefKey: number,\n slippage: string,\n user: string,\n relayer: string\n ) {\n const actionStep = this.getActionStep(\n mainTokenInIndex,\n mainTokenOutIndex,\n swapAssetInIndex,\n swapAssetOutIndex\n );\n // Will get actual amount if input or chain amount if part of chain\n this.amountIn = this.getActionAmount(\n swapAmount,\n ActionType.BatchSwap,\n actionStep,\n opRefKey\n );\n this.hasTokenIn = this.actionHasTokenIn(actionStep);\n this.hasTokenOut = this.actionHasTokenOut(actionStep);\n // This will be 0 if not a mainTokenOut action otherwise amount using slippage\n const amountOut = this.hasTokenOut ? swapReturn : '0';\n this.minOut = this.getActionMinOut(amountOut, slippage);\n // This will set opRef for next chained action if required\n const [opRef, nextOpRefKey] = this.getActionOutputRef(\n actionStep,\n swapAssetOutIndex,\n opRefKey\n );\n this.nextOpRefKey = nextOpRefKey;\n this.opRefStart = opRef;\n this.sender = this.getSender(this.hasTokenIn, user, relayer);\n this.receiver = this.getReceiver(this.hasTokenOut, user, relayer);\n }\n\n /**\n * If its not the first action then the amount will come from the previous output ref\n * @param amount\n * @param actionType\n * @param actionStep\n * @param opRefKey\n * @returns\n */\n getActionAmount(\n amount: string,\n actionType: ActionType,\n actionStep: ActionStep,\n opRefKey: number\n ): string {\n let amountIn = amount;\n if (\n actionStep === ActionStep.TokenOut ||\n (actionStep === ActionStep.Middle && actionType === ActionType.Join) ||\n (actionStep === ActionStep.Middle && actionType === ActionType.Exit)\n ) {\n amountIn = Relayer.toChainedReference(opRefKey - 1).toString();\n }\n return amountIn;\n }\n\n /**\n * If its not the final action then we need an outputReferece to chain to next action as input\n * @param actionStep\n * @param tokenOutIndex\n * @param opRefKey\n * @returns\n */\n getActionOutputRef(\n actionStep: ActionStep,\n tokenOutIndex: number,\n opRefKey: number\n ): [OutputReference, number] {\n let opRef: OutputReference = {} as OutputReference;\n if (actionStep === ActionStep.TokenIn || actionStep === ActionStep.Middle) {\n opRef = this.getOutputRef(opRefKey, tokenOutIndex);\n opRefKey++;\n }\n return [opRef, opRefKey];\n }\n\n /**\n * Use slippage to set min amount out\n * @param amountOut\n * @param slippage\n * @returns\n */\n getActionMinOut(amountOut: string, slippage: string): string {\n // Currently only handle ExactIn swap. ExactOut would add slippage\n // We should apply slippage to each swaps amountOut\n return subSlippage(\n BigNumber.from(amountOut),\n BigNumber.from(slippage)\n ).toString();\n }\n\n /**\n * Find if the Action is:\n * Direct: tokenIn > tokenOut\n * TokenIn: tokenIn > chain...\n * TokenOut: ...chain > tokenOut\n * Middle: ...chain > action > chain...\n * @param tokenInIndex\n * @param tokenOutIndex\n * @param tokenInIndexAction\n * @param tokenOutIndexAction\n * @returns\n */\n getActionStep(\n tokenInIndex: number,\n tokenOutIndex: number,\n tokenInIndexAction: number,\n tokenOutIndexAction: number\n ): ActionStep {\n let actionStep: ActionStep;\n if (\n tokenInIndexAction === tokenInIndex &&\n tokenOutIndexAction === tokenOutIndex\n ) {\n actionStep = ActionStep.Direct;\n } else if (tokenInIndexAction === tokenInIndex) {\n actionStep = ActionStep.TokenIn;\n } else if (tokenOutIndexAction === tokenOutIndex) {\n actionStep = ActionStep.TokenOut;\n } else {\n actionStep = ActionStep.Middle;\n }\n return actionStep;\n }\n\n getOutputRef(key: number, index: number): OutputReference {\n const keyRef = Relayer.toChainedReference(key);\n return { index: index, key: keyRef };\n }\n\n getFromInternal(hasTokenIn: boolean, isBptIn?: boolean): boolean {\n if (hasTokenIn || isBptIn) return false;\n else return true;\n }\n\n getToInternal(hasTokenOut: boolean, isBptOut?: boolean): boolean {\n // exits - can't exit using BPT from internal balances\n // Because of ^ we can assume that any tokenOut BPT is going to external (either to user or exit)\n if (hasTokenOut || isBptOut) return false;\n else return true;\n }\n\n actionHasTokenIn(actionStep: ActionStep): boolean {\n return actionStep === ActionStep.Direct || actionStep === ActionStep.TokenIn\n ? true\n : false;\n }\n\n actionHasTokenOut(actionStep: ActionStep): boolean {\n return actionStep === ActionStep.Direct ||\n actionStep === ActionStep.TokenOut\n ? true\n : false;\n }\n\n getSender(hasTokenIn: boolean, user: string, relayer: string): string {\n // tokenIn/Out will come from/go to the user. Any other tokens are intermediate and will be from/to Relayer\n if (hasTokenIn) return user;\n else return relayer;\n }\n\n getReceiver(hasTokenOut: boolean, user: string, relayer: string): string {\n // tokenIn/Out will come from/go to the user. Any other tokens are intermediate and will be from/to Relayer\n if (hasTokenOut) return user;\n else return relayer;\n }\n\n getPoolKind(poolType: string): number {\n // We have to use correct pool type based off following from Relayer:\n // enum PoolKind { WEIGHTED, LEGACY_STABLE, COMPOSABLE_STABLE, COMPOSABLE_STABLE_V2 }\n // (note only Weighted and COMPOSABLE_STABLE_V2 will support proportional exits)\n let kind = 0;\n if ([`MetaStable`, `Stable`, `StablePhantom`].includes(poolType)) {\n kind = 1;\n } else if (poolType === `ComposableStable`) {\n // In this case we are only doing BPT <> singleToken, not BPT <> tokens, so encoding matches and avoids need to check version so default to 3\n kind = 3;\n }\n return kind;\n }\n}\n","import { SubgraphPoolBase, SwapV2 } from '@balancer-labs/sor';\nimport {\n Relayer,\n ExitPoolData,\n OutputReference,\n} from '@/modules/relayer/relayer.module';\nimport { ExitPoolRequest } from '@/types';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { AssetHelpers } from '@/lib/utils';\nimport { ActionType, Action, CallData } from './types';\nimport { BaseAction } from './baseAction';\n\nexport class Exit extends BaseAction implements Action {\n type: ActionType.Exit;\n poolId: string;\n tokenOut: string;\n toInternalBalance: boolean;\n opRef: OutputReference;\n\n constructor(\n swap: SwapV2,\n mainTokenInIndex: number,\n mainTokenOutIndex: number,\n public opRefKey: number,\n assets: string[],\n slippage: string,\n user: string,\n relayerAddress: string\n ) {\n super(\n mainTokenInIndex,\n mainTokenOutIndex,\n swap.assetInIndex,\n swap.assetOutIndex,\n swap.amount,\n swap.returnAmount ?? '0',\n opRefKey,\n slippage,\n user,\n relayerAddress\n );\n this.type = ActionType.Exit;\n this.poolId = swap.poolId;\n this.tokenOut = assets[swap.assetOutIndex];\n this.toInternalBalance = this.getToInternal(this.hasTokenOut);\n this.opRef = this.opRefStart;\n }\n\n public callData(\n pool: SubgraphPoolBase,\n wrappedNativeAsset: string\n ): CallData {\n const assets = pool.tokensList;\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // tokens must have same order as pool getTokens\n const [sortedTokens] = assetHelpers.sortTokens(assets) as [string[]];\n const exitToken = this.tokenOut;\n const exitTokenIndex = sortedTokens.findIndex(\n (t) => t.toLowerCase() === exitToken.toLowerCase()\n );\n const minAmountsOut = Array(assets.length).fill('0');\n // Variable amount of token out (this has slippage applied)\n minAmountsOut[exitTokenIndex] = this.minOut;\n // Uses exact amount in\n const bptAmtIn = this.amountIn;\n const userData = WeightedPoolEncoder.exitExactBPTInForOneTokenOut(\n bptAmtIn,\n exitTokenIndex\n );\n const params: ExitPoolData = {\n assets: sortedTokens,\n minAmountsOut,\n userData,\n toInternalBalance: this.toInternalBalance,\n poolId: this.poolId,\n poolKind: this.getPoolKind(pool.poolType),\n sender: this.sender,\n recipient: this.receiver,\n outputReferences: this.opRef.key ? [this.opRef] : [],\n exitPoolRequest: {} as ExitPoolRequest,\n };\n const exitPoolInput = Relayer.formatExitPoolInput(params);\n const callData = Relayer.encodeExitPool(exitPoolInput);\n return {\n params,\n encoded: callData,\n };\n }\n\n public getAmountIn(): string {\n return this.hasTokenIn ? this.amountIn : '0';\n }\n\n public getAmountOut(): string {\n return this.hasTokenOut ? this.minOut : '0';\n }\n}\n","import { SubgraphPoolBase, SwapV2 } from '@balancer-labs/sor';\nimport {\n Relayer,\n EncodeJoinPoolInput,\n OutputReference,\n} from '@/modules/relayer/relayer.module';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { AssetHelpers } from '@/lib/utils';\nimport { ActionType, Action, CallData } from './types';\nimport { BaseAction } from './baseAction';\n\nexport class Join extends BaseAction implements Action {\n type: ActionType.Join;\n poolId: string;\n tokenIn: string;\n opRef: OutputReference;\n fromInternal;\n\n constructor(\n swap: SwapV2,\n mainTokenInIndex: number,\n mainTokenOutIndex: number,\n public opRefKey: number,\n assets: string[],\n slippage: string,\n user: string,\n relayerAddress: string\n ) {\n super(\n mainTokenInIndex,\n mainTokenOutIndex,\n swap.assetInIndex,\n swap.assetOutIndex,\n swap.amount,\n swap.returnAmount ?? '0',\n opRefKey,\n slippage,\n user,\n relayerAddress\n );\n this.type = ActionType.Join;\n this.poolId = swap.poolId;\n this.tokenIn = assets[swap.assetInIndex];\n this.fromInternal = this.getFromInternal(this.hasTokenIn);\n this.opRef = this.opRefStart;\n }\n\n public callData(\n pool: SubgraphPoolBase,\n wrappedNativeAsset: string\n ): CallData {\n const assets = pool.tokensList;\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // tokens must have same order as pool getTokens\n const [sortedTokens] = assetHelpers.sortTokens(assets) as [string[]];\n const joinToken = this.tokenIn;\n const joinTokenIndex = sortedTokens.findIndex(\n (t) => t.toLowerCase() === joinToken.toLowerCase()\n );\n const maxAmountsIn = Array(assets.length).fill('0');\n // Uses exact amounts of tokens in\n maxAmountsIn[joinTokenIndex] = this.amountIn;\n // Variable amount of BPT out (this has slippage applied)\n const bptAmountOut = this.minOut;\n const userData = WeightedPoolEncoder.joinExactTokensInForBPTOut(\n maxAmountsIn,\n bptAmountOut\n );\n const params: EncodeJoinPoolInput = {\n poolId: this.poolId,\n sender: this.sender,\n recipient: this.receiver,\n kind: this.getPoolKind(pool.poolType),\n joinPoolRequest: {\n assets: sortedTokens,\n maxAmountsIn,\n userData,\n fromInternalBalance: this.fromInternal,\n },\n value: '0',\n outputReference: this.opRef.key ? this.opRef.key.toString() : '0',\n };\n const callData = Relayer.encodeJoinPool(params);\n\n return {\n params,\n encoded: callData,\n };\n }\n\n public getAmountIn(): string {\n return this.hasTokenIn ? this.amountIn : '0';\n }\n\n public getAmountOut(): string {\n return this.hasTokenOut ? this.minOut : '0';\n }\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { MaxUint256, MaxInt256 } from '@ethersproject/constants';\nimport { SubgraphPoolBase, SwapV2 } from '@balancer-labs/sor';\nimport {\n Relayer,\n EncodeBatchSwapInput,\n OutputReference,\n} from '@/modules/relayer/relayer.module';\nimport { FundManagement, SwapType } from '../../types';\nimport { ActionType, Action, CallData } from './types';\nimport { BaseAction } from './baseAction';\n\nexport class Swap extends BaseAction implements Action {\n type: ActionType.BatchSwap;\n swaps: SwapV2[];\n limits: BigNumber[];\n private approveTokens: string[] = [];\n opRef: OutputReference[] = [];\n fromInternal;\n toInternal;\n\n constructor(\n swap: SwapV2,\n private mainTokenInIndex: number,\n private mainTokenOutIndex: number,\n public opRefKey: number,\n private assets: string[],\n private slippage: string,\n private pools: SubgraphPoolBase[],\n private user: string,\n private relayer: string\n ) {\n super(\n mainTokenInIndex,\n mainTokenOutIndex,\n swap.assetInIndex,\n swap.assetOutIndex,\n swap.amount,\n swap.returnAmount ?? '0',\n opRefKey,\n slippage,\n user,\n relayer\n );\n this.type = ActionType.BatchSwap;\n // Updates swap data to use chainedRef if required\n this.swaps = [{ ...swap, amount: this.amountIn }];\n const isBptIn = this.isBpt(pools, assets[swap.assetInIndex]);\n if (isBptIn) {\n // Older pools don't have pre-approval so need to add this as a step\n this.approveTokens.push(assets[swap.assetInIndex]);\n }\n this.fromInternal = this.getFromInternal(this.hasTokenIn, isBptIn);\n const isBptOut = this.isBpt(pools, assets[swap.assetOutIndex]);\n this.toInternal = this.getToInternal(this.hasTokenOut, isBptOut);\n this.limits = this.getLimits(\n assets,\n swap.assetInIndex,\n swap.assetOutIndex,\n swap.amount,\n this.hasTokenIn,\n this.hasTokenOut,\n this.minOut\n );\n if (this.opRefStart.index) {\n this.opRef.push(this.opRefStart);\n }\n }\n\n private getLimits(\n assets: string[],\n assetInIndex: number,\n assetOutIndex: number,\n swapAmount: string,\n hasTokenIn: boolean,\n hasTokenOut: boolean,\n minOut: string\n ): BigNumber[] {\n const limits = assets.map(() => BigNumber.from(0));\n // tokenIn/Out will come from/go to the user. Any other tokens are intermediate and will be from/to Relayer\n if (hasTokenIn) {\n limits[assetInIndex] = BigNumber.from(swapAmount);\n } else {\n // This will be a chained swap/input amount\n limits[assetInIndex] = MaxInt256;\n }\n if (hasTokenOut) {\n limits[assetOutIndex] = BigNumber.from(minOut).mul(-1);\n }\n return limits;\n }\n\n private updateLimits(limits: BigNumber[], newSwap: Swap): void {\n if (newSwap.hasTokenIn) {\n // We need to add amount for each swap that uses tokenIn to get correct total\n limits[newSwap.swaps[0].assetInIndex] = limits[\n newSwap.swaps[0].assetInIndex\n ].add(newSwap.amountIn);\n }\n if (newSwap.hasTokenOut) {\n // We need to add amount for each swap that uses tokenOut to get correct total (should be negative)\n limits[newSwap.swaps[0].assetOutIndex] = limits[\n newSwap.swaps[0].assetOutIndex\n ].sub(newSwap.minOut);\n }\n }\n\n isChainedSwap(swap: Swap): boolean {\n return (\n this.opRef[this.swaps.length - 1] &&\n this.toInternal === swap.fromInternal &&\n this.receiver === swap.sender &&\n this.opRef[this.swaps.length - 1].key.toString() === swap.amountIn\n );\n }\n\n // If swap has different send/receive params than previous then it will need to be done separately\n canAddSwap(newSwap: Swap): boolean {\n if (this.isChainedSwap(newSwap)) return true;\n return (\n newSwap.fromInternal === this.fromInternal &&\n newSwap.toInternal === this.toInternal &&\n newSwap.receiver === this.receiver &&\n newSwap.sender === this.sender\n );\n }\n\n callData(): CallData {\n const calls: string[] = [];\n\n for (const token of this.approveTokens) {\n // If swap tokenIn is a BPT then:\n // new pools have automatic infinite vault allowance, but not old ones\n // const key = Relayer.fromChainedReference(action.swaps[0].amount);\n // const readOnlyRef = Relayer.toChainedReference(key, false);\n // const approval = Relayer.encodeApproveVault(token, readOnlyRef.toString());\n // TODO fix approval amount\n // TODO only approve once\n const approval = Relayer.encodeApproveVault(token, MaxUint256.toString());\n calls.push(approval);\n }\n\n const funds: FundManagement = {\n sender: this.sender,\n recipient: this.receiver,\n fromInternalBalance: this.fromInternal,\n toInternalBalance: this.toInternal,\n };\n const batchSwapInput: EncodeBatchSwapInput = {\n swapType: SwapType.SwapExactIn,\n swaps: this.swaps,\n assets: this.assets,\n funds,\n limits: this.limits.map((l) => l.toString()),\n deadline: BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value: '0',\n outputReferences: this.opRef,\n };\n\n const encodedBatchSwap = Relayer.encodeBatchSwap(batchSwapInput);\n calls.push(encodedBatchSwap);\n return {\n params: batchSwapInput,\n encoded: calls,\n };\n }\n getAmountIn(): string {\n return this.limits[this.mainTokenInIndex].toString();\n }\n getAmountOut(): string {\n return this.limits[this.mainTokenOutIndex].abs().toString();\n }\n\n copy(): Swap {\n return new Swap(\n this.swaps[0],\n this.mainTokenInIndex,\n this.mainTokenOutIndex,\n this.opRefKey,\n this.assets,\n this.slippage,\n this.pools,\n this.user,\n this.relayer\n );\n }\n\n addSwap(swap: Swap): void {\n const isChainedSwap = this.isChainedSwap(swap);\n this.swaps.push(swap.swaps[0]);\n // Merge approveTokens without any duplicates\n this.approveTokens = [\n ...new Set([...this.approveTokens, ...swap.approveTokens]),\n ];\n this.toInternal = swap.toInternal;\n this.receiver = swap.receiver;\n this.hasTokenOut = swap.hasTokenOut;\n this.minOut = swap.minOut;\n this.opRef = [...this.opRef, ...swap.opRef];\n if (!isChainedSwap) {\n this.amountIn = BigNumber.from(this.amountIn)\n .add(swap.amountIn)\n .toString();\n }\n this.updateLimits(this.limits, swap);\n }\n\n isBpt(pools: SubgraphPoolBase[], token: string): boolean {\n return pools.some((p) => p.address.toLowerCase() === token.toLowerCase());\n }\n}\n","import { ActionType, Actions } from './types';\nimport { Swap } from './swap';\n\n/**\n * Categorize each action into a Join, Middle or Exit.\n * @param actions\n * @returns\n */\nexport function categorizeActions(actions: Actions[]): Actions[] {\n const enterActions: Actions[] = [];\n const exitActions: Actions[] = [];\n const middleActions: Actions[] = [];\n for (const a of actions) {\n if (a.type === ActionType.Exit || a.type === ActionType.Join) {\n // joins/exits with tokenIn can always be done first\n if (a.hasTokenIn) enterActions.push(a);\n // joins/exits with tokenOut (and not tokenIn) can always be done last\n else if (a.hasTokenOut) exitActions.push(a);\n else middleActions.push(a);\n }\n // All other actions will be chained inbetween\n else middleActions.push(a);\n }\n const allActions: Actions[] = [\n ...enterActions,\n ...middleActions,\n ...exitActions,\n ];\n return allActions;\n}\n\n/**\n * This aims to minimise the number of Actions the Relayer multicall needs to call by batching sequential swaps together.\n * @param actions\n * @param assets\n * @returns\n */\nexport function batchSwapActions(allActions: Actions[]): Actions[] {\n /*\n batchSwaps are a collection of swaps that can all be called in a single batchSwap\n Can batch all swaps with same source\n Any swap without tokenIn && not BPT should be coming from internal balances\n Any swap with tokenIn or BPT should be coming from external balances\n */\n const orderedActions: Actions[] = [];\n let batchedSwaps: Swap | undefined = undefined;\n\n for (const a of allActions) {\n if (a.type === ActionType.BatchSwap) {\n if (!batchedSwaps) {\n batchedSwaps = a.copy();\n } else {\n if (batchedSwaps.canAddSwap(a)) {\n batchedSwaps.addSwap(a);\n } else {\n orderedActions.push(batchedSwaps);\n batchedSwaps = a.copy();\n }\n }\n } else {\n // Non swap action\n if (batchedSwaps) {\n orderedActions.push(batchedSwaps);\n // new batchSwap collection as there is a chained join/exit inbetween\n batchedSwaps = undefined;\n }\n orderedActions.push(a);\n }\n }\n if (batchedSwaps) orderedActions.push(batchedSwaps);\n\n return orderedActions;\n}\n\n/**\n * Organise Actions into order with least amount of calls.\n * @param actions\n * @param assets\n * @returns\n */\nexport function orderActions(actions: Actions[]): Actions[] {\n const categorizedActions = categorizeActions(actions);\n const orderedActions = batchSwapActions(categorizedActions);\n return orderedActions;\n}\n","import { Interface } from '@ethersproject/abi';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport {\n SubgraphPoolBase,\n SwapInfo,\n SwapTypes,\n SwapV2,\n} from '@balancer-labs/sor';\nimport {\n Relayer,\n EncodeJoinPoolInput,\n EncodeBatchSwapInput,\n ExitPoolData,\n} from '@/modules/relayer/relayer.module';\nimport { getPoolAddress } from '@/pool-utils';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { orderActions, ActionType, Actions } from './actions';\n\nimport balancerRelayerAbi from '@/lib/abi/BalancerRelayer.json';\nimport { Join } from './actions/join';\nimport { Exit } from './actions/exit';\nimport { Swap } from './actions/swap';\nimport { Logger } from '@/lib/utils/logger';\n\nconst balancerRelayerInterface = new Interface(balancerRelayerAbi);\n\n// Quickly switch useful debug logs on/off\nconst DEBUG = false;\n\nfunction debugLog(log: string) {\n const logger = Logger.getInstance();\n if (DEBUG) logger.info(log);\n}\n\nexport function canUseJoinExit(\n swapType: SwapTypes,\n tokenIn: string,\n tokenOut: string\n): boolean {\n if (\n swapType === SwapTypes.SwapExactOut ||\n tokenIn.toLowerCase() === AddressZero.toLowerCase() ||\n tokenOut.toLowerCase() === AddressZero.toLowerCase()\n )\n return false;\n else return true;\n}\n\n/**\n * Currently SOR only supports join/exit paths through Weighted pools.\n * Weighted pools should not have preminted BPT so can assume if a swap token is pool address it is a join or exit.\n * @param pools\n * @param swap\n * @param assets\n * @returns\n */\nexport function hasJoinExit(\n pools: SubgraphPoolBase[],\n swap: SwapV2,\n assets: string[]\n): boolean {\n const pool = pools.find((p) => p.id === swap.poolId);\n if (pool?.poolType !== 'Weighted') return false;\n const tokenIn = assets[swap.assetInIndex];\n const tokenOut = assets[swap.assetOutIndex];\n return [tokenIn, tokenOut].includes(pool.address);\n}\n\n/**\n * Finds if a swap returned by SOR is a join by checking if tokenOut === poolAddress\n * @param swap\n * @param assets\n * @returns\n */\nexport function isJoin(\n swap: SwapV2,\n assets: string[],\n poolType: string | undefined\n): boolean {\n if (poolType !== 'Weighted') return false;\n // token[join]bpt\n const tokenOut = assets[swap.assetOutIndex];\n const poolAddress = getPoolAddress(swap.poolId);\n return tokenOut.toLowerCase() === poolAddress.toLowerCase();\n}\n\n/**\n * Finds if a swap returned by SOR is an exit by checking if tokenIn === poolAddress\n * @param swap\n * @param assets\n * @returns\n */\nexport function isExit(\n swap: SwapV2,\n assets: string[],\n poolType: string | undefined\n): boolean {\n if (poolType !== 'Weighted') return false;\n // bpt[exit]token\n const tokenIn = assets[swap.assetInIndex];\n const poolAddress = getPoolAddress(swap.poolId);\n return tokenIn.toLowerCase() === poolAddress.toLowerCase();\n}\n\n/**\n * Find if any of the swaps are join/exits. If yes these swaps should be routed via Relayer.\n * @param pools\n * @param swaps\n * @param assets\n * @returns\n */\nexport function someJoinExit(\n pools: SubgraphPoolBase[],\n swaps: SwapV2[],\n assets: string[]\n): boolean {\n return swaps.some((swap) => {\n return hasJoinExit(pools, swap, assets);\n });\n}\n\n/**\n * Translate each swap into an Action. An Action is a join/exit/swap with the chained output refs.\n * @param swapType\n * @param tokenIn\n * @param tokenOut\n * @param swaps\n * @param assets\n * @param slippage\n * @param pools\n * @param user\n * @param relayer\n * @returns\n */\nexport function getActions(\n tokenIn: string,\n tokenOut: string,\n swaps: SwapV2[],\n assets: string[],\n slippage: string,\n pools: SubgraphPoolBase[],\n user: string,\n relayer: string\n): Actions[] {\n const tokenInIndex = assets.findIndex(\n (t) => t.toLowerCase() === tokenIn.toLowerCase()\n );\n const tokenOutIndex = assets.findIndex(\n (t) => t.toLowerCase() === tokenOut.toLowerCase()\n );\n const actions: Actions[] = [];\n let opRefKey = 0;\n for (const swap of swaps) {\n const poolType = pools.find((p) => p.id === swap.poolId)?.poolType;\n if (isJoin(swap, assets, poolType)) {\n const newJoin = new Join(\n swap,\n tokenInIndex,\n tokenOutIndex,\n opRefKey,\n assets,\n slippage,\n user,\n relayer\n );\n opRefKey = newJoin.nextOpRefKey;\n actions.push(newJoin);\n continue;\n } else if (isExit(swap, assets, poolType)) {\n const newExit = new Exit(\n swap,\n tokenInIndex,\n tokenOutIndex,\n opRefKey,\n assets,\n slippage,\n user,\n relayer\n );\n opRefKey = newExit.nextOpRefKey;\n actions.push(newExit);\n continue;\n } else {\n const newSwap = new Swap(\n swap,\n tokenInIndex,\n tokenOutIndex,\n opRefKey,\n assets,\n slippage,\n pools,\n user,\n relayer\n );\n opRefKey = newSwap.nextOpRefKey;\n actions.push(newSwap);\n continue;\n }\n }\n return actions;\n}\n\n/**\n * Given swapInfo from the SOR construct the Relayer multicall to execture swaps/joins/exits.\n * @param swapInfo Returned from SOR\n * @param swapType Only supports ExactIn\n * @param pools Pool info from SOR\n * @param user Address of user\n * @param relayerAddress Address of Relayer (>=V4)\n * @param wrappedNativeAsset Address of Native asset\n * @param slippage [bps], eg: 1 === 0.01%, 100 === 1%\n * @param authorisation Encoded authorisation call.\n * @returns\n */\nexport function buildRelayerCalls(\n swapInfo: SwapInfo,\n pools: SubgraphPoolBase[],\n user: string,\n relayerAddress: string,\n wrappedNativeAsset: string,\n slippage: string,\n authorisation: string | undefined\n): {\n to: string;\n data: string;\n rawCalls: string[];\n inputs: (EncodeBatchSwapInput | ExitPoolData | EncodeJoinPoolInput)[];\n} {\n // For each 'swap' create a swap/join/exit action\n const actions = getActions(\n swapInfo.tokenIn,\n swapInfo.tokenOut,\n swapInfo.swaps,\n swapInfo.tokenAddresses,\n slippage,\n pools,\n user,\n relayerAddress\n );\n // Arrange action into order that will create minimal amount of calls\n const orderedActions = orderActions(actions);\n\n const calls: string[] = [];\n const inputs: (EncodeBatchSwapInput | ExitPoolData | EncodeJoinPoolInput)[] =\n [];\n if (authorisation)\n // Uses relayer to approve itself to act in behalf of the user\n calls.push(\n Relayer.encodeSetRelayerApproval(relayerAddress, true, authorisation)\n );\n\n // Create encoded call for each action\n for (const action of orderedActions) {\n if (action.type === ActionType.Exit || action.type === ActionType.Join) {\n const pool = pools.find((p) => p.id === action.poolId);\n if (pool === undefined)\n throw new BalancerError(BalancerErrorCode.NO_POOL_DATA);\n const { params, encoded } = action.callData(pool, wrappedNativeAsset);\n calls.push(encoded as string);\n inputs.push(params);\n }\n if (action.type === ActionType.BatchSwap) {\n const { params, encoded } = action.callData();\n calls.push(...encoded);\n inputs.push(params);\n }\n }\n\n // Safety check to make sure amounts/limits from calls match expected\n checkAmounts(\n orderedActions.map((a) => BigNumber.from(a.getAmountIn())),\n orderedActions.map((a) => BigNumber.from(a.getAmountOut())),\n swapInfo,\n slippage\n );\n // encode relayer multicall\n const callData = balancerRelayerInterface.encodeFunctionData('multicall', [\n calls,\n ]);\n\n return {\n to: relayerAddress,\n data: callData,\n rawCalls: calls,\n inputs,\n };\n}\n\nfunction checkAmounts(\n amountsIn: BigNumber[],\n amountsOut: BigNumber[],\n swapInfo: SwapInfo,\n slippage: string\n): void {\n const totalIn = amountsIn.reduce(\n (total = BigNumber.from(0), amount) => (total = total.add(amount))\n );\n const totalOut = amountsOut.reduce(\n (total = BigNumber.from(0), amount) => (total = total.add(amount))\n );\n // totalIn should equal the original input swap amount\n // totalOut should equal the return amount from SOR minus any slippage allowance\n debugLog(`${totalIn.toString()} totalIn`);\n debugLog(`${swapInfo.swapAmount.toString()} swapInfo.swapAmount`);\n debugLog(`${totalOut.toString()} totalOut`);\n debugLog(\n `${subSlippage(\n swapInfo.returnAmount,\n BigNumber.from(slippage)\n ).toString()} slippage`\n );\n debugLog(`${swapInfo.returnAmount.toString()} swapInfo.returnAmount`);\n const diffOut = totalOut.sub(\n subSlippage(swapInfo.returnAmount, BigNumber.from(slippage))\n );\n if (!totalIn.eq(swapInfo.swapAmount) || !diffOut.lt(`3`))\n throw new BalancerError(BalancerErrorCode.RELAY_SWAP_AMOUNTS);\n /* ExactOut case\n // totalIn should equal the return amount from SOR (this is the amount in) plus any slippage allowance\n // totalOut should equal the original input swap amount (the exact amount out)\n if (\n !totalIn.eq(\n addSlippage(swapInfo.returnAmount, BigNumber.from(slippage))\n ) ||\n !totalOut.eq(swapInfo.swapAmount)\n )\n throw new BalancerError(BalancerErrorCode.RELAY_SWAP_AMOUNTS);\n */\n}\n","import { ClaimService, IClaimService } from '@/modules/claims/ClaimService';\nimport { BalancerSdkConfig, BalancerNetworkConfig } from '@/types';\nimport { Swaps } from './swaps/swaps.module';\nimport { Relayer } from './relayer/relayer.module';\nimport { Subgraph } from './subgraph/subgraph.module';\nimport { Sor } from './sor/sor.module';\nimport { getNetworkConfig } from './sdk.helpers';\nimport { Pricing } from './pricing/pricing.module';\nimport { ContractInstances, Contracts } from './contracts/contracts.module';\nimport { Pools } from './pools';\nimport { Data } from './data';\nimport { VaultModel } from './vaultModel/vaultModel.module';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { Migrations } from './liquidity-managment/migrations';\nimport { Logger } from '@/lib/utils/logger';\n\nexport interface BalancerSDKRoot {\n config: BalancerSdkConfig;\n sor: Sor;\n subgraph: Subgraph;\n pools: Pools;\n data: Data;\n swaps: Swaps;\n relayer: Relayer;\n networkConfig: BalancerNetworkConfig;\n provider: JsonRpcProvider;\n claimService?: IClaimService;\n}\n\nexport class BalancerSDK implements BalancerSDKRoot {\n readonly swaps: Swaps;\n readonly relayer: Relayer;\n readonly pricing: Pricing;\n readonly pools: Pools;\n readonly data: Data;\n balancerContracts: Contracts;\n vaultModel: VaultModel;\n readonly networkConfig: BalancerNetworkConfig;\n readonly provider: JsonRpcProvider;\n readonly claimService?: IClaimService;\n readonly migrationService?: Migrations;\n\n constructor(\n public config: BalancerSdkConfig,\n public sor = new Sor(config),\n public subgraph = new Subgraph(config)\n ) {\n const logger = Logger.getInstance();\n logger.setLoggingEnabled(!!config.enableLogging);\n this.networkConfig = getNetworkConfig(config);\n this.provider = sor.provider as JsonRpcProvider;\n\n this.balancerContracts = new Contracts(\n this.networkConfig.addresses.contracts,\n sor.provider\n );\n\n this.data = new Data(\n this.networkConfig,\n sor.provider,\n this.balancerContracts,\n config.subgraphQuery,\n config.coingecko\n );\n\n this.swaps = new Swaps(this.config);\n this.relayer = new Relayer();\n this.pricing = new Pricing(config, this.swaps);\n\n this.pools = new Pools(\n this.networkConfig,\n this.data,\n this.balancerContracts\n );\n\n if (this.data.liquidityGauges) {\n this.claimService = new ClaimService(\n this.data.liquidityGauges,\n this.data.feeDistributor,\n this.networkConfig.chainId,\n this.contracts.multicall,\n this.networkConfig.addresses.contracts.gaugeClaimHelper,\n this.networkConfig.addresses.contracts.balancerMinter\n );\n this.migrationService = new Migrations({\n relayerAddress: this.networkConfig.addresses.contracts.balancerRelayer,\n poolsRepository: this.data.pools,\n gaugesRepository: this.data.liquidityGauges.subgraph,\n provider: this.provider,\n });\n }\n this.vaultModel = new VaultModel(\n this.data.poolsForSimulations,\n this.networkConfig.addresses.tokens.wrappedNativeAsset\n );\n }\n\n /**\n * Expose balancer contracts, e.g. Vault, LidoRelayer.\n */\n get contracts(): ContractInstances {\n return this.balancerContracts.contracts;\n }\n}\n","import { Findable } from '../types';\nimport { Pool } from '@/types';\nimport {\n PoolAttribute,\n PoolRepository,\n PoolsFallbackRepositoryOptions,\n PoolsRepositoryFetchOptions,\n} from './types';\nimport { Logger } from '@/lib/utils/logger';\n\n/**\n * The fallback provider takes multiple PoolRepository's in an array and uses them in order\n * falling back to the next one if a request times out.\n *\n * This is useful for using the Balancer API while being able to fall back to the graph if it is down\n * to ensure Balancer is maximally decentralized.\n **/\nexport class PoolsFallbackRepository implements Findable {\n currentProviderIdx: number;\n timeout: number;\n\n constructor(\n private readonly providers: PoolRepository[],\n options: PoolsFallbackRepositoryOptions = {}\n ) {\n this.currentProviderIdx = 0;\n this.timeout = options.timeout || 10000;\n }\n\n async fetch(options?: PoolsRepositoryFetchOptions): Promise {\n return this.fallbackQuery('fetch', [options]);\n }\n\n get currentProvider(): PoolRepository | undefined {\n if (\n !this.providers.length ||\n this.currentProviderIdx >= this.providers.length\n ) {\n return;\n }\n\n return this.providers[this.currentProviderIdx];\n }\n\n async find(id: string): Promise {\n return this.fallbackQuery('find', [id]);\n }\n\n async findBy(\n attribute: PoolAttribute,\n value: string\n ): Promise {\n return this.fallbackQuery('findBy', [attribute, value]);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async fallbackQuery(func: string, args: unknown[]): Promise {\n if (this.currentProviderIdx >= this.providers.length) {\n throw new Error('No working providers found');\n }\n\n let result;\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const currentProvider = this.providers[this.currentProviderIdx] as any;\n result = await Promise.race([\n // eslint-disable-next-line prefer-spread\n currentProvider[func].apply(currentProvider, args),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error('timeout')), this.timeout)\n ),\n ]);\n } catch (e: unknown) {\n const message = (e as Error).message;\n if (message === 'timeout') {\n const logger = Logger.getInstance();\n logger.warn(\n 'Provider ' +\n this.currentProviderIdx +\n ' timed out, falling back to next provider'\n );\n } else {\n const logger = Logger.getInstance();\n logger.warn(\n `Provider ${this.currentProviderIdx} failed with error, falling back to next provider.`\n );\n logger.warn(message);\n }\n this.currentProviderIdx++;\n result = await this.fallbackQuery.call(this, func, args);\n }\n\n return result;\n }\n}\n","import { Findable, Pool, Searchable } from '@/types';\nimport { PoolAttribute } from './types';\n\nexport class PoolsStaticRepository\n implements Findable, Searchable\n{\n constructor(private pools: Pool[]) {}\n\n async find(id: string): Promise {\n return this.pools.find((pool) => {\n return pool.id.toLowerCase() === id.toLowerCase();\n });\n }\n\n async findBy(\n attribute: PoolAttribute,\n value: string\n ): Promise {\n return this.pools.find((pool) => {\n return pool[attribute] === value;\n });\n }\n\n async all(): Promise {\n return this.pools;\n }\n\n async where(filter: (pool: Pool) => boolean): Promise {\n return (await this.all()).filter(filter);\n }\n}\n","import { Findable, Price, TokenPrices } from '@/types';\n\nexport class StaticTokenPriceProvider implements Findable {\n tokenPrices: TokenPrices;\n constructor(tokenPrices: TokenPrices) {\n this.tokenPrices = Object.fromEntries(\n Object.entries(tokenPrices).map(([address, price]) => {\n return [address.toLowerCase(), price];\n })\n );\n }\n\n async find(address: string): Promise {\n const lowercaseAddress = address.toLowerCase();\n const price = this.tokenPrices[lowercaseAddress];\n if (!price) return;\n return price;\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute != 'address') {\n return undefined;\n }\n\n return this.find(value);\n }\n}\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { Zero, WeiPerEther as ONE } from '@ethersproject/constants';\n\n// Should match MAX_WEIGHTED_TOKENS from v2-helpers/constants\n// Including would introduce a dependency\nconst MaxWeightedTokens = 100;\n\n/**\n * Normalize an array of token weights to ensure they sum to `1e18`\n * @param weights - an array of token weights to be normalized\n * @returns an equivalent set of normalized weights\n */\nexport function toNormalizedWeights(weights: BigNumber[]): BigNumber[] {\n // When the number is exactly equal to the max, normalizing with common inputs\n // leads to a value < 0.01, which reverts. In this case fill in the weights exactly.\n if (weights.length == MaxWeightedTokens) {\n return Array(MaxWeightedTokens).fill(ONE.div(MaxWeightedTokens));\n }\n\n const sum = weights.reduce((total, weight) => total.add(weight), Zero);\n if (sum.eq(ONE)) return weights;\n\n const normalizedWeights = [];\n let normalizedSum = Zero;\n for (let index = 0; index < weights.length; index++) {\n if (index < weights.length - 1) {\n normalizedWeights[index] = weights[index].mul(ONE).div(sum);\n normalizedSum = normalizedSum.add(normalizedWeights[index]);\n } else {\n normalizedWeights[index] = ONE.sub(normalizedSum);\n }\n }\n\n return normalizedWeights;\n}\n\n/**\n * Check whether a set of weights are normalized\n * @param weights - an array of potentially unnormalized weights\n * @returns a boolean of whether the weights are normalized\n */\nexport const isNormalizedWeights = (weights: BigNumberish[]): boolean => {\n const totalWeight = weights.reduce(\n (total: BigNumber, weight) => total.add(weight),\n Zero\n );\n return totalWeight.eq(ONE);\n};\n"],"names":["BasePoolExitKind","StablePoolJoinKind","StablePhantomPoolJoinKind","StablePoolExitKind","WeightedPoolJoinKind","WeightedPoolExitKind","BasePoolEncoder","recoveryModeExit","bptAmountIn","defaultAbiCoder","encode","RECOVERY_MODE","StablePoolEncoder","constructor","joinInit","amountsIn","INIT","joinCollectProtocolFees","COLLECT_PROTOCOL_FEES","joinExactTokensInForBPTOut","minimumBPT","EXACT_TOKENS_IN_FOR_BPT_OUT","joinTokenInForExactBPTOut","bptAmountOut","enterTokenIndex","TOKEN_IN_FOR_EXACT_BPT_OUT","exitExactBPTInForOneTokenOut","exitTokenIndex","EXACT_BPT_IN_FOR_ONE_TOKEN_OUT","exitExactBPTInForTokensOut","EXACT_BPT_IN_FOR_TOKENS_OUT","exitBPTInForExactTokensOut","amountsOut","maxBPTAmountIn","BPT_IN_FOR_EXACT_TOKENS_OUT","WeightedPoolEncoder","joinAllTokensInForExactBPTOut","ALL_TOKENS_IN_FOR_EXACT_BPT_OUT","ManagedPoolEncoder","exitForManagementFees","MANAGEMENT_FEE_TOKENS_OUT","ComposableStablePoolJoinKind","ComposableStablePoolExitKind","ComposableStablePoolEncoder","exitExactBPTInForAllTokensOut","EXACT_BPT_IN_FOR_ALL_TOKENS_OUT","isProduction","process","env","NODE_ENV","prefix","invariant","condition","message","Error","provided","value","concat","getPoolAddress","poolId","length","slice","getPoolSpecialization","specializationCode","parseInt","getPoolNonce","BigNumber","from","Network","POOLS_GENERIC","IdsMap","Pagination","PerPage","PerPool","PerPoolInitial","DelegateOwner","ZeroAddress","DynamicFees","Gauntlet","BlockList","ExcludedPoolTypes","Stable","AllowList","Investment","Factories","Stakable","Metadata","name","hasIcon","POOLS_MAP","GOERLI","staBAL","bbAaveUSD","v1","v2","veBAL","MAINNET","POLYGON","xMatic","stMatic","mai4","maiBbaUsd","ARBITRUM","GNOSIS","PoolGaugesAttributes","PoolShareAttributes","GaugeShareAttributes","PoolSpecialization","UserBalanceOpKind","PoolBalanceOpKind","PoolType","Logger","this","enableLogging","static","instance","setLoggingEnabled","enabled","info","warn","console","error","time","timeEnd","transposeMatrix","matrix","map","_","columnIndex","row","AssetHelpers","wethAddress","ETH","AddressZero","isETH","token","isEqual","isWETH","WETH","translateToERC20","getAddress","sortTokens","tokens","others","forEach","array","erc20Tokens","sortedTranspose","sort","tokenA","tokenB","toLowerCase","cmpTokens","sortedErc20s","sortedOthers","includes","addressA","addressB","balancerErrorCodes","BalancerErrors","async","accountToAddress","account","Signer","isSigner","address","RelayerAction","isErrorCode","errorCode","replace","Object","keys","parseErrorCode","actualError","tryParseErrorCode","isBalancerError","values","encodeError","encodedError","entries","find","RelayerAuthorization","encodeCalldataAuthorization","calldata","deadline","signature","encodedDeadline","hexZeroPad","hexValue","v","r","s","splitSignature","signJoinAuthorization","validator","user","allowedSender","allowedCalldata","nonce","signAuthorizationFor","JoinPool","signExitAuthorization","ExitPool","signSwapAuthorization","Swap","signBatchSwapAuthorization","BatchSwap","signSetRelayerApprovalAuthorization","SetRelayerApproval","type","MAX_DEADLINE","MaxUint256","chainId","provider","getNetwork","userAddress","getNextNonce","domain","version","verifyingContract","types","sender","toString","_signTypedData","BalancerMinterAuthorization","signSetMinterApproval","minterContract","minter","approval","SetMinterApproval","BZERO","BigInt","BONE","ONE","_require","b","_computeScalingFactor","tokenDecimals","decimalsDifference","_upscale","amount","scalingFactor","SolidityMaths","mulDownFixed","_upscaleArray","amounts","scalingFactors","upscaledAmounts","Array","i","_downscaleDown","divDownFixed","_downscaleDownArray","downscaledAmounts","a","c","args","reduce","previous","current","roundUp","divUp","divDown","product","aInflated","x","y","raw","LogExpMath","pow","maxError","add","mulUpFixed","MAX_POW_RELATIVE_ERROR","ONE_18","x_int256","MILD_EXPONENT_BOUND","y_int256","logx_times_y","LN_36_LOWER_BOUND","LN_36_UPPER_BOUND","ln_36_x","_ln_36","_ln","MIN_NATURAL_EXPONENT","MAX_NATURAL_EXPONENT","exp","firstAN","x0","a0","x1","a1","ONE_20","x2","a2","x3","a3","x4","a4","x5","a5","x6","a6","x7","a7","x8","a8","x9","a9","term","seriesSum","z","ONE_36","z_squared","num","sum","a10","x10","a11","x11","parsePoolInfo","pool","wrappedNativeAsset","unwrapNativeAsset","poolTokens","decimals","_a","balancesEvm","parseFixed","balance","toBigInt","weights","weight","priceRates","priceRate","scalingFactorsRaw","d","sf","upScaledBalances","assetHelpers","ampWithPrecision","amp","higherBalanceTokenIndex","indexOf","max","scalingFactorsWithoutBpt","scalingFactorsRawWithoutBpt","poolTokensWithoutBpt","balancesEvmWithoutBpt","priceRatesWithoutBpt","upScaledBalancesWithoutBpt","bptIndex","splice","swapFeeEvm","swapFee","totalSharesEvm","totalShares","TOKENS_GENERIC","Popular","Symbols","Addresses","nativeAsset","wNativeAsset","BAL","TOKENS_MAP","bbaUSD","PriceChainMap","bbaUSDv2","TOKENS","networkId","_permanentCensorErrors","_censorErrors","LogLevels","debug","default","warning","off","_logLevel","_globalLogger","_normalizeError","missing","form","normalize","push","join","String","fromCharCode","_checkNormalize","LogLevel","ErrorCode","HEX","defineProperty","enumerable","writable","_log","logLevel","level","throwArgumentError","log","apply","levels","DEBUG","INFO","WARNING","makeError","code","params","errors","UNKNOWN_ERROR","messageDetails","key","Uint8Array","hex","JSON","stringify","reason","url","NUMERIC_FAULT","fault","CALL_EXCEPTION","INSUFFICIENT_FUNDS","MISSING_NEW","NONCE_EXPIRED","REPLACEMENT_UNDERPRICED","TRANSACTION_REPLACED","UNPREDICTABLE_GAS_LIMIT","throwError","INVALID_ARGUMENT","argument","assert","assertArgument","checkNormalize","UNSUPPORTED_OPERATION","operation","checkSafeUint53","checkArgumentCount","count","expectedCount","MISSING_ARGUMENT","UNEXPECTED_ARGUMENT","checkNew","target","kind","checkAbstract","censorship","permanent","globalLogger","logger","names","formatUnits","unitName","index","formatFixed","parseUnits","yieldTokens","waUSDT","waUSDC","waDAI","wamDAI","wamUSDC","wamUSDT","wrappedTokensMap","aToken","underlying","wrappedATokenInterface","Interface","AaveRates","multicall","network","addresses","payload","wrappedATokenAddress","callData","encodeFunctionData","res","callStatic","aggregate","p","parseFloat","wrappedAToken","tokenAddressForPricing","addressMapIn","unwrapToken","addressMap","wrappedAddress","lowercase","toLocaleLowerCase","aaveChain","undefined","aaveWrappedMap","getEthValue","filter","Debouncer","fn","wait","limit","requestSets","promisedCalls","promisedCount","debounceCancel","fetch","attr","_b","Set","size","execute","promise","timeout","resolve","reject","Promise","rej","makePromise","clearTimeout","call","requestAttrs","then","results","catch","response","data","setTimeout","bind","valueWithTrimmedDecimals","RegExp","result","match","parsedValue","_parseFixed","_formatFixed","bpsPerOne","mulSlippage","slippage","mul","div","subSlippage","delta","sub","addSlippage","isSameAddress","address1","address2","insert","arr","newItem","removeItem","newArray","reorderArrays","reference","original","some","indexesOfOriginal","othersResorted","indexOfOriginal","arrIndex","isLinearish","poolType","supportedPoolTypes","findEventInReceiptLogs","receipt","to","contractInterface","logName","event","logs","parseLog","getInstance","parsedLog","getRandomBytes32","fill","Math","random","BalancerAPIArgsFormatter","format","SubgraphArgsFormatter","operatorMap","gt","lt","eq","in","not_in","contains","whereQuery","where","operator","GraphQLArgsBuilder","merge","other","mergedArgs","mergeWith","objValue","srcValue","isArray","formatter","_abi","inputs","components","internalType","stateMutability","anonymous","indexed","outputs","AaveLinearPool__factory","utils","signerOrProvider","Contract","abi","AaveLinearPoolFactory__factory","AaveWrapping__factory","Authoriser__factory","BalancerHelpers__factory","BalancerMinter__factory","BalancerPoolDataQueries__factory","BalancerRelayer__factory","BatchRelayerLibrary__factory","ComposableStablePool__factory","ComposableStablePoolFactory__factory","ConvergentCurvePool__factory","constant","payable","ERC20__factory","ERC4626LinearPool__factory","ERC4626LinearPoolFactory__factory","EulerLinearPool__factory","EulerLinearPoolFactory__factory","FXPool__factory","GaugeClaimHelper__factory","GearboxLinearPool__factory","GearboxLinearPoolFactory__factory","GyroConfig__factory","LidoRelayer__factory","LinearPool__factory","LiquidityGaugeV5__factory","Multicall__factory","Multicall3__factory","StablePool__factory","StaticATokenRateProvider__factory","Vault__factory","WeightedPool__factory","WeightedPoolFactory__factory","YearnLinearPool__factory","YearnLinearPoolFactory__factory","GyroEV2__factory","VeBal__factory","VeDelegationProxy__factory","SwapType","getLimitsForSlippage","tokensIn","tokensOut","swapType","deltas","assets","limits","Zero","tokenIn","slippageAmount","WeiPerEther","SwapExactOut","tokenOut","SwapExactIn","balancerVault","BALANCER_NETWORK_CONFIG","contracts","poolDataQueries","lidoRelayer","veBal","gaugeControllerCheckpointer","veBalProxy","gyroConfigProxy","addressesByNetwork","bal","weth","bbaUsd","bb_a_usd","lbpRaisingTokens","stETH","wstETH","urls","subgraph","gaugesSubgraph","blockNumberSubgraph","thirdParty","coingecko","nativeAssetId","platformId","pools","wETHwstETH","id","poolsToIgnore","sorConnectingTokens","symbol","sorTriPathMidPoolIds","gaugeClaimHelper","erc4626LinearPoolFactory","aaveLinearPoolFactory","OPTIMISM","averageBlockTime","FANTOM","vault","balancerRelayer","balancerHelpers","weightedPoolFactory","composableStablePoolFactory","yearnLinearPoolFactory","SEPOLIA","ZKEVM","balancerMinter","multicallBatchSize","AVALANCHE","BASE","networkAddresses","BalancerErrorCode","BalancerError","super","getMessage","ABOVE_MAX_TOKENS","BELOW_MIN_TOKENS","EXIT_DELTA_AMOUNTS","FEE_PROVIDER_NOT_PROVIDED","GAUGES_HELPER_ADDRESS_NOT_PROVIDED","GAUGES_NOT_FOUND","GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED","GAUGES_REWARD_TOKEN_EMPTY","INPUT_LENGTH_MISMATCH","INPUT_OUT_OF_BOUNDS","INPUT_TOKEN_INVALID","INVALID_PROTOCOL_ID","INVALID_SWAP_FEE_PERCENTAGE","INVALID_WEIGHTS","JOIN_DELTA_AMOUNTS","JOIN_WITH_ZERO_AMOUNT","MISSING_AMP","MISSING_DECIMALS","MISSING_PRICE_RATE","MISSING_TOKENS","MISSING_WEIGHT","NO_POOL_DATA","NO_VALUE_PARAMETER","POOL_DOESNT_EXIST","RELAY_SWAP_AMOUNTS","REWARD_TOKEN_ZERO","TIMESTAMP_IN_THE_FUTURE","TOKEN_MISMATCH","UNSUPPORTED_PAIR","UNSUPPORTED_POOL_TYPE","calcPriceImpact","bptAmount","bptZeroPriceImpact","isJoin","pi","calcPriceImpactJoin","calcPriceImpactExit","AMP_PRECISION","bptSpotPrice","balances","bptSupply","tokenIndexIn","totalCoins","D","numTokens","prevInvariant","ampTimesTotal","P_D","j","_calculateInvariant","S","D_P","alpha","beta","gamma","partial_x","minus_partial_D","divUpFixed","StablePoolPriceImpact","tokenAmounts","StablePoolExit","buildExitExactBPTIn","exiter","bptIn","shouldUnwrapNativeAsset","singleTokenOut","toInternalBalance","checkInputsExactBPTIn","sortedValues","sortValuesExitExactBptIn","minAmountsOut","expectedAmountsOut","singleTokenOutIndex","calcTokenOutGivenExactBptIn","calcTokensOutGivenExactBptIn","userData","encodedData","encodeExitPool","priceImpact","buildExitExactTokensOut","checkInputsExactTokensOut","sortValuesExitExactTokensOut","expectedBPTIn","maxBPTIn","calcBptInGivenExactTokensOut","downScaledAmountsOut","buildRecoveryExit","isNegative","t","tokensList","parsedPoolInfo","upScaledAmountsOut","amountOut","SOR","StableMathBigInt","_calcTokenOutGivenExactBptIn","downscaledAmountOut","amountsOutScaledDown","_calcTokensOutGivenExactBptIn","_calcBptInGivenExactTokensOut","functionName","attributes","recipient","exitPoolRequest","createInterface","StablePoolJoin","buildJoin","joiner","checkInputs","sortValues","expectedBPTOut","minBPTOut","calcBptOutGivenExactTokensIn","encodeJoinPool","sortedAmountsIn","upScaledAmountsIn","_calcBptOutGivenExactTokensIn","joinPoolRequest","maxAmountsIn","fromInternalBalance","StablePoolLiquidity","calcTotal","sumBalance","sumValue","price","usd","avgPrice","SCALING_FACTOR","StablePoolSpotPrice","calcPoolSpotPrice","stablePool","StablePool","fromPool","poolPairData","parsePoolPairData","_spotPriceAfterSwapExactTokenInForTokenOut","ZERO","exit","liquidity","spotPriceCalculator","priceImpactCalculator","PhantomStablePoolSpotPrice","metaStablePool","PhantomStablePool","ComposableStablePoolJoin","sortValuesBasedOnPoolVersion","buildExactTokensInForBPTOut","sortV1","encodeUserDataExactTokensInForBPTOut","assetsWithBpt","encodedUserData","maxAmountsInWithBpt","sortV4","ComposableStablePoolExit","singleTokenOutIndexWithoutBpt","minAmountsOutWithBpt","downscaledAmountsOutWithoutBpt","downscaledAmountsOutWithBpt","checkInputsRecoveryExit","lte","poolTypeVersion","isInRecoveryMode","parsedValues","downscaledAmountsOutWithBptWithRounding","isZero","upScaledAmountsOutWithoutBpt","ComposableStable","WeightedPoolPriceImpact","WeightedPoolExit","WeightedMaths","WeightedPoolJoin","WeightedPoolLiquidity","sumWeight","toFixed","totalWeight","total","WeightedPoolSpotPrice","isBPTAsToken","bptAsToken","weightedPool","WeightedPool","spotPrice","pop","Weighted","MetaStablePoolLiquidity","MetaStablePoolSpotPrice","MetaStablePool","MetaStable","StablePhantomPoolExit","StablePhantomPoolJoin","StablePhantom","LinearPriceImpact","LinearPoolExit","LinearMaths","LinearPoolJoin","LinearPoolLiquidity","LinearPoolSpotPrice","linearPool","LinearPool","Linear","FXExitConcern","FXLiquidityConcern","FXSpotPriceConcern","FXPriceImpactConcern","FXJoinConcern","FX","GyroExitConcern","GyroLiquidityConcern","GyroSpotPriceConcern","GyroPriceImpactConcern","GyroJoinConcern","Gyro","PoolTypeConcerns","config","weighted","stable","composableStable","metaStable","stablePhantom","linear","Liquidity","tokenPrices","parsedTokens","subPoolLiquidity","all","findBy","getLiquidity","totalBPT","bptInParentPool","liquidityInParentPool","totalSubPoolLiquidity","totalLiquidity","subPool","nonPoolTokens","nonPoolTokensWithUpdatedPrice","tokenPrice","latestUSDPrice","parsedTokenLiquidity","filterTokens","obj","populateGauges","gauges","claimableRewards","claimableTokens","gauge","rewards","populateGauge","it","reduceRewardTokens","rewardTokens","liquidityGaugeV5Interface","balancerMinterInterface","gaugeClaimHelperInterface","ClaimService","liquidityGauges","feeDistributor","gaugeClaimHelperAddress","balancerMinterAddress","getGauges","gaugeAddresses","getRewardTokens","retrieveClaimableTokens","retrieveClaimableRewards","getClaimableRewardTokens","flatMap","expectedValues","tokenAddress","every","expectedTokensValue","getClaimableBalances","tokenBalance","claimBalances","paths","getPayload","res0x","path","reduceClaimableRewards","gaugeAddress","getArguments","balAddress","reduceClaimableTokens","queryBatchSwap","vaultContract","swaps","funds","err","__assign","assign","n","arguments","prototype","hasOwnProperty","docCache","Map","fragmentSourceMap","printFragmentWarnings","experimentalFragmentVariables","string","trim","processFragments","ast","seenKeys","definitions","fragmentDefinition","fragmentName","sourceKey","loc","source","body","substring","start","end","sourceKeySet","get","has","set","parseDocument","cacheKey","parsed","parse","allowLegacyFragmentVariables","doc","workSet","node","startToken","endToken","stripLoc","gql","literals","_i","arg","gql_1","extras","clear","resetCaches","disableFragmentWarnings","enableExperimentalFragmentVariables","disableExperimentalFragmentVariables","AmpUpdate_OrderBy","BalancerSnapshot_OrderBy","Balancer_OrderBy","CircuitBreaker_OrderBy","GradualWeightUpdate_OrderBy","InvestType","JoinExit_OrderBy","LatestPrice_OrderBy","ManagementOperation_OrderBy","OperationType","OrderDirection","PoolContract_OrderBy","PoolHistoricalLiquidity_OrderBy","PoolShare_OrderBy","PoolSnapshot_OrderBy","PoolToken_OrderBy","Pool_OrderBy","PriceRateProvider_OrderBy","ProtocolIdData_OrderBy","SwapFeeUpdate_OrderBy","Swap_OrderBy","TokenPrice_OrderBy","TokenSnapshot_OrderBy","Token_OrderBy","TradePairSnapshot_OrderBy","TradePair_OrderBy","UserInternalBalance_OrderBy","User_OrderBy","_SubgraphErrorPolicy_","gql$1","SubgraphPoolShareFragmentDoc","SubgraphPoolFragmentDoc","SubgraphPoolSnapshotFragmentDoc","SubgraphJoinExitFragmentDoc","SubgraphBalancerFragmentDoc","SubgraphTokenPriceFragmentDoc","SubgraphTokenLatestPriceFragmentDoc","SubgraphUserFragmentDoc","PoolShareDocument","PoolSharesDocument","PoolsDocument","AllPoolsDocument","PoolDocument","PoolHistoricalLiquiditiesDocument","PoolSnapshotsDocument","JoinExitsDocument","BalancersDocument","TokenPricesDocument","TokenLatestPricesDocument","TokenLatestPriceDocument","UserDocument","UsersDocument","defaultWrapper","action","_operationName","_operationType","getSdk","client","withWrapper","PoolShare","variables","requestHeaders","wrappedRequestHeaders","request","PoolShares","Pools","AllPools","Pool","PoolHistoricalLiquidities","PoolSnapshots","JoinExits","Balancers","TokenPrices","TokenLatestPrices","TokenLatestPrice","User","Users","Chain","GaugeFactory_OrderBy","GaugeShare_OrderBy","GaugeType_OrderBy","GaugeVote_OrderBy","Gauge_OrderBy","LiquidityGauge_OrderBy","LockSnapshot_OrderBy","OmniVotingEscrowLock_OrderBy","RewardToken_OrderBy","RootGauge_OrderBy","SingleRecipientGauge_OrderBy","VotingEscrowLock_OrderBy","VotingEscrow_OrderBy","SubgraphGaugeShareFragmentDoc","SubgraphLiquidityGaugeFragmentDoc","SubgraphPoolWithPreferentialGaugeFragmentDoc","GaugeShareDocument","GaugeSharesDocument","LiquidityGaugesDocument","PoolGaugesDocument","createSubgraphClient","subgraphUrl","GraphQLClient","createGaugesClient","GaugeShare","GaugeShares","LiquidityGauges","PoolGauges","Gauges.getSdk","Multicaller3","options","calls","interface","connect","batchSize","executeMulticall","numBatches","ceil","batchPromises","batchIndex","batchRequests","allowFailure","aggregate3","offset","callIndex","success","returnData","decodeFunctionResult","e","weightedCalls","multicaller","linearCalls","stableCalls","gyroECalls","fetchOnChainPoolData","vaultAddress","getTotalSupplyFn","getSwapFeeFn","defaultCalls","do_nothing","poolTypeCalls","getOnChainBalances","subgraphPoolsOriginal","_multiAddress","poolsWithOnchainData","onchainData","idx","wrappedToken","wrappedIndex","wrappedTokenRate","lowerTarget","targets","upperTarget","tokenRates","rate","SubgraphPoolDataService","sorConfig","query","defaultArgs","orderBy","TotalLiquidity","orderDirection","Desc","swapEnabled","queryArgs","mapped","expiryTime","unitSeconds","principalToken","baseToken","mapPools","getSubgraphPools","findIndex","fetchOnChainBalances","onChainBalances","formattedQuery","first","pool0","pool1000","pool2000","SubgraphTokenPriceService","ethPerToken","getLatestPriceInEthFromSubgraph","latestPrices","asset_in","pricesKeyedOnId","keyBy","matchingLatestPrices","asset","pricingAssetPricedInEth","pricingAsset","getNetworkConfig","networkConfig","customSubgraphUrl","tenderly","POOLS_TO_IGNORE","ApiTokenPriceService","balancerApiUrl","tokenPriceQuery","chainKey","tokenGetCurrentPrices","tokenPriceUsd","nativeAssetPriceUsd","NativeAssetAddress","tokenPriceInNativeAsset","getCoingeckoApiBaseUrl","isDemoApi","getCoingeckoApiKeyHeaderName","CoingeckoTokenPriceService","urlBase","isDemoApiKey","coingeckoApiKeyHeaderName","apiKey","coingeckoApiKey","getTokenPriceInNativeAsset","endpoint","axios","headers","Accept","Sor","sdkConfig","getSorConfig","sorNetworkConfig","getSorNetworkConfig","JsonRpcProvider","rpcUrl","subgraphClient","getPoolDataService","getTokenPriceService","tokenPriceService","poolDataService","sor","connectingTokens","triPathMidPoolIds","allPoolsToIgnore","coingeckoConfig","checkSimpleFlashSwapParams","poolIds","createSwaps","assetInIndex","assetOutIndex","deltaToExpectedProfit","Number","calcProfit","profits","underlyingToWrappedMap","tokenForSwaps","wrapped","Relayers","relayerResolver","assetIn","assetOut","lido","swapFragment","relayer","f","amountForLimit","maxSlippage","min","decorateSorSwapInfo","swapInfo","amountIn","swapAmount","returnAmount","amountInForLimits","swapAmountForSwaps","returnAmountFromSwaps","amountOutForLimits","tokenInForSwaps","tokenOutFromSwaps","SingleSwapBuilder","setFunds","setDeadline","setLimits","singleSwap","attrs","fragment","outputReference","BatchSwapBuilder","minAmountOut","maxAmountIn","tokenAddresses","split","outputReferences","buildRouteDefaultOptions","maxPools","gasPrice","Swaps","sorOrConfig","l","getSwaps","SwapTypes","buildSwap","builder","opts","findRouteGivenIn","batchSwap","encodeBatchSwap","flashLoanAmount","walletAddress","convertSimpleFlashSwapToBatchSwapParameters","fetchPools","getPools","tokenAddress0","tokenAddress1","isProfitable","querySimpleFlashSwap","swapInput","swapTypeSOR","getSorSwapInfo","swap","assetDeltas","fromEntries","PoolKind","relayerLibrary","Relayer","maxAmount","relayerAdress","approved","authorisation","poolKind","staticToken","fromUnderlying","toUnderlying","linearPoolType","unwrapType","encodeUnwrapAaveStaticToken","isTemporary","CHAINED_REFERENCE_TEMP_PREFIX","CHAINED_REFERENCE_READONLY_PREFIX","paddedPrefix","repeat","ref","amountBn","mask","check","_hex","signRelayerApproval","relayerAddress","signerAddress","signer","Subgraph","initClient","Pricing","poolsDict","parseToPoolsDict","routeProposer","getCandidatePathsFromDict","getSpotPriceAfterSwapForPath","Multicaller","isLessThan24Hours","incomingDateInSec","round","Date","now","VeBal","veBalAddress","formatLockInfo","lockInfo","lockedAmount","lockedEndDate","locked","hasExistingLock","lockedEndDateNormalised","toNumber","isExpired","totalSupply","epoch","VeBalProxy","adjustedBalanceOf","Contracts","networkOrAddresses","getLiquidityGauge","contractAddresses","eulerLinearPoolFactory","gearboxLinearPoolFactory","gyroConfig","instances","BasePool","getBasePool","ERC20","getErc20","liquidityGauge","ImpermanentLossService","tokenHistoricalPrices","timestamp","prepareData","poolValueDelta","getPoolValueDelta","holdValueDelta","getHoldValueDelta","calculateImpermanentLoss","floor","abs","priceDelta","entryTimestamp","getWeights","entryPrices","getEntryPrices","exitPrices","getExitPrices","getAssets","getDelta","entryPrice","exitPrice","ILLEGAL_PARAMETER","noWeights","uniformWeight","w","prices","tokensWithPrice","INITIAL_RATE","START_EPOCH_TIME","RATE_REDUCTION_TIME","RATE_REDUCTION_COEFFICIENT","weekly","currentTimestamp","getTime","miningEpoch","totalEmissions","startingEpoch","endingEpoch","currentEpoch","secondsInStartingEpoch","secondsInEndingEpoch","ProtocolRevenue","repository","multicallData","balPrice","lastWeekBalRevenue","balAmount","lastWeekBBAUsdRevenue","bbAUsdAmount","bbAUsdPrice","veBalSupply","PoolFees","yesterdaysPools","yesterdaysPool","totalSwapFee","createTime","PoolApr","tokenMeta","tokenYields","feeCollector","gyroConfigRepository","last24hFees","feesDailyBsp","protocolSwapFeePercentage","breakdown","bptFreeTokens","aprs","apr","tokenYield","isExemptFromYieldProtocolFee","protocolYieldFeeCache","subSwapFees","swapFees","subApr","tokenAprs","getWeight","poolToken","bptPrice","_c","_d","_e","weightedAprs","pickBy","zipObject","identity","boost","workingSupply","balInflationRate","bptPriceUsd","gaugeSupplyUsd","reward","balReward","rewardTokenApr","totalSupplyUsd","rewardValue","balPriceUsd","gaugeBalEmissionsUsd","emissions.weekly","relativeWeight","tAddress","rewardTokensBreakdown","rewardValueScaled","revenue","dailyRevenue","stakingApr","rewardAprs","protocolApr","minStakingApr","maxStakingApr","last24h","liquidityService","fee","getGyroProtocolFee","protocolSwapFeeCache","rewardData","period_finish","yearlyReward","meta","joinActions","Element","LiquidityBootstrapping","exitActions","PoolGraph","getGraphNodes","tokensToUnwrap","rootNode","buildGraphFromRootPool","orderByBfs","reverse","rootPool","buildGraphFromPool","getTokenTotal","nodeIndex","parent","proportionOfParent","parentPool","tokenIndex","leafTokenDecimals","createInputTokenNode","joinAction","exitAction","tokenTotal","spotPrices","sp","poolNode","isProportionalExit","children","marked","isLeaf","updateNodeIfProportionalExit","createLinearNodeChildren","proportion","tokenWeight","finalProportion","childNode","linearPoolNode","mainIndex","wrappedNodeInfo","createWrappedTokenNode","mainTokenDecimals","nodeInfo","wrappedTokenNode","unwrappedBalance","inputNode","root","nodes","orderedNodes","currentNode","shift","WeightedPoolDecoder","decode","JoinModel","relayerModel","joinKind","decodeJoinData","allTokensInForExactBPTOut","amountsInWithRef","doChainedRefReplacements","SubgraphType","bptAsPoolToken","bptBalanceEVM","updateTokenBalanceForPool","tokensWithoutBpt","balanceEvm","bptAmountOutWithRef","tokenInIndex","doChainedRefReplacement","pairData","bptAmountOutHuman","amountInHuman","_tokenInForExactTokenOut","bnum","dp","decimalsIn","amountInEvm","balanceIn","balanceOut","bptOut","isChainedReference","setChainedReferenceValue","ExitModel","exitKind","decodeExitData","exactBptInForTokensOut","bptInWithRef","exactBptInForOneTokenOut","amountOutHuman","_exactTokenInForTokenOut","decimalsOut","amountOutEvm","poolBalances","pt","getBalancesForTokens","tokenOutIndex","SwapModel","swapRequest","doSwap","batchSwapRequest","previousAmount","getChainedReferenceValue","isExactIn","UnwrapModel","unwrapRequest","underlyingToken","PoolModel","joinModel","exitModel","swapModel","unwrapModel","doJoinPool","doExitPool","doBatchSwap","doSingleSwap","doUnwrap","RelayerModel","chainedRefs","PoolsSource","poolsArray","dataSource","refresh","list","cloneDeep","BptAsToken","parseNewPool","subgraphPool","ComposableStablePool","ActionType","VaultModel","poolsSource","updateDeltas","rawCalls","poolModel","poolsDictionary","actionType","Join","doJoin","Exit","doExit","Unwrap","balancerRelayerInterface","debugLog","poolGraph","simulationService","createCalls","joinPaths","isNativeAssetJoin","multiRequests","encodedCalls","outputIndexes","createActionCalls","unshift","createSetRelayerApproval","encodedCall","amountsOutByJoinPath","simulationType","simulateGeneralisedJoin","totalAmountOut","minAmountsOutByJoinPath","totalMinAmountOut","isSimulation","joinPath","isLeafJoin","modelRequests","shouldBeConsidered","isLastChainedCall","hasSiblingInput","minOut","modelRequest","createSwap","minBptOut","createJoinPool","outputRef","encodedPeekCall","encodePeekChainedReferenceValue","toChainedReference","encodeSetRelayerApproval","joinPathIndex","expectedOut","getOutputRefValue","replaceWrappedNativeAsset","allImmediateChildrenSendToInternal","allSiblingsSendToInternal","encodeSwap","mapSwapRequest","userTokenIn","userBptOut","inputTokens","inputAmts","child","sortedTokens","sortedAmounts","userDataAmounts","formatJoinPoolInput","mapJoinPoolRequest","userAmountsTokenIn","userAmountOut","hasChildInput","isRef","sendsToInternalBalance","siblings","wrappedNativeAssetIndex","nativeAssetIndex","tokensInWithoutNativeAsset","getJoinPaths","totalBptZeroPi","totalBptZeroPriceImpact","queryData","assertDeltas","poolAddress","inputNodes","nonLeafInputNodes","nonLeafInputNode","nonLeafAmountIn","totalProportions","proportionalNonLeafAmountIn","inputTokenNode","nonLeafJoinPath","currentChild","parentCopy","updateInputAmounts","ajdustAmountInDiff","tokenInInputNodes","amountsInSumforTokenIn","diff","leafJoinPath","updateTotalProportions","updateNodeAmount","nonLeafJoinPaths","leafNode","bptOutZeroPiForInputNode","spProduct","parentNode","childAddress","spPriceScaled","inputAmountScaled","totalProportion","inputAmount","TenderlyHelper","tenderlyConfig","simulateMulticall","encodedStateOverrides","encodeBalanceAndAllowanceOverrides","encodeRelayerApprovalOverride","simulateTransaction","stateOverrides","storage","state_objects","toHexString","network_id","block_number","blockNumber","input","save_if_fails","simulation_type","SIMULATE_URL","tenderlyUrl","post","transaction","transaction_info","call_trace","output","requestStateOverrides","tokensWithoutNativeAsset","MaxInt256","k","ENCODE_STATES_URL","networkID","project","accessKey","SimulationType","Simulation","Tenderly","tenderlyHelper","simulationResult","decodeResult","requestResult","simulateRequests","Static","staticResult","decodedResponse","Buffer","simulateGeneralisedExit","multicallResult","outputIndex","vaultModel","requests","tokenOutDeltas","amountsOutByExitPath","amountsOutByTokenOut","tokensOutByExitPath","expectedAmountsOutByExitPath","expectedAmountsOutMap","expectedAmountsOutByTokenOut","minAmountsOutByExitPath","expectedAmountOut","minAmountsOutByTokenOut","getExitPaths","outputNodes","exitPaths","outputNode","exitPath","amountsInSum","accumulator","currentExitPath","amountInForCurrentExitPath","amountsInDiff","createUnwrap","exitChild","exitPathIndex","getOutputRef","encodeUnwrap","mapUnwrapRequest","receivesFromInternal","amountBptIn","getExit","estimatedAmountsOut","isProportional","isProportionalPools","tokensWithInsufficientBalance","calculatePriceImpact","orderedNodesForJoin","isPeek","getRecipientAddress","getSenderAddress","isLastActionWithLimits","minAmountsOutProportional","outputChildIndex","createExitPoolProportional","createExitPool","isRootNode","createBatchSwap","exitChildren","batchSwapSteps","swapStep","acc","dust","mapBatchSwapRequest","userDataTokens","formatExitPoolInput","mapExitPoolRequest","userAmountTokensOut","userBptIn","allChildrenReceiveFromInternal","deltaBptIn","deltaTokensOut","deltaAmountsOut","PoolVolume","totalSwapVolume","ComposableStableFactory","checkCreateInputs","tokenRateCacheDurations","exemptFromYieldProtocolFeeFlags","rateProviders","parseCreateParamsForEncoding","amplificationParameter","owner","salt","sortedRateProviders","sortedTokenRateCacheDurations","sortedExemptFromYieldProtocols","encodeCreateFunctionData","checkInitJoinInputs","parseParamsForInitJoin","tokensWithBpt","amountsWithBpt","maxAmountsWithBpt","asUintN","sortedMaxAmounts","encodeInitJoinFunctionData","getPoolAddressAndIdWithReceipt","composableStablePoolInterface","getPoolInterface","getPoolId","create","encodedFunctionData","buildInitJoin","WeightedFactory","normalizedWeights","sortedNormalizedWeights","cur","weightedPoolInterface","ProtocolId","LinearFactory","getPoolFactoryInterface","AaveLinear","ERC4626Linear","EulerLinear","GearboxLinear","YearnLinear","protocolId","getFactoryAddress","mainToken","upperTargetEvm","linearPoolInterface","PoolFactory__factory","balancerContracts","of","ParamsBuilder","encoder","Gyro2","Gyro3","getEncoder","buildQueryJoinExactIn","maxAmountsInByToken","maxInWithoutBpt","buildQueryJoinExactOut","buildQueryExitToSingleToken","buildQueryExitProportionally","buildQueryExitExactOut","maxBptIn","minAmountsOutWithoutBpt","EmissionsService","liquidityGaugesRepository","proportionalAmounts","referenceTokenIndex","notImplemented","repositories","aprService","poolsForSimulations","graphService","poolsOnChain","joinService","exitService","feesService","volumeService","poolFactory","impermanentLossService","emissionsService","concerns","queries","methods","calcSpotPrice","calcProportionalAmounts","Queries.ParamsBuilder","calcImpLoss","getBptPrice","joinPool","buildExitCall","getExitInfo","wrap","param","UnicodeNormalizationForm","Utf8ErrorReason","ignoreFunc","bytes","badCodepoint","BAD_PREFIX","UNEXPECTED_CONTINUE","o","OVERRUN","toUtf8Bytes","str","charCodeAt","c2","pair","arrayify","formatBytes32String","text","hexlify","HashZero","freeze","ignore","OVERLONG","INPUT_ERROR","WINDOW","window","JS_SHA3_NO_WINDOW","WEB_WORKER","self","JS_SHA3_NO_NODE_JS","versions","global","COMMON_JS","JS_SHA3_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_SHA3_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","CSHAKE_PADDING","SHIFT","RC","BITS","SHAKE_BITS","OUTPUT_TYPES","CSHAKE_BYTEPAD","JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW","isView","buffer","createOutputMethod","bits","padding","outputType","Keccak","update","createShakeOutputMethod","outputBits","createCshakeOutputMethod","createKmacOutputMethod","createOutputMethods","method","createMethod","algorithms","bytepad","Kmac","methodNames","algorithm","methodName","newMethodName","blocks","reset","finalized","block","blockCount","byteCount","outputBlocks","extraBytes","notString","lastByteIndex","right","encodeString","strs","paddingBytes","zeros","finalize","arrayBuffer","Uint32Array","digest","h","c0","c1","c3","c4","c5","c6","c7","c8","c9","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","b16","b17","b18","b19","b20","b21","b22","b23","b24","b25","b26","b27","b28","b29","b30","b31","b32","b33","b34","b35","b36","b37","b38","b39","b40","b41","b42","b43","b44","b45","b46","b47","b48","b49","regexBytes","regexNumber","regexArray","_pack","zeroPad","toTwos","byteLength","baseType","pack","tight","keccak256","sha3","keccak_256","protocolFeePercKey","gyroPoolTypeKey","encodedPoolTypeKey","GyroConfigRepositoryImpl","gyroConfigAddress","gyroConfigInterface","encodedPoolSpecificKey","hasSpecificKeyHex","hasPoolTypeKeyHex","hasDefaultKeyHex","hasSpecificKey","hasPoolTypeKey","hasDefaultKey","getUint","gaugeControllerInterface","gaugeControllerCheckpointerInterface","GaugeControllerMulticallRepository","gaugeControllerAddress","gaugeControllerCheckpointerAddress","AbstractSubgraphRepository","attribute","skip","BalancerSubgraphRepository","blockHeight","GaugesSubgraphRepository","GaugeSharesRepository","desc","number","gaugeShares","mapType","subgraphGaugeShare","isKilled","findAllBy","UserAddress","gaugeId","GaugeId","childLiquidityGaugeInterface","LiquidityGaugesMulticallRepository","currentWeek","rewardCounts","passingRewardCounts","getRewardCounts","gaugesWithRewards","startIndexes","gaugeIndex","flat","passingRewardTokens","decoded","LiquidityGaugesSubgraphRepository","qauges","preferentialGauge_not","preferentialGauge","LiquidityGaugeSubgraphRPCProvider","workingSupplies","relativeWeights","inflationRates","gaugeController","g","getWorkingSupplies","oldFactories","childGaugeAddresses","factory","getInflationRates","getRelativeWeights","distributor","last_update","integral","periodFinish","compose","subgraphGauge","BalancerAPIClient","toPayload","jsonToGraphQLQuery","ms","mapToken","priceRateProviders","_f","_g","_h","_j","_k","isPaused","_l","subgraphToken","subPoolInfo","mapSubPools","metadata","mapSubPoolToken","PoolsSubgraphRepository","fetchAllPools","PoolsSubgraphOnChainRepository","poolsSubgraph","filterPools","filteredPools","onchainPools","forceRefresh","fetchDefault","onchainPool","PoolGaugesRepository","PoolJoinExitAttributes","PoolJoinExitRepository","Timestamp","Asc","joinExits","item","Sender","PoolSharesRepository","Balance","poolShares","subgraphPoolShare","PoolId","StaticTokenProvider","CoingeckoPriceRepository","baseTokenAddresses","platform","urlNative","debouncer","tokensPerPriceRequest","signal","isAxiosError","status","fetchNative","Assets","assetId","MATIC","XDAI","finally","inputAddress","baseAddress","nativePrice","CoingeckoHistoricalPriceRepository","urlRange","statusText","range","SubgraphPriceRepository","TokenPriceProvider","coingeckoRepository","subgraphRepository","aaveRates","getRate","HistoricalPriceProvider","FeeDistributorAbi","feeDistributorInterface","veBalInterface","FeeDistributorRepository","feeDistributorAddress","bbAUsdAddress","FeeDistributor","previousWeek","getPreviousWeek","fromTimestamp","midnight","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","daysSinceThursday","getUTCDay","weeksToGoBack","claimTokens","extractTokenBalance","vaultInterface","protocolFeesCollectorInterface","swapFeePercentagePromise","FeeCollectorRepository","getProtocolFeesCollector","collector","fees","getSwapFeePercentage","swapFeePercentage","iProtocolFeePercentagesProvider","feesPromise","ProtocolFeesProvider","protocolFeePercentagesProviderAddress","yieldFee","protocolFees","TokenYieldsRepository","lc","yields","fetchBlockByTime","BlockNumberRepository","dayAgo","Data","subgraphQuery","poolJoinExits","poolGauges","blockNumbers","blockDayAgo","getBlockNumber","initialCoingeckoList","subgraphPriceRepository","coingeckoHistoricalRepository","protocolFeePercentagesProvider","poolType2PoolKind","LEGACY_STABLE","COMPOSABLE_STABLE","COMPOSABLE_STABLE_V2","WEIGHTED","setRelayerApproval","gaugeWithdrawal","encodeGaugeWithdraw","gaugeDeposit","encodeGaugeDeposit","peekChainedReferenceValue","buildPath","buildLinearPath","buildMigrationPool","findTokens","nestedTokens","migrationBuilder","peek","fromGauge","toGauge","fromTokens","toTokens","exitOutputReferences","swapOutputReferences","joinAmount","migrationSteps","needsSwap","actions.setRelayerApproval","actions.gaugeWithdrawal","isComposable","actions.exit","swapPaths","getMainToken","mainFromTokens","mainToTokens","exitSwaps","fromIdx","toIdx","toPool","buildPaths","batchSwaps","actions.swaps","references","actions.join","actions.peekChainedReferenceValue","actions.gaugeDeposit","Migrations","poolsRepository","gaugesRepository","getExpectedBptOut","steps","relayerReturnValue","expectedBptOut","ActionStep","BaseAction","mainTokenInIndex","mainTokenOutIndex","swapAssetInIndex","swapAssetOutIndex","swapReturn","opRefKey","actionStep","getActionStep","getActionAmount","hasTokenIn","actionHasTokenIn","hasTokenOut","actionHasTokenOut","getActionMinOut","opRef","nextOpRefKey","getActionOutputRef","opRefStart","getSender","receiver","getReceiver","TokenOut","Middle","TokenIn","tokenInIndexAction","tokenOutIndexAction","Direct","getFromInternal","isBptIn","getToInternal","isBptOut","getPoolKind","exitToken","bptAmtIn","exitPoolInput","encoded","getAmountIn","getAmountOut","fromInternal","joinToken","joinTokenIndex","approveTokens","isBpt","toInternal","getLimits","updateLimits","newSwap","isChainedSwap","canAddSwap","encodeApproveVault","batchSwapInput","encodedBatchSwap","copy","addSwap","orderActions","actions","categorizedActions","enterActions","middleActions","categorizeActions","allActions","orderedActions","batchedSwaps","batchSwapActions","isExit","pricing","claimService","migrationService","hasFetched","isFetching","fetchFromCache","fetchAll","awaitEnoughPoolsFetched","nextToken","formattedArgs","__args","apiResponseData","totalChecks","rewardsBreakdown","tokenAprsBreakdown","providers","currentProviderIdx","fallbackQuery","currentProvider","func","race","lowercaseAddress","newJoin","newExit","getActions","totalIn","totalOut","diffOut","checkAmounts","spender","ownerAddress","nonces","Permit","hasJoinExit","specialization","normalizedSum"],"mappings":"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EFC,OAAQ,CACNC,UAAW,CACT,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,uEAGJC,WAAY,CACVD,UAAW,CACT,qEACA,qEACA,uEAGJE,UAAW,CACT,6CAA8C,qBAC9C,6CAA8C,eAC9C,6CAA8C,aAC9C,6CAA8C,aAC9C,6CAA8C,6BAC9C,6CAA8C,6BAC9C,6CAA8C,cAC9C,6CAA8C,cAC9C,6CAA8C,aAC9C,6CAA8C,uBAC9C,6CAA8C,gBAEhDC,SAAU,CACRH,UAAW,CACT,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,uEAGJI,SAAU,CACR,qEAAsE,CACpEC,KAAM,4BACNC,SAAS,GAEX,qEAAsE,CACpED,KAAM,4BACNC,SAAS,GAEX,qEAAsE,CACpED,KAAM,sBACNC,SAAS,GAEX,qEAAsE,CACpED,KAAM,sBACNC,SAAS,KAkTb,CAACpB,QAAAA,QAAQ6B,SA7SkB,CAC3B3B,OAAQ,CACN4B,OAAQ,CACNL,GAAI,qEACJC,GAAI,sEAENK,QAAS,CACPN,GAAI,qEACJC,GAAI,sEAENM,KAAM,CACJA,KAAM,qEACNC,UACE,uEAGN9B,WAAY,CACVC,QAAS,GACTC,QAAS,GACTC,eAAgB,GAElBC,cAAe,6CACfC,YAAa,6CACbC,YAAa,CACXC,SAAU,IAEZC,UAAW,CAAC,IACZC,kBAAmB,CACjB,UACA,aACA,SACA,gBACA,QACA,QACA,QACA,MAEFC,OAAQ,CACNC,UAAW,CACT,qEACA,qEACA,qEACA,qEACA,qEACA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ACR,EC9DG,SAAUmZ,GACd1T,WAEA,GAA8B,iBAAnBA,EAAO5c,QAAsB,CACtC,MAAMuwB,EAAgBtkB,GAAwB2Q,EAAO5c,SAErD,MAAO,IACFuwB,EACHtjB,KAAM,IACDsjB,EAActjB,KACjBC,iBAAUhW,EAAA0lB,EAAO4T,iCAAqBD,EAActjB,KAAKC,UAE3DujB,SAAU7T,EAAO6T,SAEpB,CAED,MAAO,IACF7T,EAAO5c,QACViN,KAAM,IACD2P,EAAO5c,QAAQiN,KAClBC,SAAkC,QAAxBhL,EAAA0a,EAAO4T,yBAAiB,IAAAtuB,EAAAA,EAAI0a,EAAO5c,QAAQiN,KAAKC,UAE5DujB,SAAU7T,EAAO5c,QAAQywB,SAE7B,CC1BO,MAAMC,GAAkB,CAC7B,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qE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"} \ No newline at end of file diff --git a/package/dist/index.umd.js b/package/dist/index.umd.js new file mode 100644 index 000000000..6793b319b --- /dev/null +++ b/package/dist/index.umd.js @@ -0,0 +1,515 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@ethersproject/abi"),require("@ethersproject/constants"),require("@ethersproject/bignumber"),require("@ethersproject/address"),require("@ethersproject/bytes"),require("@ethersproject/abstract-signer"),require("lodash"),require("ethers"),require("@balancer-labs/sor"),require("@ethersproject/providers"),require("graphql-request"),require("graphql"),require("axios"),require("@ethersproject/contracts"),require("json-to-graphql-query")):"function"==typeof define&&define.amd?define(["exports","@ethersproject/abi","@ethersproject/constants","@ethersproject/bignumber","@ethersproject/address","@ethersproject/bytes","@ethersproject/abstract-signer","lodash","ethers","@balancer-labs/sor","@ethersproject/providers","graphql-request","graphql","axios","@ethersproject/contracts","json-to-graphql-query"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["balancer-js"]={},e.abi,e.constants,e.bignumber,e.address,e.bytes,e.abstractSigner,e.lodash,e.ethers,e.sor,e.providers,e.graphqlRequest,e.graphql,e.axios,e.contracts,e.jsonToGraphqlQuery)}(this,(function(e,t,a,n,o,i,s,r,l,d,p,u,c,y,b,m){"use strict";function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function T(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(a){if("default"!==a){var n=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(t,a,n.get?n:{enumerable:!0,get:function(){return e[a]}})}})),t.default=e,Object.freeze(t)}var h,I,g,_,P,w,x=T(d),E=f(y);!function(e){e[e.RECOVERY_MODE=255]="RECOVERY_MODE"}(h||(h={}));class A{}A.recoveryModeExit=e=>t.defaultAbiCoder.encode(["uint256","uint256"],[h.RECOVERY_MODE,e]),e.StablePoolJoinKind=void 0,(I=e.StablePoolJoinKind||(e.StablePoolJoinKind={}))[I.INIT=0]="INIT",I[I.EXACT_TOKENS_IN_FOR_BPT_OUT=1]="EXACT_TOKENS_IN_FOR_BPT_OUT",I[I.TOKEN_IN_FOR_EXACT_BPT_OUT=2]="TOKEN_IN_FOR_EXACT_BPT_OUT",e.StablePhantomPoolJoinKind=void 0,(g=e.StablePhantomPoolJoinKind||(e.StablePhantomPoolJoinKind={}))[g.INIT=0]="INIT",g[g.COLLECT_PROTOCOL_FEES=1]="COLLECT_PROTOCOL_FEES",e.StablePoolExitKind=void 0,(_=e.StablePoolExitKind||(e.StablePoolExitKind={}))[_.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT=0]="EXACT_BPT_IN_FOR_ONE_TOKEN_OUT",_[_.EXACT_BPT_IN_FOR_TOKENS_OUT=1]="EXACT_BPT_IN_FOR_TOKENS_OUT",_[_.BPT_IN_FOR_EXACT_TOKENS_OUT=2]="BPT_IN_FOR_EXACT_TOKENS_OUT";class S{constructor(){}}S.joinInit=a=>t.defaultAbiCoder.encode(["uint256","uint256[]"],[e.StablePoolJoinKind.INIT,a]),S.joinCollectProtocolFees=()=>t.defaultAbiCoder.encode(["uint256"],[e.StablePhantomPoolJoinKind.COLLECT_PROTOCOL_FEES]),S.joinExactTokensInForBPTOut=(a,n)=>t.defaultAbiCoder.encode(["uint256","uint256[]","uint256"],[e.StablePoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT,a,n]),S.joinTokenInForExactBPTOut=(a,n)=>t.defaultAbiCoder.encode(["uint256","uint256","uint256"],[e.StablePoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,a,n]),S.exitExactBPTInForOneTokenOut=(a,n)=>t.defaultAbiCoder.encode(["uint256","uint256","uint256"],[e.StablePoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,a,n]),S.exitExactBPTInForTokensOut=a=>t.defaultAbiCoder.encode(["uint256","uint256"],[e.StablePoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT,a]),S.exitBPTInForExactTokensOut=(a,n)=>t.defaultAbiCoder.encode(["uint256","uint256[]","uint256"],[e.StablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,a,n]),e.WeightedPoolJoinKind=void 0,(P=e.WeightedPoolJoinKind||(e.WeightedPoolJoinKind={}))[P.INIT=0]="INIT",P[P.EXACT_TOKENS_IN_FOR_BPT_OUT=1]="EXACT_TOKENS_IN_FOR_BPT_OUT",P[P.TOKEN_IN_FOR_EXACT_BPT_OUT=2]="TOKEN_IN_FOR_EXACT_BPT_OUT",P[P.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT=3]="ALL_TOKENS_IN_FOR_EXACT_BPT_OUT",e.WeightedPoolExitKind=void 0,(w=e.WeightedPoolExitKind||(e.WeightedPoolExitKind={}))[w.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT=0]="EXACT_BPT_IN_FOR_ONE_TOKEN_OUT",w[w.EXACT_BPT_IN_FOR_TOKENS_OUT=1]="EXACT_BPT_IN_FOR_TOKENS_OUT",w[w.BPT_IN_FOR_EXACT_TOKENS_OUT=2]="BPT_IN_FOR_EXACT_TOKENS_OUT",w[w.MANAGEMENT_FEE_TOKENS_OUT=3]="MANAGEMENT_FEE_TOKENS_OUT";class v{constructor(){}}v.joinInit=a=>t.defaultAbiCoder.encode(["uint256","uint256[]"],[e.WeightedPoolJoinKind.INIT,a]),v.joinExactTokensInForBPTOut=(a,n)=>t.defaultAbiCoder.encode(["uint256","uint256[]","uint256"],[e.WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT,a,n]),v.joinTokenInForExactBPTOut=(a,n)=>t.defaultAbiCoder.encode(["uint256","uint256","uint256"],[e.WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,a,n]),v.joinAllTokensInForExactBPTOut=a=>t.defaultAbiCoder.encode(["uint256","uint256"],[e.WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT,a]),v.exitExactBPTInForOneTokenOut=(a,n)=>t.defaultAbiCoder.encode(["uint256","uint256","uint256"],[e.WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,a,n]),v.exitExactBPTInForTokensOut=a=>t.defaultAbiCoder.encode(["uint256","uint256"],[e.WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT,a]),v.exitBPTInForExactTokensOut=(a,n)=>t.defaultAbiCoder.encode(["uint256","uint256[]","uint256"],[e.WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,a,n]);class k{constructor(){}}k.exitForManagementFees=()=>t.defaultAbiCoder.encode(["uint256"],[e.WeightedPoolExitKind.MANAGEMENT_FEE_TOKENS_OUT]);var B,C;e.ComposableStablePoolJoinKind=void 0,(B=e.ComposableStablePoolJoinKind||(e.ComposableStablePoolJoinKind={}))[B.INIT=0]="INIT",B[B.EXACT_TOKENS_IN_FOR_BPT_OUT=1]="EXACT_TOKENS_IN_FOR_BPT_OUT",B[B.TOKEN_IN_FOR_EXACT_BPT_OUT=2]="TOKEN_IN_FOR_EXACT_BPT_OUT",e.ComposableStablePoolExitKind=void 0,(C=e.ComposableStablePoolExitKind||(e.ComposableStablePoolExitKind={}))[C.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT=0]="EXACT_BPT_IN_FOR_ONE_TOKEN_OUT",C[C.BPT_IN_FOR_EXACT_TOKENS_OUT=1]="BPT_IN_FOR_EXACT_TOKENS_OUT",C[C.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT=2]="EXACT_BPT_IN_FOR_ALL_TOKENS_OUT";class O{constructor(){}}O.joinInit=a=>t.defaultAbiCoder.encode(["uint256","uint256[]"],[e.ComposableStablePoolJoinKind.INIT,a]),O.joinCollectProtocolFees=()=>t.defaultAbiCoder.encode(["uint256"],[e.StablePhantomPoolJoinKind.COLLECT_PROTOCOL_FEES]),O.joinExactTokensInForBPTOut=(a,n)=>t.defaultAbiCoder.encode(["uint256","uint256[]","uint256"],[e.ComposableStablePoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT,a,n]),O.joinTokenInForExactBPTOut=(a,n)=>t.defaultAbiCoder.encode(["uint256","uint256","uint256"],[e.ComposableStablePoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,a,n]),O.exitExactBPTInForOneTokenOut=(a,n)=>t.defaultAbiCoder.encode(["uint256","uint256","uint256"],[e.ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,a,n]),O.exitExactBPTInForAllTokensOut=a=>t.defaultAbiCoder.encode(["uint256","uint256"],[e.ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT,a]),O.exitBPTInForExactTokensOut=(a,n)=>t.defaultAbiCoder.encode(["uint256","uint256[]","uint256"],[e.ComposableStablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,a,n]);var M="production"===process.env.NODE_ENV,F="Invariant failed";function R(e,t){if(!e){if(M)throw new Error(F);var a="function"==typeof t?t():t,n=a?"".concat(F,": ").concat(a):F;throw new Error(n)}}const N=e=>(R(66===e.length,"Invalid poolId length"),e.slice(0,42)),L=e=>{R(66===e.length,"Invalid poolId length");const t=parseInt(e[45]);return R(t<3,"Invalid pool specialization"),t},D=e=>(R(66===e.length,"Invalid poolId length"),n.BigNumber.from(`0x${e.slice(46)}`));var U;e.Network=void 0,(U=e.Network||(e.Network={}))[U.MAINNET=1]="MAINNET",U[U.GOERLI=5]="GOERLI",U[U["GÖRLI"]=5]="GÖRLI",U[U.OPTIMISM=10]="OPTIMISM",U[U.GNOSIS=100]="GNOSIS",U[U.POLYGON=137]="POLYGON",U[U.FANTOM=250]="FANTOM",U[U.BASE=8453]="BASE",U[U.ZKEVM=1101]="ZKEVM",U[U.ARBITRUM=42161]="ARBITRUM",U[U.AVALANCHE=43114]="AVALANCHE",U[U.SEPOLIA=11155111]="SEPOLIA";const V={IdsMap:{},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","FX"],Stable:{AllowList:["0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066","0x9f19a375709baf0e8e35c2c5c65aca676c4c719100000000000000000000006e","0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080","0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112","0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e","0x9be7de742865d021c0e8fb9d64311b2c040c1ec1000200000000000000000012","0x9f19a375709baf0e8e35c2c5c65aca676c4c7191000200000000000000000022","0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016","0xf38cf113d2d4f60c36cbd95af2f48a9a0167045a00000000000000000000005b","0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068","0x386b5d43ba8b97c43d4afb4cdae7877a1b295e8a000000000000000000000020","0x5028497af0c9a54ea8c6d42a054c0341b9fc616800020000000000000000007b","0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe","0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366"]},Investment:{AllowList:["0xccf5575570fac94cec733a58ff91bb3d073085c70002000000000000000000af","0xe7b1d394f3b40abeaa0b64a545dbcf89da1ecb3f00010000000000000000009a","0x3b40d7d5ae25df2561944dd68b252016c4c7b2800001000000000000000000c2"]},Factories:{"0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0":"oracleWeightedPool","0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9":"weightedPool","0xc66ba2b6595d3613ccab350c886ace23866ede24":"stablePool","0x67d27634e44793fe63c467035e31ea8635117cd4":"stablePool","0x7dfdef5f355096603419239ce743bfaf1120312b":"weightedPool","0xcf0a32bbef8f064969f21f7e02328fb577382018":"weightedPool","0x2433477a10fc5d31b9513c638f19ee85caed53fd":"stablePool","0xebfd5681977e38af65a7487dc70b8221d089ccad":"stablePool","0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de":"liquidityBootstrappingPool","0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e":"liquidityBootstrappingPool","0x142b9666a0a3a30477b052962dda81547e7029ab":"liquidityBootstrappingPool","0x1802953277fd955f9a254b80aa0582f193cf1d77":"liquidityBootstrappingPool","0x48767f9f868a4a7b86a90736632f6e44c2df7fa9":"managedPool","0x0f7bb7ce7b6ed9366f9b6b910adefe72dc538193":"managedPool","0xacd615b3705b9c880e4e7293f1030b34e57b4c1c":"managedPool","0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2":"boostedPool","0xdae7e32adc5d490a43ccba1f0c736033f2b4efca":"boostedPool","0xc128a9954e6c874ea3d62ce62b468ba073093f25":"boostedPool"},Stakable:{AllowList:[]},Metadata:{"0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe":{name:"Balancer Boosted Aave USD",hasIcon:!0},"0x8fd162f338b770f7e879030830cde9173367f3010000000000000000000004d8":{name:"Balancer Boosted Aave USD",hasIcon:!0},"0xd387dfd3a786e7caa06e6cf0c675352c7ffff30400000000000000000000063e":{name:"Balancer Stable USD",hasIcon:!0}}},q={[e.Network.GOERLI]:{IdsMap:{staBAL:"0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062",bbAaveUSD:{v1:"0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f",v2:"0x3d5981bdd8d3e49eb7bbdc1d2b156a3ee019c18e0000000000000000000001a7"},veBAL:"0xf8a0623ab66f985effc1c69d05f1af4badb01b00000200000000000000000060"},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:["0x22d398c68030ef6b1c55321cca6e0cecc5c93b2f000200000000000000000678"],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","FX"],Stable:{AllowList:["0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f","0xb60e46d90f2de35f7062a27d3a98749414036d5d000200000000000000000061","0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062","0xc957b1acceb21707b782eb8eee2ed8e20088463d000200000000000000000076","0x3d5981bdd8d3e49eb7bbdc1d2b156a3ee019c18e0000000000000000000001a7","0x14f93df8a4e37bfdb49d2cec4789df7a010603d700000000000000000000011d","0x00a62d31b6c776b6813543bc99ff265f7222dbe100000000000000000000011e","0x0c925fce89a22e36ebd9b3c6e0262234e853d2f600000000000000000000019c"]},Investment:{AllowList:[]},Factories:{"0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0":"oracleWeightedPool","0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9":"weightedPool","0x44afeb87c871d8fea9398a026dea2bd3a13f5769":"stablePool","0xa55f73e2281c60206ba43a3590db07b8955832be":"stablePool","0xb48cc42c45d262534e46d5965a9ac496f1b7a830":"liquidityBootstrappingPool","0xb0c726778c3ae4b3454d85557a48e8fa502bdd6a":"liquidityBootstrappingPool","0x41e9036ae350baedcc7107760a020dca3c0731ec":"boostedPool","0xb848f50141f3d4255b37ac288c25c109104f2158":"composableStablePool","0x94f68b54191f62f781fe8298a8a5fa3ed772d227":"weightedPool"},Stakable:{AllowList:["0x16faf9f73748013155b7bc116a3008b57332d1e600020000000000000000005b","0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f","0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062","0x67f8fcb9d3c463da05de1392efdbb2a87f8599ea000200000000000000000059"]},Metadata:{"0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f":{name:"Balancer Boosted Aave USD",hasIcon:!1}}},[e.Network.MAINNET]:{IdsMap:{staBAL:"0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063",bbAaveUSD:{v1:"0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe",v2:"0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d"},veBAL:"0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014"},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","Gyro2","Gyro3","GyroE","FX"],Stable:{AllowList:["0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066","0x9f19a375709baf0e8e35c2c5c65aca676c4c719100000000000000000000006e","0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080","0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112","0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe","0x851523a36690bf267bbfec389c823072d82921a90002000000000000000001ed","0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249","0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d","0x178e029173417b1f9c8bc16dcec6f697bc32374600000000000000000000025d","0xf93579002dbe8046c43fefe86ec78b1112247bb80000000000000000000002bc","0xf3aeb3abba741f0eece8a1b1d2f11b85899951cb000200000000000000000351","0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d","0x5b3240b6be3e7487d61cd1afdfc7fe4fa1d81e6400000000000000000000037b"]},Investment:{AllowList:["0xccf5575570fac94cec733a58ff91bb3d073085c70002000000000000000000af","0xe7b1d394f3b40abeaa0b64a545dbcf89da1ecb3f00010000000000000000009a","0x3b40d7d5ae25df2561944dd68b252016c4c7b2800001000000000000000000c2"]},Factories:{"0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0":"oracleWeightedPool","0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9":"weightedPool","0xc66ba2b6595d3613ccab350c886ace23866ede24":"stablePool","0x67d27634e44793fe63c467035e31ea8635117cd4":"stablePool","0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de":"liquidityBootstrappingPool","0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e":"liquidityBootstrappingPool","0x48767f9f868a4a7b86a90736632f6e44c2df7fa9":"managedPool","0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2":"boostedPool","0x8df6efec5547e31b0eb7d1291b511ff8a2bf987c":"stablePool","0xf9ac7b9df2b3454e841110cce5550bd5ac6f875f":"composableStablePool","0xcc508a455f5b0073973107db6a878ddbdab957bc":"weightedPool"},Stakable:{AllowList:["0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063","0x072f14b85add63488ddad88f855fda4a99d6ac9b000200000000000000000027","0x0b09dea16768f0799065c475be02919503cb2a3500020000000000000000001a","0x186084ff790c65088ba694df11758fae4943ee9e000200000000000000000013","0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112","0x27c9f71cc31464b906e0006d4fcbc8900f48f15f00020000000000000000010f","0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080","0x350196326aeaa9b98f1903fb5e8fc2686f85318c000200000000000000000084","0x3e5fa9518ea95c3e533eb377c001702a9aacaa32000200000000000000000052","0x51735bdfbfe3fc13dea8dc6502e2e958989429610002000000000000000000a0","0x5d66fff62c17d841935b60df5f07f6cf79bd0f4700020000000000000000014c","0x5f7fa48d765053f8dd85e052843e12d23e3d7bc50002000000000000000000c0","0x702605f43471183158938c1a3e5f5a359d7b31ba00020000000000000000009f","0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe","0x7edde0cb05ed19e03a9a47cd5e53fc57fde1c80c0002000000000000000000c8","0x8f4205e1604133d1875a3e771ae7e4f2b086563900020000000000000000010e","0x90291319f1d4ea3ad4db0dd8fe9e12baf749e84500020000000000000000013c","0x96646936b91d6b9d7d0c47c496afbf3d6ec7b6f8000200000000000000000019","0x96ba9025311e2f47b840a1f68ed57a3df1ea8747000200000000000000000160","0xa02e4b3d18d4e6b8d18ac421fbc3dfff8933c40a00020000000000000000004b","0xa6f548df93de924d73be7d25dc02554c6bd66db500020000000000000000000e","0xbaeec99c90e3420ec6c1e7a769d2a856d2898e4d00020000000000000000008a","0xbf96189eee9357a95c7719f4f5047f76bde804e5000200000000000000000087","0xe2469f47ab58cf9cf59f9822e3c5de4950a41c49000200000000000000000089","0xe99481dc77691d8e2456e5f3f61c1810adfc1503000200000000000000000018","0xec60a5fef79a92c741cb74fdd6bfc340c0279b01000200000000000000000015","0xedf085f65b4f6c155e13155502ef925c9a756003000200000000000000000123","0xefaa1604e82e1b3af8430b90192c1b9e8197e377000200000000000000000021","0xf4c0dd9b82da36c07605df83c8a416f11724d88b000200000000000000000026","0xf5aaf7ee8c39b651cebf5f1f50c10631e78e0ef9000200000000000000000069","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066","0x92762b42a06dcdddc5b7362cfb01e631c4d44b40000200000000000000000182","0xde8c195aa41c11a0c4787372defbbddaa31306d2000200000000000000000181","0x17ddd9646a69c9445cd8a9f921d4cd93bf50d108000200000000000000000159","0xc45d42f801105e861e86658648e3678ad7aa70f900010000000000000000011e","0x2d344a84bac123660b021eebe4eb6f12ba25fe8600020000000000000000018a","0xb460daa847c45f1c4a41cb05bfb3b51c92e41b36000200000000000000000194","0x5122e01d819e58bb2e22528c0d68d310f0aa6fd7000200000000000000000163","0x851523a36690bf267bbfec389c823072d82921a90002000000000000000001ed","0xe8cc7e765647625b95f59c15848379d10b9ab4af0002000000000000000001de","0x85370d9e3bb111391cc89f6de344e801760461830002000000000000000001ef","0xa7ff759dbef9f3efdd1d59beee44b966acafe214000200000000000000000180","0x3f7c10701b14197e2695dec6428a2ca4cf7fc3b800020000000000000000023c","0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d","0x178e029173417b1f9c8bc16dcec6f697bc32374600000000000000000000025d","0xcfca23ca9ca720b6e98e3eb9b6aa0ffc4a5c08b9000200000000000000000274","0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249","0x0578292cb20a443ba1cde459c985ce14ca2bdee5000100000000000000000269","0x8eb6c82c3081bbbd45dcac5afa631aac53478b7c000100000000000000000270","0x1b65fe4881800b91d4277ba738b567cbb200a60d0002000000000000000002cc","0x99a14324cfd525a34bbc93ac7e348929909d57fd00020000000000000000030e","0x9b532ab955417afd0d012eb9f7389457cd0ea712000000000000000000000338","0x48607651416a943bf5ac71c41be1420538e78f87000200000000000000000327","0x6a5ead5433a50472642cd268e584dafa5a394490000200000000000000000366","0x0fd5663d4893ae0d579d580584806aadd2dd0b8b000200000000000000000367","0x441b8a1980f2f2e43a9397099d15cc2fe6d3625000020000000000000000035f","0xf3aeb3abba741f0eece8a1b1d2f11b85899951cb000200000000000000000351","0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d"]},Metadata:{"0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe":{name:"Balancer Boosted Aave USD",hasIcon:!0},"0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d":{name:"Balancer Boosted Aave USD",hasIcon:!0},"0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063":{name:"Balancer Stable USD",hasIcon:!0},"0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249":{name:"AuraBAL Stable Pool",hasIcon:!1}}},[e.Network.POLYGON]:{IdsMap:{xMatic:{v1:"0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4",v2:"0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c"},stMatic:{v1:"0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366",v2:"0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d"},mai4:{mai4:"0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012",maiBbaUsd:"0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e"}},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","Gyro2","Gyro3","GyroE","FX"],Stable:{AllowList:["0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e","0xf38cf113d2d4f60c36cbd95af2f48a9a0167045a00000000000000000000005b","0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068","0x5028497af0c9a54ea8c6d42a054c0341b9fc616800020000000000000000007b","0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366","0xb4670d1389c758e4380c4211bcbc85342688b9c50002000000000000000003d8","0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455","0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4","0xb4b22bd6cdad0ab828be6f8a4086dfa54e9b373600020000000000000000058f","0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba","0x0b8319061732b34cab22445fa83b81f950e4b7ed000000000000000000000709","0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366","0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d","0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c","0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e","0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b","0xa48d164f6eb0edc68bd03b56fa59e12f24499ad10000000000000000000007c4"]},Investment:{AllowList:[""]},Factories:{"0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0":"oracleWeightedPool","0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9":"weightedPool","0xc66ba2b6595d3613ccab350c886ace23866ede24":"stablePool","0xdae7e32adc5d490a43ccba1f0c736033f2b4efca":"stablePool","0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de":"liquidityBootstrappingPool","0x41b953164995c11c81da73d212ed8af25741b7ac":"liquidityBootstrappingPool","0x0f7bb7ce7b6ed9366f9b6b910adefe72dc538193":"managedPool","0xc128a9954e6c874ea3d62ce62b468ba073093f25":"boostedPool","0xca96c4f198d343e251b1a01f3eba061ef3da73c1":"stablePool","0x136fd06fa01ecf624c7f2b3cb15742c1339dc2c4":"composableStablePool","0x0e39c3d9b2ec765efd9c5c70bb290b1fcd8536e3":"weightedPool"},Stakable:{AllowList:["0x0297e37f1873d2dab4487aa67cd56b58e2f27875000100000000000000000002","0x03cd191f589d12b0582a99808cf19851e468e6b500010000000000000000000a","0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012","0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068","0x10f21c9bd8128a29aa785ab2de0d044dcdd79436000200000000000000000059","0x186084ff790c65088ba694df11758fae4943ee9e000200000000000000000032","0x36128d5436d2d70cab39c9af9cce146c38554ff0000100000000000000000008","0x5a6ae1fd70d04ba4a279fc219dfabc53825cb01d00020000000000000000020e","0x614b5038611729ed49e0ded154d8a5d3af9d1d9e00010000000000000000001d","0x7c9cf12d783821d5c63d8e9427af5c44bad92445000100000000000000000051","0x805ca3ccc61cc231851dee2da6aabff0a7714aa7000200000000000000000361","0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366","0xb204bf10bc3a5435017d3db247f56da601dfe08a0002000000000000000000fe","0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455","0xce66904b68f1f070332cbc631de7ee98b650b499000100000000000000000009","0xcf354603a9aebd2ff9f33e1b04246d8ea204ae9500020000000000000000005a","0xdb1db6e248d7bb4175f6e5a382d0a03fe3dcc813000100000000000000000035","0xea4e073c8ac859f2994c07e627178719c8002dc00002000000000000000003dc","0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e","0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4","0x2dbc9ab0160087ae59474fb7bed95b9e808fa6bc0001000000000000000003db","0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba","0x8f9dd2064eb38e8e40f2ab67bde27c0e16ea9b080002000000000000000004ca","0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b","0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e","0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d","0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c"]},Metadata:{}},[e.Network.ARBITRUM]:{IdsMap:{},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","FX"],Stable:{AllowList:["0x9be7de742865d021c0e8fb9d64311b2c040c1ec1000200000000000000000012","0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016","0x386b5d43ba8b97c43d4afb4cdae7877a1b295e8a000000000000000000000020","0x0510ccf9eb3ab03c1508d3b9769e8ee2cfd6fdcf00000000000000000000005d","0x5a5884fc31948d59df2aeccca143de900d49e1a300000000000000000000006f","0xd89746affa5483627a87e55713ec1905114394950002000000000000000000bf","0x7bceaa9c5e7f4836fec3bce2d5346637c9b13970000000000000000000000102","0xfb5e6d0c1dfed2ba000fbc040ab8df3615ac329c000000000000000000000159"]},Investment:{AllowList:[""]},Factories:{"0x7dfdef5f355096603419239ce743bfaf1120312b":"weightedPool","0xcf0a32bbef8f064969f21f7e02328fb577382018":"weightedPool","0x2433477a10fc5d31b9513c638f19ee85caed53fd":"stablePool","0xebfd5681977e38af65a7487dc70b8221d089ccad":"stablePool","0x142b9666a0a3a30477b052962dda81547e7029ab":"liquidityBootstrappingPool","0x1802953277fd955f9a254b80aa0582f193cf1d77":"liquidityBootstrappingPool","0xacd615b3705b9c880e4e7293f1030b34e57b4c1c":"managedPool","0xdae7e32adc5d490a43ccba1f0c736033f2b4efca":"boostedPool","0xef44d6786b2b4d544b7850fe67ce6381626bf2d6":"stablePool","0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33":"composableStablePool","0x8df6efec5547e31b0eb7d1291b511ff8a2bf987c":"weightedPool"},Stakable:{AllowList:["0x0510ccf9eb3ab03c1508d3b9769e8ee2cfd6fdcf00000000000000000000005d","0x0adeb25cb5920d4f7447af4a0428072edc2cee2200020000000000000000004a","0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016","0x1779900c7707885720d39aa741f4086886307e9e00020000000000000000004b","0x4a3a22a3e7fee0ffbb66f1c28bfac50f75546fc7000200000000000000000008","0x5a5884fc31948d59df2aeccca143de900d49e1a300000000000000000000006f","0x64541216bafffeec8ea535bb71fbc927831d0595000100000000000000000002","0x651e00ffd5ecfa7f3d4f33d62ede0a97cf62ede2000200000000000000000006","0xb28670b3e7ad27bd41fb5938136bf9e9cba90d6500020000000000000000001e","0xb340b6b1a34019853cb05b2de6ee8ffd0b89a008000100000000000000000036","0xb5b77f1ad2b520df01612399258e7787af63025d000200000000000000000010","0xc2f082d33b5b8ef3a7e3de30da54efd3114512ac000200000000000000000017","0xc61ff48f94d801c1ceface0289085197b5ec44f000020000000000000000004d","0xcc65a812ce382ab909a11e434dbf75b34f1cc59d000200000000000000000001","0xe1b40094f1446722c424c598ac412d590e0b3ffb000200000000000000000076","0xb3028ca124b80cfe6e9ca57b70ef2f0ccc41ebd40002000000000000000000ba","0x7bceaa9c5e7f4836fec3bce2d5346637c9b13970000000000000000000000102","0xfb5e6d0c1dfed2ba000fbc040ab8df3615ac329c000000000000000000000159","0x178e029173417b1f9c8bc16dcec6f697bc323746000200000000000000000158"]},Metadata:{}},[e.Network.GNOSIS]:{IdsMap:{},Pagination:{PerPage:10,PerPool:10,PerPoolInitial:5},DelegateOwner:"0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b",ZeroAddress:"0x0000000000000000000000000000000000000000",DynamicFees:{Gauntlet:[]},BlockList:[""],ExcludedPoolTypes:["Element","AaveLinear","Linear","ERC4626Linear","FX","Gyro2","Gyro3","GyroE","HighAmpComposableStable","FX"],Stable:{AllowList:["0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000004","0x707b7d4a1bae449d546dcab869256591bbb3d70b000000000000000000000000"]},Investment:{AllowList:[]},Factories:{},Stakable:{AllowList:[]},Metadata:{}}};var G,W,H,K,$,J,j;e.PoolGaugesAttributes=void 0,(G=e.PoolGaugesAttributes||(e.PoolGaugesAttributes={})).Id="id",G.Address="address",G.PoolId="poolId",e.PoolShareAttributes=void 0,(W=e.PoolShareAttributes||(e.PoolShareAttributes={})).Balance="balance",W.Id="id",W.PoolId="poolId",W.UserAddress="userAddress",e.GaugeShareAttributes=void 0,(H=e.GaugeShareAttributes||(e.GaugeShareAttributes={})).Id="id",H.UserAddress="user",H.GaugeId="gauge",H.Balance="balance",e.PoolSpecialization=void 0,(K=e.PoolSpecialization||(e.PoolSpecialization={}))[K.GeneralPool=0]="GeneralPool",K[K.MinimalSwapInfoPool=1]="MinimalSwapInfoPool",K[K.TwoTokenPool=2]="TwoTokenPool",e.UserBalanceOpKind=void 0,($=e.UserBalanceOpKind||(e.UserBalanceOpKind={}))[$.DepositInternal=0]="DepositInternal",$[$.WithdrawInternal=1]="WithdrawInternal",$[$.TransferInternal=2]="TransferInternal",$[$.TransferExternal=3]="TransferExternal",e.PoolBalanceOpKind=void 0,(J=e.PoolBalanceOpKind||(e.PoolBalanceOpKind={}))[J.Withdraw=0]="Withdraw",J[J.Deposit=1]="Deposit",J[J.Update=2]="Update",e.PoolType=void 0,(j=e.PoolType||(e.PoolType={})).Weighted="Weighted",j.Investment="Investment",j.Stable="Stable",j.ComposableStable="ComposableStable",j.MetaStable="MetaStable",j.StablePhantom="StablePhantom",j.LiquidityBootstrapping="LiquidityBootstrapping",j.Element="Element",j.Gyro2="Gyro2",j.Gyro3="Gyro3",j.GyroE="GyroE",j.Managed="Managed",j.AaveLinear="AaveLinear",j.Linear="Linear",j.EulerLinear="EulerLinear",j.ERC4626Linear="ERC4626Linear",j.BeefyLinear="BeefyLinear",j.GearboxLinear="GearboxLinear",j.MidasLinear="MidasLinear",j.ReaperLinear="ReaperLinear",j.SiloLinear="SiloLinear",j.TetuLinear="TetuLinear",j.YearnLinear="YearnLinear",j.FX="FX";class X{constructor(){this.enableLogging=!0}static getInstance(){return X.instance||(X.instance=new X),X.instance}setLoggingEnabled(e){this.enableLogging=e}info(e){this.enableLogging}warn(e){this.enableLogging&&console.warn(`[WARN] ${e}`)}error(e){this.enableLogging&&console.error(`[ERROR] ${e}`)}time(e){this.enableLogging}timeEnd(e){this.enableLogging}}const Y=e=>e[0].map(((t,a)=>e.map((e=>e[a]))));class z{constructor(e){this.ETH=a.AddressZero,this.isETH=e=>z.isEqual(e,this.ETH),this.isWETH=e=>z.isEqual(e,this.WETH),this.translateToERC20=e=>this.isETH(e)?this.WETH:e,this.WETH=o.getAddress(e)}sortTokens(e,...t){t.forEach((t=>R(e.length===t.length,"array length mismatch")));const a=e.map(this.translateToERC20),n=Y([a,...t]).sort((([e],[t])=>((e,t)=>e.toLowerCase()>t.toLowerCase()?1:-1)(e,t))),[o,...i]=Y(n);return[e.includes(this.ETH)?o.map((e=>this.isWETH(e)?this.ETH:e)):o,...i]}}z.isEqual=(e,t)=>o.getAddress(e)===o.getAddress(t);const Z={"000":"ADD_OVERFLOW","001":"SUB_OVERFLOW","002":"SUB_UNDERFLOW","003":"MUL_OVERFLOW","004":"ZERO_DIVISION","005":"DIV_INTERNAL","006":"X_OUT_OF_BOUNDS","007":"Y_OUT_OF_BOUNDS","008":"PRODUCT_OUT_OF_BOUNDS","009":"INVALID_EXPONENT",100:"OUT_OF_BOUNDS",101:"UNSORTED_ARRAY",102:"UNSORTED_TOKENS",103:"INPUT_LENGTH_MISMATCH",104:"ZERO_TOKEN",200:"MIN_TOKENS",201:"MAX_TOKENS",202:"MAX_SWAP_FEE_PERCENTAGE",203:"MIN_SWAP_FEE_PERCENTAGE",204:"MINIMUM_BPT",205:"CALLER_NOT_VAULT",206:"UNINITIALIZED",207:"BPT_IN_MAX_AMOUNT",208:"BPT_OUT_MIN_AMOUNT",209:"EXPIRED_PERMIT",210:"NOT_TWO_TOKENS",211:"DISABLED",300:"MIN_AMP",301:"MAX_AMP",302:"MIN_WEIGHT",303:"MAX_STABLE_TOKENS",304:"MAX_IN_RATIO",305:"MAX_OUT_RATIO",306:"MIN_BPT_IN_FOR_TOKEN_OUT",307:"MAX_OUT_BPT_FOR_TOKEN_IN",308:"NORMALIZED_WEIGHT_INVARIANT",309:"INVALID_TOKEN",310:"UNHANDLED_JOIN_KIND",311:"ZERO_INVARIANT",312:"ORACLE_INVALID_SECONDS_QUERY",313:"ORACLE_NOT_INITIALIZED",314:"ORACLE_QUERY_TOO_OLD",315:"ORACLE_INVALID_INDEX",316:"ORACLE_BAD_SECS",317:"AMP_END_TIME_TOO_CLOSE",318:"AMP_ONGOING_UPDATE",319:"AMP_RATE_TOO_HIGH",320:"AMP_NO_ONGOING_UPDATE",321:"STABLE_INVARIANT_DIDNT_CONVERGE",322:"STABLE_GET_BALANCE_DIDNT_CONVERGE",323:"RELAYER_NOT_CONTRACT",324:"BASE_POOL_RELAYER_NOT_CALLED",325:"REBALANCING_RELAYER_REENTERED",326:"GRADUAL_UPDATE_TIME_TRAVEL",327:"SWAPS_DISABLED",328:"CALLER_IS_NOT_LBP_OWNER",329:"PRICE_RATE_OVERFLOW",330:"INVALID_JOIN_EXIT_KIND_WHILE_SWAPS_DISABLED",331:"WEIGHT_CHANGE_TOO_FAST",332:"LOWER_GREATER_THAN_UPPER_TARGET",333:"UPPER_TARGET_TOO_HIGH",334:"UNHANDLED_BY_LINEAR_POOL",335:"OUT_OF_TARGET_RANGE",336:"UNHANDLED_EXIT_KIND ",337:"UNAUTHORIZED_EXIT",338:"MAX_MANAGEMENT_SWAP_FEE_PERCENTAGE",339:"UNHANDLED_BY_MANAGED_POOL",340:"UNHANDLED_BY_PHANTOM_POOL",341:"TOKEN_DOES_NOT_HAVE_RATE_PROVIDER",342:"INVALID_INITIALIZATION",343:"OUT_OF_NEW_TARGET_RANGE",344:"UNAUTHORIZED_OPERATION",345:"UNINITIALIZED_POOL_CONTROLLER",400:"REENTRANCY",401:"SENDER_NOT_ALLOWED",402:"PAUSED",403:"PAUSE_WINDOW_EXPIRED",404:"MAX_PAUSE_WINDOW_DURATION",405:"MAX_BUFFER_PERIOD_DURATION",406:"INSUFFICIENT_BALANCE",407:"INSUFFICIENT_ALLOWANCE",408:"ERC20_TRANSFER_FROM_ZERO_ADDRESS",409:"ERC20_TRANSFER_TO_ZERO_ADDRESS",410:"ERC20_MINT_TO_ZERO_ADDRESS",411:"ERC20_BURN_FROM_ZERO_ADDRESS",412:"ERC20_APPROVE_FROM_ZERO_ADDRESS",413:"ERC20_APPROVE_TO_ZERO_ADDRESS",414:"ERC20_TRANSFER_EXCEEDS_ALLOWANCE",415:"ERC20_DECREASED_ALLOWANCE_BELOW_ZERO",416:"ERC20_TRANSFER_EXCEEDS_BALANCE",417:"ERC20_BURN_EXCEEDS_ALLOWANCE",418:"SAFE_ERC20_CALL_FAILED",419:"ADDRESS_INSUFFICIENT_BALANCE",420:"ADDRESS_CANNOT_SEND_VALUE",421:"SAFE_CAST_VALUE_CANT_FIT_INT256",422:"GRANT_SENDER_NOT_ADMIN",423:"REVOKE_SENDER_NOT_ADMIN",424:"RENOUNCE_SENDER_NOT_ALLOWED",425:"BUFFER_PERIOD_EXPIRED",426:"CALLER_IS_NOT_OWNER",427:"NEW_OWNER_IS_ZERO",428:"CODE_DEPLOYMENT_FAILED",429:"CALL_TO_NON_CONTRACT",430:"LOW_LEVEL_CALL_FAILED",431:"NOT_PAUSED",432:"ADDRESS_ALREADY_ALLOWLISTED",433:"ADDRESS_NOT_ALLOWLISTED",434:"ERC20_BURN_EXCEEDS_BALANCE",500:"INVALID_POOL_ID",501:"CALLER_NOT_POOL",502:"SENDER_NOT_ASSET_MANAGER",503:"USER_DOESNT_ALLOW_RELAYER",504:"INVALID_SIGNATURE",505:"EXIT_BELOW_MIN",506:"JOIN_ABOVE_MAX",507:"SWAP_LIMIT",508:"SWAP_DEADLINE",509:"CANNOT_SWAP_SAME_TOKEN",510:"UNKNOWN_AMOUNT_IN_FIRST_SWAP",511:"MALCONSTRUCTED_MULTIHOP_SWAP",512:"INTERNAL_BALANCE_OVERFLOW",513:"INSUFFICIENT_INTERNAL_BALANCE",514:"INVALID_ETH_INTERNAL_BALANCE",515:"INVALID_POST_LOAN_BALANCE",516:"INSUFFICIENT_ETH",517:"UNALLOCATED_ETH",518:"ETH_TRANSFER",519:"CANNOT_USE_ETH_SENTINEL",520:"TOKENS_MISMATCH",521:"TOKEN_NOT_REGISTERED",522:"TOKEN_ALREADY_REGISTERED",523:"TOKENS_ALREADY_SET",524:"TOKENS_LENGTH_MUST_BE_2",525:"NONZERO_TOKEN_BALANCE",526:"BALANCE_TOTAL_OVERFLOW",527:"POOL_NO_TOKENS",528:"INSUFFICIENT_FLASH_LOAN_BALANCE",600:"SWAP_FEE_PERCENTAGE_TOO_HIGH",601:"FLASH_LOAN_FEE_PERCENTAGE_TOO_HIGH",602:"INSUFFICIENT_FLASH_LOAN_FEE_AMOUNT"};class Q{constructor(){}}async function ee(e){if("string"==typeof e)return e;if(s.Signer.isSigner(e))return e.getAddress();if(e.address)return e.address;throw new Error("Could not read account address")}var te;Q.isErrorCode=e=>{if(!e.includes("BAL#"))return!1;const t=e.replace("BAL#","");return Object.keys(Z).includes(t)},Q.parseErrorCode=e=>{if(!e.includes("BAL#"))throw new Error("Error code not found");const t=e.replace("BAL#",""),a=Z[t];if(!a)throw new Error("Error code not found");return a},Q.tryParseErrorCode=e=>{try{return Q.parseErrorCode(e)}catch{return e}},Q.isBalancerError=e=>Object.values(Z).includes(e),Q.encodeError=e=>{const t=Object.entries(Z).find((([,t])=>t===e));if(!t)throw Error("Error message not found");return`BAL#${t[0]}`},e.RelayerAction=void 0,(te=e.RelayerAction||(e.RelayerAction={})).JoinPool="JoinPool",te.ExitPool="ExitPool",te.Swap="Swap",te.BatchSwap="BatchSwap",te.SetRelayerApproval="SetRelayerApproval";class ae{constructor(){}}ae.encodeCalldataAuthorization=(e,t,a)=>{const n=i.hexZeroPad(i.hexValue(t),32).slice(2),{v:o,r:s,s:r}=i.splitSignature(a);return`${e}${n}${i.hexZeroPad(i.hexValue(o),32).slice(2)}${s.slice(2)}${r.slice(2)}`},ae.signJoinAuthorization=(t,a,n,o,i,s)=>ae.signAuthorizationFor(e.RelayerAction.JoinPool,t,a,n,o,i,s),ae.signExitAuthorization=(t,a,n,o,i,s)=>ae.signAuthorizationFor(e.RelayerAction.ExitPool,t,a,n,o,i,s),ae.signSwapAuthorization=(t,a,n,o,i,s)=>ae.signAuthorizationFor(e.RelayerAction.Swap,t,a,n,o,i,s),ae.signBatchSwapAuthorization=(t,a,n,o,i,s)=>ae.signAuthorizationFor(e.RelayerAction.BatchSwap,t,a,n,o,i,s),ae.signSetRelayerApprovalAuthorization=(t,a,n,o,i,s)=>ae.signAuthorizationFor(e.RelayerAction.SetRelayerApproval,t,a,n,o,i,s),ae.signAuthorizationFor=async(e,t,n,o,i,s=a.MaxUint256,r)=>{const{chainId:l}=await t.provider.getNetwork();if(!r){const e=await n.getAddress();r=await t.getNextNonce(e)}const d={name:"Balancer V2 Vault",version:"1",chainId:l,verifyingContract:t.address},p={[e]:[{name:"calldata",type:"bytes"},{name:"sender",type:"address"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]},u={calldata:i,sender:await ee(o),nonce:r.toString(),deadline:s.toString()};return n._signTypedData(d,p,u)};class ne{constructor(){}}ne.signSetMinterApproval=async(e,t,o,s,r=a.MaxUint256,l)=>{const{chainId:d}=await e.provider.getNetwork();if(!l){const t=await s.getAddress();l=await e.getNextNonce(t)}const p={name:"Balancer Minter",version:"1",chainId:d,verifyingContract:e.address},u={minter:await ee(t),approval:o,nonce:l.toString(),deadline:r.toString()},c=await s._signTypedData(p,{SetMinterApproval:[{name:"minter",type:"address"},{name:"approval",type:"bool"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]},u);return{...i.splitSignature(c),deadline:n.BigNumber.from(r)}};const oe=BigInt(0),ie=BigInt(1),se=BigInt("1000000000000000000"),re=(e,t)=>{if(!e)throw new Error(t)};function le(e){const t=BigInt(18)-e;return se*BigInt(10)**t}function de(e,t){return ye.mulDownFixed(e,t)}function pe(e,t){const a=new Array(e.length);for(let n=0;n=0&&a>=e||t<0&&at>e?t:e))}static min(e,t){return e=this.MIN_NATURAL_EXPONENT&&e<=this.MAX_NATURAL_EXPONENT,"Errors.INVALID_EXPONENT"),e<0)return this.ONE_18*this.ONE_18/this.exp(BigInt(-1)*e);let t;e>=this.x0?(e-=this.x0,t=this.a0):e>=this.x1?(e-=this.x1,t=this.a1):t=BigInt(1),e*=BigInt(100);let a=this.ONE_20;e>=this.x2&&(e-=this.x2,a=a*this.a2/this.ONE_20),e>=this.x3&&(e-=this.x3,a=a*this.a3/this.ONE_20),e>=this.x4&&(e-=this.x4,a=a*this.a4/this.ONE_20),e>=this.x5&&(e-=this.x5,a=a*this.a5/this.ONE_20),e>=this.x6&&(e-=this.x6,a=a*this.a6/this.ONE_20),e>=this.x7&&(e-=this.x7,a=a*this.a7/this.ONE_20),e>=this.x8&&(e-=this.x8,a=a*this.a8/this.ONE_20),e>=this.x9&&(e-=this.x9,a=a*this.a9/this.ONE_20);let n,o=this.ONE_20;return n=e,o+=n,n=n*e/this.ONE_20/BigInt(2),o+=n,n=n*e/this.ONE_20/BigInt(3),o+=n,n=n*e/this.ONE_20/BigInt(4),o+=n,n=n*e/this.ONE_20/BigInt(5),o+=n,n=n*e/this.ONE_20/BigInt(6),o+=n,n=n*e/this.ONE_20/BigInt(7),o+=n,n=n*e/this.ONE_20/BigInt(8),o+=n,n=n*e/this.ONE_20/BigInt(9),o+=n,n=n*e/this.ONE_20/BigInt(10),o+=n,n=n*e/this.ONE_20/BigInt(11),o+=n,n=n*e/this.ONE_20/BigInt(12),o+=n,a*o/this.ONE_20*t/BigInt(100)}static _ln_36(e){const t=((e*=this.ONE_18)-this.ONE_36)*this.ONE_36/(e+this.ONE_36),a=t*t/this.ONE_36;let n=t,o=n;return n=n*a/this.ONE_36,o+=n/BigInt(3),n=n*a/this.ONE_36,o+=n/BigInt(5),n=n*a/this.ONE_36,o+=n/BigInt(7),n=n*a/this.ONE_36,o+=n/BigInt(9),n=n*a/this.ONE_36,o+=n/BigInt(11),n=n*a/this.ONE_36,o+=n/BigInt(13),n=n*a/this.ONE_36,o+=n/BigInt(15),o*BigInt(2)}static _ln(e){if(e=this.a0*this.ONE_18&&(e/=this.a0,t+=this.x0),e>=this.a1*this.ONE_18&&(e/=this.a1,t+=this.x1),t*=BigInt(100),(e*=BigInt(100))>=this.a2&&(e=e*this.ONE_20/this.a2,t+=this.x2),e>=this.a3&&(e=e*this.ONE_20/this.a3,t+=this.x3),e>=this.a4&&(e=e*this.ONE_20/this.a4,t+=this.x4),e>=this.a5&&(e=e*this.ONE_20/this.a5,t+=this.x5),e>=this.a6&&(e=e*this.ONE_20/this.a6,t+=this.x6),e>=this.a7&&(e=e*this.ONE_20/this.a7,t+=this.x7),e>=this.a8&&(e=e*this.ONE_20/this.a8,t+=this.x8),e>=this.a9&&(e=e*this.ONE_20/this.a9,t+=this.x9),e>=this.a10&&(e=e*this.ONE_20/this.a10,t+=this.x10),e>=this.a11&&(e=e*this.ONE_20/this.a11,t+=this.x11);const a=(e-this.ONE_20)*this.ONE_20/(e+this.ONE_20),n=a*a/this.ONE_20;let o=a,i=o;return o=o*n/this.ONE_20,i+=o/BigInt(3),o=o*n/this.ONE_20,i+=o/BigInt(5),o=o*n/this.ONE_20,i+=o/BigInt(7),o=o*n/this.ONE_20,i+=o/BigInt(9),o=o*n/this.ONE_20,i+=o/BigInt(11),i*=BigInt(2),(t+i)/BigInt(100)}}be.ONE_18=BigInt("1000000000000000000"),be.ONE_20=BigInt("100000000000000000000"),be.ONE_36=BigInt("1000000000000000000000000000000000000"),be.MAX_NATURAL_EXPONENT=BigInt("130000000000000000000"),be.MIN_NATURAL_EXPONENT=BigInt("-41000000000000000000"),be.LN_36_LOWER_BOUND=BigInt(be.ONE_18)-BigInt("100000000000000000"),be.LN_36_UPPER_BOUND=BigInt(be.ONE_18)+BigInt("100000000000000000"),be.MILD_EXPONENT_BOUND=BigInt(2)**BigInt(254)/be.ONE_20,be.x0=BigInt("128000000000000000000"),be.a0=BigInt("38877084059945950922200000000000000000000000000000000000"),be.x1=BigInt("64000000000000000000"),be.a1=BigInt("6235149080811616882910000000"),be.x2=BigInt("3200000000000000000000"),be.a2=BigInt("7896296018268069516100000000000000"),be.x3=BigInt("1600000000000000000000"),be.a3=BigInt("888611052050787263676000000"),be.x4=BigInt("800000000000000000000"),be.a4=BigInt("298095798704172827474000"),be.x5=BigInt("400000000000000000000"),be.a5=BigInt("5459815003314423907810"),be.x6=BigInt("200000000000000000000"),be.a6=BigInt("738905609893065022723"),be.x7=BigInt("100000000000000000000"),be.a7=BigInt("271828182845904523536"),be.x8=BigInt("50000000000000000000"),be.a8=BigInt("164872127070012814685"),be.x9=BigInt("25000000000000000000"),be.a9=BigInt("128402541668774148407"),be.x10=BigInt("12500000000000000000"),be.a10=BigInt("113314845306682631683"),be.x11=BigInt("6250000000000000000"),be.a11=BigInt("106449445891785942956");const me=(e,t,o)=>{var i;let s=o?e.tokens.map((e=>e.address===t?a.AddressZero:e.address)):e.tokens.map((e=>e.address)),r=e.tokens.map((e=>{var t;return null!==(t=e.decimals)&&void 0!==t?t:18})),l=e.tokens.map((e=>n.parseFixed(e.balance,e.decimals).toBigInt())),d=e.tokens.map((e=>{var t;return n.parseFixed(null!==(t=e.weight)&&void 0!==t?t:"1",18).toBigInt()})),p=e.tokens.map((e=>{var t;return n.parseFixed(null!==(t=e.priceRate)&&void 0!==t?t:"1",18).toBigInt()})),u=r.map((e=>le(BigInt(e)))),c=u.map(((e,t)=>ye.mulDownFixed(e,p[t]))),y=pe(l,c);if(t){const e=new z(t);[s,r,c,u,l,y,d,p]=e.sortTokens(s,r,c,u,l,y,d,p)}const b=n.parseFixed(null!==(i=e.amp)&&void 0!==i?i:"1",3).toBigInt(),m=y.indexOf(ye.max(y)),f=[...c],T=[...u],h=[...s],I=[...l],g=[...p],_=[...y],P=s.indexOf(e.address);return-1!==P&&(f.splice(P,1),T.splice(P,1),h.splice(P,1),I.splice(P,1),g.splice(P,1),_.splice(P,1)),{bptIndex:P,higherBalanceTokenIndex:m,ampWithPrecision:b,balancesEvm:l,balancesEvmWithoutBpt:I,priceRates:p,priceRatesWithoutBpt:g,swapFeeEvm:n.parseFixed(e.swapFee,18).toBigInt(),poolTokens:s,poolTokensWithoutBpt:h,weights:d,scalingFactors:c,scalingFactorsWithoutBpt:f,scalingFactorsRaw:u,scalingFactorsRawWithoutBpt:T,upScaledBalances:y,upScaledBalancesWithoutBpt:_,totalSharesEvm:n.parseFixed(e.totalShares||"0",18).toBigInt()}},fe={Popular:{Symbols:["WBTC","DAI","USDC","BAL","AAVE","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",WETH:"0x0000000000000000000000000000000000000000",BAL:"0x0000000000000000000000000000000000000000"}},Te={[e.Network.GOERLI]:{Popular:{Symbols:["WBTC","DAI","USDC","BAL","USDT","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1",WETH:"0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1",BAL:"0xfA8449189744799aD2AcE7e0EBAC8BB7575eff47",bbaUSD:"0x13ACD41C585d7EbB4a9460f7C8f50BE60DC080Cd"},PriceChainMap:{"0xdfcea9088c8a88a76ff74892c1457c17dfeef9c1":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2","0x37f03a12241e9fd3658ad6777d289c3fb8512bc9":"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599","0xfa8449189744799ad2ace7e0ebac8bb7575eff47":"0xba100000625a3754423978a60c9317c58a424e3d","0xe0c9275e44ea80ef17579d33c55136b7da269aeb":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","0x8c9e6c40d3402480ace624730524facc5482798c":"0x6b175474e89094c44da98b954eedeac495271d0f","0x1f1f156e0317167c11aa412e3d1435ea29dc3cce":"0xdac17f958d2ee523a2206206994597c13d831ec7","0x4cb1892fddf14f772b2e39e299f44b2e5da90d04":"0x3ed3b47dd13ec9a98b44e6204a523e766b225811","0x811151066392fd641fe74a9b55a712670572d161":"0xbcca60bb61934080951369a648fb03df4f96263c","0x89534a24450081aa267c79b07411e9617d984052":"0x028171bca77440897b824ca71d1c56cac55b68a3","0x829f35cebbcd47d3c120793c12f7a232c903138b":"0x956f47f50a910163d8bf957cf5846d573e7f87ca","0xff386a3d08f80ac38c77930d173fa56c6286dc8b":"0x6810e776880c02933d47db1b9fc05908e5386b96"}},[e.Network.MAINNET]:{Popular:{Symbols:["WBTC","DAI","USDC","BAL","AAVE","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",WETH:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",BAL:"0xba100000625a3754423978a60c9317c58a424e3d",bbaUSD:"0x7B50775383d3D6f0215A8F290f2C9e2eEBBEceb2",bbaUSDv2:"0xA13a9247ea42D743238089903570127DdA72fE44"}},[e.Network.POLYGON]:{Popular:{Symbols:["WBTC","DAI","USDC","BAL","AAVE","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",WETH:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",BAL:"0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3"}},[e.Network.ARBITRUM]:{Popular:{Symbols:["WBTC","DAI","USDC","BAL","AAVE","WETH"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",WETH:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",BAL:"0x040d1EdC9569d4Bab2D15287Dc5A4F10F56a56B8"}},[e.Network.GNOSIS]:{Popular:{Symbols:["xDAI","WXDAI","WETH","BAL"]},Addresses:{nativeAsset:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",wNativeAsset:"0xe91d153e0b41518a2ce8dd3d7944fa863463a97d",WETH:"0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1",BAL:"0x7eF541E2a22058048904fE5744f9c7E4C57AF717"}}};function he(e){return Te[e]?Te[e]:fe}let Ie=!1,ge=!1;const _e={debug:1,default:2,info:2,warning:3,error:4,off:5};let Pe=_e.default,we=null;const xe=function(){try{const e=[];if(["NFD","NFC","NFKD","NFKC"].forEach((t=>{try{if("test"!=="test".normalize(t))throw new Error("bad normalize")}catch(a){e.push(t)}})),e.length)throw new Error("missing "+e.join(", "));if(String.fromCharCode(233).normalize("NFD")!==String.fromCharCode(101,769))throw new Error("broken implementation")}catch(e){return e.message}return null}();var Ee,Ae;!function(e){e.DEBUG="DEBUG",e.INFO="INFO",e.WARNING="WARNING",e.ERROR="ERROR",e.OFF="OFF"}(Ee||(Ee={})),function(e){e.UNKNOWN_ERROR="UNKNOWN_ERROR",e.NOT_IMPLEMENTED="NOT_IMPLEMENTED",e.UNSUPPORTED_OPERATION="UNSUPPORTED_OPERATION",e.NETWORK_ERROR="NETWORK_ERROR",e.SERVER_ERROR="SERVER_ERROR",e.TIMEOUT="TIMEOUT",e.BUFFER_OVERRUN="BUFFER_OVERRUN",e.NUMERIC_FAULT="NUMERIC_FAULT",e.MISSING_NEW="MISSING_NEW",e.INVALID_ARGUMENT="INVALID_ARGUMENT",e.MISSING_ARGUMENT="MISSING_ARGUMENT",e.UNEXPECTED_ARGUMENT="UNEXPECTED_ARGUMENT",e.CALL_EXCEPTION="CALL_EXCEPTION",e.INSUFFICIENT_FUNDS="INSUFFICIENT_FUNDS",e.NONCE_EXPIRED="NONCE_EXPIRED",e.REPLACEMENT_UNDERPRICED="REPLACEMENT_UNDERPRICED",e.UNPREDICTABLE_GAS_LIMIT="UNPREDICTABLE_GAS_LIMIT",e.TRANSACTION_REPLACED="TRANSACTION_REPLACED",e.ACTION_REJECTED="ACTION_REJECTED"}(Ae||(Ae={}));const Se="0123456789abcdef";class ve{constructor(e){Object.defineProperty(this,"version",{enumerable:!0,value:e,writable:!1})}_log(e,t){const a=e.toLowerCase();null==_e[a]&&this.throwArgumentError("invalid log level name","logLevel",e),Pe>_e[a]||console.log.apply(console,t)}debug(...e){this._log(ve.levels.DEBUG,e)}info(...e){this._log(ve.levels.INFO,e)}warn(...e){this._log(ve.levels.WARNING,e)}makeError(e,t,a){if(ge)return this.makeError("censored error",t,{});t||(t=ve.errors.UNKNOWN_ERROR),a||(a={});const n=[];Object.keys(a).forEach((e=>{const t=a[e];try{if(t instanceof Uint8Array){let a="";for(let e=0;e>4],a+=Se[15&t[e]];n.push(e+"=Uint8Array(0x"+a+")")}else n.push(e+"="+JSON.stringify(t))}catch(t){n.push(e+"="+JSON.stringify(a[e].toString()))}})),n.push(`code=${t}`),n.push(`version=${this.version}`);const o=e;let i="";switch(t){case Ae.NUMERIC_FAULT:{i="NUMERIC_FAULT";const t=e;switch(t){case"overflow":case"underflow":case"division-by-zero":i+="-"+t;break;case"negative-power":case"negative-width":i+="-unsupported";break;case"unbound-bitwise-result":i+="-unbound-result"}break}case Ae.CALL_EXCEPTION:case Ae.INSUFFICIENT_FUNDS:case Ae.MISSING_NEW:case Ae.NONCE_EXPIRED:case Ae.REPLACEMENT_UNDERPRICED:case Ae.TRANSACTION_REPLACED:case Ae.UNPREDICTABLE_GAS_LIMIT:i=t}i&&(e+=" [ See: https://links.ethers.org/v5-errors-"+i+" ]"),n.length&&(e+=" ("+n.join(", ")+")");const s=new Error(e);return s.reason=o,s.code=t,Object.keys(a).forEach((function(e){s[e]=a[e]})),s}throwError(e,t,a){throw this.makeError(e,t,a)}throwArgumentError(e,t,a){return this.throwError(e,ve.errors.INVALID_ARGUMENT,{argument:t,value:a})}assert(e,t,a,n){e||this.throwError(t,a,n)}assertArgument(e,t,a,n){e||this.throwArgumentError(t,a,n)}checkNormalize(e){xe&&this.throwError("platform missing String.prototype.normalize",ve.errors.UNSUPPORTED_OPERATION,{operation:"String.prototype.normalize",form:xe})}checkSafeUint53(e,t){"number"==typeof e&&(null==t&&(t="value not safe"),(e<0||e>=9007199254740991)&&this.throwError(t,ve.errors.NUMERIC_FAULT,{operation:"checkSafeInteger",fault:"out-of-safe-range",value:e}),e%1&&this.throwError(t,ve.errors.NUMERIC_FAULT,{operation:"checkSafeInteger",fault:"non-integer",value:e}))}checkArgumentCount(e,t,a){a=a?": "+a:"",et&&this.throwError("too many arguments"+a,ve.errors.UNEXPECTED_ARGUMENT,{count:e,expectedCount:t})}checkNew(e,t){e!==Object&&null!=e||this.throwError("missing new",ve.errors.MISSING_NEW,{name:t.name})}checkAbstract(e,t){e===t?this.throwError("cannot instantiate abstract class "+JSON.stringify(t.name)+" directly; use a sub-class",ve.errors.UNSUPPORTED_OPERATION,{name:e.name,operation:"new"}):e!==Object&&null!=e||this.throwError("missing new",ve.errors.MISSING_NEW,{name:t.name})}static globalLogger(){return we||(we=new ve("logger/5.7.0")),we}static setCensorship(e,t){if(!e&&t&&this.globalLogger().throwError("cannot permanently disable censorship",ve.errors.UNSUPPORTED_OPERATION,{operation:"setCensorship"}),Ie){if(!e)return;this.globalLogger().throwError("error censorship permanent",ve.errors.UNSUPPORTED_OPERATION,{operation:"setCensorship"})}ge=!!e,Ie=!!t}static setLogLevel(e){const t=_e[e.toLowerCase()];null!=t?Pe=t:ve.globalLogger().warn("invalid log level - "+e)}static from(e){return new ve(e)}}ve.errors=Ae,ve.levels=Ee;const ke=new ve("units/5.7.0"),Be=["wei","kwei","mwei","gwei","szabo","finney","ether"];function Ce(e,t){if("string"==typeof t){const e=Be.indexOf(t);-1!==e&&(t=3*e)}return n.formatFixed(e,null!=t?t:18)}function Oe(e,t){if("string"!=typeof e&&ke.throwArgumentError("value must be a string","value",e),"string"==typeof t){const e=Be.indexOf(t);-1!==e&&(t=3*e)}return n.parseFixed(e,null!=t?t:18)}const Me={[e.Network.MAINNET]:{waUSDT:"0xf8fd466f12e236f4c96f7cce6c79eadb819abf58",waUSDC:"0xd093fa4fb80d09bb30817fdcd442d4d02ed3e5de",waDAI:"0x02d60b84491589974263d922d9cc7a3152618ef6"},[e.Network.POLYGON]:{wamDAI:"0xee029120c72b0607344f35b17cdd90025e647b00",wamUSDC:"0x221836a597948dce8f3568e044ff123108acc42a",wamUSDT:"0x19c60a251e525fa88cd6f3768416a8024e98fc19"}},Fe={[e.Network.MAINNET]:{[Me[e.Network.MAINNET].waUSDT]:{aToken:"0x3ed3b47dd13ec9a98b44e6204a523e766b225811",underlying:"0xdac17f958d2ee523a2206206994597c13d831ec7"},[Me[e.Network.MAINNET].waUSDC]:{aToken:"0xbcca60bb61934080951369a648fb03df4f96263c",underlying:"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"},[Me[e.Network.MAINNET].waDAI]:{aToken:"0x028171bca77440897b824ca71d1c56cac55b68a3",underlying:"0x6b175474e89094c44da98b954eedeac495271d0f"}},[e.Network.POLYGON]:{[Me[e.Network.POLYGON].wamUSDT]:{aToken:"0x60d55f02a771d515e077c9c2403a1ef324885cec",underlying:"0xc2132d05d31c914a87c6611c10748aeb04b58e8f"},[Me[e.Network.POLYGON].wamUSDC]:{aToken:"0x1a13f4ca1d028320a707d99520abfefca3998b7f",underlying:"0x2791bca1f2de4661ed88a30c99a7a9449aa84174"},[Me[e.Network.POLYGON].wamDAI]:{aToken:"0x27f8d03b3a2196956ed754badc28d73be8830a6e",underlying:"0x8f3cf7ad23cd3cadbd9735aff958023239c6a063"}}},Re=new t.Interface(["function rate() view returns (uint256)"]);class Ne{constructor(e,t){this.multicall=e,this.network=t}async fetch(e){const t=Object.values(Me[e]),a=t.map((e=>({target:e,callData:Re.encodeFunctionData("rate",[])}))),[,n]=await this.multicall.callStatic.aggregate(a);return t.reduce(((e,t,a)=>(e[t]||(e[t]="0x"==n[a]?0:parseFloat(Ce(n[a],27))),e)),{})}async getRate(e){return 1}}function Le(e,t){let a=e.toLowerCase();return a=De(a,t),a=Ue(a,t),a}const De=(e,t)=>{const a=he(t).PriceChainMap;return a&&a[e.toLowerCase()]||e},Ue=(e,t)=>{const a=e.toLocaleLowerCase(),n=t;return null!=Fe[n]&&null!=Fe[n]&&Object.keys(Fe[n]).includes(a)?Fe[n][a].aToken:a},Ve=(e,t)=>{const o=t.filter(((t,n)=>e[n]===a.AddressZero));return o[0]?n.BigNumber.from(o[0]):n.BigNumber.from(0)};class qe{constructor(e,t=200,a=100){this.fn=e,this.wait=t,this.limit=a,this.requestSets=[],this.promisedCalls=[],this.promisedCount=0,this.debounceCancel=()=>{}}fetch(e){var t,a;return(t=this.requestSets)[a=this.promisedCount]||(t[a]=new Set),e&&this.requestSets[this.promisedCount].add(e),this.requestSets[this.promisedCount].size>=this.limit?this.execute(0):this.promisedCalls[this.promisedCount]?this.promisedCalls[this.promisedCount].promise:this.execute(this.wait)}execute(e=0){this.promisedCalls[this.promisedCount]||(this.promisedCalls[this.promisedCount]=(()=>{let e=()=>{},t=()=>{};return{promise:new Promise(((a,n)=>{[e,t]=[a,n]})),reject:t,resolve:e}})());const{promise:t,resolve:a,reject:n}=this.promisedCalls[this.promisedCount];this.timeout&&clearTimeout(this.timeout);const o=()=>{const e=[...this.requestSets[this.promisedCount]];this.promisedCount++,this.fn(e).then((e=>{a(e),this.debounceCancel=()=>{}})).catch((e=>{e.response&&e.response.data&&e.response.data.error&&(e=e.response.data.error),n(e)}))};return e>0?this.timeout=setTimeout(o.bind(this),e):o(),this.debounceCancel=()=>{this.timeout&&clearTimeout(this.timeout),n("Cancelled"),delete this.promisedCalls[this.promisedCount]},t}}function Ge(e,t){const a=new RegExp(`[0-9]+\\.?[0-9]{0,${t}}`),o=e.match(a);let i=e;return o&&(i=o[0]),n.parseFixed(i,t)}function We(e,t){return n.formatFixed(e,t).replace(/(.0$)/,"")}const He=n.BigNumber.from("10000"),Ke=(e,t)=>e.mul(t).div(He),$e=(e,t)=>{const a=Ke(e,t);return e.sub(a)},Je=(e,t)=>{const a=Ke(e,t);return e.add(a)},je=(e,t)=>o.getAddress(e)===o.getAddress(t);function Xe(e,t,a){return t<0||t>e.length?e:[...e.slice(0,t),a,...e.slice(t)]}function Ye(e,t,a){return t<0||t>=e.length?e:[...e.slice(0,t),a,...e.slice(t+1)]}function ze(e,t){const a=[...e];return t<0||t>=e.length||a.splice(t,1),a}function Ze(e,t,...a){if(e.length!==t.length||a.some((e=>e.length!==t.length)))throw new Error("Array length mismatch");const n=e.map((e=>t.indexOf(e)));if(n.indexOf(-1)>=0)throw new Error("Invalid reference or original array");const o=[];return n.forEach(((e,t)=>{a.forEach(((a,n)=>{o[n]||(o[n]=[]),o[n][t]=a[e]}))})),o}function Qe(t){const a=Object.values(e.PoolType);return!(!t.includes("Linear")||!a.includes(t))}const et=({receipt:e,to:t,contractInterface:a,logName:n})=>{const o=e.logs.filter((e=>je(e.address,t))).map((e=>{try{return a.parseLog(e)}catch(e){return X.getInstance().warn(e),null}})).find((e=>(null==e?void 0:e.name)===n));if(!o)throw new Error("Event not found in logs");return o},tt=()=>`0x${Array(8).fill(null).map((()=>Math.random().toString(16).slice(2,10))).join("")}`;class at{format(e){return e}}class nt{constructor(){this.operatorMap={gt:"_gt",lt:"_lt",eq:"",in:"_in",not_in:"_not_in",contains:"_contains"}}format(e){const t={};return e.where&&Object.entries(e.where).forEach((([e,a])=>{Object.entries(a).forEach((([a,n])=>{t[`${e}${this.operatorMap[a]}`]=n}))})),{...e,where:t}}}class ot{constructor(e){this.args=e}merge(e){const t=r.mergeWith(this.args,e.args,((e,t)=>{if(Array.isArray(e))return e.concat(t)}));return new ot(t)}format(e){return e.format(this.args)}}const it=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct AaveLinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class st{static createInterface(){return new l.utils.Interface(it)}static connect(e,t){return new l.Contract(e,it,t)}}st.abi=it;const rt=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"AaveLinearPoolCreated",type:"event"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract AaveLinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class lt{static createInterface(){return new l.utils.Interface(rt)}static connect(e,t){return new l.Contract(e,rt,t)}}lt.abi=rt;const dt=[{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approveVault",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IStaticATokenLM",name:"staticToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"toUnderlying",type:"bool"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapAaveStaticToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStaticATokenLM",name:"staticToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"fromUnderlying",type:"bool"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapAaveDynamicToken",outputs:[],stateMutability:"payable",type:"function"}];class pt{static createInterface(){return new l.utils.Interface(dt)}static connect(e,t){return new l.Contract(e,dt,t)}}pt.abi=dt;const ut=[{inputs:[{internalType:"address",name:"admin",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"previousAdminRole",type:"bytes32"},{indexed:!0,internalType:"bytes32",name:"newAdminRole",type:"bytes32"}],name:"RoleAdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleGranted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"}],name:"RoleRevoked",type:"event"},{inputs:[],name:"DEFAULT_ADMIN_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"actionId",type:"bytes32"},{internalType:"address",name:"account",type:"address"},{internalType:"address",name:"",type:"address"}],name:"canPerform",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"}],name:"getRoleAdmin",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getRoleMember",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"}],name:"getRoleMemberCount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"grantRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32[]",name:"roles",type:"bytes32[]"},{internalType:"address",name:"account",type:"address"}],name:"grantRoles",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32[]",name:"roles",type:"bytes32[]"},{internalType:"address[]",name:"accounts",type:"address[]"}],name:"grantRolesToMany",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"hasRole",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"renounceRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"revokeRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32[]",name:"roles",type:"bytes32[]"},{internalType:"address",name:"account",type:"address"}],name:"revokeRoles",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32[]",name:"roles",type:"bytes32[]"},{internalType:"address[]",name:"accounts",type:"address[]"}],name:"revokeRolesFromMany",outputs:[],stateMutability:"nonpayable",type:"function"}];class ct{static createInterface(){return new l.utils.Interface(ut)}static connect(e,t){return new l.Contract(e,ut,t)}}ct.abi=ut;const yt=[{inputs:[{internalType:"contract IVault",name:"_vault",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"minAmountsOut",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.ExitPoolRequest",name:"request",type:"tuple"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"maxAmountsIn",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"fromInternalBalance",type:"bool"}],internalType:"struct IVault.JoinPoolRequest",name:"request",type:"tuple"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"vault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"}];class bt{static createInterface(){return new l.utils.Interface(yt)}static connect(e,t){return new l.Contract(e,yt,t)}}bt.abi=yt;const mt=[{inputs:[{internalType:"contract IBalancerTokenAdmin",name:"tokenAdmin",type:"address"},{internalType:"contract IGaugeController",name:"gaugeController",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"gauge",type:"address"},{indexed:!1,internalType:"uint256",name:"minted",type:"uint256"}],name:"Minted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!0,internalType:"address",name:"minter",type:"address"},{indexed:!1,internalType:"bool",name:"approval",type:"bool"}],name:"MinterApprovalSet",type:"event"},{inputs:[{internalType:"address",name:"minter",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"allowed_to_mint_for",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBalancerToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBalancerTokenAdmin",outputs:[{internalType:"contract IBalancerTokenAdmin",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getGaugeController",outputs:[{internalType:"contract IGaugeController",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"minter",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"getMinterApproval",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"gauge",type:"address"}],name:"mint",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"gauge",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"mintFor",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[]",name:"gauges",type:"address[]"}],name:"mintMany",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[]",name:"gauges",type:"address[]"},{internalType:"address",name:"user",type:"address"}],name:"mintManyFor",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"gauge",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"mint_for",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[8]",name:"gauges",type:"address[8]"}],name:"mint_many",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"gauge",type:"address"}],name:"minted",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"minter",type:"address"},{internalType:"bool",name:"approval",type:"bool"}],name:"setMinterApproval",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"minter",type:"address"},{internalType:"bool",name:"approval",type:"bool"},{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"setMinterApprovalWithSignature",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"minter",type:"address"}],name:"toggle_approve_mint",outputs:[],stateMutability:"nonpayable",type:"function"}];class ft{static createInterface(){return new l.utils.Interface(mt)}static connect(e,t){return new l.Contract(e,mt,t)}}ft.abi=mt;const Tt=[{inputs:[{internalType:"contract IVault",name:"_vault",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getAmpForPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getInRecoveryModeForPools",outputs:[{internalType:"bool[]",name:"",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getIsPausedForPools",outputs:[{internalType:"bool[]",name:"",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getLinearTargetsForPools",outputs:[{internalType:"uint256[][]",name:"",type:"uint256[][]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getNormalizedWeightsForPools",outputs:[{internalType:"uint256[][]",name:"",type:"uint256[][]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"poolIds",type:"bytes32[]"},{components:[{internalType:"bool",name:"loadTokenBalanceUpdatesAfterBlock",type:"bool"},{internalType:"bool",name:"loadTotalSupply",type:"bool"},{internalType:"bool",name:"loadSwapFees",type:"bool"},{internalType:"bool",name:"loadLinearWrappedTokenRates",type:"bool"},{internalType:"bool",name:"loadLinearTargets",type:"bool"},{internalType:"bool",name:"loadNormalizedWeights",type:"bool"},{internalType:"bool",name:"loadScalingFactors",type:"bool"},{internalType:"bool",name:"loadAmps",type:"bool"},{internalType:"bool",name:"loadRates",type:"bool"},{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"enum TotalSupplyType[]",name:"totalSupplyTypes",type:"uint8[]"},{internalType:"enum SwapFeeType[]",name:"swapFeeTypes",type:"uint8[]"},{internalType:"uint256[]",name:"linearPoolIdxs",type:"uint256[]"},{internalType:"uint256[]",name:"weightedPoolIdxs",type:"uint256[]"},{internalType:"uint256[]",name:"scalingFactorPoolIdxs",type:"uint256[]"},{internalType:"uint256[]",name:"ampPoolIdxs",type:"uint256[]"},{internalType:"uint256[]",name:"ratePoolIdxs",type:"uint256[]"}],internalType:"struct PoolDataQueryConfig",name:"config",type:"tuple"}],name:"getPoolData",outputs:[{internalType:"uint256[][]",name:"balances",type:"uint256[][]"},{internalType:"uint256[]",name:"totalSupplies",type:"uint256[]"},{internalType:"uint256[]",name:"swapFees",type:"uint256[]"},{internalType:"uint256[]",name:"linearWrappedTokenRates",type:"uint256[]"},{internalType:"uint256[][]",name:"linearTargets",type:"uint256[][]"},{internalType:"uint256[][]",name:"weights",type:"uint256[][]"},{internalType:"uint256[][]",name:"scalingFactors",type:"uint256[][]"},{internalType:"uint256[]",name:"amps",type:"uint256[]"},{internalType:"uint256[]",name:"rates",type:"uint256[]"},{internalType:"uint256[]",name:"ignoreIdxs",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"poolIds",type:"bytes32[]"},{components:[{internalType:"bool",name:"loadInRecoveryMode",type:"bool"},{internalType:"bool",name:"loadIsPaused",type:"bool"}],internalType:"struct PoolStatusQueryConfig",name:"config",type:"tuple"}],name:"getPoolStatus",outputs:[{internalType:"bool[]",name:"isPaused",type:"bool[]"},{internalType:"bool[]",name:"inRecoveryMode",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32[]",name:"poolIds",type:"bytes32[]"},{internalType:"uint256",name:"blockNumber",type:"uint256"}],name:"getPoolTokenBalancesWithUpdatesAfterBlock",outputs:[{internalType:"uint256[][]",name:"",type:"uint256[][]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getRateForPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getScalingFactorsForPools",outputs:[{internalType:"uint256[][]",name:"",type:"uint256[][]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"},{internalType:"enum SwapFeeType[]",name:"swapFeeTypes",type:"uint8[]"}],name:"getSwapFeePercentageForPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"},{internalType:"enum TotalSupplyType[]",name:"totalSupplyTypes",type:"uint8[]"}],name:"getTotalSupplyForPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address[]",name:"poolAddresses",type:"address[]"}],name:"getWrappedTokenRateForLinearPools",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"vault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"}];class ht{static createInterface(){return new l.utils.Interface(Tt)}static connect(e,t){return new l.Contract(e,Tt,t)}}ht.abi=Tt;const It=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"address",name:"libraryAddress",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"getLibrary",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"results",type:"bytes[]"}],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}];class gt{static createInterface(){return new l.utils.Interface(It)}static connect(e,t){return new l.Contract(e,It,t)}}gt.abi=It;const _t=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IERC20",name:"wstETH",type:"address"},{internalType:"contract IBalancerMinter",name:"minter",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approveVault",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"assetInIndex",type:"uint256"},{internalType:"uint256",name:"assetOutIndex",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.BatchSwapStep[]",name:"swaps",type:"tuple[]"},{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"int256[]",name:"limits",type:"int256[]"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"value",type:"uint256"},{components:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"key",type:"uint256"}],internalType:"struct VaultActions.OutputReference[]",name:"outputReferences",type:"tuple[]"}],name:"batchSwap",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum VaultActions.PoolKind",name:"kind",type:"uint8"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"minAmountsOut",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.ExitPoolRequest",name:"request",type:"tuple"},{components:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"key",type:"uint256"}],internalType:"struct VaultActions.OutputReference[]",name:"outputReferences",type:"tuple[]"}],name:"exitPool",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStakingLiquidityGauge[]",name:"gauges",type:"address[]"}],name:"gaugeClaimRewards",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStakingLiquidityGauge",name:"gauge",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"gaugeDeposit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address[]",name:"gauges",type:"address[]"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"gaugeMint",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bool",name:"approval",type:"bool"},{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"gaugeSetMinterApproval",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStakingLiquidityGauge",name:"gauge",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"gaugeWithdraw",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"getEntrypoint",outputs:[{internalType:"contract IBalancerRelayer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum VaultActions.PoolKind",name:"kind",type:"uint8"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"maxAmountsIn",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"fromInternalBalance",type:"bool"}],internalType:"struct IVault.JoinPoolRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"joinPool",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.UserBalanceOpKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"asset",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"}],internalType:"struct IVault.UserBalanceOp[]",name:"ops",type:"tuple[]"},{internalType:"uint256",name:"value",type:"uint256"}],name:"manageUserBalance",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"ref",type:"uint256"}],name:"peekChainedReferenceValue",outputs:[{internalType:"uint256",name:"value",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"relayer",type:"address"},{internalType:"bool",name:"approved",type:"bool"},{internalType:"bytes",name:"authorisation",type:"bytes"}],name:"setRelayerApproval",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"stakeETH",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"stakeETHAndWrap",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"assetIn",type:"address"},{internalType:"contract IAsset",name:"assetOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.SingleSwap",name:"singleSwap",type:"tuple"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"uint256",name:"limit",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"swap",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStaticATokenLM",name:"staticToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"toUnderlying",type:"bool"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapAaveStaticToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract ICToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapCompoundV2",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC4626",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapERC4626",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IEulerToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapEuler",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IGearboxDieselToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"dieselAmount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapGearbox",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IReaperTokenVault",name:"vaultToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapReaperVaultToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IShareToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapShareToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract ITetuSmartVault",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapTetu",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IUnbuttonToken",name:"wrapperToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapUnbuttonToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapWstETH",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IYearnTokenVault",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"unwrapYearn",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC20Permit",name:"token",type:"address"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"vaultPermit",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC20PermitDAI",name:"token",type:"address"},{internalType:"address",name:"holder",type:"address"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"expiry",type:"uint256"},{internalType:"bool",name:"allowed",type:"bool"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"vaultPermitDAI",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IStaticATokenLM",name:"staticToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"fromUnderlying",type:"bool"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapAaveDynamicToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract ICToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapCompoundV2",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IERC4626",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapERC4626",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IEulerToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"eulerProtocol",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapEuler",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IGearboxDieselToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"mainAmount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapGearbox",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IReaperTokenVault",name:"vaultToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapReaperVaultToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IShareToken",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapShareToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapStETH",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract ITetuSmartVault",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapTetu",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IUnbuttonToken",name:"wrapperToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"uAmount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapUnbuttonToken",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"contract IYearnTokenVault",name:"wrappedToken",type:"address"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"outputReference",type:"uint256"}],name:"wrapYearn",outputs:[],stateMutability:"payable",type:"function"}];class Pt{static createInterface(){return new l.utils.Interface(_t)}static connect(e,t){return new l.Contract(e,_t,t)}}Pt.abi=_t;const wt=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"contract IRateProvider[]",name:"rateProviders",type:"address[]"},{internalType:"uint256[]",name:"tokenRateCacheDurations",type:"uint256[]"},{internalType:"bool[]",name:"exemptFromYieldProtocolFeeFlags",type:"bool[]"},{internalType:"uint256",name:"amplificationParameter",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"}],internalType:"struct ComposableStablePool.NewPoolParams",name:"params",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"startValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endTime",type:"uint256"}],name:"AmpUpdateStarted",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"currentValue",type:"uint256"}],name:"AmpUpdateStopped",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"feeType",type:"uint256"},{indexed:!1,internalType:"uint256",name:"protocolFeePercentage",type:"uint256"}],name:"ProtocolFeePercentageCacheUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"tokenIndex",type:"uint256"},{indexed:!1,internalType:"uint256",name:"rate",type:"uint256"}],name:"TokenRateCacheUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"tokenIndex",type:"uint256"},{indexed:!0,internalType:"contract IRateProvider",name:"provider",type:"address"},{indexed:!1,internalType:"uint256",name:"cacheDuration",type:"uint256"}],name:"TokenRateProviderSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getActualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAmplificationParameter",outputs:[{internalType:"uint256",name:"value",type:"uint256"},{internalType:"bool",name:"isUpdating",type:"bool"},{internalType:"uint256",name:"precision",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastJoinExitData",outputs:[{internalType:"uint256",name:"lastJoinExitAmplification",type:"uint256"},{internalType:"uint256",name:"lastPostJoinExitInvariant",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMinimumBpt",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"feeType",type:"uint256"}],name:"getProtocolFeePercentageCache",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolSwapFeeDelegation",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRateProviders",outputs:[{internalType:"contract IRateProvider[]",name:"",type:"address[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"getTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"getTokenRateCache",outputs:[{internalType:"uint256",name:"rate",type:"uint256"},{internalType:"uint256",name:"oldRate",type:"uint256"},{internalType:"uint256",name:"duration",type:"uint256"},{internalType:"uint256",name:"expires",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"isTokenExemptFromYieldProtocolFee",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"swapRequest",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"bytes",name:"poolConfig",type:"bytes"}],name:"setAssetManagerPoolConfig",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"uint256",name:"duration",type:"uint256"}],name:"setTokenRateCacheDuration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"rawEndValue",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"}],name:"startAmplificationParameterUpdate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopAmplificationParameterUpdate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"updateProtocolFeePercentageCache",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"updateTokenRateCache",outputs:[],stateMutability:"nonpayable",type:"function"}];class xt{static createInterface(){return new l.utils.Interface(wt)}static connect(e,t){return new l.Contract(e,wt,t)}}xt.abi=wt;const Et=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256",name:"amplificationParameter",type:"uint256"},{internalType:"contract IRateProvider[]",name:"rateProviders",type:"address[]"},{internalType:"uint256[]",name:"tokenRateCacheDurations",type:"uint256[]"},{internalType:"bool[]",name:"exemptFromYieldProtocolFeeFlags",type:"bool[]"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract ComposableStablePool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class At{static createInterface(){return new l.utils.Interface(Et)}static connect(e,t){return new l.Contract(e,Et,t)}}At.abi=Et;const St=[{inputs:[{internalType:"contract IERC20",name:"_underlying",type:"address"},{internalType:"contract IERC20",name:"_bond",type:"address"},{internalType:"uint256",name:"_expiration",type:"uint256"},{internalType:"uint256",name:"_unitSeconds",type:"uint256"},{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"uint256",name:"_percentFee",type:"uint256"},{internalType:"uint256",name:"_percentFeeGov",type:"uint256"},{internalType:"address",name:"_governance",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"collectedBase",type:"uint256"},{indexed:!1,internalType:"uint256",name:"collectedBond",type:"uint256"},{indexed:!1,internalType:"uint256",name:"remainingBase",type:"uint256"},{indexed:!1,internalType:"uint256",name:"remainingBond",type:"uint256"}],name:"FeeCollection",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"FEE_BOUND",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"bond",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"bondDecimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseApproval",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"expiration",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"feesBond",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"feesUnderlying",outputs:[{internalType:"uint128",name:"",type:"uint128"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"governance",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"increaseApproval",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"currentBalances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"protocolSwapFee",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"currentBalances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"protocolSwapFee",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"swapRequest",type:"tuple"},{internalType:"uint256",name:"currentBalanceTokenIn",type:"uint256"},{internalType:"uint256",name:"currentBalanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"percentFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"percentFeeGov",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amountX",type:"uint256"},{internalType:"uint256",name:"reserveX",type:"uint256"},{internalType:"uint256",name:"reserveY",type:"uint256"},{internalType:"bool",name:"out",type:"bool"}],name:"solveTradeInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"underlying",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"underlyingDecimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"unitSeconds",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"}];class vt{static createInterface(){return new l.utils.Interface(St)}static connect(e,t){return new l.Contract(e,St,t)}}vt.abi=St;const kt=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];class Bt{static createInterface(){return new l.utils.Interface(kt)}static connect(e,t){return new l.Contract(e,kt,t)}}Bt.abi=kt;const Ct=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct ERC4626LinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Ot{static createInterface(){return new l.utils.Interface(Ct)}static connect(e,t){return new l.Contract(e,Ct,t)}}Ot.abi=Ct;const Mt=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"Erc4626LinearPoolCreated",type:"event"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract LinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Ft{static createInterface(){return new l.utils.Interface(Mt)}static connect(e,t){return new l.Contract(e,Mt,t)}}Ft.abi=Mt;const Rt=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct EulerLinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Nt{static createInterface(){return new l.utils.Interface(Rt)}static connect(e,t){return new l.Contract(e,Rt,t)}}Nt.abi=Rt;const Lt=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"_eulerProtocol",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"EulerLinearPoolCreated",type:"event"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"}],name:"create",outputs:[{internalType:"contract LinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"eulerProtocol",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Dt{static createInterface(){return new l.utils.Interface(Lt)}static connect(e,t){return new l.Contract(e,Lt,t)}}Dt.abi=Lt;const Ut=[{inputs:[{internalType:"address[]",name:"_assetsToRegister",type:"address[]"},{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"uint256",name:"_protocolPercentFee",type:"uint256"},{internalType:"string",name:"_name",type:"string"},{internalType:"string",name:"_symbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"numeraire",type:"address"},{indexed:!0,internalType:"address",name:"reserve",type:"address"},{indexed:!1,internalType:"uint256",name:"weight",type:"uint256"}],name:"AssetIncluded",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"derivative",type:"address"},{indexed:!0,internalType:"address",name:"numeraire",type:"address"},{indexed:!0,internalType:"address",name:"reserve",type:"address"},{indexed:!1,internalType:"address",name:"assimilator",type:"address"}],name:"AssimilatorIncluded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"newCollector",type:"address"}],name:"ChangeCollectorAddress",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"isEmergency",type:"bool"}],name:"EmergencyAlarm",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"lptAmountBurned",type:"uint256"},{indexed:!1,internalType:"uint256[]",name:"amountsWithdrawn",type:"uint256[]"}],name:"EmergencyWithdraw",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"feesCollected",type:"uint256"}],name:"FeesAccrued",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"feesCollected",type:"uint256"}],name:"FeesCollected",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"lptAmountBurned",type:"uint256"},{indexed:!1,internalType:"uint256[]",name:"amountsWithdrawn",type:"uint256[]"}],name:"OnExitPool",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"lptAmountMinted",type:"uint256"},{indexed:!1,internalType:"uint256[]",name:"amountsDeposited",type:"uint256[]"}],name:"OnJoinPool",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"alpha",type:"uint256"},{indexed:!1,internalType:"uint256",name:"beta",type:"uint256"},{indexed:!1,internalType:"uint256",name:"delta",type:"uint256"},{indexed:!1,internalType:"uint256",name:"epsilon",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lambda",type:"uint256"}],name:"ParametersSet",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"updater",type:"address"},{indexed:!1,internalType:"uint256",name:"newProtocolPercentage",type:"uint256"}],name:"ProtocolFeeShareUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"trader",type:"address"},{indexed:!0,internalType:"address",name:"origin",type:"address"},{indexed:!0,internalType:"address",name:"target",type:"address"},{indexed:!1,internalType:"uint256",name:"originAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"targetAmount",type:"uint256"}],name:"Trade",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_derivative",type:"address"}],name:"assimilator",outputs:[{internalType:"address",name:"assimilator_",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"collectorAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"curve",outputs:[{internalType:"int128",name:"alpha",type:"int128"},{internalType:"int128",name:"beta",type:"int128"},{internalType:"int128",name:"delta",type:"int128"},{internalType:"int128",name:"epsilon",type:"int128"},{internalType:"int128",name:"lambda",type:"int128"},{internalType:"uint256",name:"cap",type:"uint256"},{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"address",name:"fxPoolAddress",type:"address"},{internalType:"bytes32",name:"poolId",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"derivatives",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"emergency",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address[]",name:"_assets",type:"address[]"},{internalType:"uint256[]",name:"_assetWeights",type:"uint256[]"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"liquidity",outputs:[{internalType:"uint256",name:"total_",type:"uint256"},{internalType:"uint256[]",name:"individual_",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"numeraires",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"swapRequest",type:"tuple"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"protocolPercentFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"reserves",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_cap",type:"uint256"}],name:"setCap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_collectorAddress",type:"address"}],name:"setCollectorAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"_emergency",type:"bool"}],name:"setEmergency",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_alpha",type:"uint256"},{internalType:"uint256",name:"_beta",type:"uint256"},{internalType:"uint256",name:"_feeAtHalt",type:"uint256"},{internalType:"uint256",name:"_epsilon",type:"uint256"},{internalType:"uint256",name:"_lambda",type:"uint256"}],name:"setParams",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_protocolPercentFee",type:"uint256"}],name:"setProtocolPercentFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalUnclaimedFeesInNumeraire",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"totalDepositNumeraire",type:"uint256"}],name:"viewDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"viewParameters",outputs:[{internalType:"uint256",name:"alpha_",type:"uint256"},{internalType:"uint256",name:"beta_",type:"uint256"},{internalType:"uint256",name:"delta_",type:"uint256"},{internalType:"uint256",name:"epsilon_",type:"uint256"},{internalType:"uint256",name:"lambda_",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_curvesToBurn",type:"uint256"}],name:"viewWithdraw",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"}];class Vt{static createInterface(){return new l.utils.Interface(Ut)}static connect(e,t){return new l.Contract(e,Ut,t)}}Vt.abi=Ut;const qt=[{inputs:[],name:"CLAIM_FREQUENCY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract IRewardsOnlyGauge",name:"gauge",type:"address"},{internalType:"address",name:"user",type:"address"}],name:"claimRewardsFromGauge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IRewardsOnlyGauge[]",name:"gauges",type:"address[]"},{internalType:"address",name:"user",type:"address"}],name:"claimRewardsFromGauges",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IRewardsOnlyGauge",name:"gauge",type:"address"},{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"token",type:"address"}],name:"getPendingRewards",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"}];class Gt{static createInterface(){return new l.utils.Interface(qt)}static connect(e,t){return new l.Contract(e,qt,t)}}Gt.abi=qt;const Wt=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct GearboxLinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class Ht{static createInterface(){return new l.utils.Interface(Wt)}static connect(e,t){return new l.Contract(e,Wt,t)}}Ht.abi=Wt;const Kt=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"GearboxLinearPoolCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract GearboxLinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class $t{static createInterface(){return new l.utils.Interface(Kt)}static connect(e,t){return new l.Contract(e,Kt,t)}}$t.abi=Kt;const Jt=[{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"key",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"previousValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newValue",type:"uint256"}],name:"ConfigChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"key",type:"bytes32"}],name:"ConfigFrozen",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"key",type:"bytes32"}],name:"ConfigUnset",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"newGovernor",type:"address"}],name:"GovernorChangeRequested",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"oldGovernor",type:"address"},{indexed:!1,internalType:"address",name:"newGovernor",type:"address"}],name:"GovernorChanged",type:"event"},{inputs:[],name:"acceptGovernance",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newGovernor",type:"address"}],name:"changeGovernor",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"freeze",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"},{internalType:"address",name:"defaultValue",type:"address"}],name:"getAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"getAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"getConfigMeta",outputs:[{internalType:"uint8",name:"",type:"uint8"},{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"getUint",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"governor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"hasKey",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_governor",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"listKeys",outputs:[{internalType:"bytes32[]",name:"",type:"bytes32[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"pendingGovernor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"},{internalType:"address",name:"newValue",type:"address"}],name:"setAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"},{internalType:"uint256",name:"newValue",type:"uint256"}],name:"setUint",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"key",type:"bytes32"}],name:"unset",outputs:[],stateMutability:"nonpayable",type:"function"}];class jt{static createInterface(){return new l.utils.Interface(Jt)}static connect(e,t){return new l.Contract(e,Jt,t)}}jt.abi=Jt;const Xt=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IwstETH",name:"wstETH",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"assetInIndex",type:"uint256"},{internalType:"uint256",name:"assetOutIndex",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.BatchSwapStep[]",name:"swaps",type:"tuple[]"},{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"int256[]",name:"limits",type:"int256[]"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"batchSwap",outputs:[{internalType:"int256[]",name:"swapAmounts",type:"int256[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"minAmountsOut",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.ExitPoolRequest",name:"request",type:"tuple"}],name:"exitPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getStETH",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWstETH",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"maxAmountsIn",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"fromInternalBalance",type:"bool"}],internalType:"struct IVault.JoinPoolRequest",name:"request",type:"tuple"}],name:"joinPool",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"assetIn",type:"address"},{internalType:"contract IAsset",name:"assetOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.SingleSwap",name:"singleSwap",type:"tuple"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"uint256",name:"limit",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swap",outputs:[{internalType:"uint256",name:"swapAmount",type:"uint256"}],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}];class Yt{static createInterface(){return new l.utils.Interface(Xt)}static connect(e,t){return new l.Contract(e,Xt,t)}}Yt.abi=Xt;const zt=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"bytes",name:"poolConfig",type:"bytes"}],name:"setAssetManagerPoolConfig",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"paused",type:"bool"}],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];class Zt{static createInterface(){return new l.utils.Interface(zt)}static connect(e,t){return new l.Contract(e,zt,t)}}Zt.abi=zt;const Qt=[{name:"Deposit",inputs:[{name:"provider",type:"address",indexed:!0},{name:"value",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Withdraw",inputs:[{name:"provider",type:"address",indexed:!0},{name:"value",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"UpdateLiquidityLimit",inputs:[{name:"user",type:"address",indexed:!0},{name:"original_balance",type:"uint256",indexed:!1},{name:"original_supply",type:"uint256",indexed:!1},{name:"working_balance",type:"uint256",indexed:!1},{name:"working_supply",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Transfer",inputs:[{name:"_from",type:"address",indexed:!0},{name:"_to",type:"address",indexed:!0},{name:"_value",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Approval",inputs:[{name:"_owner",type:"address",indexed:!0},{name:"_spender",type:"address",indexed:!0},{name:"_value",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{stateMutability:"nonpayable",type:"constructor",inputs:[{name:"minter",type:"address"},{name:"veBoostProxy",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit",inputs:[{name:"_value",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit",inputs:[{name:"_value",type:"uint256"},{name:"_addr",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit",inputs:[{name:"_value",type:"uint256"},{name:"_addr",type:"address"},{name:"_claim_rewards",type:"bool"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"withdraw",inputs:[{name:"_value",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"withdraw",inputs:[{name:"_value",type:"uint256"},{name:"_claim_rewards",type:"bool"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"claim_rewards",inputs:[],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"claim_rewards",inputs:[{name:"_addr",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"claim_rewards",inputs:[{name:"_addr",type:"address"},{name:"_receiver",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"transferFrom",inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"transfer",inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"approve",inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"permit",inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"},{name:"_value",type:"uint256"},{name:"_deadline",type:"uint256"},{name:"_v",type:"uint8"},{name:"_r",type:"bytes32"},{name:"_s",type:"bytes32"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"increaseAllowance",inputs:[{name:"_spender",type:"address"},{name:"_added_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"decreaseAllowance",inputs:[{name:"_spender",type:"address"},{name:"_subtracted_value",type:"uint256"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"user_checkpoint",inputs:[{name:"addr",type:"address"}],outputs:[{name:"",type:"bool"}]},{stateMutability:"nonpayable",type:"function",name:"set_rewards_receiver",inputs:[{name:"_receiver",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"kick",inputs:[{name:"addr",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit_reward_token",inputs:[{name:"_reward_token",type:"address"},{name:"_amount",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"add_reward",inputs:[{name:"_reward_token",type:"address"},{name:"_distributor",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"set_reward_distributor",inputs:[{name:"_reward_token",type:"address"},{name:"_distributor",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"set_killed",inputs:[{name:"_is_killed",type:"bool"}],outputs:[]},{stateMutability:"view",type:"function",name:"claimed_reward",inputs:[{name:"_addr",type:"address"},{name:"_token",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"claimable_reward",inputs:[{name:"_user",type:"address"},{name:"_reward_token",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"claimable_reward_write",inputs:[{name:"_addr",type:"address"},{name:"_token",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"claimable_tokens",inputs:[{name:"addr",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_checkpoint",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"future_epoch_time",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"inflation_rate",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"decimals",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"version",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"allowance",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"nonpayable",type:"function",name:"initialize",inputs:[{name:"_lp_token",type:"address"}],outputs:[]},{stateMutability:"view",type:"function",name:"balanceOf",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"totalSupply",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"name",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"symbol",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"DOMAIN_SEPARATOR",inputs:[],outputs:[{name:"",type:"bytes32"}]},{stateMutability:"view",type:"function",name:"nonces",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"factory",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"lp_token",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"is_killed",inputs:[],outputs:[{name:"",type:"bool"}]},{stateMutability:"view",type:"function",name:"reward_count",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"reward_data",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"tuple",components:[{name:"token",type:"address"},{name:"distributor",type:"address"},{name:"period_finish",type:"uint256"},{name:"rate",type:"uint256"},{name:"last_update",type:"uint256"},{name:"integral",type:"uint256"}]}]},{stateMutability:"view",type:"function",name:"rewards_receiver",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"reward_integral_for",inputs:[{name:"arg0",type:"address"},{name:"arg1",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"working_balances",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"working_supply",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_inv_supply_of",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_checkpoint_of",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_fraction",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"period",inputs:[],outputs:[{name:"",type:"int128"}]},{stateMutability:"view",type:"function",name:"reward_tokens",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"period_timestamp",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"integrate_inv_supply",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"uint256"}]}];class ea{static createInterface(){return new l.utils.Interface(Qt)}static connect(e,t){return new l.Contract(e,Qt,t)}}ea.abi=Qt;const ta=[{constant:!1,inputs:[{components:[{name:"target",type:"address"},{name:"callData",type:"bytes"}],name:"calls",type:"tuple[]"}],name:"aggregate",outputs:[{name:"blockNumber",type:"uint256"},{name:"returnData",type:"bytes[]"}],payable:!1,stateMutability:"nonpayable",type:"function"}];class aa{static createInterface(){return new l.utils.Interface(ta)}static connect(e,t){return new l.Contract(e,ta,t)}}aa.abi=ta;const na=[{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call[]",name:"calls",type:"tuple[]"}],name:"aggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes[]",name:"returnData",type:"bytes[]"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bool",name:"allowFailure",type:"bool"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call3[]",name:"calls",type:"tuple[]"}],name:"aggregate3",outputs:[{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bool",name:"allowFailure",type:"bool"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call3Value[]",name:"calls",type:"tuple[]"}],name:"aggregate3Value",outputs:[{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call[]",name:"calls",type:"tuple[]"}],name:"blockAndAggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"blockHash",type:"bytes32"},{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"},{inputs:[],name:"getBasefee",outputs:[{internalType:"uint256",name:"basefee",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],name:"getBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBlockNumber",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getChainId",outputs:[{internalType:"uint256",name:"chainid",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockCoinbase",outputs:[{internalType:"address",name:"coinbase",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockDifficulty",outputs:[{internalType:"uint256",name:"difficulty",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockGasLimit",outputs:[{internalType:"uint256",name:"gaslimit",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockTimestamp",outputs:[{internalType:"uint256",name:"timestamp",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"addr",type:"address"}],name:"getEthBalance",outputs:[{internalType:"uint256",name:"balance",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bool",name:"requireSuccess",type:"bool"},{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call[]",name:"calls",type:"tuple[]"}],name:"tryAggregate",outputs:[{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bool",name:"requireSuccess",type:"bool"},{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall3.Call[]",name:"calls",type:"tuple[]"}],name:"tryBlockAndAggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"blockHash",type:"bytes32"},{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall3.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"payable",type:"function"}];class oa{static createInterface(){return new l.utils.Interface(na)}static connect(e,t){return new l.Contract(e,na,t)}}oa.abi=na;const ia=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256",name:"amplificationParameter",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"startValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endValue",type:"uint256"},{indexed:!1,internalType:"uint256",name:"startTime",type:"uint256"},{indexed:!1,internalType:"uint256",name:"endTime",type:"uint256"}],name:"AmpUpdateStarted",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"currentValue",type:"uint256"}],name:"AmpUpdateStopped",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAmplificationParameter",outputs:[{internalType:"uint256",name:"value",type:"uint256"},{internalType:"bool",name:"isUpdating",type:"bool"},{internalType:"uint256",name:"precision",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"swapRequest",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"bytes",name:"poolConfig",type:"bytes"}],name:"setAssetManagerPoolConfig",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"paused",type:"bool"}],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"rawEndValue",type:"uint256"},{internalType:"uint256",name:"endTime",type:"uint256"}],name:"startAmplificationParameterUpdate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopAmplificationParameterUpdate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];class sa{static createInterface(){return new l.utils.Interface(ia)}static connect(e,t){return new l.Contract(e,ia,t)}}sa.abi=ia;const ra=[{inputs:[{internalType:"contract IStaticAToken",name:"_waToken",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"waToken",outputs:[{internalType:"contract IStaticAToken",name:"",type:"address"}],stateMutability:"view",type:"function"}];class la{static createInterface(){return new l.utils.Interface(ra)}static connect(e,t){return new l.Contract(e,ra,t)}}la.abi=ra;const da=[{inputs:[{internalType:"contract IAuthorizer",name:"authorizer",type:"address"},{internalType:"contract IWETH",name:"weth",type:"address"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IAuthorizer",name:"newAuthorizer",type:"address"}],name:"AuthorizerChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ExternalBalanceTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IFlashLoanRecipient",name:"recipient",type:"address"},{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"feeAmount",type:"uint256"}],name:"FlashLoan",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"int256",name:"delta",type:"int256"}],name:"InternalBalanceChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!0,internalType:"address",name:"liquidityProvider",type:"address"},{indexed:!1,internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{indexed:!1,internalType:"int256[]",name:"deltas",type:"int256[]"},{indexed:!1,internalType:"uint256[]",name:"protocolFeeAmounts",type:"uint256[]"}],name:"PoolBalanceChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!0,internalType:"address",name:"assetManager",type:"address"},{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"int256",name:"cashDelta",type:"int256"},{indexed:!1,internalType:"int256",name:"managedDelta",type:"int256"}],name:"PoolBalanceManaged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!0,internalType:"address",name:"poolAddress",type:"address"},{indexed:!1,internalType:"enum IVault.PoolSpecialization",name:"specialization",type:"uint8"}],name:"PoolRegistered",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"relayer",type:"address"},{indexed:!0,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bool",name:"approved",type:"bool"}],name:"RelayerApprovalChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!0,internalType:"contract IERC20",name:"tokenIn",type:"address"},{indexed:!0,internalType:"contract IERC20",name:"tokenOut",type:"address"},{indexed:!1,internalType:"uint256",name:"amountIn",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amountOut",type:"uint256"}],name:"Swap",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"contract IERC20[]",name:"tokens",type:"address[]"}],name:"TokensDeregistered",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes32",name:"poolId",type:"bytes32"},{indexed:!1,internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{indexed:!1,internalType:"address[]",name:"assetManagers",type:"address[]"}],name:"TokensRegistered",type:"event"},{inputs:[],name:"WETH",outputs:[{internalType:"contract IWETH",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"assetInIndex",type:"uint256"},{internalType:"uint256",name:"assetOutIndex",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.BatchSwapStep[]",name:"swaps",type:"tuple[]"},{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"int256[]",name:"limits",type:"int256[]"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"batchSwap",outputs:[{internalType:"int256[]",name:"assetDeltas",type:"int256[]"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"}],name:"deregisterTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"minAmountsOut",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.ExitPoolRequest",name:"request",type:"tuple"}],name:"exitPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IFlashLoanRecipient",name:"recipient",type:"address"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256[]",name:"amounts",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"flashLoan",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"}],name:"getInternalBalance",outputs:[{internalType:"uint256[]",name:"balances",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"}],name:"getPool",outputs:[{internalType:"address",name:"",type:"address"},{internalType:"enum IVault.PoolSpecialization",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"contract IERC20",name:"token",type:"address"}],name:"getPoolTokenInfo",outputs:[{internalType:"uint256",name:"cash",type:"uint256"},{internalType:"uint256",name:"managed",type:"uint256"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"assetManager",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"}],name:"getPoolTokens",outputs:[{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract ProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"relayer",type:"address"}],name:"hasApprovedRelayer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{components:[{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{internalType:"uint256[]",name:"maxAmountsIn",type:"uint256[]"},{internalType:"bytes",name:"userData",type:"bytes"},{internalType:"bool",name:"fromInternalBalance",type:"bool"}],internalType:"struct IVault.JoinPoolRequest",name:"request",type:"tuple"}],name:"joinPool",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.PoolBalanceOpKind",name:"kind",type:"uint8"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct IVault.PoolBalanceOp[]",name:"ops",type:"tuple[]"}],name:"managePoolBalance",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.UserBalanceOpKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"asset",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"address",name:"sender",type:"address"},{internalType:"address payable",name:"recipient",type:"address"}],internalType:"struct IVault.UserBalanceOp[]",name:"ops",type:"tuple[]"}],name:"manageUserBalance",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"assetInIndex",type:"uint256"},{internalType:"uint256",name:"assetOutIndex",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.BatchSwapStep[]",name:"swaps",type:"tuple[]"},{internalType:"contract IAsset[]",name:"assets",type:"address[]"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"}],name:"queryBatchSwap",outputs:[{internalType:"int256[]",name:"",type:"int256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"enum IVault.PoolSpecialization",name:"specialization",type:"uint8"}],name:"registerPool",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"address[]",name:"assetManagers",type:"address[]"}],name:"registerTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IAuthorizer",name:"newAuthorizer",type:"address"}],name:"setAuthorizer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"paused",type:"bool"}],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"relayer",type:"address"},{internalType:"bool",name:"approved",type:"bool"}],name:"setRelayerApproval",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IAsset",name:"assetIn",type:"address"},{internalType:"contract IAsset",name:"assetOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IVault.SingleSwap",name:"singleSwap",type:"tuple"},{components:[{internalType:"address",name:"sender",type:"address"},{internalType:"bool",name:"fromInternalBalance",type:"bool"},{internalType:"address payable",name:"recipient",type:"address"},{internalType:"bool",name:"toInternalBalance",type:"bool"}],internalType:"struct IVault.FundManagement",name:"funds",type:"tuple"},{internalType:"uint256",name:"limit",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"}],name:"swap",outputs:[{internalType:"uint256",name:"amountCalculated",type:"uint256"}],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}];class pa{static createInterface(){return new l.utils.Interface(da)}static connect(e,t){return new l.Contract(e,da,t)}}pa.abi=da;const ua=[{inputs:[{components:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256[]",name:"normalizedWeights",type:"uint256[]"},{internalType:"contract IRateProvider[]",name:"rateProviders",type:"address[]"},{internalType:"address[]",name:"assetManagers",type:"address[]"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],internalType:"struct WeightedPool.NewPoolParams",name:"params",type:"tuple"},{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"feeType",type:"uint256"},{indexed:!1,internalType:"uint256",name:"protocolFeePercentage",type:"uint256"}],name:"ProtocolFeePercentageCacheUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getATHRateProduct",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getActualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastPostJoinExitInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getNormalizedWeights",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"feeType",type:"uint256"}],name:"getProtocolFeePercentageCache",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolSwapFeeDelegation",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRateProviders",outputs:[{internalType:"contract IRateProvider[]",name:"",type:"address[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"},{internalType:"bytes",name:"poolConfig",type:"bytes"}],name:"setAssetManagerPoolConfig",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"updateProtocolFeePercentageCache",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class ca{static createInterface(){return new l.utils.Interface(ua)}static connect(e,t){return new l.Contract(e,ua,t)}}ca.abi=ua;const ya=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20[]",name:"tokens",type:"address[]"},{internalType:"uint256[]",name:"normalizedWeights",type:"uint256[]"},{internalType:"contract IRateProvider[]",name:"rateProviders",type:"address[]"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class ba{static createInterface(){return new l.utils.Interface(ya)}static connect(e,t){return new l.Contract(e,ya,t)}}ba.abi=ya;const ma=[{inputs:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"address",name:"assetManager",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"string",name:"version",type:"string"}],internalType:"struct YearnLinearPool.ConstructorArgs",name:"args",type:"tuple"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"RecoveryModeStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"contract IERC20",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"lowerTarget",type:"uint256"},{indexed:!1,internalType:"uint256",name:"upperTarget",type:"uint256"}],name:"TargetsSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableRecoveryMode",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBptIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getDomainSeparator",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMainToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"getNextNonce",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeesCollector",outputs:[{internalType:"contract IProtocolFeesCollector",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getScalingFactors",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTargets",outputs:[{internalType:"uint256",name:"lowerTarget",type:"uint256"},{internalType:"uint256",name:"upperTarget",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVirtualSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedToken",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getWrappedTokenRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"inRecoveryMode",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFees",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"indexIn",type:"uint256"},{internalType:"uint256",name:"indexOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"uint256",name:"",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newLowerTarget",type:"uint256"},{internalType:"uint256",name:"newUpperTarget",type:"uint256"}],name:"setTargets",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class fa{static createInterface(){return new l.utils.Interface(ma)}static connect(e,t){return new l.Contract(e,ma,t)}}fa.abi=ma;const Ta=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IProtocolFeePercentagesProvider",name:"protocolFeeProvider",type:"address"},{internalType:"contract IBalancerQueries",name:"queries",type:"address"},{internalType:"string",name:"factoryVersion",type:"string"},{internalType:"string",name:"poolVersion",type:"string"},{internalType:"uint256",name:"initialPauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[],name:"FactoryDisabled",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"}],name:"PoolCreated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"pool",type:"address"},{indexed:!0,internalType:"uint256",name:"protocolId",type:"uint256"}],name:"YearnLinearPoolCreated",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"mainToken",type:"address"},{internalType:"contract IERC20",name:"wrappedToken",type:"address"},{internalType:"uint256",name:"upperTarget",type:"uint256"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"address",name:"owner",type:"address"},{internalType:"uint256",name:"protocolId",type:"uint256"},{internalType:"bytes32",name:"salt",type:"bytes32"}],name:"create",outputs:[{internalType:"contract LinearPool",name:"",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"disable",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCode",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCreationCodeContracts",outputs:[{internalType:"address",name:"contractA",type:"address"},{internalType:"address",name:"contractB",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastCreatedPool",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPauseConfiguration",outputs:[{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolVersion",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"getProtocolFeePercentagesProvider",outputs:[{internalType:"contract IProtocolFeePercentagesProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"isDisabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"pool",type:"address"}],name:"isPoolFromFactory",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"version",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];class ha{static createInterface(){return new l.utils.Interface(Ta)}static connect(e,t){return new l.Contract(e,Ta,t)}}ha.abi=Ta;const Ia=[{inputs:[{components:[{components:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"string",name:"name",type:"string"},{internalType:"string",name:"symbol",type:"string"},{internalType:"contract IERC20",name:"token0",type:"address"},{internalType:"contract IERC20",name:"token1",type:"address"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"},{internalType:"uint256",name:"pauseWindowDuration",type:"uint256"},{internalType:"uint256",name:"bufferPeriodDuration",type:"uint256"},{internalType:"bool",name:"oracleEnabled",type:"bool"},{internalType:"address",name:"owner",type:"address"}],internalType:"struct ExtensibleWeightedPool2Tokens.NewPoolParams",name:"baseParams",type:"tuple"},{components:[{internalType:"int256",name:"alpha",type:"int256"},{internalType:"int256",name:"beta",type:"int256"},{internalType:"int256",name:"c",type:"int256"},{internalType:"int256",name:"s",type:"int256"},{internalType:"int256",name:"lambda",type:"int256"}],internalType:"struct GyroECLPMath.Params",name:"eclpParams",type:"tuple"},{components:[{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],internalType:"struct GyroECLPMath.Vector2",name:"tauAlpha",type:"tuple"},{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],internalType:"struct GyroECLPMath.Vector2",name:"tauBeta",type:"tuple"},{internalType:"int256",name:"u",type:"int256"},{internalType:"int256",name:"v",type:"int256"},{internalType:"int256",name:"w",type:"int256"},{internalType:"int256",name:"z",type:"int256"},{internalType:"int256",name:"dSq",type:"int256"}],internalType:"struct GyroECLPMath.DerivedParams",name:"derivedEclpParams",type:"tuple"},{internalType:"address",name:"rateProvider0",type:"address"},{internalType:"address",name:"rateProvider1",type:"address"},{internalType:"address",name:"capManager",type:"address"},{components:[{internalType:"bool",name:"capEnabled",type:"bool"},{internalType:"uint120",name:"perAddressCap",type:"uint120"},{internalType:"uint128",name:"globalCap",type:"uint128"}],internalType:"struct ICappedLiquidity.CapParams",name:"capParams",type:"tuple"},{internalType:"address",name:"pauseManager",type:"address"}],internalType:"struct GyroECLPPool.GyroParams",name:"params",type:"tuple"},{internalType:"address",name:"configAddress",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"capManager",type:"address"}],name:"CapManagerUpdated",type:"event"},{anonymous:!1,inputs:[{components:[{internalType:"bool",name:"capEnabled",type:"bool"},{internalType:"uint120",name:"perAddressCap",type:"uint120"},{internalType:"uint128",name:"globalCap",type:"uint128"}],indexed:!1,internalType:"struct ICappedLiquidity.CapParams",name:"params",type:"tuple"}],name:"CapParamsUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"derivedParamsValidated",type:"bool"}],name:"ECLPDerivedParamsValidated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paramsValidated",type:"bool"}],name:"ECLPParamsValidated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"invariantAfterJoin",type:"uint256"}],name:"InvariantAterInitializeJoin",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"oldInvariant",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newInvariant",type:"uint256"}],name:"InvariantOldAndNew",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"OracleEnabledChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"oracleUpdatedIndex",type:"uint256"}],name:"OracleIndexUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"oldPauseManager",type:"address"},{indexed:!1,internalType:"address",name:"newPauseManager",type:"address"}],name:"PauseManagerChanged",type:"event"},{anonymous:!1,inputs:[],name:"PausedLocally",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"paused",type:"bool"}],name:"PausedStateChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"SwapFeePercentageChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256[]",name:"balances",type:"uint256[]"},{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],indexed:!1,internalType:"struct GyroECLPMath.Vector2",name:"invariant",type:"tuple"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"SwapParams",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[],name:"UnpausedLocally",type:"event"},{inputs:[],name:"DOMAIN_SEPARATOR",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"_dSq",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsAlpha",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsBeta",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsC",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsLambda",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_paramsS",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_tauAlphaX",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_tauAlphaY",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_tauBetaX",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_tauBetaY",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_u",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_v",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_w",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_z",outputs:[{internalType:"int256",name:"",type:"int256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"capManager",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"capParams",outputs:[{components:[{internalType:"bool",name:"capEnabled",type:"bool"},{internalType:"uint120",name:"perAddressCap",type:"uint120"},{internalType:"uint128",name:"globalCap",type:"uint128"}],internalType:"struct ICappedLiquidity.CapParams",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_pauseManager",type:"address"}],name:"changePauseManager",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"startIndex",type:"uint256"},{internalType:"uint256",name:"endIndex",type:"uint256"}],name:"dirtyUninitializedOracleSamples",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"enableOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getECLPParams",outputs:[{components:[{internalType:"int256",name:"alpha",type:"int256"},{internalType:"int256",name:"beta",type:"int256"},{internalType:"int256",name:"c",type:"int256"},{internalType:"int256",name:"s",type:"int256"},{internalType:"int256",name:"lambda",type:"int256"}],internalType:"struct GyroECLPMath.Params",name:"params",type:"tuple"},{components:[{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],internalType:"struct GyroECLPMath.Vector2",name:"tauAlpha",type:"tuple"},{components:[{internalType:"int256",name:"x",type:"int256"},{internalType:"int256",name:"y",type:"int256"}],internalType:"struct GyroECLPMath.Vector2",name:"tauBeta",type:"tuple"},{internalType:"int256",name:"u",type:"int256"},{internalType:"int256",name:"v",type:"int256"},{internalType:"int256",name:"w",type:"int256"},{internalType:"int256",name:"z",type:"int256"},{internalType:"int256",name:"dSq",type:"int256"}],internalType:"struct GyroECLPMath.DerivedParams",name:"d",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[],name:"getInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLargestSafeQueryWindow",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getLastInvariant",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"enum IPriceOracle.Variable",name:"variable",type:"uint8"}],name:"getLatest",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getMiscData",outputs:[{internalType:"int256",name:"logInvariant",type:"int256"},{internalType:"int256",name:"logTotalSupply",type:"int256"},{internalType:"uint256",name:"oracleSampleCreationTimestamp",type:"uint256"},{internalType:"uint256",name:"oracleIndex",type:"uint256"},{internalType:"bool",name:"oracleEnabled",type:"bool"},{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getNormalizedWeights",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"enum IPriceOracle.Variable",name:"variable",type:"uint8"},{internalType:"uint256",name:"ago",type:"uint256"}],internalType:"struct IPriceOracle.OracleAccumulatorQuery[]",name:"queries",type:"tuple[]"}],name:"getPastAccumulators",outputs:[{internalType:"int256[]",name:"results",type:"int256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPausedState",outputs:[{internalType:"bool",name:"paused",type:"bool"},{internalType:"uint256",name:"pauseWindowEndTime",type:"uint256"},{internalType:"uint256",name:"bufferPeriodEndTime",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPoolId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"spotPrice",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getSample",outputs:[{internalType:"int256",name:"logPairPrice",type:"int256"},{internalType:"int256",name:"accLogPairPrice",type:"int256"},{internalType:"int256",name:"logBptPrice",type:"int256"},{internalType:"int256",name:"accLogBptPrice",type:"int256"},{internalType:"int256",name:"logInvariant",type:"int256"},{internalType:"int256",name:"accLogInvariant",type:"int256"},{internalType:"uint256",name:"timestamp",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSwapFeePercentage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{components:[{internalType:"enum IPriceOracle.Variable",name:"variable",type:"uint8"},{internalType:"uint256",name:"secs",type:"uint256"},{internalType:"uint256",name:"ago",type:"uint256"}],internalType:"struct IPriceOracle.OracleAverageQuery[]",name:"queries",type:"tuple[]"}],name:"getTimeWeightedAverage",outputs:[{internalType:"uint256[]",name:"results",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTokenRates",outputs:[{internalType:"uint256",name:"rate0",type:"uint256"},{internalType:"uint256",name:"rate1",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getTotalSamples",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"pure",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"gyroConfig",outputs:[{internalType:"contract IGyroConfig",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"nonces",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onExitPool",outputs:[{internalType:"uint256[]",name:"",type:"uint256[]"},{internalType:"uint256[]",name:"",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"onJoinPool",outputs:[{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"},{internalType:"uint256[]",name:"dueProtocolFeeAmounts",type:"uint256[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"enum IVault.SwapKind",name:"kind",type:"uint8"},{internalType:"contract IERC20",name:"tokenIn",type:"address"},{internalType:"contract IERC20",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"bytes",name:"userData",type:"bytes"}],internalType:"struct IPoolSwapStructs.SwapRequest",name:"request",type:"tuple"},{internalType:"uint256",name:"balanceTokenIn",type:"uint256"},{internalType:"uint256",name:"balanceTokenOut",type:"uint256"}],name:"onSwap",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"pauseManager",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint8",name:"v",type:"uint8"},{internalType:"bytes32",name:"r",type:"bytes32"},{internalType:"bytes32",name:"s",type:"bytes32"}],name:"permit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryExit",outputs:[{internalType:"uint256",name:"bptIn",type:"uint256"},{internalType:"uint256[]",name:"amountsOut",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"poolId",type:"bytes32"},{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256[]",name:"balances",type:"uint256[]"},{internalType:"uint256",name:"lastChangeBlock",type:"uint256"},{internalType:"uint256",name:"protocolSwapFeePercentage",type:"uint256"},{internalType:"bytes",name:"userData",type:"bytes"}],name:"queryJoin",outputs:[{internalType:"uint256",name:"bptOut",type:"uint256"},{internalType:"uint256[]",name:"amountsIn",type:"uint256[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"rateProvider0",outputs:[{internalType:"contract IRateProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"rateProvider1",outputs:[{internalType:"contract IRateProvider",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_capManager",type:"address"}],name:"setCapManager",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"bool",name:"capEnabled",type:"bool"},{internalType:"uint120",name:"perAddressCap",type:"uint120"},{internalType:"uint128",name:"globalCap",type:"uint128"}],internalType:"struct ICappedLiquidity.CapParams",name:"params",type:"tuple"}],name:"setCapParams",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"paused",type:"bool"}],name:"setPaused",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"swapFeePercentage",type:"uint256"}],name:"setSwapFeePercentage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"}];class ga{static createInterface(){return new l.utils.Interface(Ia)}static connect(e,t){return new l.Contract(e,Ia,t)}}ga.abi=Ia;const _a=[{name:"Deposit",inputs:[{name:"provider",type:"address",indexed:!0},{name:"value",type:"uint256",indexed:!1},{name:"locktime",type:"uint256",indexed:!0},{name:"type",type:"int128",indexed:!1},{name:"ts",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Withdraw",inputs:[{name:"provider",type:"address",indexed:!0},{name:"value",type:"uint256",indexed:!1},{name:"ts",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{name:"Supply",inputs:[{name:"prevSupply",type:"uint256",indexed:!1},{name:"supply",type:"uint256",indexed:!1}],anonymous:!1,type:"event"},{stateMutability:"nonpayable",type:"constructor",inputs:[{name:"token_addr",type:"address"},{name:"_name",type:"string"},{name:"_symbol",type:"string"},{name:"_authorizer_adaptor",type:"address"}],outputs:[]},{stateMutability:"view",type:"function",name:"token",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"name",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"symbol",inputs:[],outputs:[{name:"",type:"string"}]},{stateMutability:"view",type:"function",name:"decimals",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"admin",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"nonpayable",type:"function",name:"commit_smart_wallet_checker",inputs:[{name:"addr",type:"address"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"apply_smart_wallet_checker",inputs:[],outputs:[]},{stateMutability:"view",type:"function",name:"get_last_user_slope",inputs:[{name:"addr",type:"address"}],outputs:[{name:"",type:"int128"}]},{stateMutability:"view",type:"function",name:"user_point_history__ts",inputs:[{name:"_addr",type:"address"},{name:"_idx",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"locked__end",inputs:[{name:"_addr",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"nonpayable",type:"function",name:"checkpoint",inputs:[],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"deposit_for",inputs:[{name:"_addr",type:"address"},{name:"_value",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"create_lock",inputs:[{name:"_value",type:"uint256"},{name:"_unlock_time",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"increase_amount",inputs:[{name:"_value",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"increase_unlock_time",inputs:[{name:"_unlock_time",type:"uint256"}],outputs:[]},{stateMutability:"nonpayable",type:"function",name:"withdraw",inputs:[],outputs:[]},{stateMutability:"view",type:"function",name:"balanceOf",inputs:[{name:"addr",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"balanceOf",inputs:[{name:"addr",type:"address"},{name:"_t",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"balanceOfAt",inputs:[{name:"addr",type:"address"},{name:"_block",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"totalSupply",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"totalSupply",inputs:[{name:"t",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"totalSupplyAt",inputs:[{name:"_block",type:"uint256"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"supply",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"locked",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"tuple",components:[{name:"amount",type:"int128"},{name:"end",type:"uint256"}]}]},{stateMutability:"view",type:"function",name:"epoch",inputs:[],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"point_history",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"bias",type:"int128"},{name:"slope",type:"int128"},{name:"ts",type:"uint256"},{name:"blk",type:"uint256"}]}]},{stateMutability:"view",type:"function",name:"user_point_history",inputs:[{name:"arg0",type:"address"},{name:"arg1",type:"uint256"}],outputs:[{name:"",type:"tuple",components:[{name:"bias",type:"int128"},{name:"slope",type:"int128"},{name:"ts",type:"uint256"},{name:"blk",type:"uint256"}]}]},{stateMutability:"view",type:"function",name:"user_point_epoch",inputs:[{name:"arg0",type:"address"}],outputs:[{name:"",type:"uint256"}]},{stateMutability:"view",type:"function",name:"slope_changes",inputs:[{name:"arg0",type:"uint256"}],outputs:[{name:"",type:"int128"}]},{stateMutability:"view",type:"function",name:"future_smart_wallet_checker",inputs:[],outputs:[{name:"",type:"address"}]},{stateMutability:"view",type:"function",name:"smart_wallet_checker",inputs:[],outputs:[{name:"",type:"address"}]}];class Pa{static createInterface(){return new l.utils.Interface(_a)}static connect(e,t){return new l.Contract(e,_a,t)}}Pa.abi=_a;const wa=[{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"contract IERC20",name:"votingEscrow",type:"address"},{internalType:"contract IVeDelegation",name:"delegation",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"newImplementation",type:"address"}],name:"DelegationImplementationUpdated",type:"event"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"adjustedBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"adjusted_balance_of",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getActionId",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAuthorizer",outputs:[{internalType:"contract IAuthorizer",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getDelegationImplementation",outputs:[{internalType:"contract IVeDelegation",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVotingEscrow",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"killDelegation",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IVeDelegation",name:"delegation",type:"address"}],name:"setDelegation",outputs:[],stateMutability:"nonpayable",type:"function"}];class xa{static createInterface(){return new l.utils.Interface(wa)}static connect(e,t){return new l.Contract(e,wa,t)}}xa.abi=wa;var Ea,Aa=Object.freeze({__proto__:null,AaveLinearPool__factory:st,AaveLinearPoolFactory__factory:lt,AaveWrapping__factory:pt,Authoriser__factory:ct,BalancerHelpers__factory:bt,BalancerMinter__factory:ft,BalancerPoolDataQueries__factory:ht,BalancerRelayer__factory:gt,BatchRelayerLibrary__factory:Pt,ComposableStablePool__factory:xt,ComposableStablePoolFactory__factory:At,ConvergentCurvePool__factory:vt,ERC20__factory:Bt,ERC4626LinearPool__factory:Ot,ERC4626LinearPoolFactory__factory:Ft,EulerLinearPool__factory:Nt,EulerLinearPoolFactory__factory:Dt,FXPool__factory:Vt,GaugeClaimHelper__factory:Gt,GearboxLinearPool__factory:Ht,GearboxLinearPoolFactory__factory:$t,GyroConfig__factory:jt,LidoRelayer__factory:Yt,LinearPool__factory:Zt,LiquidityGaugeV5__factory:ea,Multicall__factory:aa,Multicall3__factory:oa,StablePool__factory:sa,StaticATokenRateProvider__factory:la,Vault__factory:pa,WeightedPool__factory:ca,WeightedPoolFactory__factory:ba,YearnLinearPool__factory:fa,YearnLinearPoolFactory__factory:ha,GyroEV2__factory:ga,VeBal__factory:Pa,VeDelegationProxy__factory:xa});function Sa(t,o,i,s,r,l){const d=new Array(r.length).fill(a.Zero);return r.forEach(((r,p)=>{if(t.some((e=>je(r,e)))){const t=n.BigNumber.from(l).add(a.WeiPerEther);d[p]=i===e.SwapType.SwapExactOut?d[p].add(n.BigNumber.from(s[p]).mul(t).div(a.WeiPerEther)):d[p].add(s[p])}if(o.some((e=>je(r,e)))){const t=a.WeiPerEther.sub(n.BigNumber.from(l));d[p]=i===e.SwapType.SwapExactIn?d[p].add(n.BigNumber.from(s[p]).mul(t).div(a.WeiPerEther)):d[p].add(s[p])}})),d}e.SwapType=void 0,(Ea=e.SwapType||(e.SwapType={}))[Ea.SwapExactIn=0]="SwapExactIn",Ea[Ea.SwapExactOut=1]="SwapExactOut";var va={1:{contracts:{aaveLinearPoolFactory:"0x0b576c1245f479506e7c8bbc4db4db07c1cd31f9",arbitrumRootGauge:"0x6337949cbc4825bbd09242c811770f6f6fee9ffc",arbitrumRootGaugeFactory:"0x1c99324edc771c82a0dccb780cc7dda0045e50e7",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x8f42adbba1b16eaae3bb5754915e0d06059add75",authorizerAdaptorEntrypoint:"0xf5decdb1f3d1ee384908fbe16d2f0348ae43a9ea",authorizerWithAdaptorValidation:"0x6048a8c631fb7e77eca533cf9c29784e482391e7",avalancheRootGauge:"0xc57b4be50bf6bbe5f6a4fe379da342b32b37bf2f",avalancheRootGaugeFactory:"0x10f3e79911a490aa5b5d5cda6f111029c4eab5ac",bal:"0xba100000625a3754423978a60c9317c58a424e3d",balancerHelpers:"0x5addcca35b7a0d07c74063c48700c8590e87864e",balancerMinter:"0x239e55f427d44c3cc793f49bfb507ebe76638a2b",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0xfea793aa415061c483d2390414275ad314b3f621",balancerTokenAdmin:"0xf302f9f50958c5593770fdf4d4812309ff77414f",balTokenHolderFactory:"0xb848f50141f3d4255b37ac288c25c109104f2158",batchRelayerLibrary:"0xf77018c0d817da22cadbdf504c00c0d32ce1e5c2",circuitBreakerLib:"0x4967b3353cdf9e5c67421a3890d35f2f3bb50527",composableStablePoolFactory:"0xfada0f4547ab2de89d1304a668c39b3e09aa7c76",distributionScheduler:"0xbd35248f8325dd1cb2bbf9d01e80a6bb99a792dd",doubleEntrypointFixRelayer:"0xca96c4f198d343e251b1a01f3eba061ef3da73c1",erc4626LinearPoolFactory:"0x813ee7a840ce909e7fea2117a44a90b8063bd4fd",eulerLinearPoolFactory:"0x5f43fba61f63fa6bff101a0a0458cea917f6b347",externalWeightedMath:"0x3db89f0ca3b388f2bcdbccd2ff8e13c22459cf75",feeDistributor:"0xd3cf852898b21fc233251427c2dc93d3d604f3bb",gaugeAdder:"0x5dbad78818d4c8958eff2d5b95b28385a22113cd",gaugeController:"0xc128468b7ce63ea702c1f104d55a2566b13d3abd",gaugeWorkingBalanceHelper:"0xdab2583911e872a00a851fb80dcc78a4b46ba57c",gearboxLinearPoolFactory:"0x39a79eb449fc05c92c39aa6f0e9bfac03be8de5b",gnosisRootGauge:"0x05277ce7d1e365d660624612d8b8b9b55bfd4518",gnosisRootGaugeFactory:"0x2a18b396829bc29f66a1e59fadd7a0269a6605e8",l2GaugeCheckpointer:"0x343688c5cb92115a52ca485af7f62b4b7a2e9ccc",liquidityGaugeFactory:"0xf1665e19bc105be4edd3739f88315cc699cc5b65",liquidityGaugeV5:"0xe5f96070ca00cd54795416b1a4b4c2403231c548",managedPoolAddRemoveTokenLib:"0x4148bf5b0688ed0a87f317c6534cb841f503349e",managedPoolAmmLib:"0xb37646acbb1a91287721b2cdbe01ba0dba5e57a2",managedPoolFactory:"0xbf904f9f340745b4f0c4702c7b6ab1e808ea6b93",merkleOrchard:"0xe3881627b8deebccf9c23b291430a549fc0be5f7",mockAaveLendingPool:"0x28fa1e40011adf98898e8243b2a48bb21ebf0c29",mockAaveLinearPool:"0x4ce277df0feb5b4d07a0ca2adcf5326e4005239d",mockComposableStablePool:"0x5537f945d8c3fcfdc1b8deceebd220fad26afda8",mockErc4626LinearPool:"0x9516a2d25958edb8da246a320f2c7d94a0dbe25d",mockErc4626Token:"0xb99edc4b289b0f2284fcf3f66884191bdce29624",mockEulerLinearPool:"0xdec02e6642e2c999af429f5ce944653cad15e093",mockEulerToken:"0xc101dca301a4011c1f925e9622e749e550a1b667",mockGearboxDieselToken:"0xb7a32b67aadb3866cc5c2fabc6c6ab8a9027c3c1",mockGearboxLinearPool:"0x0d05aac44ac7dd3c7ba5d50be93eb884a057d234",mockGearboxVault:"0xc7b779ab638b7a59f490ac95199502343a81e006",mockManagedPool:"0xd0cbf6765997b7ca7be6440f5e305b2ec7b96065",mockShareToken:"0x192e67544694a7baa2dea94f9b1df58bb3395a12",mockSilo:"0x66c94ae8d795e98f69ca65ffac87b38b17be3ca2",mockSiloLinearPool:"0x74cbfaf94a3577c539a9dcee9870a6349a33b34f",mockSiloRepository:"0x8e2dfc5e111dbe14e9d725210b9342688dd51c6c",mockStaticAToken:"0x1f3c910c416ed2340150281c5eb93325c38817a1",mockWeightedPool:"0x8055b8c947de30130bc1ec750c8f345a50006b23",mockYearnLinearPool:"0xac5b4ef7ede2f2843a704e96dcaa637f4ba3dc3f",mockYearnTokenVault:"0x806e02dea8d4a0882cad9fa3fa75b212328692de",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",omniVotingEscrowAdaptor:"0x96484f2abf5e58b15176dbf1a799627b53f13b6d",optimismRootGauge:"0xbc230b1a66a138cd9cfc7b352390025978dfadde",optimismRootGaugeFactory:"0x866d4b65694c66fbfd15dd6fa933d0a6b3940a36",polygonRootGauge:"0xfeb1a24c2752e53576133cdb718f25bc64ebdd52",polygonRootGaugeFactory:"0xa98bce70c92ad2ef3288dbcd659bc0d6b62f8f13",polygonZkEvmRootGauge:"0x45bf48d996d22afc9bc150df7fb4d13a49088602",polygonZkEvmRootGaugeFactory:"0x9bf951848288ccd87d06fac426150262cd3447de",poolRecoveryHelper:"0x1b300c86980a5195bcf49bd419a068d98dc133db",preseededVotingEscrowDelegation:"0xb496ff44746a8693a060fafd984da41b253f6790",protocolFeePercentagesProvider:"0x97207b095e4d5c9a6e4cfbfcd2c3358e03b90c4a",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x5ef4c5352882b10893b70dbcaa0c000965bd23c5",protocolIdRegistry:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",recoveryModeHelper:"0x7827108af2fd9910ea7cf361d9b827941fa7d809",siloLinearPoolFactory:"0x4e11aeec21baf1660b1a46472963cb3da7811c89",singleRecipientGauge:"0xb2007b8b7e0260042517f635cfd8e6dd2dd7f007",singleRecipientGaugeFactory:"0x4fb47126fa83a8734991e41b942ac29a3266c968",smartWalletChecker:"0x7869296efd0a76872fee62a058c8fbca5c1c826c",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x67f8df125b796b05895a6dc8ecf944b9556ecb0b",votingEscrow:"0xc128a9954e6c874ea3d62ce62b468ba073093f25",votingEscrowDelegation:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",votingEscrowDelegationProxy:"0x6f5a2ee11e7a772aeb5114a20d0d7c0ff61eb8a0",votingEscrowRemapper:"0x83e443ef4f9963c77bd860f94500075556668cb8",weightedPoolFactory:"0x897888115ada5773e02aa29f775430bfb5f34c51",weth:"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",wstEthRateProvider:"0x72d07d7dca67b8a406ad1ec34ce969c90bfee768",yearnLinearPoolFactory:"0x5f5222ffa40f2aed6380d022184d6ea67c776ee0"},tokens:{AAVE:"0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9",aFEI:"0x683923db55fead99a79fa01a27eec3cb19679cc3",aFRAX:"0xd4937682df3c8aef4fe912a96a74121c0829e664",ALCX:"0xdbdb4d16eda451d0503b854cf79d55697f90c8df",alUSD:"0xbc6da0fe9ad5f3b0d58160288917aa56653660e9",ANGLE:"0x31429d1856ad1377a8a0079410b297e1a9e214c2",AURA:"0xc0c293ce456ff0ed870add98a0828dd4d2903dbf",AURABAL:"0x616e8bfa43f920657b3497dbf40d6b1a02d4608d",aUSDC:"0xbcca60bb61934080951369a648fb03df4f96263c",aUSDT:"0x3ed3b47dd13ec9a98b44e6204a523e766b225811",aWBTC:"0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656",BADGER:"0x3472a5a71965499acd81997a54bba8d852c6e53d",BAL:"0xba100000625a3754423978a60c9317c58a424e3d",BalWeth8020:"0x5c6ee304399dbdb9c8ef030ab642b10820db8f56",bb_a_usd:"0xa13a9247ea42d743238089903570127dda72fe44",cDAI:"0x5d3a536e4d6dbd6114cc1ead35777bab948e3643",cETH:"0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5",COMP:"0xc00e94cb662c3520282e6f5717214004a7f26888",CRV:"0xd533a949740bb3306d119cc777fa900ba034cd52",cUSDC:"0x39aa39c021dfbae8fac545936693ac917d5e7563",CVX:"0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b",cvxCRV:"0x62b9c7356a2dc64a1969e19c23e4f579f9810aa7",DAI:"0x6b175474e89094c44da98b954eedeac495271d0f",DIGG:"0x798d1be841a82a273720ce31c822c61a67a601c3",DUSD:"0x5bc25f649fc4e26069ddf4cf4010f9f706c23831",ENS:"0xc18360217d8f7ab5e7c516566761ea12ce7f9d72",EURS:"0xdb25f211ab05b1c97d595516f45794528a807ad8",FARM:"0xa0246c9032bc3a600820415ae600c6388619a14d",FEI:"0x956f47f50a910163d8bf957cf5846d573e7f87ca",FRAX:"0x853d955acef822db058eb8505911ed77f175b99e",FTM:"0x4e15361fd6b4bb609fa63c81a2be19d873717870",FXS:"0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0",GEAR:"0xba3335588d9403515223f109edc4eb7269a9ab5d",GTC:"0xde30da39c46104798bb5aa3fe8b9e0e1f348163f",LINK:"0x514910771af9ca656af840dff83e8264ecf986ca",MIM:"0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3",renBTC:"0xeb4c2781e4eba804ce9a9803c67d0893436bb27d",RETH:"0xae78736cd615f374d3085123a210448e74fc6393",sBTC:"0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6",SPELL:"0x090185f2135308bad17527004364ebcc2d37e5f6",stkAAVE:"0x4da27a545c0c5b758a6ba100e3a049001de870f5",SUSHI:"0x6b3595068778dd592e39a122f4f5a5cf09c90fe2",USDC:"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",USDT:"0xdac17f958d2ee523a2206206994597c13d831ec7",WBTC:"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",WETH:"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",xSUSHI:"0x8798249c2e607446efb7ad49ec89dd1865ff4272"}},4:{contracts:{authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",balancerHelpers:"0x5addcca35b7a0d07c74063c48700c8590e87864e",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x41b953164995c11c81da73d212ed8af25741b7ac",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8"},tokens:{}},5:{contracts:{authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x5d90225de345ee24d1d2b6f45de90b056f5265a1",authorizerAdaptorEntrypoint:"0xacaac3e6d6df918bf3c809dfc7d42de0e4a72d4c",authorizerWithAdaptorValidation:"0x8ea89804145c007e7d226001a96955ad53836087",bal:"0xfa8449189744799ad2ace7e0ebac8bb7575eff47",balancerHelpers:"0x5addcca35b7a0d07c74063c48700c8590e87864e",balancerMinter:"0xdf0399539a72e2689b8b2dd53c3c2a0883879fdd",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0x03f1ab8b19bce21eb06c364aec9e40322572a1e9",balancerTokenAdmin:"0x0f32d7d830e20809bcb9071581a696135dd472b7",balTokenHolderFactory:"0x45e617b07021b97407367624648d1a0a358a751a",batchRelayerLibrary:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",childChainGauge:"0x6b5da774890db7b7b96c6f44e6a4b0f657399e2e",childChainGaugeFactory:"0x7ba29fe8e83dd6097a7298075c4affdbda3121cc",childChainGaugeRewardHelper:"0xc128a9954e6c874ea3d62ce62b468ba073093f25",childChainGaugeTokenAdder:"0x55b18f514d7f0c6c886d0c23ac72df5d3b5f8850",childChainLiquidityGaugeFactory:"0x393b918cc2ffa238732e83dd4ee52343f57d767b",childChainStreamer:"0x5b5b72d76b68f4bb1d2a10ef0fc77711f8ec7ed0",circuitBreakerLib:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",composableStablePoolFactory:"0x1802953277fd955f9a254b80aa0582f193cf1d77",distributionScheduler:"0x05a0bf0540f346b6dac25550738343beb51c0f65",doubleEntrypointFixRelayer:"0xbe9458ab5b6f289e524410141c8d5e20a6b035fe",eulerLinearPoolFactory:"0x813ee7a840ce909e7fea2117a44a90b8063bd4fd",externalWeightedMath:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",feeDistributor:"0x42b67611b208e2e9b4cc975f6d74c87b865ae066",gaugeAdder:"0x3f170631ed9821ca51a59d996ab095162438dc10",gaugeController:"0xbb1ce49b16d55a1f2c6e88102f32144c7334b116",gaugeWorkingBalanceHelper:"0xa7d524046ef89de9f8e4f2d7b029f66ccb738d48",l2BalancerPseudoMinter:"0x81cfae226343b24ba12ec6521db2c79e7aeeb310",l2LayerZeroBridgeForwarder:"0xef44d6786b2b4d544b7850fe67ce6381626bf2d6",liquidityGaugeFactory:"0x3b8ca519122cdd8efb272b0d3085453404b25bd0",liquidityGaugeV5:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",managedPoolAddRemoveTokenLib:"0xacf05be5134d64d150d153818f8c67ee36996650",managedPoolAmmLib:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",managedPoolFactory:"0x03f3fb107e74f2eac9358862e91ad3c692712054",merkleOrchard:"0x5cf4928a3205728bd12830e1840f7db85c62a4b9",mockComposableStablePool:"0x5d343d374a769d1ab102e0418a516dadb08a86e4",mockEulerLinearPool:"0x43fa2c00419f60e18966aa043debd4701cb91b6d",mockEulerToken:"0xb99edc4b289b0f2284fcf3f66884191bdce29624",mockManagedPool:"0xff79b51ec2934dd1810a8e0325e3b08708720b26",mockShareToken:"0xb8bdcbf8ccf443d055d5ffe1d8154fac8187fc94",mockSilo:"0xa7a7e22398622bf71ff31dae5355ec7843b13806",mockSiloLinearPool:"0xbbb66a4fff47701ec6c528db615f5e7bf1abdaaf",mockSiloRepository:"0x7153de1a6d71360f07017838c28deca0d6c03e2a",mockWeightedPool:"0x072ed560cc042d7ab1c080a9e4fa8c6f4858deb3",noProtocolFeeLiquidityBootstrappingPoolFactory:"0xb0c726778c3ae4b3454d85557a48e8fa502bdd6a",nullVotingEscrow:"0xa523f47a933d5020b23629ddf689695aa94612dc",omniVotingEscrowAdaptor:"0x83e443ef4f9963c77bd860f94500075556668cb8",poolRecoveryHelper:"0x1cbbe6cea5e4fe7d69c586b4e362a646deef105d",preseededVotingEscrowDelegation:"0x7af980bdbc36d21ce228efabcca35707566a2be5",protocolFeePercentagesProvider:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x85153b639a35d6e6cf8b291aca237fbe67377154",protocolIdRegistry:"0x4fb47126fa83a8734991e41b942ac29a3266c968",recoveryModeHelper:"0x300ab2038eac391f26d9f895dc61f8f66a548833",rewardsOnlyGauge:"0x40bd3faef4268ea40f4c372d7f0a44c3efaaa6b1",siloLinearPoolFactory:"0x30fd8a0f7009f50616afdab4af91a0a2ef4eae49",singleRecipientGauge:"0x0e9addc34f93bccb45d1f744b9f9301285c5b48f",singleRecipientGaugeFactory:"0xe3881627b8deebccf9c23b291430a549fc0be5f7",smartWalletChecker:"0x1b6df1ff5db99f8a8a04d38f7478bab056fa35a7",testBalancerToken:"0xfa8449189744799ad2ace7e0ebac8bb7575eff47",timelockAuthorizer:"0x70e26f740bad6a2cdd762e2478496268882c21d4",timelockAuthorizerMigrator:"0x7159c4b96bfcfca232355b55778e85cf9e245192",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0xd13afc362f619b840c8f4aac1d957ce219ef37ca",votingEscrow:"0x33a99dcc4c85c014cf12626959111d5898bbcabf",votingEscrowDelegation:"0xcff73979321788d59a6170ff012730db2087f31c",votingEscrowDelegationProxy:"0x6817149cb753bf529565b4d023d7507ed2ff4bc0",votingEscrowRemapper:"0x5dbad78818d4c8958eff2d5b95b28385a22113cd",weightedPoolFactory:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",weth:"0xdfcea9088c8a88a76ff74892c1457c17dfeef9c1",wstEthRateProvider:"0x80a94f458491ca88f09767e58a92fd23cbf1196f"},tokens:{}},10:{contracts:{aaveLinearPoolFactory:"0x7396f99b48e7436b152427bfa3dd6aa8c7c6d05b",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x8f42adbba1b16eaae3bb5754915e0d06059add75",authorizerAdaptorEntrypoint:"0xed86ff0c507d3af5f35d3523b77c17415fcffacb",authorizerWithAdaptorValidation:"0xacf05be5134d64d150d153818f8c67ee36996650",bal:"0xfe8b128ba8c78aabc59d4c64cee7ff28e9379921",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0x03f1ab8b19bce21eb06c364aec9e40322572a1e9",batchRelayerLibrary:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",childChainGauge:"0x81cfae226343b24ba12ec6521db2c79e7aeeb310",childChainGaugeFactory:"0xa523f47a933d5020b23629ddf689695aa94612dc",childChainGaugeRewardHelper:"0x8ab784368a1883da90d8513b48801e2db1cb2d5d",childChainGaugeTokenAdder:"0x6f5a2ee11e7a772aeb5114a20d0d7c0ff61eb8a0",childChainLiquidityGaugeFactory:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",childChainStreamer:"0x239e55f427d44c3cc793f49bfb507ebe76638a2b",circuitBreakerLib:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",composableStablePoolFactory:"0x1802953277fd955f9a254b80aa0582f193cf1d77",doubleEntrypointFixRelayer:"0x3b8ca519122cdd8efb272b0d3085453404b25bd0",erc4626LinearPoolFactory:"0x7adbdabaa80f654568421887c12f09e0c7bd9629",externalWeightedMath:"0x8df317a729fcaa260306d7de28888932cb579b88",gaugeWorkingBalanceHelper:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",l2BalancerPseudoMinter:"0x4fb47126fa83a8734991e41b942ac29a3266c968",l2LayerZeroBridgeForwarder:"0xbef13d1e54d0c79da8b0ad704883e1cea7eb2100",managedPoolAddRemoveTokenLib:"0x59562f93c447656f6e4799fc1fc7c3d977c3324f",managedPoolAmmLib:"0xded7fef7d8ecdcb74f22f0169e1a9ec696e6695d",managedPoolFactory:"0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4",mockAaveLendingPool:"0x533a16f90e7d3ca31dbc608e5ec54967710f0d2a",mockAaveLinearPool:"0x45d37982784f022a9864748b4e8750e1e7019604",mockComposableStablePool:"0x11a4cf51bb0bb4d925cadfda61fcda952d64889c",mockErc4626LinearPool:"0x2da61ef3cdcb97efb0f7099c02527fabfe94dee5",mockErc4626Token:"0x4be0e4d6184348c5ba845a4010528cfc779610b8",mockManagedPool:"0xb4af4fdd49da2a2ba9522eadcf86d407a69f19c8",mockStaticAToken:"0x8b7854708c0c54f9d7d1ff351d4f84e6de0e134c",mockWeightedPool:"0x62f5f9a446d198e8e4c84ee56e5217416720edaf",mockYearnLinearPool:"0x34557ef500bfc060b8e3f2da58ef725bb7d32202",mockYearnTokenVault:"0xb15608d28eb43378a7e7780add3fe9bc132baf40",noProtocolFeeLiquidityBootstrappingPoolFactory:"0xf302f9f50958c5593770fdf4d4812309ff77414f",nullVotingEscrow:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",poolRecoveryHelper:"0x26743984e3357efc59f2fd6c1afdc310335a61c9",protocolFeePercentagesProvider:"0xacaac3e6d6df918bf3c809dfc7d42de0e4a72d4c",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0xc128a9954e6c874ea3d62ce62b468ba073093f25",protocolIdRegistry:"0x9805dcfd25e6de36bad8fe9d3fe2c9b44b764102",recoveryModeHelper:"0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98",rewardsOnlyGauge:"0xc128468b7ce63ea702c1f104d55a2566b13d3abd",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x6817149cb753bf529565b4d023d7507ed2ff4bc0",votingEscrowDelegationProxy:"0x9da18982a33fd0c7051b19f0d7c76f2d5e7e017c",weightedPoolFactory:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",weth:"0x4200000000000000000000000000000000000006",yearnLinearPoolFactory:"0x19dfef0a828eec0c85fbb335aa65437417390b85"},tokens:{}},42:{contracts:{authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x97207b095e4d5c9a6e4cfbfcd2c3358e03b90c4a",balancerHelpers:"0x94905e703fead7f0fd0eee355d267ee909784e6d",balancerMinter:"0x1bbfa323155526f54eec458571bb5a75e0c41507",balancerTokenAdmin:"0xab093cd16e765b5b23d34030aafaf026558e0a19",balTokenHolderFactory:"0xa98bce70c92ad2ef3288dbcd659bc0d6b62f8f13",childChainLiquidityGaugeFactory:"0xf9ac7b9df2b3454e841110cce5550bd5ac6f875f",childChainStreamer:"0x4de578134995bea8480d7696946217f356339ab8",gaugeController:"0x35c425234dc42e7402f54cc54573f77842963a56",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x1b57f637ce3408f1f834b0b70f9a595b062daea7",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",rewardsOnlyGauge:"0x868543bb787317632f94fcfe8eb85406b123590c",testBalancerToken:"0xa2d801064652a269d92ee2a59f3261155ec66830",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",votingEscrow:"0x16ba924752ef283c7946db8a122a6742aa35c1dc",votingEscrowDelegation:"0xdc6d62ae091ea77331542042a72e5e38b188837c",votingEscrowDelegationProxy:"0x98d0d0a65cbeccaa647a5a95cf27cf2f00e1231c",wstEthRateProvider:"0xd7fad3bd59d6477cbe1be7f646f7f1ba25b230f8"},tokens:{}},100:{contracts:{aaveLinearPoolFactory:"0x62aab12865d7281048c337d53a4dde9d770321e6",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x5addcca35b7a0d07c74063c48700c8590e87864e",authorizerAdaptorEntrypoint:"0x8f42adbba1b16eaae3bb5754915e0d06059add75",authorizerWithAdaptorValidation:"0x03f3fb107e74f2eac9358862e91ad3c692712054",bal:"0x7ef541e2a22058048904fe5744f9c7e4c57af717",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",balancerRelayer:"0x3536fd480ca495ac91e698a703248a8915c137a3",batchRelayerLibrary:"0xb9ad3466cdd42015cc05d4804dc68d562b6a2065",childChainGauge:"0x96484f2abf5e58b15176dbf1a799627b53f13b6d",childChainGaugeFactory:"0x83e443ef4f9963c77bd860f94500075556668cb8",childChainGaugeRewardHelper:"0xf7d5dce55e6d47852f054697bab6a1b48a00ddbd",childChainGaugeTokenAdder:"0x1802953277fd955f9a254b80aa0582f193cf1d77",childChainLiquidityGaugeFactory:"0x809b79b53f18e9bc08a961ed4678b901ac93213a",childChainStreamer:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",circuitBreakerLib:"0x54f8f9d28e26fa5864cfa80f50a5df95fd85f46a",composableStablePoolFactory:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",externalWeightedMath:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",gaugeWorkingBalanceHelper:"0x682f0ddbfd41d1272982f64a499fb62d80e27589",l2BalancerPseudoMinter:"0xa8920455934da4d853faac1f94fe7bef72943ef1",l2LayerZeroBridgeForwarder:"0xeb151668006cd04dadd098afd0a82e78f77076c3",managedPoolAddRemoveTokenLib:"0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4",managedPoolAmmLib:"0xacf05be5134d64d150d153818f8c67ee36996650",managedPoolFactory:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",mockAaveLendingPool:"0x040dba12bb3d5c0a73ddfe84c220be3ddba06966",mockAaveLinearPool:"0x1ac55c31dac78ca943cb8ebfca5945ce09e036e2",mockComposableStablePool:"0xf3678a0b54c61ccd88ce321c2e07f87ac75f08b9",mockManagedPool:"0xc061361fda32ff5b65f7d98acc9a87349d3f0768",mockStaticAToken:"0x35d8f4a4c0e95f3d925cb4cbbbf513a0172ed8a4",mockWeightedPool:"0xd8752f9b0a2c2813796abd2be212a32ffd656ef1",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x85a80afee867adf27b50bdb7b76da70f1e853062",nullVotingEscrow:"0x013d4382f291be5688afbcc741ee8a24c66b2c92",poolRecoveryHelper:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",protocolFeePercentagesProvider:"0x41b953164995c11c81da73d212ed8af25741b7ac",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0xdae7e32adc5d490a43ccba1f0c736033f2b4efca",protocolIdRegistry:"0x6b5da774890db7b7b96c6f44e6a4b0f657399e2e",recoveryModeHelper:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",rewardsOnlyGauge:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x5dbad78818d4c8958eff2d5b95b28385a22113cd",votingEscrowDelegationProxy:"0x7a2535f5fb47b8e44c02ef5d9990588313fe8f05",weightedPoolFactory:"0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7",weth:"0xe91d153e0b41518a2ce8dd3d7944fa863463a97d"},tokens:{}},137:{contracts:{aaveLinearPoolFactory:"0xab2372275809e15198a7968c7f324053867cdb0c",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0xc128468b7ce63ea702c1f104d55a2566b13d3abd",authorizerAdaptorEntrypoint:"0xab093cd16e765b5b23d34030aafaf026558e0a19",authorizerWithAdaptorValidation:"0x020301b0a99efb6816b41007765fb577259ec418",bal:"0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3",balancerHelpers:"0x239e55f427d44c3cc793f49bfb507ebe76638a2b",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0xd18d5d377eb23362e54fa496597d7e962d56c554",batchRelayerLibrary:"0x4271de2595c3d85d2d455c5778adf2d7ad54322c",childChainGauge:"0xc9b36096f5201ea332db35d6d195774ea0d5988f",childChainGaugeFactory:"0x22625eedd92c81a219a83e1dc48f88d54786b017",childChainGaugeRewardHelper:"0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33",childChainGaugeTokenAdder:"0x1554ee754707d5c93b7934af404747aba521aaf2",childChainLiquidityGaugeFactory:"0x3b8ca519122cdd8efb272b0d3085453404b25bd0",childChainStreamer:"0x6f5a2ee11e7a772aeb5114a20d0d7c0ff61eb8a0",circuitBreakerLib:"0xedfd0a7005a7c72c44ff13bea370c86a9d11bee1",composableStablePoolFactory:"0x6ab5549bbd766a43afb687776ad8466f8b42f777",doubleEntrypointFixRelayer:"0x79d0011892fe558fc5a4ec7d4ca5db59069f460f",erc4626LinearPoolFactory:"0x5c5fcf8fbd4cd563ced27e7d066b88ee20e1867a",externalWeightedMath:"0x72ebafddc4c7d3eb702c81295d90a8b29f008a03",gaugeWorkingBalanceHelper:"0x08fd003d8f1892d4ec684e6c3ee0128081be461b",l2BalancerPseudoMinter:"0x47b489bf5836f83abd928c316f8e39bc0587b020",l2LayerZeroBridgeForwarder:"0xb98f54a74590a6e681ff664b2fa22ebffe1a929e",managedPoolAddRemoveTokenLib:"0xf553bf40db86c35f3058434039d51aad29c6180b",managedPoolAmmLib:"0xcefd59eedafa9ee8ccda1aaf944088e68b5bd890",managedPoolFactory:"0xb8dfa4fd0f083de2b7edc0d5eed5e684e54ba45d",merkleOrchard:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",mockAaveLendingPool:"0x0df6bb26533eb86f371b1f70eecdd955420523c6",mockAaveLinearPool:"0x0889b240a5876aae745ac19f1771853671dc5d36",mockComposableStablePool:"0x0f25823cf786b78696b16536e2f2b9835289ab51",mockErc4626LinearPool:"0xc55ec796a4debe625d95436a3531f4950b11bdcf",mockErc4626Token:"0x19dfef0a828eec0c85fbb335aa65437417390b85",mockManagedPool:"0x074efd7806e6c28e8b6611075b1aa62c6c408090",mockStaticAToken:"0xe72b2780d3c57f781bd4e8572e200cd7e9a447c2",mockWeightedPool:"0xb77e03655ee894aade216a83d05511a9f9895126",mockYearnLinearPool:"0xdae301690004946424e41051ace1791083be42a1",mockYearnTokenVault:"0x28fa1e40011adf98898e8243b2a48bb21ebf0c29",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x41b953164995c11c81da73d212ed8af25741b7ac",nullVotingEscrow:"0x1311fbc9f60359639174c1e7cc2032dbdb5cc4d1",poolRecoveryHelper:"0x495f696430f4a51f7fcb98fbe68a9cb7a07fb1ba",protocolFeePercentagesProvider:"0x42ac0e6fa47385d55aff070d79ef0079868c48a6",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0xef44d6786b2b4d544b7850fe67ce6381626bf2d6",protocolIdRegistry:"0xa523f47a933d5020b23629ddf689695aa94612dc",recoveryModeHelper:"0x1eb79551ca0e83ec145608bc39a0c7f10ca21aa5",rewardsOnlyGauge:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0xd961e30156c2e0d0d925a0de45f931cb7815e970",votingEscrowDelegationProxy:"0x0f08eef2c785aa5e7539684af04755dec1347b7c",weightedPoolFactory:"0xfc8a407bba312ac761d8bfe04ce1201904842b76",weth:"0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270",yearnLinearPoolFactory:"0x0b576c1245f479506e7c8bbc4db4db07c1cd31f9"},tokens:{BAL:"0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3",USDC:"0x2791bca1f2de4661ed88a30c99a7a9449aa84174",WBTC:"0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6",WETH:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",WMATIC:"0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270"}},1101:{contracts:{aaveLinearPoolFactory:"0x4b7b369989e613ff2c65768b7cf930cc927f901e",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0xdcdbf71a870cc60c6f9b621e28a7d3ffd6dd4965",authorizerAdaptorEntrypoint:"0xb9ad3466cdd42015cc05d4804dc68d562b6a2065",authorizerWithAdaptorValidation:"0x8df317a729fcaa260306d7de28888932cb579b88",bal:"0x120ef59b80774f02211563834d8e3b72cb1649d6",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0x809b79b53f18e9bc08a961ed4678b901ac93213a",balancerRelayer:"0x4678731dc41142a902a114ac5b2f77b63f4a259d",batchRelayerLibrary:"0x54f8f9d28e26fa5864cfa80f50a5df95fd85f46a",childChainGauge:"0x59562f93c447656f6e4799fc1fc7c3d977c3324f",childChainGaugeFactory:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",circuitBreakerLib:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",composableStablePoolFactory:"0x8ea89804145c007e7d226001a96955ad53836087",erc4626LinearPoolFactory:"0x6b1da720be2d11d95177ccfc40a917c2688f396c",externalWeightedMath:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",gaugeWorkingBalanceHelper:"0xef454a7b3f965d3f6723e462405246f8cd865425",gearboxLinearPoolFactory:"0x687b8c9b41e01be8b591725fac5d5f52d0564d79",l2BalancerPseudoMinter:"0x475d18169be8a89357a9ee3ab00ca386d20fa229",l2LayerZeroBridgeForwarder:"0xded7fef7d8ecdcb74f22f0169e1a9ec696e6695d",managedPoolAddRemoveTokenLib:"0xacf05be5134d64d150d153818f8c67ee36996650",managedPoolAmmLib:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",managedPoolFactory:"0xaf779e58dafb4307b998c7b3c9d3f788dfc80632",mockAaveLendingPool:"0x161f4014c27773840ccb4ec1957113e6dd028846",mockAaveLinearPool:"0xbfd65c6160cfd638a85c645e6e6d8acac5dac935",mockComposableStablePool:"0x6f5f794a3cef904b8517c4c311de2fa837ff24a0",mockErc4626LinearPool:"0xac4b72c01072a52b73ca71105504f1372efcce0d",mockErc4626Token:"0x0c6052254551eae3ecac77b01dfcf1025418828f",mockGearboxDieselToken:"0x698caed853be9cea96c268f565e2b61d3b2bcda4",mockGearboxLinearPool:"0x32f03464fdf909fdf3798f87ff3712b10c59bd86",mockGearboxVault:"0x88ed12a90142fdbfe2a28f7d5b48927254c7e760",mockLiquidityBootstrappingPool:"0x3c87ff3e9307dbebfae720e04c6439e49f79bf9b",mockManagedPool:"0x522ee506a2f63d0ae1d79d6f5dbd9d0bca32c866",mockStaticAToken:"0x4638ab64022927c9bd5947607459d13f57f1551c",mockWeightedPool:"0x78385153d2f356c87001f09bb5424137c618d38b",mockYearnLinearPool:"0x02c9dcb975262719a61f9b40bdf0987ead9add3a",mockYearnTokenVault:"0xdbf7b9f1d2bfba14e42709f84dda3187ee410e38",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98",nullVotingEscrow:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",poolRecoveryHelper:"0xf7d5dce55e6d47852f054697bab6a1b48a00ddbd",protocolFeePercentagesProvider:"0x1802953277fd955f9a254b80aa0582f193cf1d77",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",protocolIdRegistry:"0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7",recoveryModeHelper:"0x300ab2038eac391f26d9f895dc61f8f66a548833",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",votingEscrowDelegationProxy:"0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7",weightedPoolFactory:"0x03f3fb107e74f2eac9358862e91ad3c692712054",weth:"0x4f9a0e7fd2bf6067db6994cf12e4495df938e6e9",yearnLinearPoolFactory:"0x44d33798dddcdabc93fe6a40c80588033dc502d3"},tokens:{}},8453:{contracts:{aaveLinearPoolFactory:"0x687b8c9b41e01be8b591725fac5d5f52d0564d79",authorizer:"0x809b79b53f18e9bc08a961ed4678b901ac93213a",authorizerAdaptor:"0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7",authorizerAdaptorEntrypoint:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",authorizerWithAdaptorValidation:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",bal:"0x4158734d47fc9692176b5085e0f52ee0da5d47f1",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0x300ab2038eac391f26d9f895dc61f8f66a548833",balancerRelayer:"0x76f7204b62f554b79d444588edac9dfa7032c71a",batchRelayerLibrary:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",childChainGauge:"0x59562f93c447656f6e4799fc1fc7c3d977c3324f",childChainGaugeFactory:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",circuitBreakerLib:"0xef454a7b3f965d3f6723e462405246f8cd865425",composableStablePoolFactory:"0x8df317a729fcaa260306d7de28888932cb579b88",erc4626LinearPoolFactory:"0x161f4014c27773840ccb4ec1957113e6dd028846",externalWeightedMath:"0x7920bfa1b2041911b354747ca7a6cdd2dfc50cfd",gaugeWorkingBalanceHelper:"0xa7d524046ef89de9f8e4f2d7b029f66ccb738d48",gearboxLinearPoolFactory:"0x9dd32684176638d977883448a4c914311c07bd62",l2BalancerPseudoMinter:"0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7",l2LayerZeroBridgeForwarder:"0x8ea89804145c007e7d226001a96955ad53836087",managedPoolAddRemoveTokenLib:"0xb19382073c7a0addbb56ac6af1808fa49e377b75",managedPoolAmmLib:"0x7d2248f194755dca9a1887099394f39476d28c9a",managedPoolFactory:"0x9a62c91626d39d0216b3959112f9d4678e20134d",mockAaveLendingPool:"0x88ed12a90142fdbfe2a28f7d5b48927254c7e760",mockAaveLinearPool:"0x712e23a9b91aa30ee7997d1c7a1a285d4c7912d1",mockComposableStablePool:"0x7f6e9d6a4093af9d09bae92d24bfe42fc5369ae6",mockErc4626LinearPool:"0x1cc2e10c486ffb7228810b9c7c183d0cd92cdf44",mockErc4626Token:"0x4638ab64022927c9bd5947607459d13f57f1551c",mockGearboxDieselToken:"0xb521dd5c8e13fe202626cac98873fea2b7760ce4",mockGearboxLinearPool:"0x3c28a59356b473847aaa5e0b6f561636079213a6",mockGearboxVault:"0x79e435875ccee3cd9e8da23fe34f9a011d05ea6c",mockLiquidityBootstrappingPool:"",mockManagedPool:"0xe50ad96af9370d05d3c1ce85f17c31557b29c4ee",mockStaticAToken:"0x698caed853be9cea96c268f565e2b61d3b2bcda4",mockWeightedPool:"0xd9dbbfaa703f3c33838365ae00fe4eb22cdf8d46",mockYearnLinearPool:"0x369877467fc3b6774de4e11e0c0abbde70eb40fd",mockYearnTokenVault:"0xdbf7b9f1d2bfba14e42709f84dda3187ee410e38",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x0c6052254551eae3ecac77b01dfcf1025418828f",nullVotingEscrow:"0x475d18169be8a89357a9ee3ab00ca386d20fa229",poolRecoveryHelper:"0x03f3fb107e74f2eac9358862e91ad3c692712054",protocolFeePercentagesProvider:"0xded7fef7d8ecdcb74f22f0169e1a9ec696e6695d",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0xacf05be5134d64d150d153818f8c67ee36996650",protocolIdRegistry:"0x682f0ddbfd41d1272982f64a499fb62d80e27589",recoveryModeHelper:"0x313a8d36b1d90a4cba3a505fdc3480c3870be053",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",votingEscrowDelegationProxy:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",weightedPoolFactory:"0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4",weth:"0x4200000000000000000000000000000000000006",yearnLinearPoolFactory:"0x44d33798dddcdabc93fe6a40c80588033dc502d3"},tokens:{}},42161:{contracts:{aaveLinearPoolFactory:"0x7396f99b48e7436b152427bfa3dd6aa8c7c6d05b",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",authorizerAdaptorEntrypoint:"0x97207b095e4d5c9a6e4cfbfcd2c3358e03b90c4a",authorizerWithAdaptorValidation:"0x6b1da720be2d11d95177ccfc40a917c2688f396c",bal:"0x040d1edc9569d4bab2d15287dc5a4f10f56a56b8",balancerHelpers:"0x77d46184d22ca6a3726a2f500c776767b6a3d6ab",balancerQueries:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",balancerRelayer:"0x598ce0f1ab64b27256759ef99d883ee51138b9bd",batchRelayerLibrary:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",childChainGauge:"0xa523f47a933d5020b23629ddf689695aa94612dc",childChainGaugeFactory:"0x6817149cb753bf529565b4d023d7507ed2ff4bc0",childChainGaugeRewardHelper:"0xa0dabebaad1b243bbb243f933013d560819eb66f",childChainGaugeTokenAdder:"0xbfd9769b061e57e478690299011a028194d66e3c",childChainLiquidityGaugeFactory:"0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2",childChainStreamer:"0xd7fad3bd59d6477cbe1be7f646f7f1ba25b230f8",circuitBreakerLib:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",composableStablePoolFactory:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",doubleEntrypointFixRelayer:"0x8e5698dc4897dc12243c8642e77b4f21349db97c",erc4626LinearPoolFactory:"0x7adbdabaa80f654568421887c12f09e0c7bd9629",externalWeightedMath:"0x03f3fb107e74f2eac9358862e91ad3c692712054",gaugeWorkingBalanceHelper:"0xea924b45a3fcdaadf4e5cfb1665823b8f8f2039b",l2BalancerPseudoMinter:"0xc3ccace87f6d3a81724075adcb5ddd85a8a1bb68",l2LayerZeroBridgeForwarder:"0x12ca9de662a7bf5dc89e034a5083ef751b08ede7",managedPoolAddRemoveTokenLib:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",managedPoolAmmLib:"0x300ab2038eac391f26d9f895dc61f8f66a548833",managedPoolFactory:"0x8ea89804145c007e7d226001a96955ad53836087",merkleOrchard:"0x9805dcfd25e6de36bad8fe9d3fe2c9b44b764102",mockAaveLendingPool:"0x533a16f90e7d3ca31dbc608e5ec54967710f0d2a",mockAaveLinearPool:"0x19b1c92631405a0a9495ccba0becf4f2e8e908bd",mockComposableStablePool:"0xff7e6b102516e071dcda763ee9d02c1515481db5",mockErc4626LinearPool:"0x3f53a862919ccfa023cb6ace91378a79fb0f6bf5",mockErc4626Token:"0x4be0e4d6184348c5ba845a4010528cfc779610b8",mockManagedPool:"0xf5a71257b331c02da1eae52151c3d600f16b76f0",mockStaticAToken:"0x8b7854708c0c54f9d7d1ff351d4f84e6de0e134c",mockWeightedPool:"0x129c6402ff88611aa59bf2e14b39e091822e2c9c",mockYearnLinearPool:"0x1fa7f727934226aedab636d62a084931b97d366b",mockYearnTokenVault:"0xb15608d28eb43378a7e7780add3fe9bc132baf40",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x1802953277fd955f9a254b80aa0582f193cf1d77",nullVotingEscrow:"0x9da18982a33fd0c7051b19f0d7c76f2d5e7e017c",poolRecoveryHelper:"0xb5e56cc3d2e38e53b1166175c59e921a37cdc1e2",protocolFeePercentagesProvider:"0x5ef4c5352882b10893b70dbcaa0c000965bd23c5",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x70bbd023481788e443472e123ab963e5ebf58d06",protocolIdRegistry:"0x5cf4928a3205728bd12830e1840f7db85c62a4b9",recoveryModeHelper:"0x682f0ddbfd41d1272982f64a499fb62d80e27589",rewardsOnlyGauge:"0x41b953164995c11c81da73d212ed8af25741b7ac",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x6b5da774890db7b7b96c6f44e6a4b0f657399e2e",votingEscrowDelegationProxy:"0x81cfae226343b24ba12ec6521db2c79e7aeeb310",weightedPoolFactory:"0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7",weth:"0x82af49447d8a07e3bd95bd0d56f35241523fbab1",yearnLinearPoolFactory:"0x19dfef0a828eec0c85fbb335aa65437417390b85"},tokens:{BADGER:"0xbfa641051ba0a0ad1b0acf549a89536a0d76472e",CRV:"0x11cdb42b0eb46d95f990bedd4695a6e3fa034978",LDO:"0x13ad51ed4f1b7e9dc168d8a00cb3f4ddd85efa60",renBTC:"0xdbf31df14b66535af65aac99c32e9ea844e14501",SUSHI:"0xd4d42f0b6def4ce0383636770ef773390d85c61a",USDC:"0xff970a61a04b1ca14834a43f5de4533ebddb5cc8",USDT:"0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9",WBTC:"0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",WETH:"0x82af49447d8a07e3bd95bd0d56f35241523fbab1"}},43114:{contracts:{aaveLinearPoolFactory:"0x6caf662b573f577de01165d2d38d1910bba41f8a",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0xdae7e32adc5d490a43ccba1f0c736033f2b4efca",authorizerAdaptorEntrypoint:"0x4e7bbd911cf1efa442bc1b2e9ea01ffe785412ec",authorizerWithAdaptorValidation:"0x8df317a729fcaa260306d7de28888932cb579b88",bal:"0xe15bcb9e0ea69e6ab9fa080c4c4a5632896298c3",balancerHelpers:"0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9",balancerQueries:"0xc128468b7ce63ea702c1f104d55a2566b13d3abd",balancerRelayer:"0x03f1ab8b19bce21eb06c364aec9e40322572a1e9",batchRelayerLibrary:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",childChainGauge:"0x4b7b369989e613ff2c65768b7cf930cc927f901e",childChainGaugeFactory:"0x161f4014c27773840ccb4ec1957113e6dd028846",childChainGaugeRewardHelper:"0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647",childChainGaugeTokenAdder:"0xf302f9f50958c5593770fdf4d4812309ff77414f",childChainLiquidityGaugeFactory:"0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2",childChainStreamer:"0xd7fad3bd59d6477cbe1be7f646f7f1ba25b230f8",circuitBreakerLib:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",composableStablePoolFactory:"0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98",distributionScheduler:"0xc128a9954e6c874ea3d62ce62b468ba073093f25",erc4626LinearPoolFactory:"0x4507d91cd2c0d51d9b4f30bf0b93afc938a70ba5",externalWeightedMath:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",gaugeWorkingBalanceHelper:"0x687b8c9b41e01be8b591725fac5d5f52d0564d79",l2BalancerPseudoMinter:"0xea924b45a3fcdaadf4e5cfb1665823b8f8f2039b",l2LayerZeroBridgeForwarder:"0x4638ab64022927c9bd5947607459d13f57f1551c",managedPoolAddRemoveTokenLib:"0xacf05be5134d64d150d153818f8c67ee36996650",managedPoolAmmLib:"0xa69e0ccf150a29369d8bbc0b3f510849db7e8eee",managedPoolFactory:"0x03f3fb107e74f2eac9358862e91ad3c692712054",mockAaveLendingPool:"0x57ea28a99394978d060e483477c0fd9fb9afa96c",mockAaveLinearPool:"0xa826a114b0c7db4d1ff4a4be845a78998c64564c",mockComposableStablePool:"0xea4643102dfc03d5e382e7827bf767f6587e9965",mockErc4626LinearPool:"0xed3e2f496cbcd8e212192fb8d1499842f04a0d19",mockErc4626Token:"0x2ebe41e1aa44d61c206a94474932dadc7d3fd9e3",mockManagedPool:"0x3fb81f6fb0dd94c6fc7e138887f1ca4cdb5e2999",mockStaticAToken:"0xd8b6b96c88ad626eb6209c4876e3b14f45f8803a",mockWeightedPool:"0xb2b5b452d53401391155ea48c4451f6e9b0dd058",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e",nullVotingEscrow:"0x6b1da720be2d11d95177ccfc40a917c2688f396c",poolRecoveryHelper:"0x3b8ca519122cdd8efb272b0d3085453404b25bd0",protocolFeePercentagesProvider:"0x239e55f427d44c3cc793f49bfb507ebe76638a2b",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x8f42adbba1b16eaae3bb5754915e0d06059add75",recoveryModeHelper:"0x300ab2038eac391f26d9f895dc61f8f66a548833",rewardsOnlyGauge:"0x41b953164995c11c81da73d212ed8af25741b7ac",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",votingEscrowDelegationProxy:"0x0c6052254551eae3ecac77b01dfcf1025418828f",weightedPoolFactory:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",weth:"0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7"},tokens:{}},11155111:{contracts:{aaveLinearPoolFactory:"0xdf9b5b00ef9bca66e9902bd813db14e4343be025",authorizer:"0xa331d84ec860bf466b4cdccfb4ac09a1b43f3ae6",authorizerAdaptor:"0xdcdbf71a870cc60c6f9b621e28a7d3ffd6dd4965",authorizerAdaptorEntrypoint:"0xb9ad3466cdd42015cc05d4804dc68d562b6a2065",authorizerWithAdaptorValidation:"0xb521dd5c8e13fe202626cac98873fea2b7760ce4",bal:"0xb19382073c7a0addbb56ac6af1808fa49e377b75",balancerHelpers:"0xdae7e32adc5d490a43ccba1f0c736033f2b4efca",balancerMinter:"0x1783cd84b3d01854a96b4ed5843753c2ccbd574a",balancerQueries:"0x1802953277fd955f9a254b80aa0582f193cf1d77",balancerRelayer:"0x6d5342d716c13d9a3f072a2b11498624ade27f90",balancerTokenAdmin:"0x7d2248f194755dca9a1887099394f39476d28c9a",balTokenHolderFactory:"0xef454a7b3f965d3f6723e462405246f8cd865425",batchRelayerLibrary:"0x5f6848976c2914403b425f18b589a65772f082e3",childChainGauge:"0xc49ca921c4cd1117162eaeec0ee969649997950c",childChainGaugeFactory:"0xc370cd86d5488c1788b62f11b09adb0c47f47440",circuitBreakerLib:"0x4c0c450bedb9282a7a54fcb316c285e85a8c0265",composableStablePoolFactory:"0xa3fd20e29358c056b727657e83dfd139abbc9924",erc4626LinearPoolFactory:"0x59562f93c447656f6e4799fc1fc7c3d977c3324f",externalWeightedMath:"0x8246e571d88acd1346179cc3641de87fe3544d7a",feeDistributor:"0xa6971317fb06c76ef731601c64433a4846fca707",gaugeAdder:"0xe42ffa682a26ef8f25891db4882932711d42e467",gaugeController:"0x577e5993b9cc480f07f98b5ebd055604bd9071c4",gaugeWorkingBalanceHelper:"0x2e4abed3362a622c5f712bb183005a476b146bd3",gearboxLinearPoolFactory:"0x8df317a729fcaa260306d7de28888932cb579b88",l2BalancerPseudoMinter:"0xb51f7ffc97cedfb6922e8b9bbf3ef7575fafd630",l2LayerZeroBridgeForwarder:"0xc7e5ed1054a24ef31d827e6f86caa58b3bc168d7",liquidityGaugeFactory:"0x2ff226cd12c80511a641a6101f071d853a4e5363",liquidityGaugeV5:"0x82416ce6ea7dd4923d4a3ed70a79b4a432a382c4",managedPoolAddRemoveTokenLib:"0xc7416e4f3715467ddcf28dc409a9483b2e4d4f43",managedPoolAmmLib:"0xa30ade89e6af5b0ca515cd78e44f9ad0c63989b2",managedPoolFactory:"0x63e179c5b6d54b2c2e36b9ce4085ef5a8c86d50c",mockAaveLendingPool:"0x300ab2038eac391f26d9f895dc61f8f66a548833",mockAaveLinearPool:"0xe4efd99f3c03778ba913eb578c599329634e2bd7",mockComposableStablePool:"0xa8d865fe1d68a405b29f884358468c9b52d4841d",mockErc4626LinearPool:"0x0c2ead6f2dc2a9385187023f4cec5925337b330f",mockErc4626Token:"0x2498a2b0d6462d2260eac50ae1c3e03f4829ba95",mockGearboxDieselToken:"0x4c32a8a8fda4e24139b51b456b42290f51d6a1c4",mockGearboxLinearPool:"0x112a7b7ca66e6963c49bc523a415f7d8cdb806b9",mockGearboxVault:"0x3b1eb8eb7b43882b385ab30533d9a2bef9052a98",mockLiquidityBootstrappingPool:"0xe90472ffc41d7ddf8e3b456bba748e3f22c59c6f",mockManagedPool:"0xe458224ca8d6605c87b73e92aa5cb7a4e77770f3",mockShareToken:"0x0c6052254551eae3ecac77b01dfcf1025418828f",mockSilo:"0x6b1da720be2d11d95177ccfc40a917c2688f396c",mockSiloLinearPool:"0xa149cf2d795aab83a15673f5beade9361e4e3f65",mockSiloRepository:"0xa7d524046ef89de9f8e4f2d7b029f66ccb738d48",mockStaticAToken:"0x03f3fb107e74f2eac9358862e91ad3c692712054",mockWeightedPool:"0xf7a7e1f48fa43cb7919ff4eb362c5be78092df4a",mockYearnLinearPool:"0x016b7366f76aa2794097798b90cf239796aeff8d",mockYearnTokenVault:"0x9129e834e15ea19b6069e8f08a8ecfc13686b8dc",noProtocolFeeLiquidityBootstrappingPoolFactory:"0x45ffd460cc6642b8d8fb12373dfd77ceb0f4932b",nullVotingEscrow:"0x475d18169be8a89357a9ee3ab00ca386d20fa229",omniVotingEscrowAdaptor:"0xe39b5e3b6d74016b2f6a9673d7d7493b6df549d5",poolRecoveryHelper:"0x1b6f057520b4e826271d47b8bdab98e35af17e59",preseededVotingEscrowDelegation:"0xb1a4fe1c6d25a0ddab47431a92a723dd71d9021f",protocolFeePercentagesProvider:"0xf7d5dce55e6d47852f054697bab6a1b48a00ddbd",protocolFeesCollector:"0xce88686553686da562ce7cea497ce749da109f9f",protocolFeesWithdrawer:"0x809b79b53f18e9bc08a961ed4678b901ac93213a",protocolIdRegistry:"0x6cad2ea22bfa7f4c14aae92e47f510cd5c509bc7",recoveryModeHelper:"0x5419e785b83ad3539d3a8741c0abb77d90d8784e",siloLinearPoolFactory:"0x8ea89804145c007e7d226001a96955ad53836087",singleRecipientGauge:"0x9a5ddde7056ceffb03d9962c4549ac1c4ad1f985",singleRecipientGaugeFactory:"0x7ee4d172ae50c627a1bfa9a99e1260c54da26fdf",smartWalletChecker:"0x230a59f4d9adc147480f03b0d3fffecd56c3289a",testBalancerToken:"0xb19382073c7a0addbb56ac6af1808fa49e377b75",vault:"0xba12222222228d8ba445958a75a0704d566bf2c8",veBoostV2:"0x927906bbac747c13c75f6447fe8abb490eab456c",votingEscrow:"0x150a72e4d4d81bbf045565e232c50ed0931ad795",votingEscrowDelegation:"0x0c5538098ebe88175078972f514c9e101d325d4f",votingEscrowDelegationProxy:"0xd87f44df0159dc78029ab9ca7d7e57e7249f5acd",votingEscrowRemapper:"0xf24917fb88261a37cc57f686ebc831a5c0b9fd39",weightedPoolFactory:"0x7920bfa1b2041911b354747ca7a6cdd2dfc50cfd",weth:"0x7b79995e5f793a07bc00c21412e50ecae098e7f9",yearnLinearPoolFactory:"0xacf05be5134d64d150d153818f8c67ee36996650"},tokens:{}}};const ka="0xBA12222222228d8Ba445958a75a0704d566BF2C8",Ba={[e.Network.MAINNET]:{chainId:e.Network.MAINNET,addresses:{contracts:{multicall:"0xeefba1e63905ef1d7acba5a8513c70307c1ce441",poolDataQueries:"0xf5CDdF6feD9C589f1Be04899F48f9738531daD59",lidoRelayer:"0xdcdbf71A870cc60C6F9B621E28a7D3Ffd6Dd4965",veBal:"0xC128a9954e6c874eA3d62ce62B468bA073093F25",gaugeControllerCheckpointer:"0x8e5698dc4897dc12243c8642e77b4f21349db97c",veBalProxy:"0x6f5a2eE11E7a772AeB5114A20d0D7c0ff61EB8A0",gyroConfigProxy:"0xac89cc9d78bbad7eb3a02601b4d65daa1f908aa6",...va[e.Network.MAINNET].contracts},tokens:{bal:va[e.Network.MAINNET].contracts.bal,wrappedNativeAsset:va[e.Network.MAINNET].contracts.weth,bbaUsd:va[e.Network.MAINNET].tokens.bb_a_usd,lbpRaisingTokens:["0x6b175474e89094c44da98b954eedeac495271d0f","0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"],stETH:"0xae7ab96520de3a18e5e111b5eaab095312d7fe84",wstETH:"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",veBal:"0xC128a9954e6c874eA3d62ce62B468bA073093F25",...va[e.Network.MAINNET].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/blocklytics/ethereum-blocks"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"ethereum"}},pools:{wETHwstETH:{id:"0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080",address:"0x32296969ef14eb0c6d29669c550d4a0449130230"}},poolsToIgnore:["0xbd482ffb3e6e50dc1c437557c3bea2b68f3683ee0000000000000000000003c6","0x0afbd58beca09545e4fb67772faf3858e610bcd00000000000000000000004b9","0xf22ff21e17157340575158ad7394e068048dd98b0000000000000000000004b8","0xf71d0774b214c4cf51e33eb3d30ef98132e4dbaa00000000000000000000046e"],sorConnectingTokens:[{symbol:"wEth",address:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"},{symbol:"wstEth",address:"0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0"},{symbol:"DOLA",address:"0x865377367054516e17014CcdED1e7d814EDC9ce4"},{symbol:"rEth",address:"0xae78736cd615f374d3085123a210448e74fc6393"},{symbol:"ETHx",address:"0xa35b1b31ce002fbf2058d22f30f95d405200a15b"}],sorTriPathMidPoolIds:["0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112"]},[e.Network.POLYGON]:{chainId:e.Network.POLYGON,addresses:{contracts:{multicall:"0xa1B2b503959aedD81512C37e9dce48164ec6a94d",poolDataQueries:"0x84813aA3e079A665C0B80F944427eE83cBA63617",gaugeClaimHelper:"0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33",gyroConfigProxy:"0xfdc2e9e03f515804744a40d0f8d25c16e93fbe67",...va[e.Network.POLYGON].contracts},tokens:{bal:va[e.Network.POLYGON].contracts.bal,wrappedNativeAsset:va[e.Network.POLYGON].contracts.weth,lbpRaisingTokens:["0x8f3cf7ad23cd3cadbd9735aff958023239c6a063","0x2791bca1f2de4661ed88a30c99a7a9449aa84174","0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"],...va[e.Network.POLYGON].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-polygon-prune-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-polygon",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/ianlapham/polygon-blocks"},thirdParty:{coingecko:{nativeAssetId:"",platformId:"polygon-pos"}},pools:{},poolsToIgnore:["0x600bd01b6526611079e12e1ff93aba7a3e34226f0000000000000000000009e4","0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455"],sorConnectingTokens:[{symbol:"weth",address:"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"},{symbol:"bbrz2",address:"0xe22483774bd8611be2ad2f4194078dac9159f4ba"}]},[e.Network.ARBITRUM]:{chainId:e.Network.ARBITRUM,addresses:{contracts:{multicall:"0x269ff446d9892c9e19082564df3f5e8741e190a1",poolDataQueries:"0x7Ba29fE8E83dd6097A7298075C4AFfdBda3121cC",gaugeClaimHelper:"0xa0dabebaad1b243bbb243f933013d560819eb66f",gyroConfigProxy:"0x9b683ca24b0e013512e2566b68704dbe9677413c",...va[e.Network.ARBITRUM].contracts},tokens:{bal:va[e.Network.ARBITRUM].contracts.bal,wrappedNativeAsset:va[e.Network.ARBITRUM].contracts.weth,lbpRaisingTokens:["0xda10009cbd5d07dd0cecc66161fc93d7c9000da1","0xff970a61a04b1ca14834a43f5de4533ebddb5cc8","0x82af49447d8a07e3bd95bd0d56f35241523fbab1"],...va[e.Network.ARBITRUM].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-arbitrum-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-arbitrum",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-one-blocks"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"arbitrum-one"}},pools:{},sorConnectingTokens:[{symbol:"weth",address:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"}],sorTriPathMidPoolIds:["0x178e029173417b1f9c8bc16dcec6f697bc323746000200000000000000000158","0x0052688295413b32626d226a205b95cdb337de860002000000000000000003d1","0xa1a8bf131571a2139feb79401aa4a2e9482df6270002000000000000000004b4"]},[e.Network.GOERLI]:{chainId:e.Network.GOERLI,addresses:{contracts:{multicall:"0x77dCa2C955b15e9dE4dbBCf1246B4B85b651e50e",poolDataQueries:"0x6d3197d069F8F9f1Fe7e23665Bc64CB77ED8b089",veBal:"0x33A99Dcc4C85C014cf12626959111D5898bbCAbF",veBalProxy:"0xA1F107D1cD709514AE8A914eCB757E95f9cedB31",erc4626LinearPoolFactory:"0xba240c856498e2d7a70af4911aafae0d6b565a5b",aaveLinearPoolFactory:"0x76578ecf9a141296ec657847fb45b0585bcda3a6",...va[e.Network.GOERLI].contracts},tokens:{bal:va[e.Network.GOERLI].contracts.bal,wrappedNativeAsset:va[e.Network.GOERLI].contracts.weth}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-goerli-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-goerli",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/blocklytics/goerli-blocks"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"ethereum"}},pools:{},sorConnectingTokens:[{symbol:"weth",address:"0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1"}]},[e.Network.OPTIMISM]:{chainId:e.Network.OPTIMISM,addresses:{contracts:{multicall:"0x2dc0e2aa608532da689e89e237df582b783e552c",poolDataQueries:"0x6B5dA774890Db7B7b96C6f44e6a4b0F657399E2e",gyroConfigProxy:"0x32acb44fc929339b9f16f0449525cc590d2a23f3",...va[e.Network.OPTIMISM].contracts},tokens:{bal:"0xfe8b128ba8c78aabc59d4c64cee7ff28e9379921",wrappedNativeAsset:va[e.Network.OPTIMISM].contracts.weth,lbpRaisingTokens:["0xda10009cbd5d07dd0cecc66161fc93d7c9000da1","0x7f5c764cbc14f9669b88837ca1490cca17c31607","0x4200000000000000000000000000000000000006"],...va[e.Network.OPTIMISM].tokens}},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"optimistic-ethereum"}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-optimism",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-optimism",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/lyra-finance/optimism-mainnet-blocks"},pools:{},sorConnectingTokens:[{symbol:"weth",address:"0x4200000000000000000000000000000000000006"}]},[e.Network.GNOSIS]:{chainId:e.Network.GNOSIS,addresses:{contracts:{multicall:"0xbb6fab6b627947dae0a75808250d8b2652952cb5",poolDataQueries:"0x3f170631ed9821Ca51A59D996aB095162438DC10",...va[e.Network.GNOSIS].contracts},tokens:{wrappedNativeAsset:va[e.Network.GNOSIS].contracts.weth,bal:va[e.Network.GNOSIS].contracts.bal,...va[e.Network.GNOSIS].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gnosis-chain-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-gnosis-chain"},thirdParty:{coingecko:{nativeAssetId:"xdai",platformId:"xdai"}},averageBlockTime:5,pools:{},sorConnectingTokens:[{symbol:"weth",address:"0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d"},{symbol:"wsEth",address:"0x6C76971f98945AE98dD7d4DFcA8711ebea946eA6"}],sorTriPathMidPoolIds:["0xeb30c85cc528537f5350cf5684ce6a4538e13394000200000000000000000059","0x7644fa5d0ea14fcf3e813fdf93ca9544f8567655000000000000000000000066"]},[e.Network.FANTOM]:{chainId:e.Network.FANTOM,addresses:{contracts:{vault:"0x20dd72Ed959b6147912C2e529F0a0C651c33c9ce",multicall:"0x66335d7ad8011f6aa3f48aadcb523b62b38ed961",poolDataQueries:"0xb132F1E145DcC085980C531e2dA81f2b84efc14F",gaugeClaimHelper:"0x0000000000000000000000000000000000000000",balancerRelayer:"0x419f7925b8c9e409b6ee8792242556fa210a7a09",balancerHelpers:"0xfE18C7C70b0a2c6541bEde0367124278BC345Dc8",weightedPoolFactory:"0x60467cb225092cE0c989361934311175f437Cf53",composableStablePoolFactory:"0x44814E3A603bb7F1198617995c5696C232F6e8Ed",yearnLinearPoolFactory:"0x1f73ae6ed391a2b1e84ff988a1bb5394b78a4a71"},tokens:{bal:"0xF24Bcf4d1e507740041C9cFd2DddB29585aDCe1e",wrappedNativeAsset:"0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83",lbpRaisingTokens:["0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83","0x04068DA6C83AFCFA0e13ba15A6696662335D5B75","0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E"]}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-v2-fantom",gaugesSubgraph:"",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/beethovenxfi/fantom-blocks"},thirdParty:{coingecko:{nativeAssetId:"ftm",platformId:"fantom"}},pools:{},poolsToIgnore:[],sorConnectingTokens:[{symbol:"wftm",address:"0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83"}]},[e.Network.SEPOLIA]:{chainId:e.Network.SEPOLIA,addresses:{contracts:{multicall:"0xcA11bde05977b3631167028862bE2a173976CA11",poolDataQueries:"0x9805dcfD25e6De36bad8fe9D3Fe2c9b44B764102",...va[e.Network.SEPOLIA].contracts},tokens:{bal:va[e.Network.SEPOLIA].contracts.bal,wrappedNativeAsset:va[e.Network.SEPOLIA].contracts.weth,...va[e.Network.SEPOLIA].tokens}},urls:{subgraph:"https://api.studio.thegraph.com/query/24660/balancer-sepolia-v2/version/latest"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"ethereum"}},pools:{},poolsToIgnore:[],sorConnectingTokens:[]},[e.Network.ZKEVM]:{chainId:e.Network.ZKEVM,addresses:{contracts:{balancerMinter:"0x475D18169BE8a89357A9ee3Ab00ca386d20fA229",multicall:"0xcA11bde05977b3631167028862bE2a173976CA11",poolDataQueries:"0xF24917fB88261a37Cc57F686eBC831a5c0B9fD39",...va[e.Network.ZKEVM].contracts},tokens:{bal:va[e.Network.ZKEVM].contracts.bal,wrappedNativeAsset:va[e.Network.ZKEVM].contracts.weth,...va[e.Network.ZKEVM].tokens}},urls:{subgraph:"https://api.studio.thegraph.com/query/24660/balancer-polygon-zk-v2/version/latest",gaugesSubgraph:"https://api.studio.thegraph.com/query/24660/balancer-gauges-polygon-zk/version/latest"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"polygon-zkevm"}},averageBlockTime:4,multicallBatchSize:128,pools:{},poolsToIgnore:[],sorConnectingTokens:[{symbol:"weth",address:"0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9"},{symbol:"wsEth",address:"0x5D8cfF95D7A57c0BF50B30b43c7CC0D52825D4a9"}]},[e.Network.AVALANCHE]:{chainId:e.Network.AVALANCHE,addresses:{contracts:{balancerMinter:"0xEa924b45a3fcDAAdf4E5cFB1665823B8F8F2039B",multicall:"0xcA11bde05977b3631167028862bE2a173976CA11",poolDataQueries:"0x67af5D428d38C5176a286a2371Df691cDD914Fb8",...va[e.Network.AVALANCHE].contracts},tokens:{bal:va[e.Network.AVALANCHE].contracts.bal,wrappedNativeAsset:va[e.Network.AVALANCHE].contracts.weth,...va[e.Network.AVALANCHE].tokens}},urls:{subgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-avalanche-v2",gaugesSubgraph:"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-avalanche",blockNumberSubgraph:"https://api.thegraph.com/subgraphs/name/iliaazhel/avalanche-blocks"},thirdParty:{coingecko:{nativeAssetId:"avalanche-2",platformId:"avalanche"}},pools:{},poolsToIgnore:[],sorConnectingTokens:[{symbol:"WAVAX",address:"0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7"},{symbol:"sAVAX",address:"0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be"}]},[e.Network.BASE]:{chainId:e.Network.BASE,addresses:{contracts:{balancerMinter:"0xc7E5ED1054A24Ef31D827E6F86caA58B3Bc168d7",multicall:"0xcA11bde05977b3631167028862bE2a173976CA11",poolDataQueries:"",...va[e.Network.BASE].contracts},tokens:{bal:va[e.Network.BASE].contracts.bal,wrappedNativeAsset:va[e.Network.BASE].contracts.weth,...va[e.Network.BASE].tokens}},urls:{subgraph:"https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest",gaugesSubgraph:"https://api.studio.thegraph.com/query/24660/balancer-gauges-base/version/latest",blockNumberSubgraph:"https://api.studio.thegraph.com/query/48427/bleu-base-blocks/version/latest"},thirdParty:{coingecko:{nativeAssetId:"eth",platformId:"base"}},averageBlockTime:2,pools:{},poolsToIgnore:[],sorConnectingTokens:[{symbol:"weth",address:"0x4200000000000000000000000000000000000006"}],sorTriPathMidPoolIds:["0x2db50a0e0310723ef0c2a165cb9a9f80d772ba2f00020000000000000000000d"]}},Ca=e=>Ba[e].addresses;var Oa;e.BalancerErrorCode=void 0,(Oa=e.BalancerErrorCode||(e.BalancerErrorCode={})).ABOVE_MAX_TOKENS="ABOVE_MAX_TOKENS",Oa.BELOW_MIN_TOKENS="BELOW_MIN_TOKENS",Oa.EXIT_DELTA_AMOUNTS="EXIT_DELTA_AMOUNTS",Oa.FEE_PROVIDER_NOT_PROVIDED="FEE_PROVIDER_NOT_PROVIDED",Oa.GAUGES_HELPER_ADDRESS_NOT_PROVIDED="GAUGES_HELPER_ADDRESS_NOT_PROVIDED",Oa.GAUGES_NOT_FOUND="GAUGES_NOT_FOUND",Oa.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED="GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED",Oa.GAUGES_REWARD_TOKEN_EMPTY="GAUGES_REWARD_TOKEN_EMPTY",Oa.ILLEGAL_PARAMETER="ILLEGAL_PARAMETER",Oa.INTERNAL_ERROR_INVALID_ABI="INTERNAL_ERROR_INVALID_ABI",Oa.INPUT_LENGTH_MISMATCH="INPUT_LENGTH_MISMATCH",Oa.INPUT_OUT_OF_BOUNDS="INPUT_OUT_OF_BOUNDS",Oa.INPUT_TOKEN_INVALID="INPUT_TOKEN_INVALID",Oa.INVALID_PROTOCOL_ID="INVALID_PROTOCOL_ID",Oa.INVALID_SWAP_FEE_PERCENTAGE="INVALID_SWAP_FEE_PERCENTAGE",Oa.INVALID_WEIGHTS="INVALID_WEIGHTS",Oa.JOIN_DELTA_AMOUNTS="JOIN_DELTA_AMOUNTS",Oa.JOIN_WITH_ZERO_AMOUNT="JOIN_WITH_ZERO_AMOUNT",Oa.MISSING_AMP="MISSING_AMP",Oa.MISSING_DECIMALS="MISSING_DECIMALS",Oa.MISSING_PRICE_RATE="MISSING_PRICE_RATE",Oa.MISSING_TOKENS="MISSING_TOKENS",Oa.MISSING_WEIGHT="MISSING_WEIGHT",Oa.NO_POOL_DATA="NO_POOL_DATA",Oa.NO_VALUE_PARAMETER="NO_VALUE_PARAMETER",Oa.POOL_DOESNT_EXIST="POOL_DOESNT_EXIST",Oa.QUERY_BATCH_SWAP="QUERY_BATCH_SWAP",Oa.RELAY_SWAP_AMOUNTS="RELAY_SWAP_AMOUNTS",Oa.REWARD_TOKEN_ZERO="REWARD_TOKEN_ZERO",Oa.TIMESTAMP_IN_THE_FUTURE="TIMESTAMP_IN_THE_FUTURE",Oa.TOKEN_MISMATCH="TOKEN_MISMATCH",Oa.UNSUPPORTED_PAIR="UNSUPPORTED_PAIR",Oa.UNSUPPORTED_POOL_TYPE="UNSUPPORTED_POOL_TYPE",Oa.UNSUPPORTED_POOL_TYPE_VERSION="UNSUPPORTED_POOL_TYPE_VERSION";class Ma extends Error{constructor(e){super(Ma.getMessage(e)),this.code=e,this.name="BalancerError"}static getMessage(t){switch(t){case e.BalancerErrorCode.ABOVE_MAX_TOKENS:return"the array contains more tokens than the maximum allowed";case e.BalancerErrorCode.BELOW_MIN_TOKENS:return"the array does not contain the minimum quantity of tokens";case e.BalancerErrorCode.EXIT_DELTA_AMOUNTS:return"Error when checking exit call deltas";case e.BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED:return"Fee Provider Repository has not been provided";case e.BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED:return"Liquidity Gauges Helper Contract address has not been provided";case e.BalancerErrorCode.GAUGES_NOT_FOUND:return"Liquidity Gauges not found with given addresses";case e.BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED:return"Liquidity Gauges Reward Minter Contract address has not been provided";case e.BalancerErrorCode.GAUGES_REWARD_TOKEN_EMPTY:return"No Reward Tokens for Liquidity Gauges provided";case e.BalancerErrorCode.INPUT_LENGTH_MISMATCH:return"input length mismatch";case e.BalancerErrorCode.INPUT_OUT_OF_BOUNDS:return"input out of bounds";case e.BalancerErrorCode.INPUT_TOKEN_INVALID:return"input token invalid";case e.BalancerErrorCode.INVALID_PROTOCOL_ID:return"The provided protocol id does not correspond to a protocol";case e.BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE:return"The swap fee needs to be greater than zero and less than 1e17(10%)";case e.BalancerErrorCode.INVALID_WEIGHTS:return"The sum of the weights needs to be equal to 1e18(100%)";case e.BalancerErrorCode.JOIN_DELTA_AMOUNTS:return"Error when checking join call deltas";case e.BalancerErrorCode.JOIN_WITH_ZERO_AMOUNT:return"Cant join pool with 0 amount of token in";case e.BalancerErrorCode.MISSING_AMP:return"missing amp";case e.BalancerErrorCode.MISSING_DECIMALS:return"missing decimals";case e.BalancerErrorCode.MISSING_PRICE_RATE:return"missing price rate";case e.BalancerErrorCode.MISSING_TOKENS:return"missing tokens";case e.BalancerErrorCode.MISSING_WEIGHT:return"missing weight";case e.BalancerErrorCode.NO_POOL_DATA:return"no pool data";case e.BalancerErrorCode.NO_VALUE_PARAMETER:return"Illegal value passed as parameter";case e.BalancerErrorCode.POOL_DOESNT_EXIST:return"balancer pool does not exist";case e.BalancerErrorCode.RELAY_SWAP_AMOUNTS:return"Error when checking swap amounts";case e.BalancerErrorCode.REWARD_TOKEN_ZERO:return"All Zero Values for Reward Tokens";case e.BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE:return"Timestamp cannot be in the future";case e.BalancerErrorCode.TOKEN_MISMATCH:return"token mismatch";case e.BalancerErrorCode.UNSUPPORTED_PAIR:return"unsupported token pair";case e.BalancerErrorCode.UNSUPPORTED_POOL_TYPE:return"unsupported pool type";default:return"Unknown error"}}}function Fa(e,t,a){return a?function(e,t){const a=se-ye.divDownFixed(e,t);return a<0?BigInt(0):a}(e,t):function(e,t){const a=ye.divDownFixed(e,t)-se;return a<0?BigInt(0):a}(e,t)}const Ra=BigInt(1e3);function Na(e,t,a,n){const o=t.length,i=function(e,t,a){let n=oe;const o=t.length;for(let e=0;ei){if(s-i<=1)return s}else if(i-s<=1)return s}throw new Error("Errors.STABLE_INVARIANT_DIDNT_CONVERGE")}(e,t,!0);let s=oe,r=i/BigInt(o);for(let e=0;e{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:s,pool:t,shouldUnwrapNativeAsset:o});const l=this.sortValuesExitExactBptIn({pool:t,wrappedNativeAsset:i,shouldUnwrapNativeAsset:o,singleTokenOut:s}),{minAmountsOut:d,expectedAmountsOut:p}=l.singleTokenOutIndex>=0?this.calcTokenOutGivenExactBptIn({...l,bptIn:a,slippage:n}):this.calcTokensOutGivenExactBptIn({...l,bptIn:a,slippage:n}),u=l.singleTokenOutIndex>=0?S.exitExactBPTInForOneTokenOut(a,l.singleTokenOutIndex):S.exitExactBPTInForTokensOut(a),c=this.encodeExitPool({poolTokens:l.poolTokens,poolId:t.id,exiter:e,minAmountsOut:d,userData:u,toInternalBalance:r}),y=(new La).calcPriceImpact(t,p.map(BigInt),BigInt(a),!1);return{...c,expectedAmountsOut:p,minAmountsOut:d,priceImpact:y}},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{this.checkInputsExactTokensOut(n,a,t);const r=this.sortValuesExitExactTokensOut({pool:t,wrappedNativeAsset:i,amountsOut:n,tokensOut:a}),{expectedBPTIn:l,maxBPTIn:d}=this.calcBptInGivenExactTokensOut({...r,slippage:o}),{downScaledAmountsOut:p,poolTokens:u}=r,c=S.exitBPTInForExactTokensOut(p,d);return{...this.encodeExitPool({poolId:t.id,userData:c,poolTokens:u,minAmountsOut:p,exiter:e,toInternalBalance:s}),expectedBPTIn:l,maxBPTIn:d,priceImpact:(new La).calcPriceImpact(t,p.map(BigInt),BigInt(l),!1)}},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:void 0,pool:t,shouldUnwrapNativeAsset:!1});const i=me(t),{minAmountsOut:s,expectedAmountsOut:r}=this.calcTokensOutGivenExactBptIn({...i,singleTokenOutIndex:-1,bptIn:a,slippage:n}),l=A.recoveryModeExit(a),d=this.encodeExitPool({poolTokens:i.poolTokens,poolId:t.id,exiter:e,minAmountsOut:s,userData:l,toInternalBalance:o}),p=(new La).calcPriceImpact(t,r.map(BigInt),BigInt(a),!1);return{...d,expectedAmountsOut:r,minAmountsOut:s,priceImpact:p}},this.checkInputsExactBPTIn=({bptIn:t,singleTokenOut:o,pool:i,shouldUnwrapNativeAsset:s})=>{if(!t.length||n.parseFixed(t,18).isNegative())throw new Ma(e.BalancerErrorCode.INPUT_OUT_OF_BOUNDS);if(o&&o!==a.AddressZero&&!i.tokens.map((e=>e.address)).some((e=>je(e,o))))throw new Ma(e.BalancerErrorCode.TOKEN_MISMATCH);if(!s&&o===a.AddressZero)throw new Error("shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values");if(i.tokens.some((e=>void 0===e.decimals)))throw new Ma(e.BalancerErrorCode.MISSING_DECIMALS);if(!i.amp)throw new Ma(e.BalancerErrorCode.MISSING_AMP)},this.checkInputsExactTokensOut=(t,a,n)=>{if(a.length!=t.length||a.length!=n.tokensList.length)throw new Ma(e.BalancerErrorCode.INPUT_LENGTH_MISMATCH);if(n.tokens.some((e=>void 0===e.decimals)))throw new Ma(e.BalancerErrorCode.MISSING_DECIMALS);if(!n.amp)throw new Ma(e.BalancerErrorCode.MISSING_AMP)},this.sortValuesExitExactBptIn=({pool:e,wrappedNativeAsset:t,shouldUnwrapNativeAsset:a,singleTokenOut:n})=>{const o=me(e,t,a),{poolTokens:i}=o;let s=-1;return n&&(s=i.indexOf(n)),{...o,singleTokenOutIndex:s}},this.sortValuesExitExactTokensOut=({pool:e,wrappedNativeAsset:t,amountsOut:n,tokensOut:o})=>{const i=o.some((e=>e===a.AddressZero)),s=me(e,t,i),{scalingFactors:r}=s,l=new z(t),[,d]=l.sortTokens(o,n),p=pe(d.map((e=>BigInt(e))),r.map((e=>BigInt(e))));return{...s,upScaledAmountsOut:p,downScaledAmountsOut:d}},this.calcTokenOutGivenExactBptIn=({poolTokens:e,ampWithPrecision:t,upScaledBalances:a,totalSharesEvm:o,swapFeeEvm:i,singleTokenOutIndex:s,bptIn:r,slippage:l,scalingFactors:d})=>{const p=x.StableMathBigInt._calcTokenOutGivenExactBptIn(t,a,s,BigInt(r),o,i).toString(),u=ue(BigInt(p)-BigInt(1),d[s]).toString(),c=Array(e.length).fill("0"),y=Array(e.length).fill("0");return c[s]=u,y[s]=$e(n.BigNumber.from(u),n.BigNumber.from(l)).toString(),{minAmountsOut:y,expectedAmountsOut:c}},this.calcTokensOutGivenExactBptIn=({upScaledBalances:e,totalSharesEvm:t,scalingFactors:a,bptIn:o,slippage:i})=>{const s=ce(x.StableMathBigInt._calcTokensOutGivenExactBptIn(e,BigInt(o),t),a),r=s.map((e=>e.toString()));return{minAmountsOut:s.map((e=>$e(n.BigNumber.from(e),n.BigNumber.from(i)).toString())),expectedAmountsOut:r}},this.calcBptInGivenExactTokensOut=({ampWithPrecision:e,upScaledBalances:t,upScaledAmountsOut:a,totalSharesEvm:o,swapFeeEvm:i,slippage:s})=>{const r=x.StableMathBigInt._calcBptInGivenExactTokensOut(e,t,a,o,i).toString();return{maxBPTIn:Je(n.BigNumber.from(r),n.BigNumber.from(s)).toString(),expectedBPTIn:r}},this.encodeExitPool=({poolId:e,exiter:t,poolTokens:a,minAmountsOut:n,userData:o,toInternalBalance:i})=>{const s=ka,r="exitPool",l={poolId:e,sender:t,recipient:t,exitPoolRequest:{assets:a,minAmountsOut:n,userData:o,toInternalBalance:i}};return{data:pa.createInterface().encodeFunctionData(r,[l.poolId,l.sender,l.recipient,l.exitPoolRequest]),to:s,functionName:r,attributes:l}}}}class Ua{constructor(){this.buildJoin=({joiner:e,pool:t,tokensIn:a,amountsIn:n,slippage:o,wrappedNativeAsset:i})=>{this.checkInputs(a,n,t);const s=this.sortValues({pool:t,wrappedNativeAsset:i,tokensIn:a,amountsIn:n}),{expectedBPTOut:r,minBPTOut:l}=this.calcBptOutGivenExactTokensIn({...s,slippage:o});return{...this.encodeJoinPool({joiner:e,amountsIn:n,tokensIn:a,poolId:t.id,minBPTOut:l,...s}),minBPTOut:l,expectedBPTOut:r,priceImpact:(new La).calcPriceImpact(t,s.sortedAmountsIn.map(BigInt),BigInt(r),!0)}},this.checkInputs=(t,a,n)=>{if(a.length!=t.length||a.length!=n.tokensList.length)throw new Ma(e.BalancerErrorCode.INPUT_LENGTH_MISMATCH);if(n.tokens.some((e=>void 0===e.decimals)))throw new Ma(e.BalancerErrorCode.MISSING_DECIMALS);if(!n.amp)throw new Ma(e.BalancerErrorCode.MISSING_AMP)},this.sortValues=({pool:e,wrappedNativeAsset:t,amountsIn:n,tokensIn:o})=>{const{poolTokens:i,ampWithPrecision:s,totalSharesEvm:r,swapFeeEvm:l,scalingFactors:d,upScaledBalances:p}=me(e,t,o.includes(a.AddressZero)),u=new z(t),[,c]=u.sortTokens(o,n);return{poolTokens:i,ampWithPrecision:s,totalSharesEvm:r,swapFeeEvm:l,upScaledBalances:p,upScaledAmountsIn:pe(c.map((e=>BigInt(e))),d.map((e=>BigInt(e)))),sortedAmountsIn:c}},this.calcBptOutGivenExactTokensIn=({ampWithPrecision:e,upScaledBalances:t,upScaledAmountsIn:a,totalSharesEvm:o,swapFeeEvm:i,slippage:s})=>{const r=x.StableMathBigInt._calcBptOutGivenExactTokensIn(e,t,a,o,i).toString();return{expectedBPTOut:r,minBPTOut:$e(n.BigNumber.from(r),n.BigNumber.from(s)).toString()}},this.encodeJoinPool=({poolId:e,joiner:t,poolTokens:a,sortedAmountsIn:n,amountsIn:o,tokensIn:i,minBPTOut:s})=>{const r=S.joinExactTokensInForBPTOut(n,s),l=ka,d="joinPool",p={poolId:e,sender:t,recipient:t,joinPoolRequest:{assets:a,maxAmountsIn:n,userData:r,fromInternalBalance:!1}};return{attributes:p,data:pa.createInterface().encodeFunctionData(d,[p.poolId,p.sender,p.recipient,p.joinPoolRequest]),functionName:d,to:l,value:Ve(i,o)}}}}class Va{calcTotal(e){var t,a;let o=n.BigNumber.from(0),i=n.BigNumber.from(0);for(let a=0;a{this.checkInputs(a,n,t.tokensList);const s=this.sortValuesBasedOnPoolVersion({pool:t,wrappedNativeAsset:i,amountsIn:n,tokensIn:a}),r=this.buildExactTokensInForBPTOut({...s,slippage:o,joiner:e,poolId:t.id}),l=Ve(a,n),d=(new La).calcPriceImpact(t,s.sortedAmountsIn.map(BigInt),BigInt(r.expectedBPTOut),!0);return{...r,to:ka,value:l,priceImpact:d}}}sortValuesBasedOnPoolVersion({pool:e,wrappedNativeAsset:t,amountsIn:a,tokensIn:n}){return this.sortV1(t,n,a,e)}checkInputs(t,a,n){if(t.length!=a.length||t.length!=n.length-1)throw new Ma(e.BalancerErrorCode.INPUT_LENGTH_MISMATCH)}encodeUserDataExactTokensInForBPTOut(e,t,a){const o=$e(n.BigNumber.from(e),n.BigNumber.from(t)).toString();return{userData:O.joinExactTokensInForBPTOut(a,o),minBPTOut:o}}encodeJoinPool(e,t,a,n,o,i){const s="joinPool",r={poolId:e,sender:t,recipient:a,joinPoolRequest:{assets:n,maxAmountsIn:i,userData:o,fromInternalBalance:!1}};return{functionName:s,attributes:r,data:pa.createInterface().encodeFunctionData(s,[r.poolId,r.sender,r.recipient,r.joinPoolRequest])}}sortV1(e,t,n,o){const i=new z(e),[,s]=i.sortTokens(t,n),{poolTokens:r,ampWithPrecision:l,swapFeeEvm:d,totalSharesEvm:p,bptIndex:u,scalingFactorsWithoutBpt:c,upScaledBalancesWithoutBpt:y}=me(o,e,t.includes(a.AddressZero));return{sortedAmountsIn:s,scalingFactorsWithoutBpt:c,upScaledBalancesWithoutBpt:y,ampWithPrecision:l,totalSharesEvm:p,swapFeeEvm:d,bptIndex:u,poolTokens:r}}buildExactTokensInForBPTOut(e){const{sortedAmountsIn:t,scalingFactorsWithoutBpt:a,upScaledBalancesWithoutBpt:n,ampWithPrecision:o,totalSharesEvm:i,swapFeeEvm:s,bptIndex:r,poolTokens:l,slippage:d,poolId:p,joiner:u}=e,c=this.calcBptOutGivenExactTokensIn(t,a,n,o,i,s),y=this.encodeUserDataExactTokensInForBPTOut(c,d,t),{functionName:b,data:m,attributes:f}=this.encodeJoinPool(p,u,u,l,y.userData,Xe(t,r,"0"));return{functionName:b,data:m,attributes:f,minBPTOut:y.minBPTOut,expectedBPTOut:c.toString()}}calcBptOutGivenExactTokensIn(e,t,a,n,o,i){const s=pe(e.map(BigInt),t.map(BigInt));return d.StableMathBigInt._calcBptOutGivenExactTokensIn(n,a,s,o,i)}sortV4(e,t,a){const{poolTokens:n,poolTokensWithoutBpt:o,ampWithPrecision:i,swapFeeEvm:s,totalSharesEvm:r,scalingFactorsWithoutBpt:l,upScaledBalancesWithoutBpt:d}=me(a),[p]=Ze(o,e,t);return{sortedAmountsIn:p,scalingFactorsWithoutBpt:l,upScaledBalancesWithoutBpt:d,ampWithPrecision:i,totalSharesEvm:r,swapFeeEvm:s,bptIndex:0,poolTokens:n}}}class Ka{constructor(){this.buildExitExactBPTIn=({exiter:e,pool:t,bptIn:a,slippage:n,shouldUnwrapNativeAsset:o,wrappedNativeAsset:i,singleTokenOut:s,toInternalBalance:r})=>{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:s,pool:t,shouldUnwrapNativeAsset:o});const l=this.sortValuesExitExactBptIn({pool:t,wrappedNativeAsset:i,shouldUnwrapNativeAsset:o,singleTokenOut:s}),{minAmountsOut:d,expectedAmountsOut:p}=l.singleTokenOutIndexWithoutBpt>=0?this.calcTokenOutGivenExactBptIn({...l,bptIn:a,slippage:n}):this.calcTokensOutGivenExactBptIn({...l,bptIn:a,slippage:n}),u=l.singleTokenOutIndexWithoutBpt>=0?O.exitExactBPTInForOneTokenOut(a,l.singleTokenOutIndexWithoutBpt):O.exitExactBPTInForAllTokensOut(a),c=Xe(d,l.bptIndex,"0"),y=this.encodeExitPool({poolTokens:l.poolTokens,poolId:t.id,exiter:e,userData:u,minAmountsOut:c,toInternalBalance:r}),b=(new La).calcPriceImpact(t,p.map(BigInt),BigInt(a),!1);return{...y,expectedAmountsOut:p,minAmountsOut:d,priceImpact:b}},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{this.checkInputsExactTokensOut(a,n,t);const r=this.sortValuesExitExactTokensOut({pool:t,wrappedNativeAsset:i,amountsOut:n,tokensOut:a}),{bptIn:l,maxBPTIn:d}=this.calcBptInGivenExactTokensOut({...r,slippage:o}),p=O.exitBPTInForExactTokensOut(r.downscaledAmountsOutWithoutBpt,d);return{...this.encodeExitPool({poolTokens:r.poolTokens,minAmountsOut:r.downscaledAmountsOutWithBpt,userData:p,exiter:e,poolId:t.id,toInternalBalance:s}),maxBPTIn:d,expectedBPTIn:l,priceImpact:(new La).calcPriceImpact(t,r.downscaledAmountsOutWithoutBpt.map(BigInt),BigInt(l),!1)}},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{this.checkInputsRecoveryExit({bptIn:a,pool:t}),t.tokens.forEach((e=>e.priceRate="1"));const i=me(t),{minAmountsOut:s,expectedAmountsOut:r}=this.calcTokensOutGivenExactBptIn({...i,bptIn:a,slippage:n}),l=A.recoveryModeExit(a),d=Xe(s,i.bptIndex,"0"),p=this.encodeExitPool({poolTokens:i.poolTokens,poolId:t.id,exiter:e,userData:l,minAmountsOut:d,toInternalBalance:o}),u=(new La).calcPriceImpact(t,r.map(BigInt),BigInt(a),!1);return{...p,expectedAmountsOut:r,minAmountsOut:s,priceImpact:u}},this.checkInputsExactBPTIn=({bptIn:t,singleTokenOut:o,pool:i,shouldUnwrapNativeAsset:s})=>{if(n.BigNumber.from(t).lte(0))throw new Ma(e.BalancerErrorCode.INPUT_OUT_OF_BOUNDS);if(!o&&i.poolTypeVersion<2)throw new Error("Unsupported Exit Type For Pool");if(o&&o!==a.AddressZero&&!i.tokens.map((e=>e.address)).some((e=>je(e,o))))throw new Ma(e.BalancerErrorCode.TOKEN_MISMATCH);if(!s&&o===a.AddressZero)throw new Error("shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values");if(i.tokens.some((e=>void 0===e.decimals)))throw new Ma(e.BalancerErrorCode.MISSING_DECIMALS);if(!i.amp)throw new Ma(e.BalancerErrorCode.MISSING_AMP)},this.checkInputsExactTokensOut=(t,a,n)=>{if(t.length!=a.length||t.length!=n.tokensList.length-1)throw new Ma(e.BalancerErrorCode.INPUT_LENGTH_MISMATCH)},this.checkInputsRecoveryExit=({bptIn:t,pool:a})=>{if(n.BigNumber.from(t).lte(0))throw new Ma(e.BalancerErrorCode.INPUT_OUT_OF_BOUNDS);if(!a.isInRecoveryMode)throw new Error("Exit type not supported because pool is not in Recovery Mode");if(a.tokens.some((e=>void 0===e.decimals)))throw new Ma(e.BalancerErrorCode.MISSING_DECIMALS);if(!a.amp)throw new Ma(e.BalancerErrorCode.MISSING_AMP)},this.sortValuesExitExactBptIn=({pool:e,singleTokenOut:t,wrappedNativeAsset:a,shouldUnwrapNativeAsset:n})=>{const o=me(e,a,n);let i=-1;return t&&(i=o.poolTokensWithoutBpt.indexOf(t)),{...o,singleTokenOutIndexWithoutBpt:i}},this.sortValuesExitExactTokensOut=({pool:e,wrappedNativeAsset:t,amountsOut:o,tokensOut:i})=>{const s=i.some((e=>e===a.AddressZero)),r=me(e,t,s),l=new z(t),[,d]=l.sortTokens(i,o),p=Xe(d,r.bptIndex,"0").map((e=>{const t=n.BigNumber.from(e);return t.isZero()?e:t.sub(1).toString()})),u=pe(d.map((e=>BigInt(e))),r.scalingFactorsWithoutBpt);return{...r,upScaledAmountsOutWithoutBpt:u,downscaledAmountsOutWithBpt:p,downscaledAmountsOutWithoutBpt:d}},this.calcTokenOutGivenExactBptIn=({ampWithPrecision:e,upScaledBalancesWithoutBpt:t,singleTokenOutIndexWithoutBpt:a,scalingFactorsWithoutBpt:o,totalSharesEvm:i,swapFeeEvm:s,bptIn:r,slippage:l})=>{const d=x.StableMathBigInt._calcTokenOutGivenExactBptIn(e,t,a,BigInt(r),i,s),p=Array(t.length).fill("0"),u=Array(t.length).fill("0"),c=ue(d,o[a]);return p[a]=c.toString(),u[a]=$e(n.BigNumber.from(c),n.BigNumber.from(l)).toString(),{minAmountsOut:u,expectedAmountsOut:p}},this.calcTokensOutGivenExactBptIn=({upScaledBalancesWithoutBpt:e,totalSharesEvm:t,scalingFactorsWithoutBpt:a,bptIn:o,slippage:i})=>{const s=ce(x.StableMathBigInt._calcTokensOutGivenExactBptIn(e,BigInt(o),t),a),r=s.map((e=>e.toString()));return{minAmountsOut:s.map((e=>$e(n.BigNumber.from(e),n.BigNumber.from(i)).toString())),expectedAmountsOut:r}},this.calcBptInGivenExactTokensOut=({ampWithPrecision:e,upScaledBalancesWithoutBpt:t,upScaledAmountsOutWithoutBpt:a,totalSharesEvm:o,swapFeeEvm:i,slippage:s})=>{const r=x.StableMathBigInt._calcBptInGivenExactTokensOut(e,t,a,o,i).toString();return{bptIn:r,maxBPTIn:Je(n.BigNumber.from(r),n.BigNumber.from(s)).toString()}},this.encodeExitPool=e=>{const{exiter:t,poolId:a,minAmountsOut:n,userData:o,poolTokens:i,toInternalBalance:s}=e,r="exitPool",l={poolId:a,sender:t,recipient:t,exitPoolRequest:{assets:i,minAmountsOut:n,userData:o,toInternalBalance:s}};return{to:ka,functionName:r,attributes:l,data:pa.createInterface().encodeFunctionData(r,[l.poolId,l.sender,l.recipient,l.exitPoolRequest])}}}}class $a{constructor(e=new Ka,t=new Va,a=new Wa,n=new La,o=new Ha){this.exit=e,this.liquidity=t,this.spotPriceCalculator=a,this.priceImpactCalculator=n,this.join=o}}class Ja{bptZeroPriceImpact(t,a){if(a.length!==t.tokensList.length)throw new Ma(e.BalancerErrorCode.INPUT_LENGTH_MISMATCH);const{scalingFactorsRaw:n,totalSharesEvm:o,upScaledBalances:i,weights:s}=me(t);let r=oe;for(let e=0;e{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:s,pool:t,shouldUnwrapNativeAsset:o});const l=this.sortValuesExitExactBptIn({pool:t,wrappedNativeAsset:i,shouldUnwrapNativeAsset:o,singleTokenOut:s}),{minAmountsOut:d,expectedAmountsOut:p}=l.singleTokenOutIndex>=0?this.calcTokenOutGivenExactBptIn({...l,bptIn:a,slippage:n}):this.calcTokensOutGivenExactBptIn({...l,bptIn:a,slippage:n}),u=l.singleTokenOutIndex>=0?v.exitExactBPTInForOneTokenOut(a,l.singleTokenOutIndex):v.exitExactBPTInForTokensOut(a),c=this.encodeExitPool({poolTokens:l.poolTokens,poolId:t.id,exiter:e,minAmountsOut:d,userData:u,toInternalBalance:r}),y=(new Ja).calcPriceImpact(t,p.map(BigInt),BigInt(a),!1);return{...c,expectedAmountsOut:p,minAmountsOut:d,priceImpact:y}},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{this.checkInputsExactTokensOut(n,a,t);const r=this.sortValuesExitExactTokensOut({pool:t,wrappedNativeAsset:i,amountsOut:n,tokensOut:a}),{expectedBPTIn:l,maxBPTIn:d}=this.calcBptInGivenExactTokensOut({...r,slippage:o}),{downScaledAmountsOut:p,poolTokens:u}=r,c=v.exitBPTInForExactTokensOut(p,d);return{...this.encodeExitPool({poolId:t.id,userData:c,poolTokens:u,minAmountsOut:p,exiter:e,toInternalBalance:s}),expectedBPTIn:l,maxBPTIn:d,priceImpact:(new Ja).calcPriceImpact(t,p.map(BigInt),BigInt(l),!1)}},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:void 0,pool:t,shouldUnwrapNativeAsset:!1}),t.tokens.forEach((e=>e.priceRate="1"));const i=me(t),{minAmountsOut:s,expectedAmountsOut:r}=this.calcTokensOutGivenExactBptIn({...i,bptIn:a,slippage:n,singleTokenOutIndex:-1}),l=A.recoveryModeExit(a),d=this.encodeExitPool({poolTokens:i.poolTokens,poolId:t.id,exiter:e,minAmountsOut:s,userData:l,toInternalBalance:o}),p=(new Ja).calcPriceImpact(t,r.map(BigInt),BigInt(a),!1);return{...d,expectedAmountsOut:r,minAmountsOut:s,priceImpact:p}},this.checkInputsExactBPTIn=({bptIn:t,singleTokenOut:o,pool:i,shouldUnwrapNativeAsset:s})=>{if(!t.length||n.parseFixed(t,18).isNegative())throw new Ma(e.BalancerErrorCode.INPUT_OUT_OF_BOUNDS);if(o&&o!==a.AddressZero&&!i.tokens.map((e=>e.address)).some((e=>je(e,o))))throw new Ma(e.BalancerErrorCode.TOKEN_MISMATCH);if(!s&&o===a.AddressZero)throw new Error("shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values");if(i.tokens.some((e=>void 0===e.decimals)))throw new Ma(e.BalancerErrorCode.MISSING_DECIMALS)},this.checkInputsExactTokensOut=(t,a,n)=>{if(a.length!=t.length||a.length!=n.tokensList.length)throw new Ma(e.BalancerErrorCode.INPUT_LENGTH_MISMATCH);if(n.tokens.some((e=>void 0===e.decimals)))throw new Ma(e.BalancerErrorCode.MISSING_DECIMALS)},this.sortValuesExitExactBptIn=({pool:e,wrappedNativeAsset:t,shouldUnwrapNativeAsset:a,singleTokenOut:n})=>{const o=me(e,t,a),{poolTokens:i}=o;let s=-1;return n&&(s=i.indexOf(n.toLowerCase())),{...o,singleTokenOutIndex:s}},this.sortValuesExitExactTokensOut=({pool:e,wrappedNativeAsset:t,amountsOut:n,tokensOut:o})=>{const i=o.some((e=>e===a.AddressZero)),s=me(e,t,i),{scalingFactors:r}=s,l=new z(t),[,d]=l.sortTokens(o,n),p=pe(d.map((e=>BigInt(e))),r.map((e=>BigInt(e))));return{...s,upScaledAmountsOut:p,downScaledAmountsOut:d}},this.calcTokenOutGivenExactBptIn=({poolTokens:e,weights:t,upScaledBalances:a,totalSharesEvm:o,swapFeeEvm:i,singleTokenOutIndex:s,bptIn:r,slippage:l,scalingFactors:d})=>{const p=x.WeightedMaths._calcTokenOutGivenExactBptIn(a[s],t[s],BigInt(r),o,i).toString(),u=ue(BigInt(p)-BigInt(1),d[s]).toString(),c=Array(e.length).fill("0"),y=Array(e.length).fill("0");return c[s]=u,y[s]=$e(n.BigNumber.from(u),n.BigNumber.from(l)).toString(),{minAmountsOut:y,expectedAmountsOut:c}},this.calcTokensOutGivenExactBptIn=({upScaledBalances:e,totalSharesEvm:t,scalingFactors:a,bptIn:o,slippage:i})=>{const s=ce(x.WeightedMaths._calcTokensOutGivenExactBptIn(e,BigInt(o),t).map((e=>e.toString())).map((e=>BigInt(e))),a),r=s.map((e=>e.toString()));return{minAmountsOut:s.map((e=>$e(n.BigNumber.from(e),n.BigNumber.from(i)).toString())),expectedAmountsOut:r}},this.calcBptInGivenExactTokensOut=({weights:e,upScaledBalances:t,upScaledAmountsOut:a,totalSharesEvm:o,swapFeeEvm:i,slippage:s})=>{const r=x.WeightedMaths._calcBptInGivenExactTokensOut(t,e,a,o,i).toString();return{maxBPTIn:Je(n.BigNumber.from(r),n.BigNumber.from(s)).toString(),expectedBPTIn:r}},this.encodeExitPool=({poolId:e,exiter:t,poolTokens:a,minAmountsOut:n,userData:o,toInternalBalance:i})=>{const s=ka,r="exitPool",l={poolId:e,sender:t,recipient:t,exitPoolRequest:{assets:a,minAmountsOut:n,userData:o,toInternalBalance:i}};return{data:pa.createInterface().encodeFunctionData(r,[l.poolId,l.sender,l.recipient,l.exitPoolRequest]),to:s,functionName:r,attributes:l}}}}class Xa{constructor(){this.buildJoin=({joiner:e,pool:t,tokensIn:a,amountsIn:n,slippage:o,wrappedNativeAsset:i})=>{this.checkInputs(n,a,t);const s=this.sortValues({pool:t,wrappedNativeAsset:i,tokensIn:a,amountsIn:n}),{expectedBPTOut:r,minBPTOut:l}=this.calcBptOutGivenExactTokensIn({...s,slippage:o});return{...this.encodeJoinPool({...s,poolId:t.id,joiner:e,minBPTOut:l,tokensIn:a,amountsIn:n}),minBPTOut:l,expectedBPTOut:r,priceImpact:(new Ja).calcPriceImpact(t,s.sortedAmountsIn.map(BigInt),BigInt(r),!0)}},this.checkInputs=(t,a,n)=>{if(t.length!=a.length||t.length!=n.tokensList.length)throw new Ma(e.BalancerErrorCode.INPUT_LENGTH_MISMATCH);if(n.tokens.some((e=>void 0===e.decimals)))throw new Ma(e.BalancerErrorCode.MISSING_DECIMALS);if(n.tokens.some((e=>!e.weight)))throw new Ma(e.BalancerErrorCode.MISSING_WEIGHT)},this.sortValues=({pool:e,tokensIn:t,amountsIn:n,wrappedNativeAsset:o})=>{const i=t.some((e=>e===a.AddressZero)),s=me(e,o,i),r=new z(o),[,l]=r.sortTokens(t,n),d=pe(l.map(BigInt),s.scalingFactors);return{...s,sortedAmountsIn:l,upScaledAmountsIn:d}},this.calcBptOutGivenExactTokensIn=({upScaledBalances:e,weights:t,upScaledAmountsIn:a,totalSharesEvm:o,swapFeeEvm:i,slippage:s})=>{const r=d.WeightedMaths._calcBptOutGivenExactTokensIn(e,t,a,o,i).toString();return{expectedBPTOut:r,minBPTOut:$e(n.BigNumber.from(r),n.BigNumber.from(s)).toString()}},this.encodeJoinPool=({sortedAmountsIn:e,poolTokens:t,poolId:a,joiner:n,minBPTOut:o,amountsIn:i,tokensIn:s})=>{const r="joinPool",l={poolId:a,sender:n,recipient:n,joinPoolRequest:{assets:t,maxAmountsIn:e,userData:v.joinExactTokensInForBPTOut(e,o),fromInternalBalance:!1}};return{to:ka,functionName:r,data:pa.createInterface().encodeFunctionData(r,[l.poolId,l.sender,l.recipient,l.joinPoolRequest]),attributes:l,value:Ve(s,i)}}}}class Ya{calcTotal(e){var t;let a=n.BigNumber.from(0),o=n.BigNumber.from(0);for(let n=0;ne.add(Ge(t.weight||"0",18))),n.BigNumber.from(0));if(a.gt(0)){return We(o.mul(i).div(a),36)}return"0"}}class za{calcPoolSpotPrice(e,t,a){const n=e===a.address||t===a.address;if(n){const e={address:a.address,balance:a.totalShares,decimals:18,priceRate:"1",weight:"0"};a.tokens.push(e),a.tokensList.push(a.address)}const o=d.WeightedPool.fromPool(a),i=o.parsePoolPairData(e,t),s=o._spotPriceAfterSwapExactTokenInForTokenOut(i,d.ZERO).toString();return n&&(a.tokens.pop(),a.tokensList.pop()),s}}class Za{constructor(e=new ja,t=new Xa,a=new Ya,n=new za,o=new Ja){this.exit=e,this.join=t,this.liquidity=a,this.spotPriceCalculator=n,this.priceImpactCalculator=o}}class Qa{calcTotal(e){var t,o;let i=a.Zero,s=a.Zero;for(let a=0;a{throw new Error("Exit type not supported")},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{throw new Error("Exit type not supported")},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{throw new Error("Exit type not supported")}}}class nn{constructor(){this.buildJoin=({joiner:e,pool:t,tokensIn:a,amountsIn:n,slippage:o,wrappedNativeAsset:i})=>{throw new Error("Join type not supported")}}}class on{constructor(e=new an,t=new nn,a=new Va,n=new Wa,o=new La){this.exit=e,this.join=t,this.liquidity=a,this.spotPriceCalculator=n,this.priceImpactCalculator=o}}class sn{bptZeroPriceImpact(e,t){throw new Error("Linear Pool bptZeroPriceImpact Not Implented")}calcPriceImpact(e,t,a,n){return"0"}}class rn{constructor(){this.buildExitExactBPTIn=({exiter:e,pool:t,bptIn:a,slippage:n,shouldUnwrapNativeAsset:o,wrappedNativeAsset:i,singleTokenOut:s,toInternalBalance:r})=>{throw new Error("Exit type not supported")},this.buildExitExactTokensOut=({exiter:e,pool:t,tokensOut:a,amountsOut:n,slippage:o,wrappedNativeAsset:i,toInternalBalance:s})=>{throw new Error("Exit type not supported")},this.buildRecoveryExit=({exiter:e,pool:t,bptIn:a,slippage:n,toInternalBalance:o})=>{this.checkInputsExactBPTIn({bptIn:a,singleTokenOut:void 0,pool:t,shouldUnwrapNativeAsset:!1}),t.tokens.forEach((e=>e.priceRate="1"));const i=me(t),{minAmountsOut:s,expectedAmountsOut:r}=this.calcTokensOutGivenExactBptIn({...i,bptIn:a,slippage:n}),l=A.recoveryModeExit(a),d=Xe(s,i.bptIndex,"0"),p=this.encodeExitPool({poolTokens:i.poolTokens,poolId:t.id,exiter:e,minAmountsOut:d,userData:l,toInternalBalance:o}),u=(new sn).calcPriceImpact(t,r.map(BigInt),BigInt(a),!1);return{...p,expectedAmountsOut:r,minAmountsOut:s,priceImpact:u}},this.checkInputsExactBPTIn=({bptIn:t,pool:a})=>{if(n.BigNumber.from(t).lte(0))throw new Ma(e.BalancerErrorCode.INPUT_OUT_OF_BOUNDS);if(a.tokens.some((e=>void 0===e.decimals)))throw new Ma(e.BalancerErrorCode.MISSING_DECIMALS)},this.calcTokensOutGivenExactBptIn=({bptIndex:e,upScaledBalances:t,totalSharesEvm:a,scalingFactors:o,bptIn:i,slippage:s})=>{const r=ze(ce(x.LinearMaths._calcTokensOutGivenExactBptIn(t,BigInt(i),a,e),o),e).map((e=>e.toString()));return{minAmountsOut:r.map((e=>$e(n.BigNumber.from(e),n.BigNumber.from(s)).toString())),expectedAmountsOut:r}},this.encodeExitPool=e=>{const{exiter:t,poolId:a,minAmountsOut:n,userData:o,poolTokens:i,toInternalBalance:s}=e,r="exitPool",l={poolId:a,sender:t,recipient:t,exitPoolRequest:{assets:i,minAmountsOut:n,userData:o,toInternalBalance:s}};return{to:ka,functionName:r,attributes:l,data:pa.createInterface().encodeFunctionData(r,[l.poolId,l.sender,l.recipient,l.exitPoolRequest])}}}}class ln{constructor(){this.buildJoin=({joiner:e,pool:t,tokensIn:a,amountsIn:n,slippage:o,wrappedNativeAsset:i})=>{throw new Error("Join type not supported")}}}const dn=18,pn=Ge("1",dn);class un{calcTotal(e){var t,n;let o=a.Zero,i=a.Zero;for(let a=0;aBigInt(0)){const t=ye.divDownFixed(i,o);for(let n=0;nBigInt(0)){const t=ye.divDownFixed(i,o);for(let n=0;nt.address!==e.address)),a=await Promise.all(t.map((async e=>{const t=await this.pools.findBy("address",e.address);if(!t)return;const a=Ge(await this.getLiquidity(t),18),n=Ge(t.totalShares,18),o=Ge(e.balance,18),i=n.eq(0)?0:a.mul(o).div(n);return{address:t.address,liquidity:i.toString()}}))),o=a.reduce(((e,t)=>e.add(t?t.liquidity:n.BigNumber.from(0))),n.BigNumber.from(0)),i=t.filter((e=>!a.find((t=>(null==t?void 0:t.address)===e.address)))),s=await Promise.all(i.map((async e=>{var t;const a=await this.tokenPrices.find(e.address);return{address:e.address,decimals:e.decimals,priceRate:e.priceRate,price:(null==a?void 0:a.usd)&&a||{usd:null===(t=e.token)||void 0===t?void 0:t.latestUSDPrice},balance:e.balance,weight:e.weight}}))),r=Ge(An.from(e.poolType).liquidity.calcTotal(s),18);return We(o.add(r),18)}async getBptPrice(e){const t=await this.getLiquidity(e);return(parseFloat(t)/parseFloat(e.totalShares)).toString()}}const vn=n.BigNumber.from("0"),kn=e=>e?Object.keys(e).filter((t=>e[t].gt(vn))).reduce(((t,a)=>(t[a]=e[a],t)),{}):{},Bn=(e,t,a)=>e.map((e=>((e,t,a)=>{if(!t[e.address]&&!a[e.address])return e;const n=kn(t[e.address]),o=kn(a[e.address]);return e.claimableTokens||(e.claimableTokens={...n,...o}),e})(e,t,a))).filter((e=>e.claimableTokens&&Object.keys(e.claimableTokens).length)),Cn=(e,t)=>{var a;if(t.rewardTokens)for(const n of Object.keys(t.rewardTokens))e[a=t.id]||(e[a]=[]),e[t.id].push(n);return e},On=new t.Interface(["function claim_rewards(address sender, address receiver) returns (uint256)","function claimable_tokens(address addr) view returns (uint256)","function claimable_reward(address addr, address token) view returns (uint256)"]),Mn=new t.Interface(["function mintMany(address[] gauges) returns (uint256)"]),Fn=new t.Interface(["function getPendingRewards(address gauge, address user, address token) view returns (uint256)","function claimRewardsFromGauges(address[] gauges, address user)"]);class Rn{constructor(e,t,a,n,o,i){this.multicall=n,this.liquidityGauges=e,this.feeDistributor=t,this.chainId=a,this.gaugeClaimHelperAddress=o,this.balancerMinterAddress=i}async getClaimableRewardTokens(t){const a=await this.getGauges();if(!a.length)throw new Ma(e.BalancerErrorCode.GAUGES_NOT_FOUND);const n=a.map((e=>e.address)),o=this.getRewardTokens(a),i=await this.retrieveClaimableTokens(n,t),s=await this.retrieveClaimableRewards(o,t);return Bn(a,s,i)}async buildClaimRewardTokensRequest(t,a){if(1===this.chainId||5===this.chainId){if(!this.balancerMinterAddress)throw new Ma(e.BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED)}else if(!this.gaugeClaimHelperAddress)throw new Ma(e.BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED);const o=(await this.getClaimableRewardTokens(a)).filter((e=>t.map((e=>e.toLowerCase())).includes(e.address.toLowerCase()))).filter((e=>e.claimableTokens&&Object.keys(e.claimableTokens).length)),i=Array.from(new Set(o.map((e=>e.claimableTokens)).map((e=>Object.keys(e||{}))).flatMap((e=>e))));if(!i.length)throw new Ma(e.BalancerErrorCode.GAUGES_REWARD_TOKEN_EMPTY);const s=i.map((e=>o.reduce(((t,a)=>(a.claimableTokens&&a.claimableTokens[e]&&a.claimableTokens[e]!==vn&&(t=a.claimableTokens[e].add(t)),t)),n.BigNumber.from(0))));if(!s.length||s.every((e=>e.eq(vn))))throw new Ma(e.BalancerErrorCode.REWARD_TOKEN_ZERO);if(1===this.chainId||5===this.chainId){if(!this.balancerMinterAddress)throw new Ma(e.BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED);const n=Mn.encodeFunctionData("mintMany",[t]);return{to:this.balancerMinterAddress,from:a,callData:n,tokensOut:i,expectedTokensValue:s,functionName:"mintMany"}}{if(!this.gaugeClaimHelperAddress)throw new Ma(e.BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED);const n=Fn.encodeFunctionData("claimRewardsFromGauges",[t,a]);return{to:this.gaugeClaimHelperAddress,from:a,callData:n,tokensOut:i,expectedTokensValue:s,functionName:"claimRewardsFromGauges"}}}async getClaimableVeBalTokens(t,a){var n;if(!this.feeDistributor)throw new Ma(e.BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED);return null===(n=this.feeDistributor)||void 0===n?void 0:n.getClaimableBalances(t,a)}async buildClaimVeBalTokensRequest(t,a){if(!this.feeDistributor)throw new Ma(e.BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED);const n=await this.feeDistributor.getClaimableBalances(t,a),o=a.map((e=>{var t;return null!==(t=n[e])&&void 0!==t?t:vn}));if(o.every((e=>e.eq(vn))))throw new Ma(e.BalancerErrorCode.REWARD_TOKEN_ZERO);const i=this.feeDistributor.claimBalances(t,a);return{to:this.feeDistributor.feeDistributor.address,from:t,callData:i,tokensOut:a,expectedTokensValue:o,functionName:"claimTokens"}}async getGauges(){return await this.liquidityGauges.fetch()}getRewardTokens(e){return e.reduce(Cn,{})}async retrieveClaimableRewards(e,t){const a=Object.keys(e),{payload:o,paths:i}=this.getPayload(a,e,t),[,s]=await this.multicall.callStatic.aggregate(o),r=s.map((e=>"0x"==e?"0x0":e));return i.reduce((e=>(t,a,o)=>{var i;const s=n.BigNumber.from(`${e[o]}`);return s.gt(vn)&&(t[i=a.gauge]||(t[i]={}),t[a.gauge][a.token]=s),t})(r),{})}getPayload(e,t,a){const n=[],o=[];for(const i of e)for(const e of t[i])o.push({gauge:i,token:e}),n.push(this.getArguments(a,i,e));return{payload:n,paths:o}}getArguments(t,a,n){if(1===this.chainId||5===this.chainId)return{target:a,callData:On.encodeFunctionData("claimable_reward",[t,n])};if(!this.gaugeClaimHelperAddress)throw new Ma(e.BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED);return{target:this.gaugeClaimHelperAddress,callData:Fn.encodeFunctionData("getPendingRewards",[a,t,n])}}async retrieveClaimableTokens(t,a){if(this.chainId===e.Network.MAINNET||this.chainId===e.Network.GOERLI){const e=Ba[this.chainId].addresses.tokens.bal,o=t.map((e=>({target:e,callData:On.encodeFunctionData("claimable_tokens",[a])}))),[,i]=await this.multicall.callStatic.aggregate(o),s=i.map((e=>"0x"==e?"0x0":e));return t.reduce(((e,t)=>(a,o,i)=>{const s=n.BigNumber.from(`${e[i]}`);return s.gt(vn)&&(a[o]||(a[o]={}),a[o][t]=s),a})(s,e),{})}return{}}}async function Nn(e,t,n,o){const i={sender:a.AddressZero,recipient:a.AddressZero,fromInternalBalance:!1,toInternalBalance:!1};try{return(await e.callStatic.queryBatchSwap(t,n,o,i)).map((e=>e.toString()))}catch(e){throw`queryBatchSwap call error: ${e}`}}var Ln=function(){return Ln=Object.assign||function(e){for(var t,a=1,n=arguments.length;ae();function Zo(e,t=zo){return{PoolShare:(a,n)=>t((t=>e.request(Lo,a,{...n,...t})),"PoolShare","query"),PoolShares:(a,n)=>t((t=>e.request(Do,a,{...n,...t})),"PoolShares","query"),Pools:(a,n)=>t((t=>e.request(Uo,a,{...n,...t})),"Pools","query"),AllPools:(a,n)=>t((t=>e.request(Vo,a,{...n,...t})),"AllPools","query"),Pool:(a,n)=>t((t=>e.request(qo,a,{...n,...t})),"Pool","query"),PoolHistoricalLiquidities:(a,n)=>t((t=>e.request(Go,a,{...n,...t})),"PoolHistoricalLiquidities","query"),PoolSnapshots:(a,n)=>t((t=>e.request(Wo,a,{...n,...t})),"PoolSnapshots","query"),JoinExits:(a,n)=>t((t=>e.request(Ho,a,{...n,...t})),"JoinExits","query"),Balancers:(a,n)=>t((t=>e.request(Ko,a,{...n,...t})),"Balancers","query"),TokenPrices:(a,n)=>t((t=>e.request($o,a,{...n,...t})),"TokenPrices","query"),TokenLatestPrices:(a,n)=>t((t=>e.request(Jo,a,{...n,...t})),"TokenLatestPrices","query"),TokenLatestPrice:(a,n)=>t((t=>e.request(jo,a,{...n,...t})),"TokenLatestPrice","query"),User:(a,n)=>t((t=>e.request(Xo,a,{...n,...t})),"User","query"),Users:(a,n)=>t((t=>e.request(Yo,a,{...n,...t})),"Users","query")}}var Qo,ei,ti,ai,ni,oi,ii,si,ri,li,di,pi,ui,ci,yi,bi,mi,fi;!function(e){e.Arbitrum="Arbitrum",e.Avalanche="Avalanche",e.Base="Base",e.Gnosis="Gnosis",e.Optimism="Optimism",e.Polygon="Polygon",e.PolygonZkEvm="PolygonZkEvm"}(Qo||(Qo={})),function(e){e.gauges="gauges",e.id="id",e.numGauges="numGauges"}(ei||(ei={})),function(e){e.balance="balance",e.gauge="gauge",e.gauge__id="gauge__id",e.gauge__isKilled="gauge__isKilled",e.gauge__isPreferentialGauge="gauge__isPreferentialGauge",e.gauge__poolAddress="gauge__poolAddress",e.gauge__poolId="gauge__poolId",e.gauge__relativeWeightCap="gauge__relativeWeightCap",e.gauge__streamer="gauge__streamer",e.gauge__symbol="gauge__symbol",e.gauge__totalSupply="gauge__totalSupply",e.id="id",e.user="user",e.user__id="user__id"}(ti||(ti={})),function(e){e.id="id",e.name="name"}(ai||(ai={})),function(e){e.gauge="gauge",e.gauge__addedTimestamp="gauge__addedTimestamp",e.gauge__address="gauge__address",e.gauge__id="gauge__id",e.id="id",e.timestamp="timestamp",e.user="user",e.user__id="user__id",e.weight="weight"}(ni||(ni={})),function(e){e.addedTimestamp="addedTimestamp",e.address="address",e.id="id",e.liquidityGauge="liquidityGauge",e.liquidityGauge__id="liquidityGauge__id",e.liquidityGauge__isKilled="liquidityGauge__isKilled",e.liquidityGauge__isPreferentialGauge="liquidityGauge__isPreferentialGauge",e.liquidityGauge__poolAddress="liquidityGauge__poolAddress",e.liquidityGauge__poolId="liquidityGauge__poolId",e.liquidityGauge__relativeWeightCap="liquidityGauge__relativeWeightCap",e.liquidityGauge__streamer="liquidityGauge__streamer",e.liquidityGauge__symbol="liquidityGauge__symbol",e.liquidityGauge__totalSupply="liquidityGauge__totalSupply",e.rootGauge="rootGauge",e.rootGauge__chain="rootGauge__chain",e.rootGauge__id="rootGauge__id",e.rootGauge__isKilled="rootGauge__isKilled",e.rootGauge__recipient="rootGauge__recipient",e.rootGauge__relativeWeightCap="rootGauge__relativeWeightCap",e.type="type",e.type__id="type__id",e.type__name="type__name"}(oi||(oi={})),function(e){e.factory="factory",e.factory__id="factory__id",e.factory__numGauges="factory__numGauges",e.gauge="gauge",e.gauge__addedTimestamp="gauge__addedTimestamp",e.gauge__address="gauge__address",e.gauge__id="gauge__id",e.id="id",e.isKilled="isKilled",e.isPreferentialGauge="isPreferentialGauge",e.pool="pool",e.poolAddress="poolAddress",e.poolId="poolId",e.pool__address="pool__address",e.pool__id="pool__id",e.pool__poolId="pool__poolId",e.relativeWeightCap="relativeWeightCap",e.rewardTokensList="rewardTokensList",e.shares="shares",e.streamer="streamer",e.symbol="symbol",e.tokens="tokens",e.totalSupply="totalSupply"}(ii||(ii={})),function(e){e.bias="bias",e.id="id",e.slope="slope",e.timestamp="timestamp",e.user="user",e.user__id="user__id"}(si||(si={})),function(e){e.bias="bias",e.dstChainId="dstChainId",e.id="id",e.localUser="localUser",e.localUser__id="localUser__id",e.remoteUser="remoteUser",e.slope="slope",e.timestamp="timestamp",e.votingEscrowID="votingEscrowID",e.votingEscrowID__id="votingEscrowID__id",e.votingEscrowID__stakedSupply="votingEscrowID__stakedSupply"}(ri||(ri={})),function(e){e.asc="asc",e.desc="desc"}(li||(li={})),function(e){e.address="address",e.gauges="gauges",e.gaugesList="gaugesList",e.id="id",e.poolId="poolId",e.preferentialGauge="preferentialGauge",e.preferentialGauge__id="preferentialGauge__id",e.preferentialGauge__isKilled="preferentialGauge__isKilled",e.preferentialGauge__isPreferentialGauge="preferentialGauge__isPreferentialGauge",e.preferentialGauge__poolAddress="preferentialGauge__poolAddress",e.preferentialGauge__poolId="preferentialGauge__poolId",e.preferentialGauge__relativeWeightCap="preferentialGauge__relativeWeightCap",e.preferentialGauge__streamer="preferentialGauge__streamer",e.preferentialGauge__symbol="preferentialGauge__symbol",e.preferentialGauge__totalSupply="preferentialGauge__totalSupply"}(di||(di={})),function(e){e.decimals="decimals",e.gauge="gauge",e.gauge__id="gauge__id",e.gauge__isKilled="gauge__isKilled",e.gauge__isPreferentialGauge="gauge__isPreferentialGauge",e.gauge__poolAddress="gauge__poolAddress",e.gauge__poolId="gauge__poolId",e.gauge__relativeWeightCap="gauge__relativeWeightCap",e.gauge__streamer="gauge__streamer",e.gauge__symbol="gauge__symbol",e.gauge__totalSupply="gauge__totalSupply",e.id="id",e.periodFinish="periodFinish",e.rate="rate",e.symbol="symbol",e.totalDeposited="totalDeposited"}(pi||(pi={})),function(e){e.chain="chain",e.factory="factory",e.factory__id="factory__id",e.factory__numGauges="factory__numGauges",e.gauge="gauge",e.gauge__addedTimestamp="gauge__addedTimestamp",e.gauge__address="gauge__address",e.gauge__id="gauge__id",e.id="id",e.isKilled="isKilled",e.recipient="recipient",e.relativeWeightCap="relativeWeightCap"}(ui||(ui={})),function(e){e.factory="factory",e.factory__id="factory__id",e.factory__numGauges="factory__numGauges",e.gauge="gauge",e.gauge__addedTimestamp="gauge__addedTimestamp",e.gauge__address="gauge__address",e.gauge__id="gauge__id",e.id="id",e.isKilled="isKilled",e.recipient="recipient",e.relativeWeightCap="relativeWeightCap"}(ci||(ci={})),function(e){e.gaugeShares="gaugeShares",e.gaugeVotes="gaugeVotes",e.id="id",e.omniVotingLocks="omniVotingLocks",e.votingLocks="votingLocks"}(yi||(yi={})),function(e){e.bias="bias",e.id="id",e.lockedBalance="lockedBalance",e.slope="slope",e.timestamp="timestamp",e.unlockTime="unlockTime",e.updatedAt="updatedAt",e.user="user",e.user__id="user__id",e.votingEscrowID="votingEscrowID",e.votingEscrowID__id="votingEscrowID__id",e.votingEscrowID__stakedSupply="votingEscrowID__stakedSupply"}(bi||(bi={})),function(e){e.id="id",e.locks="locks",e.omniLocks="omniLocks",e.stakedSupply="stakedSupply"}(mi||(mi={})),function(e){e.allow="allow",e.deny="deny"}(fi||(fi={}));const Ti=vo` + fragment SubgraphGaugeShare on GaugeShare { + id + balance + user { + id + } + gauge { + id + isKilled + poolId + poolAddress + totalSupply + } +} + `,hi=vo` + fragment SubgraphLiquidityGauge on LiquidityGauge { + id + symbol + poolAddress + poolId + streamer + factory { + id + numGauges + } + totalSupply + tokens { + id + symbol + decimals + totalDeposited + rate + periodFinish + } +} + `,Ii=vo` + fragment SubgraphPoolWithPreferentialGauge on Pool { + id + poolId + preferentialGauge { + ...SubgraphLiquidityGauge + } +} + ${hi}`,gi=vo` + query GaugeShare($id: ID!, $block: Block_height) { + gaugeShare(id: $id, block: $block) { + ...SubgraphGaugeShare + } +} + ${Ti}`,_i=vo` + query GaugeShares($first: Int, $orderBy: GaugeShare_orderBy, $orderDirection: OrderDirection, $skip: Int, $where: GaugeShare_filter, $block: Block_height) { + gaugeShares( + first: $first + orderBy: $orderBy + orderDirection: $orderDirection + skip: $skip + where: $where + block: $block + ) { + ...SubgraphGaugeShare + } +} + ${Ti}`,Pi=vo` + query LiquidityGauges($skip: Int, $first: Int, $orderBy: LiquidityGauge_orderBy, $orderDirection: OrderDirection, $where: LiquidityGauge_filter, $block: Block_height) { + liquidityGauges( + skip: $skip + first: $first + orderBy: $orderBy + orderDirection: $orderDirection + where: $where + block: $block + ) { + ...SubgraphLiquidityGauge + } +} + ${hi}`,wi=vo` + query Pools($skip: Int, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $where: Pool_filter, $block: Block_height) { + pools( + skip: $skip + first: $first + orderBy: $orderBy + orderDirection: $orderDirection + where: $where + block: $block + ) { + ...SubgraphPoolWithPreferentialGauge + } +} + ${Ii}`,xi=vo` + query PoolGauges($where: Pool_filter, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $skip: Int, $block: Block_height) { + pools( + where: $where + first: $first + orderBy: $orderBy + orderDirection: $orderDirection + skip: $skip + block: $block + ) { + gauges { + id + relativeWeightCap + } + preferentialGauge { + id + } + } +} + `,Ei=(e,t,a)=>e();function Ai(e){return Zo(new u.GraphQLClient(e))}function Si(e){return function(e,t=Ei){return{GaugeShare:(a,n)=>t((t=>e.request(gi,a,{...n,...t})),"GaugeShare","query"),GaugeShares:(a,n)=>t((t=>e.request(_i,a,{...n,...t})),"GaugeShares","query"),LiquidityGauges:(a,n)=>t((t=>e.request(Pi,a,{...n,...t})),"LiquidityGauges","query"),Pools:(a,n)=>t((t=>e.request(wi,a,{...n,...t})),"Pools","query"),PoolGauges:(a,n)=>t((t=>e.request(xi,a,{...n,...t})),"PoolGauges","query")}}(new u.GraphQLClient(e))}class vi{constructor(e,a,n={}){this.options=n,this.calls=[],this.paths=[],this.address="0xcA11bde05977b3631167028862bE2a173976CA11",this.interface=new t.Interface(e),this.multicall=oa.connect(this.address,a)}call(e,t,a,n){return this.calls.push([t,a,n]),this.paths.push(e),this}async execute(e={},t=1024){const a=e;return(await this.executeMulticall(t)).forEach(((e,t)=>r.set(a,this.paths[t],e.length>1?e:e[0]))),this.calls=[],this.paths=[],a}async executeMulticall(e){const t=Math.ceil(this.calls.length/e),a=[],n=[];for(let a=0;a({target:e,allowFailure:!0,callData:this.interface.encodeFunctionData(t,a)})));n.push(this.multicall.callStatic.aggregate3(t,this.options))}return(await Promise.all(n)).forEach(((t,n)=>{const o=n*e;for(let e=0;e{a.call(`${e}.weights`,t,"getNormalizedWeights")},Ci=(e,t,a)=>{a.call(`${e}.targets`,t,"getTargets"),a.call(`${e}.wrappedTokenRate`,t,"getWrappedTokenRate")},Oi=(e,t,a)=>{a.call(`${e}.amp`,t,"getAmplificationParameter")},Mi=(e,t,a)=>{a.call(`${e}.tokenRates`,t,"getTokenRates")},Fi=async(e,t,a,n=1024)=>{if(0===e.length)return{};const o=new vi(ki,a);e.forEach((({id:e,address:a,poolType:n,poolTypeVersion:i})=>{((e,t,a,n,o)=>{o.call(`${e}.poolTokens`,a,"getPoolTokens",[e]),o.call(`${e}.totalShares`,t,(e=>e.includes("Linear")||["StablePhantom"].includes(e)?"getVirtualSupply":"ComposableStable"===e?"getActualSupply":"totalSupply")(n)),o.call(`${e}.swapFee`,t,(e=>"Element"===e?"percentFee":"FX"===e?"protocolPercentFee":"getSwapFeePercentage")(n))})(e,a,t,n,o),((e,t=1)=>{const a=()=>({});switch(e){case"Weighted":case"LiquidityBootstrapping":case"Investment":return Bi;case"Stable":case"StablePhantom":case"MetaStable":case"ComposableStable":return Oi;case"GyroE":case"Gyro2":return 2===t?Mi:a;case"AaveLinear":return 1===t?Ci:a;default:return a}})(n,i)(e,a,o)}));return await o.execute({},n)};async function Ri(e,t,a,o,i=1024){if(0===e.length)return e;const s=[],r=await Fi(e,a,o,i);return e.forEach((e=>{const t=r[e.id];s.push(((e,t)=>({...e,tokens:t.poolTokens?e.tokens.map((a=>{const o=t.poolTokens[0].map((e=>e.toLowerCase())).indexOf(a.address),i=e.wrappedIndex&&e.tokensList[e.wrappedIndex],s=void 0===a.decimals?18:a.decimals;return{...a,balance:n.formatFixed(t.poolTokens[1][o],s),weight:t.weights&&n.formatFixed(t.weights[o],18)||a.weight,priceRate:t.wrappedTokenRate&&i&&i.toLowerCase()===a.address.toLowerCase()&&n.formatFixed(t.wrappedTokenRate,18)||a.priceRate}})):e.tokens,totalShares:t.totalShares?n.formatFixed(t.totalShares,18):e.totalShares,swapFee:t.swapFee?n.formatFixed(t.swapFee,18):e.swapFee,amp:t.amp&&t.amp[0]&&n.formatFixed(t.amp[0],String(t.amp[2]).length-1)||e.amp,lowerTarget:t.targets&&n.formatFixed(t.targets[0],18)||e.lowerTarget,upperTarget:t.targets&&n.formatFixed(t.targets[1],18)||e.upperTarget,tokenRates:t.tokenRates&&t.tokenRates.map((e=>n.formatFixed(e,18)))||e.tokenRates}))(e,t))})),s}class Ni{constructor(e,t,a,n,o){this.client=e,this.provider=t,this.network=a,this.sorConfig=n,this.defaultArgs=(null==o?void 0:o.args)||{orderBy:mo.TotalLiquidity,orderDirection:lo.Desc,where:{swapEnabled:{eq:!0},totalShares:{gt:1e-12}}}}async getPools(e){const t=function(e){return e.map((e=>({...e,poolType:e.poolType||"",tokens:(e.tokens||[]).map((e=>({...e,weight:e.weight||null}))),totalWeight:e.totalWeight||void 0,amp:e.amp||void 0,expiryTime:e.expiryTime?r.parseInt(e.expiryTime):void 0,unitSeconds:e.unitSeconds?r.parseInt(e.unitSeconds):void 0,principalToken:e.principalToken||void 0,baseToken:e.baseToken||void 0})))}((await this.getSubgraphPools(e)).filter((e=>{if(!this.network.poolsToIgnore)return!0;return-1===this.network.poolsToIgnore.findIndex((t=>t.toLowerCase()===e.id.toLowerCase()))})));if(this.sorConfig&&!1===this.sorConfig.fetchOnChainBalances)return t;const a=X.getInstance();a.time(`fetching on-chain balances for ${t.length} pools`);const n=await Ri(t,this.network.addresses.contracts.multicall,this.network.addresses.contracts.vault,this.provider,this.network.multicallBatchSize);return a.timeEnd(`fetching on-chain balances for ${t.length} pools`),n}async getSubgraphPools(e){const t=new ot(e||this.defaultArgs).format(new nt);if(t.first){const{pools:e}=await this.client.Pools(t);return e}const{pool0:a,pool1000:n,pool2000:o}=await this.client.AllPools(t);return[...a,...n,...o]}}class Li{constructor(e,t){this.client=e,this.weth=t.toLowerCase()}async getNativeAssetPriceInToken(e){const t=await this.getLatestPriceInEthFromSubgraph(e);if(!t)throw Error("No price found in the subgraph");return""+1/t}async getLatestPriceInEthFromSubgraph(e){e=e.toLowerCase();const{latestPrices:t}=await this.client.TokenLatestPrices({where:{asset_in:[e,this.weth]}}),a=r.keyBy(t,"id");if(a[`${e}-${this.weth}`])return parseFloat(a[`${e}-${this.weth}`].price);const n=t.filter((t=>t.asset===e));for(const e of n){const t=a[`${e.pricingAsset}-${this.weth}`];if(t)return parseFloat(e.price)*parseFloat(t.price)}return null}}function Di(e){var t,a;if("number"==typeof e.network){const a=Ba[e.network];return{...a,urls:{...a.urls,subgraph:null!==(t=e.customSubgraphUrl)&&void 0!==t?t:a.urls.subgraph},tenderly:e.tenderly}}return{...e.network,urls:{...e.network.urls,subgraph:null!==(a=e.customSubgraphUrl)&&void 0!==a?a:e.network.urls.subgraph},tenderly:e.network.tenderly}}const Ui=["0x00c2a4be503869fa751c2dbcb7156cc970b5a8da000000000000000000000477","0x02d928e68d8f10c0358566152677db51e1e2dc8c00000000000000000000051e","0x04248aabca09e9a1a3d5129a7ba05b7f17de768400000000000000000000050e","0x05513ca725b6ce035ca2641075474eb469f05f4c00020000000000000000041f","0x0a0fb4ff697de5ac5b6770cd8ee1b72af80b57cf000000000000000000000496","0x0afbd58beca09545e4fb67772faf3858e610bcd00000000000000000000004b9","0x0d05aac44ac7dd3c7ba5d50be93eb884a057d23400000000000000000000051c","0x11839d635e2f0270da37e8ef4324d4d5d54329570002000000000000000004d8","0x126e7643235ec0ab9c103c507642dc3f4ca23c66000000000000000000000468","0x133d241f225750d2c92948e464a5a80111920331000000000000000000000476","0x159cb00338fb63f263fd6f621df619cef71da9540000000000000000000004d5","0x173063a30e095313eee39411f07e95a8a806014e0002000000000000000003ab","0x1bd2f176a812e312077bca87e37c08432bb09f3e0000000000000000000005a1","0x20b156776114e8a801e9767d90c6ccccc8adf398000000000000000000000499","0x246ffb4d928e394a02e45761fecdba6c2e79b8eb000000000000000000000541","0x25accb7943fd73dda5e23ba6329085a3c24bfb6a000200000000000000000387","0x26c2b83fc8535deead276f5cc3ad9c1a2192e02700020000000000000000056b","0x2b218683178d029bab6c9789b1073aa6c96e517600000000000000000000058c","0x2ba7aa2213fa2c909cd9e46fed5a0059542b36b00000000000000000000003a3","0x2bbf681cc4eb09218bee85ea2a5d3d13fa40fc0c0000000000000000000000fd","0x2e52c64fd319e380cdbcfc4577ea1fda558a32e40002000000000000000005ba","0x2f4eb100552ef93840d5adc30560e5513dfffacb000000000000000000000334","0x2ff1a9dbdacd55297452cfd8a4d94724bc22a5f7000000000000000000000484","0x3035917be42af437cbdd774be26b9ec90a2bd677000200000000000000000543","0x331d50e0b00fc1c32742f151e56b9b616227e23e00000000000000000000047c","0x334c96d792e4b26b841d28f53235281cec1be1f200020000000000000000038a","0x335d1709d4da9aca59d16328db5cd4ea66bfe06b0000000000000000000004d6","0x395d8a1d9ad82b5abe558f8abbfe183b27138af40000000000000000000004e5","0x3bb22fc9033b802f2ac47c18885f63476f158afc000000000000000000000483","0x3c640f0d3036ad85afa2d5a9e32be651657b874f00000000000000000000046b","0x3cdae4f12a67ba563499e102f309c73213cb241c000000000000000000000335","0x3dbb8d974b82e82ce79c20c0f5995f4f1f533ede000000000000000000000470","0x3f7a7fd7f214be45ec26820fd01ac3be4fc75aa70002000000000000000004c5","0x3fcb7085b8f2f473f80bf6d879cae99ea4de934400000000000000000000056d","0x41503c9d499ddbd1dcdf818a1b05e9774203bf46000000000000000000000594","0x4228290ee9cab692938ff0b4ba303fbcdb68e9f200020000000000000000057d","0x454ed96955d04d2f5cdd05e0fd1c77975bfe5307000000000000000000000410","0x481c5fc05d63a58aa2f0f2aa417c021b5d419cb200000000000000000000056a","0x483006684f422a9448023b2382615c57c5ecf18f000000000000000000000488","0x4a82b580365cff9b146281ab72500957a849abdc000000000000000000000494","0x4c81255cc9ed7062180ea99962fe05ac0d57350b0000000000000000000005a3","0x4c8d2e60863e8d7e1033eda2b3d84e92a641802000000000000000000000040f","0x4cbde5c4b4b53ebe4af4adb85404725985406163000000000000000000000595","0x4ce0bd7debf13434d3ae127430e9bd4291bfb61f00020000000000000000038b","0x4ce277df0feb5b4d07a0ca2adcf5326e4005239d000000000000000000000518","0x4fd4687ec38220f805b6363c3c1e52d0df3b5023000200000000000000000473","0x4fd63966879300cafafbb35d157dc5229278ed230000000000000000000000e9","0x50cf90b954958480b8df7958a9e965752f62712400000000000000000000046f","0x53bc3cba3832ebecbfa002c12023f8ab1aa3a3a0000000000000000000000411","0x5a6a8cffb4347ff7fc484bf5f0f8a2e234d34255000200000000000000000275","0x5b3240b6be3e7487d61cd1afdfc7fe4fa1d81e6400000000000000000000037b","0x60683b05e9a39e3509d8fdb9c959f23170f8a0fa000000000000000000000489","0x60d604890feaa0b5460b28a424407c24fe89374a0000000000000000000004fc","0x639883476960a23b38579acfd7d71561a0f408cf000200000000000000000505","0x652d486b80c461c397b0d95612a404da936f3db30000000000000000000000e7","0x6667c6fa9f2b3fc1cc8d85320b62703d938e43850000000000000000000004fb","0x6a1eb2e9b45e772f55bd9a34659a04b6f75da68700000000000000000000040d","0x6c56e72c551b5ac4bf54a620a76077ca768c8fe40002000000000000000004da","0x70b7d3b3209a59fb0400e17f67f3ee8c37363f4900020000000000000000018f","0x7337224d59cb16c2dc6938cd45a7b2c60c865d6a0000000000000000000004d4","0x74cbfaf94a3577c539a9dcee9870a6349a33b34f000000000000000000000534","0x779d01f939d78a918a3de18cc236ee89221dfd4e0000000000000000000004c7","0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe","0x804cdb9116a10bb78768d3252355a1b18067bf8f0000000000000000000000fb","0x813e3fe1761f714c502d1d2d3a7cceb33f37f59d00000000000000000000040c","0x82698aecc9e28e9bb27608bd52cf57f704bd1b83000000000000000000000336","0x8a6b25e33b12d1bb6929a8793961076bd1f9d3eb0002000000000000000003e8","0x8e6ec57a822c2f527f2df7c7d7d361df3e7530a1000000000000000000000498","0x8f4063446f5011bc1c9f79a819efe87776f23704000000000000000000000197","0x9001cbbd96f54a658ff4e6e65ab564ded76a543100000000000000000000050a","0x9210f1204b5a24742eba12f710636d76240df3d00000000000000000000000fc","0x9516a2d25958edb8da246a320f2c7d94a0dbe25d000000000000000000000519","0x959216bb492b2efa72b15b7aacea5b5c984c3cca000200000000000000000472","0x968024662b9566b42d78af23a0f441bc8723fa83000200000000000000000418","0x99c88ad7dc566616548adde8ed3effa730eb6c3400000000000000000000049a","0x9b1c8407a360443a9e5eca004713e4088fab8ac0000000000000000000000497","0x9b692f571b256140a39a34676bffa30634c586e100000000000000000000059d","0x9d7f992c900fbea0ec314bdd71b7cc1becf76a33000200000000000000000573","0x9fb771d530b0ceba5160f7bfe2dd1e8b8aa1340300000000000000000000040e","0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d","0xa1697f9af0875b63ddc472d6eebada8c1fab85680000000000000000000004f9","0xa3823e50f20982656557a4a6a9c06ba5467ae9080000000000000000000000e6","0xa718042e5622099e5f0ace4e7122058ab39e1bbe000200000000000000000475","0xa8b103a10a94f4f2d7ed2fdcd5545e807557330700000000000000000000048e","0xac5b4ef7ede2f2843a704e96dcaa637f4ba3dc3f00000000000000000000051d","0xac976bb42cb0c85635644e8c7c74d0e0286aa61c0000000000000000000003cb","0xae37d54ae477268b9997d4161b96b8200755935c000000000000000000000337","0xae8535c23afedda9304b03c68a3563b75fc8f92b0000000000000000000005a0","0xb0f75e97a114a4eb4a425edc48990e6760726709000000000000000000000198","0xb5e3de837f869b0248825e0175da73d4e8c3db6b000200000000000000000474","0xb841b062ea8ccf5c4cb78032e91de4ae875560420002000000000000000005b7","0xb9bd68a77ccf8314c0dfe51bc291c77590c4e9e6000200000000000000000385","0xbb6881874825e60e1160416d6c426eae65f2459e000000000000000000000592","0xbc0f2372008005471874e426e86ccfae7b4de79d000000000000000000000485","0xbf2ef8bdc2fc0f3203b3a01778e3ec5009aeef3300000000000000000000058d","0xbfa413a2ff0f20456d57b643746133f54bfe0cd20000000000000000000004c3","0xc2b021133d1b0cf07dba696fd5dd89338428225b000000000000000000000598","0xc443c15033fcb6cf72cc24f1bda0db070ddd9786000000000000000000000593","0xc50d4347209f285247bda8a09fc1c12ce42031c3000000000000000000000590","0xc5dc1316ab670a2eed5716d7f19ced321191f38200000000000000000000056e","0xc8c79fcd0e859e7ec81118e91ce8e4379a481ee6000000000000000000000196","0xcaa052584b462198a5a9356c28bce0634d65f65c0000000000000000000004db","0xcbfa4532d8b2ade2c261d3dd5ef2a2284f7926920000000000000000000004fa","0xcfae6e251369467f465f13836ac8135bd42f8a56000000000000000000000591","0xd4e7c1f3da1144c9e2cfd1b015eda7652b4a439900000000000000000000046a","0xd6e355036f41dc261b3f1ed3bbc6003e87aadb4f000000000000000000000495","0xd7edb56f63b2a0191742aea32df1f98ca81ed9c600000000000000000000058e","0xd997f35c9b1281b82c8928039d14cddab5e13c2000000000000000000000019c","0xdba274b4d04097b90a72b62467d828cefd708037000000000000000000000486","0xdc063deafce952160ec112fa382ac206305657e60000000000000000000004c4","0xdec02e6642e2c999af429f5ce944653cad15e093000000000000000000000469","0xe03af00fabe8401560c1ff7d242d622a5b601573000000000000000000000493","0xe0fcbf4d98f0ad982db260f86cf28b49845403c5000000000000000000000504","0xe2d16b0a39f3fbb4389a0e8f1efcbecfb3d1e6e10000000000000000000005a7","0xe4dc3c1998ac693d68f4c77476d7c815694c3e94000200000000000000000416","0xe6bcc79f328eec93d4ec8f7ed35534d9ab549faa0000000000000000000000e8","0xe8c56405bc405840154d9b572927f4197d110de10000000000000000000005a4","0xeb486af868aeb3b6e53066abc9623b1041b42bc000000000000000000000046c","0xeb567dde03f3da7fe185bdacd5ab495ab220769d000000000000000000000548","0xec3626fee40ef95e7c0cbb1d495c8b67b34d398300000000000000000000053d","0xf22ff21e17157340575158ad7394e068048dd98b0000000000000000000004b8","0xf57c794f42da72b38c8f610ff3b5e8502e48cbde00000000000000000000055c","0xf71d0774b214c4cf51e33eb3d30ef98132e4dbaa00000000000000000000046e","0xfa24a90a3f2bbe5feea92b95cd0d14ce709649f900000000000000000000058f","0xfd11ccdbdb7ab91cb9427a6d6bf570c95876d1950000000000000000000004c2","0xfebb0bbf162e64fb9d0dfe186e517d84c395f016000000000000000000000502","0xfef969638c52899f91781f1be594af6f40b99bad00000000000000000000047b","0x02e139d53ebf4033bf78ab66c6a1e7f1f204487f0002000000000000000009f9","0x03090a9811181a2afe830a3a0b467698ccf3a8b1000000000000000000000bf5","0x0320c1c5b6df19a194d48882aaec1c72940081d9000000000000000000000a7d","0x04b54ea92d73de2d62d651db7d9778f0c49157d8000200000000000000000ba2","0x0503dd6b2d3dd463c9bef67fb5156870af63393e00000000000000000000042e","0x0889b240a5876aae745ac19f1771853671dc5d36000000000000000000000b3f","0x0bc54e914f53f98d16035f4f0d948f3e09c2fac0000200000000000000000bac","0x0c06e87c7b88d998f645b91c1f53b51294b12bca000100000000000000000bb9","0x10b040038f87219d9b42e025e3bd9b8095c87dd9000000000000000000000b11","0x117a3d474976274b37b7b94af5dcade5c90c6e85000000000000000000000aca","0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000a5f","0x1379b816b9be611431d693290289c204720ca56d000100000000000000000b6f","0x150e7b885bdfce974f2abe88a72fdbd692175c6f0002000000000000000009fd","0x178e029173417b1f9c8bc16dcec6f697bc323746000000000000000000000758","0x1aafc31091d93c3ff003cff5d2d8f7ba2e7284250000000000000000000003b3","0x216690738aac4aa0c4770253ca26a28f0115c595000000000000000000000b2c","0x216d6db0c28204014618482c369d7fbf0a8f3232000100000000000000000b60","0x230ecdb2a7cee56d6889965a023aa0473d6da507000000000000000000000bf3","0x252ff6a3a6fd7b5e8e999de8e3f5c3b306ed1401000200000000000000000bec","0x25e57f4612912614e6c99616bd2abb9b5ae71e99000000000000000000000bf0","0x2645b13fd2c5295296e94a76280b968bdcbbdfed000000000000000000000c11","0x284eb68520c8fa83361c1a3a5910aec7f873c18b000000000000000000000ac9","0x2c8dbe8eb86135d9f2f26d196748c088d47f73e7000200000000000000000a29","0x31bccf9e28b94e5dacebaa67fe8bc1603cecd904000000000000000000000a01","0x341068a547c3cde3c09e338714010dd01b32f93f000200000000000000000a34","0x3db543faf7a92052de7860c5c9debabee59ed5bd000000000000000000000a62","0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd00000000000000000000070d","0x3efb91c4f9b103ee45885695c67794591916f34e000200000000000000000b43","0x402cfdb7781fa85d52f425352661128250b79e12000000000000000000000be3","0x43894de14462b421372bcfe445fa51b1b4a0ff3d000000000000000000000b36","0x4739e50b59b552d490d3fdc60d200977a38510c0000000000000000000000b10","0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b","0x4a0b73f0d13ff6d43e304a174697e3d5cfd310a400020000000000000000091c","0x4a77ef015ddcd972fd9ba2c7d5d658689d090f1a000000000000000000000b38","0x4ae3661afa119892f0cc8c43edaf6a94989ac171000000000000000000000c06","0x4ccb966d8246240afb7a1a24628efb930870b1c40002000000000000000009fc","0x52cc8389c6b93d740325729cc7c958066cee4262000000000000000000000b0f","0x5b77107fcdf2b41903bab2bc555d4fc14cf7667d000000000000000000000b32","0x5bae72b75caab1f260d21bc028c630140607d6e8000000000000000000000ac6","0x600bd01b6526611079e12e1ff93aba7a3e34226f0000000000000000000009e4","0x63ce19ccd39930725b8a3d2733627804718ab83d000000000000000000000bf2","0x64efad69f099813021b41f4cac6e749fd55e188f000000000000000000000b39","0x6933ec1ca55c06a894107860c92acdfd2dd8512f000000000000000000000428","0x6abe4e7a497b8293c258389c1b00d177e4f257ed00010000000000000000080d","0x6c8c7fc50247a47038015eb1fd5dc105d05dafba000200000000000000000ba0","0x7079a25dec33be61bbd81b2fb69b468e80d3e72c0000000000000000000009ff","0x71bd10c2a590b5858f5576550c163976a48af906000000000000000000000b27","0x7c82a23b4c48d796dee36a9ca215b641c6a8709d000000000000000000000acd","0x7f4f4942f2a14b6ab7b08b10ada1aacede4ee8d4000200000000000000000b44","0x86aef31951e0a3a54333bd9e72f9a95587d058c5000200000000000000000912","0x882c7a84231484b3e9f3fd45ac04b1eb5d35b076000200000000000000000a91","0x894c82800526e0391e709c0983a5aea3718b7f6d000000000000000000000ac5","0x89b28a9494589b09dbccb69911c189f74fdadc5a000000000000000000000b33","0x89bb15076c9f2d86aa98ec6cffc1a71e31c38953000000000000000000000bf1","0x89f1146fee52b5d9166e9c83cc388b6d8f69f1380001000000000000000009e7","0x8a819a4cabd6efcb4e5504fe8679a1abd831dd8f00000000000000000000042d","0x8b58a1e7fff52001c22386c2918d45938a6a9be30001000000000000000008d9","0x8b8225bfedebaf1708c55743acb4ad43fd4d0f21000200000000000000000918","0x8fbd0f8e490735cfc3abf4f29cbddd5c3289b9a7000000000000000000000b5b","0x8fd39252d683fdb60bddd4df4b53c9380b496d59000200000000000000000b45","0x9321e2250767d79bab5aa06daa8606a2b3b7b4c5000000000000000000000bf4","0x949a12b95ec5b80c375b98963a5d6b33b0d0efff0002000000000000000009fe","0x9a020bdc2faff5bd24c6acc2020d01ff9f2c627a000000000000000000000ae2","0x9cf9358300e34bf9373d30129a1e718d8d058b54000200000000000000000913","0x9e34631547adcf2f8cefa0f5f223955c7b137571000000000000000000000ad5","0xa5a935833f6a5312715f182733eab088452335d7000100000000000000000bee","0xa5fe91dde37d8bf2dacacc0168b115d28ed03f84000000000000000000000b35","0xa8bf1c584519be0184311c48adbdc4c15cb2e8c1000000000000000000000bf6","0xab269164a10fab22bc87c39946da06c870b172d6000000000000000000000bfc","0xac2cae8d2f78a4a8f92f20dbe74042cd0a8d5af3000000000000000000000be2","0xae646817e458c0be890b81e8d880206710e3c44e000000000000000000000acb","0xaef2c171dbe64b0c18977e16e70bfd29d4ee0256000000000000000000000ac8","0xb0c830dceb4ef55a60192472c20c8bf19df03488000000000000000000000be1","0xb266ac3b7c98d7bcb28731dac0ef42dba1b276be000000000000000000000be4","0xb371aa09f5a110ab69b39a84b5469d29f9b22b76000000000000000000000b37","0xb3d658d5b95bf04e2932370dd1ff976fe18dd66a000000000000000000000ace","0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e","0xb59be8f3c85a9dd6e2899103b6fbf6ea405b99a4000000000000000000000b34","0xb878ecce26838fbba4f78cb5b791a0e09152c067000000000000000000000427","0xb973ca96a3f0d61045f53255e319aedb6ed4924000000000000000000000042f","0xbd4e35784c832d0f9049b54cb3609e5907c5b495000100000000000000000b14","0xc55ec796a4debe625d95436a3531f4950b11bdcf000000000000000000000b3e","0xc7e6389e364f4275eb442ef215ed21877028e2af000000000000000000000ac7","0xc83b55bbd005f1f84906545fcdb145dee53523e0000200000000000000000b30","0xcb21a9e647c95127ed784626485b3104cb28d0e7000000000000000000000425","0xd00f9ca46ce0e4a63067c4657986f0167b0de1e5000000000000000000000b42","0xd2f3b9e67c69762dd1c88f1d3dadd1649a190761000200000000000000000bf7","0xd4accb350f9cf59fe3cf7a5ee6ed9ace6a568ea9000200000000000000000b75","0xda1cd1711743e57dd57102e9e61b75f3587703da000000000000000000000acc","0xdae301690004946424e41051ace1791083be42a1000000000000000000000b40","0xde0a77ab6689b980c30306b10f9131a007e1af81000200000000000000000ba1","0xe051605a83deae38d26a7346b100ef1ac2ef8a0b0000000000000000000003ce","0xe1fb90d0d3b47e551d494d7ebe8f209753526b01000000000000000000000ac4","0xe2272cddb2cc408e79e02a73d1db9acc24a843d5000200000000000000000ba7","0xe2dc0e0f2c358d6e31836dee69a558ab8d1390e70000000000000000000009fa","0xe4885ed2818cc9e840a25f94f9b2a28169d1aea7000000000000000000000b29","0xe6909c2f18a29d97217a6146f045e1780606991f000100000000000000000bfe","0xe78b25c06db117fdf8f98583cdaaa6c92b79e917000000000000000000000b2b","0xea11645ac7d8f2def94c9d8d86bd766296c9b6b6000000000000000000000b3a","0xeb480dbbdd921cd6c359e4cc4c65ddea6395e2a1000200000000000000000946","0xed35f28f837e96f81240ebb82e0e3f518c7e8a2f000100000000000000000bb5","0xf0211cceebe6fcc45052b4e57ee95d233f5669d2000100000000000000000c01","0xf22a66046b5307842f21b311ecb4c462c24c0635000000000000000000000b15","0xf28f17be00f8ca3c9b7f66a4aad5513757fb3341000200000000000000000b5a","0xf42ed61450458ee4620f5ef4f29adb25a6ef0fb6000000000000000000000bf8","0xf48f01dcb2cbb3ee1f6aab0e742c2d3941039d56000000000000000000000445","0xf93579002dbe8046c43fefe86ec78b1112247bb8000000000000000000000759","0xf984eb2b8a7ef780245a797a2fccd82f346409ca000000000000000000000a59","0xfa2c0bd8327c99db5bde4c9e9e5cbf30946351bb000000000000000000000948","0xff4ce5aaab5a627bf82f4a571ab1ce94aa365ea600000000000000000000075a","0x1ac55c31dac78ca943cb8ebfca5945ce09e036e2000000000000000000000024","0x225e0047671939a8d78e08ebd692788abe63f15c000000000000000000000009","0x41211bba6d37f5a74b22e667533f080c7c7f3f1300000000000000000000000b","0x4de21b365d6543661d0e105e579a34b963862497000200000000000000000045","0x581ec1f5e7ced12b186deae32256adb53bdd5b08000000000000000000000001","0x66f33ae36dd80327744207a48122f874634b3ada000100000000000000000013","0xa3ed6f78edc29f69df8a0d16b1d1ccf9871f918c000000000000000000000032","0xa611a551b95b205ccd9490657acf7899daee5db700000000000000000000002e","0xb95829adbacd8af89e291dee78bc09e24de51d6b000000000000000000000043","0xb973ca96a3f0d61045f53255e319aedb6ed49240000200000000000000000011","0xba1a5b19d09a79dada039b1f974015c5a989d5fd000100000000000000000046","0xbb9cd48d33033f5effbedec9dd700c7d7e1dcf5000000000000000000000000e","0xd16f72b02da5f51231fde542a8b9e2777a478c8800000000000000000000000f","0xd4015683b8153666190e0b2bec352580ebc4caca00000000000000000000000d","0xe15cac1df3621e001f76210ab12a7f1a1691481f000000000000000000000044","0xe7f88d7d4ef2eb18fcf9dd7216ba7da1c46f3dd600000000000000000000000a","0xf48f01dcb2cbb3ee1f6aab0e742c2d3941039d56000200000000000000000012","0xfedb19ec000d38d92af4b21436870f115db22725000000000000000000000010","0xffff76a3280e95dc855696111c2562da09db2ac000000000000000000000000c","0x00fcd3d55085e998e291a0005cedecf58ac14c4000020000000000000000047f","0x077794c30afeccdf5ad2abc0588e8cee7197b71a000000000000000000000352","0x117a3d474976274b37b7b94af5dcade5c90c6e85000000000000000000000381","0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000353","0x19b1c92631405a0a9495ccba0becf4f2e8e908bd000000000000000000000410","0x1e550b7764da9638fdd32c8a701364de31f45ee800000000000000000000047c","0x1fa7f727934226aedab636d62a084931b97d366b000000000000000000000411","0x23ca0306b21ea71552b148cf3c4db4fc85ae19290000000000000000000000c9","0x284eb68520c8fa83361c1a3a5910aec7f873c18b000000000000000000000380","0x2a96254ca32020b20ed3506f8f75318da24709f9000200000000000000000456","0x36942963e3b6f37ecc45a4e72349558514233f0000000000000000000000048a","0x3f53a862919ccfa023cb6ace91378a79fb0f6bf500000000000000000000040f","0x40af308e3d07ec769d85eb80afb116525ff4ac99000000000000000000000485","0x418de00ae109e6f874d872658767866d680eaa1900000000000000000000047d","0x45c4d1376943ab28802b995acffc04903eb5223f000000000000000000000470","0x4689122d360c4725d244c5cfea22861333d862e6000100000000000000000468","0x4739e50b59b552d490d3fdc60d200977a38510c0000000000000000000000409","0x49a0e3334496442a9706e481617724e7e37eaa080000000000000000000003ff","0x519cce718fcd11ac09194cff4517f12d263be067000000000000000000000382","0x52cc8389c6b93d740325729cc7c958066cee4262000000000000000000000408","0x567ecfcb22205d279bb8eed3e066989902bf03d5000000000000000000000452","0x585d95df0231fa08aeee35ff0c16b92fd0ecdc3300020000000000000000045f","0x5a7f39435fd9c381e4932fa2047c9a5136a5e3e7000000000000000000000400","0x5bae72b75caab1f260d21bc028c630140607d6e8000000000000000000000350","0x6cb787a419c3e6ee2e9ff365856c29cd10659113000000000000000000000474","0x7c82a23b4c48d796dee36a9ca215b641c6a8709d000000000000000000000406","0x81fc12c60ee5b753cf5fd0adc342dfb5f3817e3200000000000000000000035d","0x894c82800526e0391e709c0983a5aea3718b7f6d00000000000000000000034f","0x970712708a08e8fb152be4d81b2dc586923f5369000200000000000000000479","0x9bf7c3b63c77b4b4f2717776f15a4bec1b532a280000000000000000000000c8","0x9cebf13bb702f253abf1579294694a1edad00eaa000000000000000000000486","0x9e34631547adcf2f8cefa0f5f223955c7b137571000000000000000000000407","0x9fb7d6dcac7b6aa20108bad226c35b85a9e31b63000200000000000000000412","0xa1ea76c42b2938cfa9abea12357881006c52851300000000000000000000048f","0xa50f89e9f439fde2a6fe05883721a00475da3c4500000000000000000000048b","0xa612b6aed2e7ca1a3a4f23fbca9128461bbb7718000000000000000000000274","0xa8af146d79ac0bb981e4e0d8b788ec5711b1d5d000000000000000000000047b","0xad28940024117b442a9efb6d0f25c8b59e1c950b00000000000000000000046f","0xae646817e458c0be890b81e8d880206710e3c44e00000000000000000000039d","0xaef2c171dbe64b0c18977e16e70bfd29d4ee0256000000000000000000000351","0xbbf9d705b75f408cfcaee91da32966124d2c6f7d00000000000000000000047e","0xbd724eb087d4cc0f61a5fed1fffaf937937e14de000000000000000000000473","0xbe0f30217be1e981add883848d0773a86d2d2cd4000000000000000000000471","0xc46be4b8bb6b5a3d3120660efae9c5416318ed40000000000000000000000472","0xc69771058481551261709d8db44977e9afde645000010000000000000000042a","0xc6eee8cb7643ec2f05f46d569e9ec8ef8b41b389000000000000000000000475","0xcba9ff45cfb9ce238afde32b0148eb82cbe635620000000000000000000003fd","0xcf8b555b7754556cf2ac2165e77ee23ed8517d7900020000000000000000045e","0xd0dc20e6342db2de82692b8dc842301ff9121805000200000000000000000454","0xd3d5d45f4edf82ba0dfaf061d230766032a10e07000200000000000000000413","0xd6d20527c7b0669989ee082b9d3a1c63af742290000000000000000000000483","0xda1cd1711743e57dd57102e9e61b75f3587703da0000000000000000000003fc","0xe1fb90d0d3b47e551d494d7ebe8f209753526b0100000000000000000000034e","0xee02583596aee94cccb7e8ccd3921d955f17982a00000000000000000000040a","0xf984eb2b8a7ef780245a797a2fccd82f346409ca00000000000000000000034d","0xff8f84e8c87532af96aef5582ee451572233678b000200000000000000000478","0x054e7b0c73e1ee5aed6864fa511658fc2b54bcaa000000000000000000000015","0x3f1a2c4a3a751f6626bd90ef16e104f0772d4d6b00020000000000000000001b","0x7275c131b1f67e8b53b4691f92b0e35a4c1c6e22000000000000000000000010","0xa154009870e9b6431305f19b09f9cfd7284d4e7a000000000000000000000013","0xa1d14d922a575232066520eda11e27760946c991000000000000000000000012","0xa826a114b0c7db4d1ff4a4be845a78998c64564c000000000000000000000008","0xea67626e1f0b59e0d172a04f5702ef90bcdf440c00000000000000000000000f","0xeb496161099d45b3ea4892408ef745c6182eb56e00000000000000000000000e","0xece571847897fd61e764d455dc15cf1cd9de8d6f000000000000000000000014","0xed3e2f496cbcd8e212192fb8d1499842f04a0d19000000000000000000000009","0x02c9dcb975262719a61f9b40bdf0987ead9add3a000000000000000000000006","0x16c9a4d841e88e52b51936106010f27085a529ec00000000000000000000000c","0x32be2d0ddeaf3333501b24a28668ce373ba8e763000200000000000000000014","0x32f03464fdf909fdf3798f87ff3712b10c59bd86000000000000000000000005","0x4b718e0e2fea1da68b763cd50c446fba03ceb2ea00000000000000000000000b","0x68a69c596b3839023c0e08d09682314f582314e5000200000000000000000011","0x6f34a44fce1506352a171232163e7716dd073ade000200000000000000000015","0x9e2d87f904862671eb49cb358e74284762cc9f42000200000000000000000013","0xac4b72c01072a52b73ca71105504f1372efcce0d000000000000000000000003","0xbfd65c6160cfd638a85c645e6e6d8acac5dac935000000000000000000000004","0xe274c9deb6ed34cfe4130f8d0a8a948dea5bb28600000000000000000000000d"];class Vi{constructor(t){this.chainId=t,this.balancerApiUrl="https://api-v3.balancer.fi/",this.tokenPriceQuery=u.gql` + query queryTokenPrices($chainKey: GqlChain!) { + tokenGetCurrentPrices(chains: [$chainKey]) { + address + price + } + } + `,this.chainKey=e.Network[t]}async getNativeAssetPriceInToken(e){const{tokenGetCurrentPrices:t}=await u.request(this.balancerApiUrl,this.tokenPriceQuery,{chainKey:this.chainKey}),a=t.find((({address:t})=>t.toLowerCase()===e.toLowerCase()));if(!a)throw new Error("Token Price not found in the API");const n=t.find((({address:e})=>e.toLowerCase()===qi[this.chainKey]));if(!n)throw new Error("Native Token Price not found in the API");const o=a.price/n.price;return String(o)}}var qi;function Gi(e=!0){return e?"https://api.coingecko.com/api/v3/":"https://pro-api.coingecko.com/api/v3/"}function Wi(e=!0){return e?"x-cg-demo-api-key":"x-cg-pro-api-key"}!function(e){e.MAINNET="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.POLYGON="0x0000000000000000000000000000000000001010",e.ARBITRUM="0x912ce59144191c1204e64559fe8253a0e49e6548",e.AVALANCHE="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.BASE="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.FANTOM="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.GNOSIS="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.OPTIMISM="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",e.ZKEVM="0xa2036f0538221a77a3937f1379699f44945018d0"}(qi||(qi={}));class Hi{constructor(e,t){this.chainId=e,this.urlBase=`${Gi(null==t?void 0:t.isDemoApiKey)}simple/token_price/${this.platformId}?vs_currencies=${this.nativeAssetId}`,this.coingeckoApiKeyHeaderName=Wi(null==t?void 0:t.isDemoApiKey),this.apiKey=t.coingeckoApiKey}async getNativeAssetPriceInToken(e){const t=await this.getTokenPriceInNativeAsset(e);return""+1/parseFloat(t)}async getTokenPriceInNativeAsset(e){var t;const a=`${this.urlBase}&contract_addresses=${e}`,{data:n}=await E.default.get(a,{headers:{Accept:"application/json","Content-Type":"application/json",[this.coingeckoApiKeyHeaderName]:null!==(t=this.apiKey)&&void 0!==t?t:""}});if(void 0===n[e.toLowerCase()]||void 0===n[e.toLowerCase()][this.nativeAssetId])throw Error("No price returned from Coingecko");return n[e.toLowerCase()][this.nativeAssetId]}get platformId(){return Ba[this.chainId].thirdParty.coingecko.platformId||"2"}get nativeAssetId(){return Ba[this.chainId].thirdParty.coingecko.nativeAssetId||""}}class Ki extends d.SOR{constructor(e){const t=Di(e),a=Ki.getSorConfig(e),n=Ki.getSorNetworkConfig(t),o=new p.JsonRpcProvider(e.rpcUrl,e.network),i=Ai(t.urls.subgraph);super(o,n,Ki.getPoolDataService(t,a,o,i),Ki.getTokenPriceService(t,a,i,e.coingecko))}static getSorConfig(e){return{tokenPriceService:"api",poolDataService:"subgraph",fetchOnChainBalances:!0,...e.sor}}static getSorNetworkConfig(e){var t;return{...e,vault:e.addresses.contracts.vault,weth:e.addresses.tokens.wrappedNativeAsset,lbpRaisingTokens:null===(t=e.addresses.tokens)||void 0===t?void 0:t.lbpRaisingTokens,wETHwstETH:e.pools.wETHwstETH,connectingTokens:e.sorConnectingTokens,triPathMidPoolIds:e.sorTriPathMidPoolIds}}static getPoolDataService(e,t,a,n){var o;const i=[...null!==(o=e.poolsToIgnore)&&void 0!==o?o:[],...Ui];return"object"==typeof t.poolDataService?t.poolDataService:new Ni(n,a,{...e,poolsToIgnore:i},t)}static getTokenPriceService(e,t,a,n){return"coingecko"===t.tokenPriceService&&n?new Hi(e.chainId,n):"object"==typeof t.tokenPriceService?t.tokenPriceService:"subgraph"===t.tokenPriceService?new Li(a,e.addresses.tokens.wrappedNativeAsset):new Vi(e.chainId)}}function $i(e){if(e.poolIds.length>2)throw new Error("Simple flash swap only supports a maximum of two pools");if(e.assets.length>2)throw new Error("Simple flash swap only supports a maximum of to two assets (tokens)")}function Ji(e,t){return[{poolId:e[0],assetInIndex:0,assetOutIndex:1,amount:t,userData:"0x"},{poolId:e[1],assetInIndex:1,assetOutIndex:0,amount:"0",userData:"0x"}]}function ji(e){return-1*Number(e)}function Xi(e){return r.sum(e)}const Yi={"0xae7ab96520de3a18e5e111b5eaab095312d7fe84":"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0","0xd46ba6d942050d489dbd938a2c909a5d5039a161":"0xedb171c18ce90b633db442f2a6f72874093b49ef","0x1e6bb68acec8fefbd87d192be09bb274170a0548":"0xF03387d8d0FF326ab586A58E0ab4121d106147DF"};function zi(e){let t=e;return Yi.hasOwnProperty(e)&&(t=Yi[e]),t}var Zi;function Qi(e,t,a){const{tokens:n,contracts:o}=Ca(a);let i={id:Zi.vault,address:o.vault};return n.stETH&&o.lidoRelayer&&[e,t].includes(n.stETH)&&(i={id:Zi.lido,address:o.lidoRelayer}),i}function es(e){return e.id===Zi.lido?Pt.abi.filter((e=>"function"===e.type&&e.name&&["swap","batchSwap"].includes(e.name))):pa.abi.filter((e=>"function"===e.type&&e.name&&["swap","batchSwap"].includes(e.name)))}function ts(e){return{amount:e,max:t=>e.mul(1e4+t).div(1e4),min:t=>e.mul(1e4-t).div(1e4)}}function as(t,a){const n=a===e.SwapType.SwapExactIn?t.swapAmount:t.returnAmount,o=a===e.SwapType.SwapExactIn?t.returnAmount:t.swapAmount,i=a===e.SwapType.SwapExactIn?t.swapAmountForSwaps||t.swapAmount:t.returnAmountFromSwaps||t.returnAmount,s=a===e.SwapType.SwapExactIn?t.returnAmountFromSwaps||t.returnAmount:t.swapAmountForSwaps||t.swapAmount,r=zi(t.tokenIn),l=zi(t.tokenOut);return{...t,amountIn:n,amountOut:o,amountInForLimits:ts(i),amountOutForLimits:ts(s),tokenInForSwaps:r,tokenOutFromSwaps:l}}!function(e){e[e.vault=1]="vault",e[e.lido=2]="lido"}(Zi||(Zi={}));class ns{constructor(e,t,a){this.kind=t,this.chainId=a,this.functionName="swap",this.swapInfo=as(e,t),this.relayer=Qi(this.swapInfo.tokenIn,this.swapInfo.tokenOut,this.chainId)}setFunds(e,t){this.funds={sender:e,recipient:t||e,fromInternalBalance:!1,toInternalBalance:!1}}setDeadline(e){this.deadline=e}get amount(){return this.kind===e.SwapType.SwapExactOut?this.swapInfo.amountOutForLimits.amount:this.swapInfo.amountInForLimits.amount}setLimits(t){this.limit=this.kind===e.SwapType.SwapExactIn?this.swapInfo.amountOutForLimits.min(t).toString():this.swapInfo.amountInForLimits.max(t).toString()}get singleSwap(){return{poolId:this.swapInfo.swaps[0].poolId,kind:this.kind,assetIn:this.swapInfo.tokenInForSwaps,assetOut:this.swapInfo.tokenOutFromSwaps,amount:this.amount.toString(),userData:"0x"}}attributes(){var e;if(!this.funds||!this.limit||!this.deadline)throw new Error("Uninitialized arguments");let t={request:this.singleSwap,funds:this.funds,limit:this.limit,deadline:this.deadline};const a=this.fragment();return a[0].inputs&&(null===(e=a[0].inputs)||void 0===e?void 0:e.length)>4&&(t={...t,value:"0",outputReference:"0"}),t}data(){return new t.Interface(this.fragment()).encodeFunctionData("swap",Object.values(this.attributes()))}value(t){let o=n.BigNumber.from(0);return this.swapInfo.tokenIn===a.AddressZero&&(o=this.kind===e.SwapType.SwapExactIn?this.swapInfo.amountIn:this.swapInfo.amountInForLimits.max(t)),o}to(){return this.relayer.address}fragment(){return es(this.relayer).filter((e=>e.name===this.functionName))}}class os{constructor(e,t,a){this.kind=t,this.chainId=a,this.functionName="batchSwap",this.swapInfo=as(e,t),this.relayer=Qi(this.swapInfo.tokenIn,this.swapInfo.tokenOut,this.chainId)}setFunds(e,t){this.funds={sender:e,recipient:t||e,fromInternalBalance:!1,toInternalBalance:!1}}setDeadline(e){this.deadline=e}minAmountOut(t){return this.kind===e.SwapType.SwapExactIn?this.swapInfo.amountOutForLimits.min(t):this.swapInfo.amountOutForLimits.amount}maxAmountIn(t){return this.kind===e.SwapType.SwapExactOut?this.swapInfo.amountInForLimits.max(t):this.swapInfo.amountInForLimits.amount}setLimits(e){this.limits=this.swapInfo.tokenAddresses.map((t=>{let a=n.BigNumber.from(0);return t===this.swapInfo.tokenInForSwaps&&(a=this.maxAmountIn(e)),t===this.swapInfo.tokenOutFromSwaps&&(a=this.minAmountOut(e).mul(-1)),a})).map((e=>e.toString().split(".")[0]))}attributes(){var e;if(!this.funds||!this.limits||!this.deadline)throw new Error("Uninitialized arguments");let t={kind:this.kind,swaps:this.swapInfo.swaps,assets:this.swapInfo.tokenAddresses,funds:this.funds,limits:this.limits,deadline:this.deadline};const a=this.fragment();return a[0].inputs&&(null===(e=a[0].inputs)||void 0===e?void 0:e.length)>6&&(t={...t,value:"0",outputReferences:[]}),t}data(){return new t.Interface(this.fragment()).encodeFunctionData("batchSwap",Object.values(this.attributes()))}value(e){let t=n.BigNumber.from(0);return this.swapInfo.tokenIn===a.AddressZero&&(t=this.maxAmountIn(e)),t}to(){return this.relayer.address}fragment(){return es(this.relayer).filter((e=>e.name===this.functionName))}}const is={maxPools:4,gasPrice:"1",deadline:"999999999999999999",maxSlippage:10};class ss{constructor(e){e instanceof d.SOR?(this.sor=e,this.chainId=this.sor.provider._network.chainId):(this.sor=new Ki(e),"number"==typeof e.network?this.chainId=e.network:this.chainId=e.network.chainId),this.vaultContract=pa.connect(ka,this.sor.provider)}static getLimitsForSlippage(e,t,a,n,o,i){return Sa(e,t,a,n,o,i).map((e=>e.toString()))}async findRouteGivenIn({tokenIn:e,tokenOut:t,amount:a,gasPrice:n,maxPools:o=4}){return this.sor.getSwaps(e,t,d.SwapTypes.SwapExactIn,a,{gasPrice:n,maxPools:o})}async findRouteGivenOut({tokenIn:e,tokenOut:t,amount:a,gasPrice:n,maxPools:o=4}){return this.sor.getSwaps(e,t,d.SwapTypes.SwapExactOut,a,{gasPrice:n,maxPools:o})}buildSwap({userAddress:e,recipient:t,swapInfo:a,kind:n,deadline:o,maxSlippage:i}){if(!this.chainId)throw"Missing network configuration";const s=a.swaps.length>1?new os(a,n,this.chainId):new ns(a,n,this.chainId);s.setFunds(e,t),s.setDeadline(o),s.setLimits(i);const r=s.to(),{functionName:l}=s;return{to:r,functionName:l,attributes:s.attributes(),data:s.data(),value:s.value(i)}}async buildRouteExactIn(t,a,o,i,s,r=is){const l={...is,...r},d=await this.findRouteGivenIn({tokenIn:o,tokenOut:i,amount:n.BigNumber.from(s),gasPrice:n.BigNumber.from(l.gasPrice),maxPools:l.maxPools});return this.buildSwap({userAddress:t,recipient:a,swapInfo:d,kind:e.SwapType.SwapExactIn,deadline:l.deadline,maxSlippage:l.maxSlippage})}static encodeBatchSwap(e){return pa.createInterface().encodeFunctionData("batchSwap",[e.kind,e.swaps,e.assets,e.funds,e.limits,e.deadline])}static encodeSimpleFlashSwap(t){return this.encodeBatchSwap(function({poolIds:t,assets:a,flashLoanAmount:n,walletAddress:o}){$i({poolIds:t,assets:a});const i=Ji(t,n),s={sender:o,fromInternalBalance:!1,recipient:o,toInternalBalance:!1};return{kind:e.SwapType.SwapExactIn,swaps:i,assets:a,funds:s,limits:["0","0"],deadline:"999999999999999999"}}(t))}async fetchPools(e){return this.sor.fetchPools(e)}getPools(){return this.sor.getPools()}async queryBatchSwap(e){return await Nn(this.vaultContract,e.kind,e.swaps,e.assets)}async querySimpleFlashSwap(t){return await async function(t){$i(t);const[a,n]=t.assets;try{const o=await Nn(t.vaultContract,e.SwapType.SwapExactIn,Ji(t.poolIds,t.flashLoanAmount),t.assets),i={[a]:ji(o[0]).toString(),[n]:ji(o[1]).toString()};return{profits:i,isProfitable:Xi([i[a],i[n]])>0}}catch(e){throw`Failed to querySimpleFlashSwap: ${e}`}}({...t,vaultContract:this.vaultContract})}async getSorSwap(t){return await async function(t,a,n,o,i){const s=n===e.SwapType.SwapExactIn?d.SwapTypes.SwapExactIn:d.SwapTypes.SwapExactOut;return await i.getSwaps(t.toLowerCase(),a.toLowerCase(),s,o)}(t.tokenIn,t.tokenOut,t.swapType,t.amount,this.sor)}async queryExactIn(t){const a=await this.query(t,e.SwapType.SwapExactIn);return this.assetDeltas(a.map(String),t.tokenAddresses)}async queryExactOut(t){const a=await this.query(t,e.SwapType.SwapExactOut);return this.assetDeltas(a.map(String),t.tokenAddresses)}query(e,t){const{swaps:n,tokenAddresses:o}=e,i={sender:a.AddressZero,recipient:a.AddressZero,fromInternalBalance:!1,toInternalBalance:!1};return this.vaultContract.callStatic.queryBatchSwap(t,n,o,i)}assetDeltas(e,t){return Object.fromEntries(e.map(((e,a)=>[t[a],e])))}}var rs;e.PoolKind=void 0,(rs=e.PoolKind||(e.PoolKind={}))[rs.WEIGHTED=0]="WEIGHTED",rs[rs.LEGACY_STABLE=1]="LEGACY_STABLE",rs[rs.COMPOSABLE_STABLE=2]="COMPOSABLE_STABLE",rs[rs.COMPOSABLE_STABLE_V2=3]="COMPOSABLE_STABLE_V2";const ls=Pt.createInterface();class ds{static encodeApproveVault(e,t){return ls.encodeFunctionData("approveVault",[e,t])}static encodeSetRelayerApproval(e,t,a){return ls.encodeFunctionData("setRelayerApproval",[e,t,a])}static encodeGaugeWithdraw(e,t,a,n){return ls.encodeFunctionData("gaugeWithdraw",[e,t,a,n])}static encodeGaugeDeposit(e,t,a,n){return ls.encodeFunctionData("gaugeDeposit",[e,t,a,n])}static encodeSwap(e){return ls.encodeFunctionData("swap",[e.request,e.funds,e.limit,e.deadline,e.value,e.outputReference])}static encodeBatchSwap(e){return ls.encodeFunctionData("batchSwap",[e.swapType,e.swaps,e.assets,e.funds,e.limits,e.deadline,e.value,e.outputReferences])}static encodeExitPool(e){return ls.encodeFunctionData("exitPool",[e.poolId,e.poolKind,e.sender,e.recipient,e.exitPoolRequest,e.outputReferences])}static encodeJoinPool(e){return ls.encodeFunctionData("joinPool",[e.poolId,e.kind,e.sender,e.recipient,e.joinPoolRequest,e.value,e.outputReference])}static encodeWrapAaveDynamicToken(e){return ls.encodeFunctionData("wrapAaveDynamicToken",[e.staticToken,e.sender,e.recipient,e.amount,e.fromUnderlying,e.outputReference])}static encodeUnwrapAaveStaticToken(e){return ls.encodeFunctionData("unwrapAaveStaticToken",[e.staticToken,e.sender,e.recipient,e.amount,e.toUnderlying,e.outputReference])}static encodeUnwrapWstETH(e){return ls.encodeFunctionData("unwrapWstETH",[e.sender,e.recipient,e.amount,e.outputReference])}static encodeUnwrap(e,t){let a;switch(t){case"AaveLinear":return this.encodeUnwrapAaveStaticToken({staticToken:e.wrappedToken,sender:e.sender,recipient:e.recipient,amount:e.amount,toUnderlying:!0,outputReference:e.outputReference});case"BeefyLinear":case"ERC4626Linear":a="unwrapERC4626";break;case"EulerLinear":a="unwrapEuler";break;case"GearboxLinear":a="unwrapGearbox";break;case"ReaperLinear":a="unwrapReaperVaultToken";break;case"TetuLinear":a="unwrapTetu";break;case"YearnLinear":a="unwrapYearn";break;case"MidasLinear":a="unwrapCompoundV2";break;case"SiloLinear":a="unwrapShareToken";break;default:throw new Error("Unwrapping not supported for this pool type: "+t)}return ls.encodeFunctionData(a,[e.wrappedToken,e.sender,e.recipient,e.amount,e.outputReference])}static encodePeekChainedReferenceValue(e){return ls.encodeFunctionData("peekChainedReferenceValue",[e])}static toChainedReference(e,t=!0){const a=t?ds.CHAINED_REFERENCE_TEMP_PREFIX:ds.CHAINED_REFERENCE_READONLY_PREFIX,o=`0x${a}${"0".repeat(64-a.length)}`;return n.BigNumber.from(o).add(e)}static fromChainedReference(e,t=!0){const a=t?ds.CHAINED_REFERENCE_TEMP_PREFIX:ds.CHAINED_REFERENCE_READONLY_PREFIX,o=`0x${a}${"0".repeat(64-a.length)}`;return n.BigNumber.from(e).sub(n.BigNumber.from(o))}static isChainedReference(e){const t=n.BigNumber.from(e),a=n.BigNumber.from("0xfff0000000000000000000000000000000000000000000000000000000000000"),o=t.toBigInt()&a.toBigInt();return"0xba10000000000000000000000000000000000000000000000000000000000000"===n.BigNumber.from(o)._hex.toString()}static formatExitPoolInput(e){const{assets:t,minAmountsOut:a,userData:n,toInternalBalance:o,poolId:i,poolKind:s,sender:r,recipient:l,outputReferences:d}=e;return{poolId:i,poolKind:s,sender:r,recipient:l,outputReferences:d,exitPoolRequest:{assets:t,minAmountsOut:a,userData:n,toInternalBalance:o}}}static formatJoinPoolInput(e){const{assets:t,maxAmountsIn:a,userData:n,fromInternalBalance:o,poolId:i,kind:s,sender:r,recipient:l,value:d,outputReference:p}=e;return{poolId:i,kind:s,sender:r,recipient:l,value:d,outputReference:p,joinPoolRequest:{assets:t,maxAmountsIn:a,userData:n,fromInternalBalance:o}}}}ds.CHAINED_REFERENCE_TEMP_PREFIX="ba10",ds.CHAINED_REFERENCE_READONLY_PREFIX="ba11",ds.signRelayerApproval=async(e,t,n,o)=>{const i=o.interface.encodeFunctionData("setRelayerApproval",[t,e,!0]),s=await ae.signSetRelayerApprovalAuthorization(o,n,e,i);return ae.encodeCalldataAuthorization("0x",a.MaxUint256,s)};class ps{constructor(e){this.url=Di(e).urls.subgraph,this.client=this.initClient()}initClient(){return Zo(new u.GraphQLClient(this.url))}}class us{constructor(e,t){this.swaps=t||new ss(e)}async fetchPools(){return this.swaps.fetchPools()}getPools(){return this.swaps.getPools()}async getSpotPrice(t,a,n=[]){0===n.length&&(await this.fetchPools(),n=this.getPools());const o=d.parseToPoolsDict(n,0),i=this.swaps.sor.routeProposer.getCandidatePathsFromDict(t,a,0,o,4);if(0===i.length)throw new Ma(e.BalancerErrorCode.UNSUPPORTED_PAIR);return d.getSpotPriceAfterSwapForPath(i[0],0,d.ZERO).toString()}}const cs=["function getPoolId() view returns (bytes32)","function getSwapFeePercentage() view returns (uint256)","function getProtocolFeesCollector() view returns (address)","function inRecoveryMode() view returns (bool)"];class ys{constructor(e,a,n={}){this.multicall=e,this.options=n,this.calls=[],this.paths=[],this.interface=new t.Interface(a)}call(e,t,a,n){return this.calls.push([t,a,n]),this.paths.push(e),this}async execute(e={}){const t=e;return(await this.executeMulticall()).forEach(((e,a)=>r.set(t,this.paths[a],e.length>1?e:e[0]))),this.calls=[],this.paths=[],t}async executeMulticall(){const[,e]=await this.multicall.callStatic.aggregate(this.calls.map((([e,t,a])=>({target:e,callData:this.interface.encodeFunctionData(t,a)}))),this.options);return e.map(((e,t)=>this.interface.decodeFunctionResult(this.calls[t][1],e)))}}function bs(e){return Math.round(Date.now()/1e3)-e<86400}class ms{constructor(e,t){this.veBalAddress=e,this.multicall=t}async getLockInfo(e){if(!this.veBalAddress)throw new Error("veBal address must be defined");const t=new ys(this.multicall,[...Pa.abi]);t.call("locked",this.veBalAddress,"locked",[e]),t.call("epoch",this.veBalAddress,"epoch"),t.call("totalSupply",this.veBalAddress,"totalSupply()");const a=await t.execute();return this.formatLockInfo(a)}formatLockInfo(e){const[t,a]=e.locked,n=t.gt(0),o=1e3*a.toNumber();const i=n&&Date.now()>o;return{lockedEndDate:o,lockedAmount:Ce(t),totalSupply:Ce(e.totalSupply),epoch:Ce(e.epoch,0),hasExistingLock:n,isExpired:i}}}class fs{constructor(e,t){if(!e.veBalProxy)throw new Error("veBalProxy address must be defined");this.instance=xa.connect(e.veBalProxy,t)}async getAdjustedBalance(e){return Ce(await this.instance.adjustedBalanceOf(e))}}class Ts{constructor(e,t){this.getLiquidityGauge=ea.connect,this.contractAddresses="number"==typeof e?Ba[e].addresses.contracts:e;const a=pa.connect(this.contractAddresses.vault,t),n=bt.connect(this.contractAddresses.balancerHelpers,t);let o;this.contractAddresses.lidoRelayer&&(o=Yt.connect(this.contractAddresses.lidoRelayer,t));const i=aa.connect(this.contractAddresses.multicall,t),s=gt.connect(this.contractAddresses.balancerRelayer,t);let r,l,d,p,u,c,y,b,m,f,T;this.contractAddresses.veBal&&(r=new ms(this.contractAddresses.veBal,i)),this.contractAddresses.veBalProxy&&(l=new fs(this.contractAddresses,t)),this.contractAddresses.gaugeClaimHelper&&(d=Gt.connect(this.contractAddresses.gaugeClaimHelper,t)),this.contractAddresses.composableStablePoolFactory&&(p=At.connect(this.contractAddresses.composableStablePoolFactory,t)),this.contractAddresses.weightedPoolFactory&&(u=ba.connect(this.contractAddresses.weightedPoolFactory,t)),this.contractAddresses.aaveLinearPoolFactory&&(c=lt.connect(this.contractAddresses.aaveLinearPoolFactory,t)),this.contractAddresses.erc4626LinearPoolFactory&&(y=Ft.connect(this.contractAddresses.erc4626LinearPoolFactory,t)),this.contractAddresses.eulerLinearPoolFactory&&(b=Dt.connect(this.contractAddresses.eulerLinearPoolFactory,t)),this.contractAddresses.gearboxLinearPoolFactory&&(m=$t.connect(this.contractAddresses.gearboxLinearPoolFactory,t)),this.contractAddresses.yearnLinearPoolFactory&&(f=ha.connect(this.contractAddresses.yearnLinearPoolFactory,t)),this.contractAddresses.gyroConfigProxy&&(T=jt.connect(this.contractAddresses.gyroConfigProxy,t)),this.instances={aaveLinearPoolFactory:c,balancerHelpers:n,BasePool:this.getBasePool,composableStablePoolFactory:p,ERC20:this.getErc20,erc4626LinearPoolFactory:y,eulerLinearPoolFactory:b,gaugeClaimHelper:d,gearboxLinearPoolFactory:m,gyroConfig:T,liquidityGauge:this.getLiquidityGauge,lidoRelayer:o,multicall:i,relayer:s,veBal:r,veBalProxy:l,weightedPoolFactory:u,yearnLinearPoolFactory:f,vault:a}}get contracts(){return this.instances}getErc20(e,t){return Bt.connect(e,t)}getBasePool(e,t){return((e,t)=>new b.Contract(e,cs,t))(e,t)}}class hs{constructor(e,t){this.tokenPrices=e,this.tokenHistoricalPrices=t}async calcImpLoss(t,a){if(1e3*t>=Date.now())throw console.error(`[ImpermanentLossService][calcImpLoss]Error: ${Ma.getMessage(e.BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE)}`),new Ma(e.BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE);const n=await this.prepareData(t,a),o=this.getPoolValueDelta(n),i=this.getHoldValueDelta(n);return this.calculateImpermanentLoss(o,i)}calculateImpermanentLoss(e,t){return Math.floor(100*Math.abs(e/t-1)*100)/100}getPoolValueDelta(e){return e.reduce(((e,t)=>e*Math.pow(Math.abs(t.priceDelta+1),t.weight)),1)}getHoldValueDelta(e){return e.reduce(((e,t)=>e+Math.abs(t.priceDelta+1)*t.weight),0)}async prepareData(e,t){const a=t.tokens.filter((e=>e.address!==t.address)),n=this.getWeights(a),o=a.map((e=>e.address)),i=await this.getEntryPrices(e,o),s=await this.getExitPrices(a);return this.getAssets(a,s,i,n)}getAssets(e,t,a,n){return e.map(((e,o)=>({priceDelta:this.getDelta(a[e.address],t[e.address]),weight:n[o]})))}getDelta(t,a){if(0===t)throw console.error(`[ImpermanentLossService][getDelta]Error: ${Ma.getMessage(e.BalancerErrorCode.ILLEGAL_PARAMETER)}: entry price is 0`),new Ma(e.BalancerErrorCode.ILLEGAL_PARAMETER);return(a-t)/t}getWeights(t){const a=t.every((e=>!e.weight)),n=Math.round(1/t.length*100)/100,o=a?t.map((()=>n)):t.map((e=>{var t;return Number(null!==(t=e.weight)&&void 0!==t?t:0)}));if(o.some((e=>0===e)))throw console.error(`[ImpermanentLossService][getWeights]Error: ${Ma.getMessage(e.BalancerErrorCode.MISSING_WEIGHT)}`),new Ma(e.BalancerErrorCode.MISSING_WEIGHT);return o}async getExitPrices(t){var a;const n=await Promise.all(t.map((e=>this.tokenPrices.find(e.address)))).catch((()=>[]));if(!n.length||n.some((e=>void 0===(null==e?void 0:e.usd))))throw console.error(`[ImpermanentLossService][getExitPrices]Error: ${Ma.getMessage(e.BalancerErrorCode.MISSING_PRICE_RATE)}`),new Ma(e.BalancerErrorCode.MISSING_PRICE_RATE);const o=t.map(((e,t)=>({...e,price:n[t]}))),i={};for(const e of o)(null===(a=e.price)||void 0===a?void 0:a.usd)&&(i[e.address]=+e.price.usd);return i}async getEntryPrices(t,a){const n={};for(const o of a){const a=await this.tokenHistoricalPrices.findBy(o,t).catch((e=>{X.getInstance().warn(`[ImpermanentLossService][getEntryPrices]Error: ${e.message}`)}));if(!(null==a?void 0:a.usd)){throw X.getInstance().warn(`[ImpermanentLossService][getEntryPrices]Error: ${Ma.getMessage(e.BalancerErrorCode.MISSING_PRICE_RATE)}`),new Ma(e.BalancerErrorCode.MISSING_PRICE_RATE)}n[o]=+a.usd}return n}}const Is=145e3,gs=1648465251,_s=31536e3,Ps=2**(1/4),ws=(e=Math.round((new Date).getTime()/1e3))=>{const t=Math.floor((e-gs)/_s);return Is*Ps**-t},xs=e=>365*(Is*Ps**-e/7);var Es=Object.freeze({__proto__:null,INITIAL_RATE:Is,START_EPOCH_TIME:gs,weekly:ws,total:xs,between:(e,t)=>{if(et.address!==e.address)),n=await Promise.all(a.map((async t=>{let a=0;const n=await this.tokenYields.find(t.address);if(n)a="MetaStable"===e.poolType||e.poolType.includes("Gyro")?n*(1-await this.protocolSwapFeePercentage(e)):"ComposableStable"===e.poolType||"Weighted"===e.poolType&&e.poolTypeVersion>=2?t.isExemptFromYieldProtocolFee?n:n*(1-parseFloat(e.protocolYieldFeeCache||"0.5")):n;else{const n=await this.pools.findBy("address",t.address);if(n){const o=await this.swapFees(n);let i=(await this.tokenAprs(n)).total;("ComposableStable"===e.poolType||"Weighted"===e.poolType&&2===e.poolTypeVersion)&&(t.isExemptFromYieldProtocolFee||(i*=1-parseFloat(e.protocolYieldFeeCache||"0.5"))),a=o+i}}return a}))),o=async e=>{var a,n,o,i,s;let r;if(e.weight)return parseFloat(e.weight);if(null===(n=null===(a=e.token)||void 0===a?void 0:a.pool)||void 0===n?void 0:n.poolType){const t=await this.pools.findBy("address",e.address);t&&(r=(await this.bptPrice(t)).toString())}else r=(null===(o=e.price)||void 0===o?void 0:o.usd)||(null===(i=await this.tokenPrices.find(e.address))||void 0===i?void 0:i.usd)||(null===(s=e.token)||void 0===s?void 0:s.latestUSDPrice);if(r){return parseFloat(e.balance)*parseFloat(r)/parseFloat(t)}throw`No price for ${e.address}`},i=await Promise.all(a.map((async(e,t)=>{if(0===n[t])return 0;try{const a=await o(e);return Math.round(n[t]*a)}catch(e){return X.getInstance().error(e),0}})));return{total:i.reduce(((e,t)=>e+t),0),breakdown:r.pickBy(r.zipObject(a.map((e=>e.address)),i),r.identity)}}async stakingApr(e,t=1){if(!this.liquidityGauges)return 0;const a=await this.liquidityGauges.findBy("poolId",e.id);if(!a||1==e.chainId&&0===a.workingSupply||e.chainId>1&&0===a.totalSupply||e.chainId>1&&0===a.balInflationRate)return 0;const n=Ba[e.chainId].addresses.tokens.bal;if(!n)return 0;const[o,i]=await Promise.all([this.tokenPrices.find(n),this.bptPrice(e)]);if(!(null==o?void 0:o.usd))throw"Missing BAL price";const s=(a.workingSupply+.4)/.4*i;if(a.balInflationRate){const e=86400*a.balInflationRate*365*parseFloat(o.usd);return Math.round(1e4*t*e/s)}if(e.chainId>1){if(!a.rewardTokens)return 0;const e=n&&a.rewardTokens[n];if(!e)return 0;{let t;try{t=await this.rewardTokenApr(n,e);const o=a.totalSupply*i,s=t.value/o;return Math.round(1e4*s)}catch(e){return 0}}}const r=parseFloat(o.usd),l=Math.round((new Date).getTime()/1e3),d=ws(l)/7*365*a.relativeWeight*r;return Math.round(1e4*t*d/s)}async rewardAprs(e){if(!this.liquidityGauges)return{total:0,breakdown:{}};const t=await this.liquidityGauges.findBy("poolId",e.id);if(!t||!t.rewardTokens||Object.keys(t.rewardTokens).length<1)return{total:0,breakdown:{}};const a=Ba[e.chainId].addresses.tokens.bal,n=Object.keys(t.rewardTokens).filter((e=>e!=a)).map((async e=>{const a=t.rewardTokens[e];try{return await this.rewardTokenApr(e,a)}catch(t){return{address:e,value:0}}})),o=await this.bptPrice(e),i=t.totalSupply*o;if(0==i)return{total:0,breakdown:{}};const s={};let r=0;for await(const e of Object.values(n)){const t=e.value/i,a=Math.round(1e4*t);r+=a,s[e.address]=a}return{total:r,breakdown:s}}async protocolApr(e){if("0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014"!=e.id||!this.feeDistributor)return 0;const t=new As(this.feeDistributor,this.tokenPrices),{lastWeekBalRevenue:a,lastWeekBBAUsdRevenue:n,veBalSupply:o}=await t.data(),i=await this.bptPrice(e);if(!i)throw"bptPrice for veBal pool missing";const s=(a+n)/7;return Math.round(365*s*1e4/(i*o))}async apr(e){if(Ui.includes(e.id))return{swapFees:0,tokenAprs:{total:0,breakdown:{}},stakingApr:{min:0,max:0},rewardAprs:{total:0,breakdown:{}},protocolApr:0,min:0,max:0};const[t,a,n,o,i,s]=await Promise.all([this.swapFees(e),this.tokenAprs(e),this.stakingApr(e),this.stakingApr(e,2.5),this.rewardAprs(e),this.protocolApr(e)]);return{swapFees:t,tokenAprs:a,stakingApr:{min:n,max:o},rewardAprs:i,protocolApr:s,min:t+a.total+i.total+n,max:t+a.total+i.total+s+o}}async last24hFees(e){return new Ss(this.yesterdaysPools).last24h(e)}async totalLiquidity(e){try{const t=new Sn(this.pools,this.tokenPrices);return await t.getLiquidity(e)}catch(t){return X.getInstance().warn("Liquidity calculcation failed, falling back to subgraph"),e.totalLiquidity}}async bptPrice(e){return parseFloat(await this.totalLiquidity(e))/parseFloat(e.totalShares)}async protocolSwapFeePercentage(e){let t=.5;return t=e.poolType.includes("Gyro")&&this.gyroConfigRepository?await this.gyroConfigRepository.getGyroProtocolFee(e.address):e.protocolSwapFeeCache?parseFloat(e.protocolSwapFeeCache):await this.feeCollector.find("")||.5,t}async rewardTokenApr(e,t){if(t.period_finish.toNumber(){e.includes("Linear")&&ks.includes(e)&&Bs.set(e,"batchSwap")})),Bs.set(e.PoolType.Element,"batchSwap"),Bs.set(e.PoolType.Investment,"joinPool"),Bs.set(e.PoolType.LiquidityBootstrapping,"joinPool"),Bs.set(e.PoolType.MetaStable,"joinPool"),Bs.set(e.PoolType.Stable,"joinPool"),Bs.set(e.PoolType.StablePhantom,"batchSwap"),Bs.set(e.PoolType.Weighted,"joinPool"),Bs.set(e.PoolType.ComposableStable,"joinPool");const Cs=new Map;ks.forEach((e=>{e.includes("Linear")&&ks.includes(e)&&Cs.set(e,"batchSwap")})),Cs.set(e.PoolType.Element,"batchSwap"),Cs.set(e.PoolType.Investment,"exitPool"),Cs.set(e.PoolType.LiquidityBootstrapping,"exitPool"),Cs.set(e.PoolType.MetaStable,"exitPool"),Cs.set(e.PoolType.Stable,"exitPool"),Cs.set(e.PoolType.StablePhantom,"batchSwap"),Cs.set(e.PoolType.Weighted,"exitPool"),Cs.set(e.PoolType.ComposableStable,"exitPool");class Os{constructor(t){this.pools=t,this.getGraphNodes=async(t,a,n)=>{if(!await this.pools.find(a))throw new Ma(e.BalancerErrorCode.POOL_DOESNT_EXIST);const o=await this.buildGraphFromRootPool(a,n);if(o.id!==a)throw new Error("Error creating graph nodes");return t?Os.orderByBfs(o).reverse():Os.orderByBfs(o)}}async buildGraphFromRootPool(t,n){const o=await this.pools.find(t);if(!o)throw new Ma(e.BalancerErrorCode.POOL_DOESNT_EXIST);return(await this.buildGraphFromPool(o.address,0,void 0,a.WeiPerEther,n))[0]}getTokenTotal(e){const t=e.tokensList.indexOf(e.address);let n=a.Zero;const{balancesEvm:o}=me(e);return o.forEach(((e,a)=>{t!==a&&(n=n.add(e))})),n}async buildGraphFromPool(t,o,i,s,r){var l;const d=await this.pools.findBy("address",t);if(!d){if(i){const e=await this.pools.findBy("address",i.address),a=e.tokensList.indexOf(t),n=null!==(l=e.tokens[a].decimals)&&void 0!==l?l:18,{balancesEvm:r}=me(e);return Os.createInputTokenNode(o,t,n,i,s,r[a].toString())}throw new Ma(e.BalancerErrorCode.POOL_DOESNT_EXIST)}const p=Bs.get(d.poolType),u=Cs.get(d.poolType);if(!p||!u)throw new Ma(e.BalancerErrorCode.UNSUPPORTED_POOL_TYPE);const c=this.getTokenTotal(d),{spotPriceCalculator:y}=An.from(d.poolType),b={};let m=18;d.tokens.forEach((e=>{if(je(e.address,d.address))return void(m=e.decimals?e.decimals:18);const t=y.calcPoolSpotPrice(e.address,d.address,d);b[e.address]=t}));let f={address:d.address,id:d.id,type:d.poolType,joinAction:p,exitAction:u,isProportionalExit:!1,children:[],marked:!1,index:o.toString(),parent:i,proportionOfParent:s,isLeaf:!1,spotPrices:b,decimals:m,balance:d.totalShares,priceRate:a.WeiPerEther.toString()};if(this.updateNodeIfProportionalExit(d,f),o++,d.poolType.toString().includes("Linear"))[f,o]=this.createLinearNodeChildren(f,o,d,r);else{const{balancesEvm:e}=me(d);for(let t=0;t2)&&(a.isProportionalExit=!0)}createLinearNodeChildren(e,t,a,n){var o;if(void 0===a.mainIndex)throw new Error("Issue With Linear Pool");if(n.map((e=>e.toLowerCase())).includes(a.tokensList[a.mainIndex].toLowerCase())){const n=this.createWrappedTokenNode(a,t,e,e.proportionOfParent);return e.children.push(n[0]),[e,n[1]]}{const{balancesEvm:n}=me(a),i=null!==(o=a.tokens[a.mainIndex].decimals)&&void 0!==o?o:18,s=Os.createInputTokenNode(t,a.tokensList[a.mainIndex],i,e,e.proportionOfParent,n[a.mainIndex].toString());return e.children.push(s[0]),[e,t=s[1]]}}createWrappedTokenNode(e,t,a,n){var o;if(void 0===e.wrappedIndex||void 0===e.mainIndex)throw new Error("Issue With Linear Pool");const{balancesEvm:i,upScaledBalances:s,scalingFactorsRaw:r,priceRates:l}=me(e),d={type:"WrappedToken",address:e.tokensList[e.wrappedIndex],id:"N/A",children:[],marked:!1,joinAction:"wrap",exitAction:"unwrap",isProportionalExit:!1,index:t.toString(),parent:a,proportionOfParent:n,isLeaf:!1,spotPrices:{},decimals:18,balance:i[e.wrappedIndex].toString(),priceRate:l[e.wrappedIndex].toString()};t++;const p=null!==(o=e.tokens[e.mainIndex].decimals)&&void 0!==o?o:18,u=ue(s[e.wrappedIndex],r[e.mainIndex]).toString(),c=Os.createInputTokenNode(t,e.tokensList[e.mainIndex],p,d,n,u);return d.children=[c[0]],[d,t=c[1]]}static createInputTokenNode(e,t,n,o,i,s){return[{address:t,id:"N/A",type:"Input",children:[],marked:!1,joinAction:"input",exitAction:"output",isProportionalExit:!1,index:e.toString(),parent:o,proportionOfParent:i,isLeaf:!0,spotPrices:{},decimals:n,balance:s,priceRate:a.WeiPerEther.toString()},e+1]}static orderByBfs(e){const t=[],a=[];for(e.marked=!0,t.push(e);t.length>0;){const e=t.shift();e&&a.push(e),null==e||e.children.forEach((e=>{e.marked||(e.marked=!0,t.push(e))}))}return a}static getLeafAddresses(e){return e.filter((e=>e.isLeaf)).map((e=>e.address))}static isProportionalPools(e){return e.every((e=>!(e.children.length>1)||e.isProportionalExit))}}class Ms{constructor(){}}Ms.joinInit=e=>t.defaultAbiCoder.decode(["uint256","uint256[]"],e),Ms.joinExactTokensInForBPTOut=e=>t.defaultAbiCoder.decode(["uint256","uint256[]","uint256"],e),Ms.joinTokenInForExactBPTOut=e=>t.defaultAbiCoder.decode(["uint256","uint256","uint256"],e),Ms.joinAllTokensInForExactBPTOut=e=>t.defaultAbiCoder.decode(["uint256","uint256"],e),Ms.exitExactBPTInForOneTokenOut=e=>t.defaultAbiCoder.decode(["uint256","uint256","uint256"],e),Ms.exitExactBPTInForTokensOut=e=>t.defaultAbiCoder.decode(["uint256","uint256"],e),Ms.exitBPTInForExactTokensOut=e=>t.defaultAbiCoder.decode(["uint256","uint256[]","uint256"],e);class Fs{constructor(e){this.relayerModel=e}joinKind(e){const a=t.defaultAbiCoder.decode(["uint256"],e)[0];if(!a)throw new Error("No exit kind.");return a.toNumber()}decodeJoinData(t,a){if(a===e.WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT){return Ms.joinAllTokensInForExactBPTOut(t).toString()}if(a===e.WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT){const[,e]=Ms.joinExactTokensInForBPTOut(t);return e}if(a===e.WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT){const[,e,a]=Ms.joinTokenInForExactBPTOut(t);return[e.toString(),a]}throw new Error("Non supported join data")}allTokensInForExactBPTOut(){throw new Error("joinAllTokensInForExactBPTOut not supported")}joinExactTokensInForBPTOut(t,a){const o=this.decodeJoinData(t,e.WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT),i=this.relayerModel.doChainedRefReplacements(o),s=a._calcBptOutGivenExactTokensIn(i.map((e=>n.BigNumber.from(e))));if("StablePhantom"==a.SubgraphType||"ComposableStable"==a.SubgraphType){const e=a.tokens.find((e=>je(e.address,a.address)));if(!e)throw new Error("Pool does not contain BPT as a token");const t=n.parseFixed(e.balance.toString(),e.decimals);a.updateTokenBalanceForPool(a.address,t.sub(s))}else a.updateTokenBalanceForPool(a.address,a.totalShares.add(s));const r=a.tokens.filter((e=>!je(e.address,a.address)));return i.forEach(((e,t)=>{const o=n.parseFixed(r[t].balance.toString(),r[t].decimals);a.updateTokenBalanceForPool(r[t].address,o.add(e))})),[s.toString(),r.map((e=>e.address)),i]}joinTokenInForExactBPTOut(t,a){const[o,i]=this.decodeJoinData(t,e.WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT),s=this.relayerModel.doChainedRefReplacement(o),r=a.parsePoolPairData(a.tokensList[Number(i)],a.address),l=n.formatFixed(s,18),p=a._tokenInForExactTokenOut(r,d.bnum(l.toString())).dp(r.decimalsIn),u=n.parseFixed(p.toString(),r.decimalsIn);return a.updateTokenBalanceForPool(r.tokenIn,r.balanceIn.add(u)),a.updateTokenBalanceForPool(r.tokenOut,r.balanceOut.add(s)),[u.toString(),r.tokenIn,u.toString()]}async doJoinPool(t,n){const o=n[t.poolId],i=this.joinKind(t.encodedUserData);let s="0",r=[],l=[];if(i===e.WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT)s=this.allTokensInForExactBPTOut();else if(i===e.WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT)[s,r,l]=this.joinExactTokensInForBPTOut(t.encodedUserData,o);else{if(i!==e.WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT)throw new Error("Exit type not implemented");{let e,a;[s,e,a]=this.joinTokenInForExactBPTOut(t.encodedUserData,o),r.push(e),l.push(a)}}return r.push(o.address),l.push(a.Zero.sub(s).toString()),t.outputReference&&ds.isChainedReference(t.outputReference)&&this.relayerModel.setChainedReferenceValue(t.outputReference,s),[r,l]}}class Rs{constructor(e){this.relayerModel=e}exitKind(a,n){const o=t.defaultAbiCoder.decode(["uint256"],n)[0];if(!o)throw new Error("No exit kind.");return"ComposableStable"===a?o.toNumber()===e.ComposableStablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT?e.WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT:o.toNumber()===e.ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT?e.WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT:e.WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT:o.toNumber()}decodeExitData(t,a){if(a===e.WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT){const[,e,a]=Ms.exitBPTInForExactTokensOut(t);return[e.toString(),a.toString()]}if(a===e.WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT){const[,e,a]=Ms.exitExactBPTInForOneTokenOut(t);return[e.toString(),a.toString()]}if(a===e.WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT){const[,e]=Ms.exitExactBPTInForTokensOut(t);return[e.toString()]}throw new Error("Non supported exit data")}exactBptInForTokensOut(t,a){const[o]=this.decodeExitData(t,e.WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT),i=this.relayerModel.doChainedRefReplacement(o),s=a._calcTokensOutGivenExactBptIn(n.BigNumber.from(i)).map((e=>e.toString()));if("StablePhantom"==a.SubgraphType||"ComposableStable"==a.SubgraphType){const e=a.tokens.find((e=>je(e.address,a.address)));if(!e)throw new Error("Pool does not contain BPT as a token");const t=n.parseFixed(e.balance.toString(),e.decimals);a.updateTokenBalanceForPool(a.address,t.add(i))}else a.updateTokenBalanceForPool(a.address,a.totalShares.sub(i));const r=a.tokens.filter((e=>!je(e.address,a.address)));return s.forEach(((e,t)=>{const o=n.parseFixed(r[t].balance.toString(),r[t].decimals);a.updateTokenBalanceForPool(r[t].address,o.sub(e))})),[i,r.map((e=>e.address)),s]}exactBptInForOneTokenOut(t,a){const[o,i]=this.decodeExitData(t,e.WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT),s=this.relayerModel.doChainedRefReplacement(o),r=a.parsePoolPairData(a.address,a.tokensList[Number(i)]),l=n.formatFixed(s,r.decimalsIn),p=a._exactTokenInForTokenOut(r,d.bnum(l)).dp(r.decimalsOut),u=n.parseFixed(p.toString(),r.decimalsOut),c=function(e,t){const a=[];return t.forEach((t=>{const o=e.tokens.findIndex((e=>je(e.address,t)));if(o<0)throw"Pool does not contain tokenIn";a.push(n.parseFixed(e.tokens[o].balance,e.tokens[o].decimals).toString())})),a}(a,[a.address,r.tokenOut]);a.updateTokenBalanceForPool(r.tokenOut,n.BigNumber.from(c[1]).sub(u)),"StablePhantom"==a.SubgraphType||"ComposableStable"==a.SubgraphType?a.updateTokenBalanceForPool(a.address,n.BigNumber.from(c[0]).add(s)):a.updateTokenBalanceForPool(a.address,a.totalShares.sub(s));const y=a.tokensList.filter((e=>!je(e,a.address))),b=new Array(y.length).fill("0");return b[Number(i)]=u.toString(),[s,y,b]}async doExitPool(t,n){const o=n[t.poolId],i=this.exitKind(o.SubgraphType,t.encodedUserData);let s,r=[],l=[];const d=[],p=[];if(i===e.WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT)[s,l,r]=this.exactBptInForTokensOut(t.encodedUserData,o);else{if(i!==e.WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT)throw new Error("Exit type not implemented");[s,l,r]=this.exactBptInForOneTokenOut(t.encodedUserData,o)}for(let e=0;ea.Zero.sub(e).toString()))),[d,p]}}class Ns{constructor(e){this.relayerModel=e}async doSingleSwap(e,t){const n=this.relayerModel.doChainedRefReplacement(e.request.amount.toString()),o=t[e.request.poolId],[,i]=this.doSwap(e.request.assetIn,e.request.assetOut,o,e.request.kind,n),s=a.Zero.sub(i);if(!e.outputReference)throw new Error("Missing outputReference");return this.relayerModel.setChainedReferenceValue(e.outputReference.toString(),s.abs().toString()),[s.toString(),n]}async doBatchSwap(t,n){const o=t.assets,i=new Array(o.length).fill(a.Zero);let s;for(let e=0;e{const r=o[a.assetInIndex],l=o[a.assetOutIndex],d=n[a.poolId];let p=a.amount;"0"===p&&(p=s);const[u,c]=this.doSwap(r,l,d,t.swapType,p);s=t.swapType===e.SwapType.SwapExactIn?c.toString():u.toString(),i[a.assetInIndex]=i[a.assetInIndex].add(u),i[a.assetOutIndex]=i[a.assetOutIndex].sub(c)}));for(let e=0;ee.toString()))}doSwap(t,o,i,s,r){const l=i.parsePoolPairData(t,o),p=s===e.SwapType.SwapExactIn;let u=p?n.BigNumber.from(r):a.Zero,c=p?a.Zero:n.BigNumber.from(r);const y=n.formatFixed(u,l.decimalsIn),b=n.formatFixed(c,l.decimalsOut);if(p){const e=i._exactTokenInForTokenOut(l,d.bnum(y.toString())).dp(l.decimalsOut);c=n.parseFixed(e.toString(),l.decimalsOut)}else{const e=i._tokenInForExactTokenOut(l,d.bnum(b.toString())).dp(l.decimalsIn);u=n.parseFixed(e.toString(),l.decimalsIn)}return i.updateTokenBalanceForPool(l.tokenIn,l.balanceIn.add(u)),i.updateTokenBalanceForPool(l.tokenOut,l.balanceOut.sub(c)),[u,c]}}class Ls{constructor(e){this.relayerModel=e}async doUnwrap(e,t){const o=t[e.poolId],i=o.tokens[o.wrappedIndex],s=o.tokens[o.mainIndex],r=this.relayerModel.doChainedRefReplacement(e.amount.toString()),l=ye.divDownFixed(ye.mulDownFixed(BigInt(r),n.parseFixed(i.priceRate,18).toBigInt()),a.WeiPerEther.toBigInt()).toString();this.relayerModel.setChainedReferenceValue(e.outputReference.toString(),l);return[[i.address,s.address],[r,a.Zero.sub(l).toString()]]}}class Ds{constructor(e){this.relayerModel=e,this.joinModel=new Fs(e),this.exitModel=new Rs(e),this.swapModel=new Ns(e),this.unwrapModel=new Ls(e)}async doJoin(e,t){return this.joinModel.doJoinPool(e,t)}async doExit(e,t){return this.exitModel.doExitPool(e,t)}async doBatchSwap(e,t){return this.swapModel.doBatchSwap(e,t)}async doSingleSwap(e,t){return this.swapModel.doSingleSwap(e,t)}async doUnwrap(e,t){return this.unwrapModel.doUnwrap(e,t)}}class Us{constructor(){this.chainedRefs={}}setChainedReferenceValue(e,t){this.chainedRefs[e]=t}getChainedReferenceValue(e){return this.chainedRefs[e]}doChainedRefReplacement(e){return ds.isChainedReference(e.toString())?this.getChainedReferenceValue(e.toString()):e}doChainedRefReplacements(e){return e.map((e=>this.doChainedRefReplacement(e).toString()))}}class Vs{constructor(e,t){this.poolDataService=e,this.wrappedNativeAsset=t,this.poolsArray=[],this.poolsDict={}}dataSource(){return this.poolDataService}async all(e=!1){if(e||0===this.poolsArray.length){const e=r.cloneDeep(await this.dataSource().getPools());for(const t of e)if(["Weighted","Investment","Stable","LiquidityBootstrapping"].includes(t.poolType)){const e={address:t.address,balance:t.totalShares,decimals:18,priceRate:"1",weight:"0"};t.tokens.push(e),t.tokensList.push(t.address)}this.poolsArray=e}return this.poolsArray}parseToPoolsDict(e){return Object.fromEntries(r.cloneDeep(e).filter((e=>e.tokensList.length>0&&"0"!==e.tokens[0].balance)).map((e=>[e.id,this.parseNewPool(e)])).filter((([,e])=>void 0!==e)))}parseNewPool(e){if(!e.swapEnabled)return;let t={};try{if(["Weighted","Investment","LiquidityBootstrapping"].includes(e.poolType)){t=d.WeightedPool.fromPool(e,!1)}else if("Stable"===e.poolType){t=d.StablePool.fromPool(e)}else if("MetaStable"===e.poolType){t=d.MetaStablePool.fromPool(e)}else if(e.poolType.toString().includes("Linear")){t=d.LinearPool.fromPool(e)}else if("StablePhantom"===e.poolType){t=d.PhantomStablePool.fromPool(e)}else{if("ComposableStable"!==e.poolType){return void X.getInstance().warn(`Unknown pool type or type field missing: ${e.poolType} ${e.id}`)}t=d.ComposableStablePool.fromPool(e)}if(!t)throw new Error("Issue with Pool");t.SubgraphType=e.poolType}catch(e){return void console.error("Error parseNewPool")}return t}async poolsDictionary(e=!1){if(e||0===Object.keys(this.poolsDict).length){const t=await this.all(e);this.poolsDict=this.parseToPoolsDict(t)}return this.poolsDict}}var qs,Gs;!function(e){e[e.BatchSwap=0]="BatchSwap",e[e.Join=1]="Join",e[e.Exit=2]="Exit",e[e.Swap=3]="Swap",e[e.Unwrap=4]="Unwrap"}(qs||(qs={}));class Ws{constructor(e,t){this.poolsSource=new Vs(e,t)}updateDeltas(e,t,n){return t.forEach(((t,o)=>{e[t]||(e[t]=a.Zero),e[t]=e[t].add(n[o])})),e}async multicall(e,t=!1){const a=new Us,n=new Ds(a),o=await this.poolsSource.poolsDictionary(t),i={};for(const t of e){let e=[],a=[];switch(t.actionType){case qs.Join:[e,a]=await n.doJoin(t,o);break;case qs.Exit:[e,a]=await n.doExit(t,o);break;case qs.BatchSwap:e=t.assets,a=await n.doBatchSwap(t,o);break;case qs.Swap:e=[t.request.assetOut,t.request.assetIn],a=await n.doSingleSwap(t,o);break;case qs.Unwrap:[e,a]=await n.doUnwrap(t,o)}this.updateDeltas(i,e,a)}return i}static mapSwapRequest(e){return{actionType:qs.Swap,request:e.request,funds:e.funds,outputReference:e.outputReference}}static mapBatchSwapRequest(e){return{actionType:qs.BatchSwap,swaps:e.swaps,assets:e.assets,funds:e.funds,swapType:e.swapType,outputReferences:e.outputReferences}}static mapJoinPoolRequest(e){return{actionType:qs.Join,poolId:e.poolId,encodedUserData:e.joinPoolRequest.userData,outputReference:e.outputReference}}static mapExitPoolRequest(e){return{actionType:qs.Exit,poolId:e.poolId,encodedUserData:e.exitPoolRequest.userData,outputReferences:e.outputReferences}}static mapUnwrapRequest(e,t,a){return{actionType:qs.Unwrap,poolId:a,amount:e,outputReference:t}}}const Hs=gt.createInterface();function Ks(e){X.getInstance()}class $s{constructor(t,o,i){this.poolGraph=t,this.simulationService=i,this.createCalls=async(e,t,a,n,o)=>{const{multiRequests:i,encodedCalls:s,outputIndexes:r,deltas:l}=this.createActionCalls(e,t,a,n);o&&s.unshift(this.createSetRelayerApproval(o));return{multiRequests:i,encodedCall:Hs.encodeFunctionData("multicall",[s]),outputIndexes:o?r.map((e=>e+1)):r,deltas:l}},this.amountsOutByJoinPath=async(e,t,o,i,s,r,l,d)=>{const p=await this.simulationService.simulateGeneralisedJoin(this.relayer,t,o,s,e,i,r,l,d),u=p.reduce(((e,t)=>e.add(n.BigNumber.from(t))),a.Zero).toString();return{amountsOut:p,totalAmountOut:u}},this.minAmountsOutByJoinPath=(e,t,a)=>({minAmountsOut:t.map((t=>$e(n.BigNumber.from(t),n.BigNumber.from(e)).toString())),totalMinAmountOut:$e(n.BigNumber.from(a),n.BigNumber.from(e)).toString()}),this.createActionCalls=(e,t,a,n)=>{const o=[],i=[],s=[],r=!n,l={};return e.forEach(((e,d)=>{const p=e[0].isLeaf,u=[];if(e.forEach(((o,s)=>{var c,y;if(o.children.length>0&&0===o.children.filter((e=>this.shouldBeConsidered(e))).length)return void(o.index="0");const b=o.children.filter((e=>this.shouldBeConsidered(e))).some((e=>"input"===e.joinAction))?t:this.relayer,m=s===e.length-1,f=null!==(y=p&&(null===(c=o.parent)||void 0===c?void 0:c.children.filter((e=>this.shouldBeConsidered(e))).some((e=>"input"===e.joinAction))))&&void 0!==y&&y,T=m||f?t:this.relayer,h=m&&n?n[d]:"0";switch(o.joinAction){case"batchSwap":{const{modelRequest:e,encodedCall:t,assets:n,amounts:s}=this.createSwap(o,d,h,b,T,a,r);u.push(e),i.push(t),this.updateDeltas(l,n,s)}break;case"joinPool":{const{modelRequest:e,encodedCall:t,assets:n,amounts:s,minBptOut:p}=this.createJoinPool(o,d,h,b,T,a,r);u.push(e),i.push(t),this.updateDeltas(l,[o.address,...n],[p,...s])}break;default:return}})),r){const e=100*d,t=ds.encodePeekChainedReferenceValue(ds.toChainedReference(e,!1));i.push(t),s.push(i.indexOf(t))}o.push(u)})),{multiRequests:o,encodedCalls:i,outputIndexes:s,deltas:l}},this.createSetRelayerApproval=e=>ds.encodeSetRelayerApproval(this.relayer,!0,e),this.createSwap=(t,o,i,s,r,l,d)=>{var p;if(1!==t.children.length)throw new Error("Unsupported swap");const u=t.children[0].address,c=this.getOutputRefValue(o,t.children[0]),y=i,b=l&&!d?this.replaceWrappedNativeAsset([u])[0]:u,m={poolId:t.id,kind:e.SwapType.SwapExactIn,assetIn:b,assetOut:t.address,amount:c.value,userData:"0x"},f={sender:s,recipient:r,fromInternalBalance:this.allImmediateChildrenSendToInternal(t),toInternalBalance:this.allSiblingsSendToInternal(t)},T=n.BigNumber.from(this.getOutputRefValue(o,t).value),h=l&&!d?Ve([b],[c.value]):a.Zero,I={request:m,funds:f,limit:y,deadline:n.BigNumber.from(Math.ceil(Date.now()/1e3)+3600),value:h,outputReference:T},g=ds.encodeSwap(I);Ks(),Ks(JSON.stringify(I)),Ks(JSON.stringify(null===(p=I.value)||void 0===p?void 0:p.toString()));const _=Ws.mapSwapRequest(I),P=t.children.some((e=>"input"===e.joinAction))?c.value:"0",w=null!=t.parent?"0":n.BigNumber.from(i).mul(-1).toString();return{modelRequest:_,encodedCall:g,assets:[t.address,u],amounts:[w,P]}},this.createJoinPool=(t,n,o,i,s,r,l)=>{var d;const p=[],u=[];t.children.forEach((e=>{p.push(e.address),this.shouldBeConsidered(e)?u.push(this.getOutputRefValue(n,e).value):u.push("0")})),t.type===e.PoolType.ComposableStable&&(p.push(t.address),u.push("0"));const c=new z(this.wrappedNativeAsset),[y,b]=c.sortTokens(p,u);let m=[];const f=y.map((e=>e.toLowerCase())).indexOf(t.address.toLowerCase());let T;m=-1===f?b:[...b.slice(0,f),...b.slice(f+1)],T=t.type===e.PoolType.Weighted?v.joinExactTokensInForBPTOut(m,o):S.joinExactTokensInForBPTOut(m,o);const h=r&&!l?Ve(this.replaceWrappedNativeAsset(y),b):a.Zero,I=this.allImmediateChildrenSendToInternal(t),g=ds.formatJoinPoolInput({poolId:t.id,kind:0,sender:i,recipient:s,value:h,outputReference:this.getOutputRefValue(n,t).value,joinPoolRequest:{},assets:r&&!l?this.replaceWrappedNativeAsset(y):y,maxAmountsIn:b,userData:T,fromInternalBalance:I}),_=ds.encodeJoinPool(g);Ks(),Ks(JSON.stringify(g)),Ks(JSON.stringify(null===(d=g.value)||void 0===d?void 0:d.toString()));const P=Ws.mapJoinPoolRequest(g),w=b.map((e=>ds.isChainedReference(e)?"0":e)),x=ds.isChainedReference(o)?"0":o,E=t.children.filter((e=>this.shouldBeConsidered(e))).some((e=>"input"===e.joinAction));return{modelRequest:P,encodedCall:_,assets:E?y:[],amounts:E?w:[],minBptOut:null!=t.parent?a.Zero.toString():a.Zero.sub(x).toString()}},this.getOutputRefValue=(e,t)=>"input"===t.joinAction?{value:t.index,isRef:!1}:"0"===t.index&&t.parent?{value:"0",isRef:!0}:{value:ds.toChainedReference(n.BigNumber.from(t.index).add(100*e)).toString(),isRef:!0},this.shouldBeConsidered=e=>"0"!==e.index,this.sendsToInternalBalance=e=>"input"!==e.joinAction&&"joinPool"!==e.joinAction,this.allImmediateChildrenSendToInternal=e=>{const t=e.children.filter((e=>this.shouldBeConsidered(e)));return 0!==t.length&&t.filter((e=>this.sendsToInternalBalance(e))).length===t.length},this.allSiblingsSendToInternal=e=>{if(!e.parent)return!1;const t=e.parent.children.filter((e=>this.shouldBeConsidered(e)));return t.filter((e=>this.sendsToInternalBalance(e))).length===t.length},this.replaceWrappedNativeAsset=e=>{const t=e.findIndex((e=>e.toLowerCase()===this.wrappedNativeAsset.toLowerCase()));return Ye(e,t,a.AddressZero)};const{tokens:s,contracts:r}=Ca(o.chainId);this.relayer=r.balancerRelayer,this.wrappedNativeAsset=s.wrappedNativeAsset}checkInputs(t,n){if(0===t.length)throw new Ma(e.BalancerErrorCode.MISSING_TOKENS);if(n.every((e=>"0"===e)))throw new Ma(e.BalancerErrorCode.JOIN_WITH_ZERO_AMOUNT);if(t.length!=n.length)throw new Ma(e.BalancerErrorCode.INPUT_LENGTH_MISMATCH);if(t.some((e=>e===a.AddressZero))&&t.some((e=>e.toLowerCase()===this.wrappedNativeAsset.toLowerCase())))throw new Ma(e.BalancerErrorCode.INPUT_TOKEN_INVALID)}async joinPool(e,t,n,o,i,s,r,l){this.checkInputs(t,n);const d=await this.poolGraph.getGraphNodes(!0,e,[]),p=t.findIndex((e=>e===a.AddressZero)),u=-1!==p,c=Ye(t,p,this.wrappedNativeAsset.toLowerCase()),y=$s.getJoinPaths(d,c,n),b=$s.totalBptZeroPriceImpact(y);Ks();const{multiRequests:m,encodedCall:f,outputIndexes:T}=await this.createCalls(y,o,u,void 0,l),{amountsOut:h,totalAmountOut:I}=await this.amountsOutByJoinPath(o,m,f,c,T,s,r,"0"),{minAmountsOut:g,totalMinAmountOut:_}=this.minAmountsOutByJoinPath(i,h,I),P=Fa(BigInt(I),b.toBigInt(),!0).toString();Ks();const{encodedCall:w,deltas:x}=await this.createCalls(y,o,u,g,l),E=u?x[this.wrappedNativeAsset.toLowerCase()]:a.Zero;return Ks(E.toString()),this.assertDeltas(e,x,c,n,_),{to:this.relayer,encodedCall:w,expectedOut:I,minOut:_,priceImpact:P,value:E}}assertDeltas(t,a,o,i,s){var r;const l=N(t);if(a[l.toLowerCase()].add(s).abs().gt(3))throw console.error("join assertDeltas, bptOut: ",l,s,null===(r=a[l.toLowerCase()])||void 0===r?void 0:r.toString()),new Ma(e.BalancerErrorCode.JOIN_DELTA_AMOUNTS);delete a[l.toLowerCase()],o.forEach(((t,o)=>{var s,r;if(!n.BigNumber.from(i[o]).eq(0)&&(null===(s=a[t.toLowerCase()])||void 0===s?void 0:s.toString())!==i[o])throw console.error("join assertDeltas, tokenIn: ",t,i[o],null===(r=a[t.toLowerCase()])||void 0===r?void 0:r.toString()),new Ma(e.BalancerErrorCode.JOIN_DELTA_AMOUNTS);delete a[t.toLowerCase()]}));for(const t in a)if("0"!==a[t].toString())throw console.error("join assertDeltas, non-input token should be 0: ",t,a[t].toString()),new Ma(e.BalancerErrorCode.JOIN_DELTA_AMOUNTS)}updateDeltas(e,t,n){return t.forEach(((t,o)=>{const i=t.toLowerCase();e[i]||(e[i]=a.Zero),e[i]=e[i].add(n[o])})),e}}Gs=$s,$s.getJoinPaths=(e,t,o)=>{const i=[],s=e.filter((e=>t.filter(((e,t)=>n.BigNumber.from(o[t]).gt(0))).map((e=>e.toLowerCase())).includes(e.address.toLowerCase())));s.some((e=>e.isLeaf))&&i.push(e);const l=s.filter((e=>!e.isLeaf));return l.forEach((e=>{const s=o.find(((a,n)=>je(t[n],e.address))),d=l.filter((t=>je(t.address,e.address))).reduce(((e,t)=>e.add(t.proportionOfParent)),n.BigNumber.from(0)),p=n.BigNumber.from(s).mul(e.proportionOfParent).div(d).toString(),[u]=Os.createInputTokenNode(0,e.address,e.decimals,e.parent,a.WeiPerEther,e.balance);u.index=p,u.isLeaf=!1;const c=[u];let y=u.parent,b=u;for(;y;){const e=r.cloneDeep(y);e.children=e.children.map((e=>e.address===b.address?b:{...e,index:"0"})),c.push(e),b=e,y=e.parent}i.push(c)})),Gs.updateInputAmounts(i,t,o),i},$s.updateInputAmounts=(e,t,a)=>{const o=(e,t)=>{if(e.length>1){const a=e.reduce(((e,t)=>e.add(t.index)),n.BigNumber.from(0)),o=n.BigNumber.from(t).sub(a);e[0].index=o.add(e[0].index).toString()}},i=e.find((e=>e[0].isLeaf));if(i){const e=Gs.updateTotalProportions(i);i.forEach((n=>{"input"===n.joinAction&&(n=Gs.updateNodeAmount(n,t,a,e))})),t.forEach(((e,t)=>{const n=i.filter((t=>t.isLeaf&&je(t.address,e)));o(n,a[t])}))}const s=e.filter((e=>!e[0].isLeaf));s.length>1&&t.forEach(((e,t)=>{const n=s.map((e=>e[0])).filter((t=>je(t.address,e)));o(n,a[t])}))},$s.totalBptZeroPriceImpact=e=>{let t=n.BigNumber.from("0");return e.forEach((e=>{if(e[0].isLeaf){e.filter((e=>e.isLeaf)).forEach((e=>{const a=Gs.bptOutZeroPiForInputNode(e);t=t.add(a)}))}else{const a=Gs.bptOutZeroPiForInputNode(e[0]);t=t.add(a)}})),t},$s.bptOutZeroPiForInputNode=e=>{if("0"===e.index||"input"!==e.joinAction)return BigInt(0);let t=1,a=e.parent,o=e.address;for(;void 0!==a;){if("batchSwap"===a.joinAction||"joinPool"===a.joinAction){const e=a.spotPrices[o.toLowerCase()];t*=parseFloat(e),o=a.address}a=a.parent}const i=n.parseFixed(t.toFixed(18),18),s=le(BigInt(e.decimals)),r=de(BigInt(e.index),s);return ye.divDownFixed(r,i.toBigInt())},$s.updateTotalProportions=e=>{const t={};return e.forEach((e=>{t[e.address]?t[e.address]=t[e.address].add(e.proportionOfParent):t[e.address]=e.proportionOfParent})),t},$s.updateNodeAmount=(e,t,a,n)=>{const o=t.map((e=>e.toLowerCase())).indexOf(e.address.toLowerCase());if(-1===o)return e.index="0",e;const i=n[e.address],s=e.proportionOfParent.mul(1e18.toString()).div(i).mul(a[o]).div(1e18.toString());return e.index=s.toString(),e};class Js{constructor(e,t){this.chainId=e,this.simulateMulticall=async(e,t,a,n,o="0")=>{const i={...await this.encodeBalanceAndAllowanceOverrides(a,n),...await this.encodeRelayerApprovalOverride(a,e)};return this.simulateTransaction(e,t,a,i,o)},this.simulateTransaction=async(e,t,a,o,i)=>{const s=Object.fromEntries(Object.keys(o).map((e=>[e,{storage:o[e].value}]))),r={...s,[a]:{balance:n.parseFixed("100",18).toHexString()}},l={network_id:this.chainId.toString(),block_number:this.blockNumber,from:a,to:e,input:t,value:i,save_if_fails:!0,simulation_type:"quick",state_objects:r},d=this.tenderlyUrl+"simulate";return(await E.default.post(d,l,this.opts)).data.transaction.transaction_info.call_trace.output},this.encodeRelayerApprovalOverride=async(e,t)=>{const a={[`${this.vaultAddress}`]:{value:{[`_approvedRelayers[${e}][${t}]`]:(!0).toString()}}};return await this.requestStateOverrides(a)},this.encodeBalanceAndAllowanceOverrides=async(e,t)=>{const n=t.filter((e=>e!==a.AddressZero));if(0===n.length)return{};let o={};n.forEach((t=>o={...o,[`${t}`]:{value:{[`_balances[${e}]`]:a.MaxInt256.toString(),[`_allowances[${e}][${this.vaultAddress}]`]:a.MaxInt256.toString(),[`balanceOf[${e}]`]:a.MaxInt256.toString(),[`allowance[${e}][${this.vaultAddress}]`]:a.MaxInt256.toString(),[`balances[${e}]`]:a.MaxInt256.toString(),[`allowed[${e}][${this.vaultAddress}]`]:a.MaxInt256.toString()}}}));const i=await this.requestStateOverrides(o);if(Object.keys(i).some((e=>2!==Object.keys(i[e].value).length)))throw new Error("Couldn't encode state overrides - states should match the ones in the contracts");return i},this.requestStateOverrides=async e=>{const t=this.tenderlyUrl+"contracts/encode-states",a={networkID:this.chainId.toString(),stateOverrides:e},n=(await E.default.post(t,a,this.opts)).data.stateOverrides;if(!n||Object.keys(n).length!==Object.keys(e).length)throw new Error("Couldn't encode state overrides - contracts should be verified and whitelisted on Tenderly");return n};const{contracts:o}=Ca(this.chainId);this.vaultAddress=o.vault,this.tenderlyUrl=`https://api.tenderly.co/api/v1/account/${t.user}/project/${t.project}/`,this.opts={headers:{"X-Access-Key":t.accessKey}},this.blockNumber=t.blockNumber}}var js;e.SimulationType=void 0,(js=e.SimulationType||(e.SimulationType={}))[js.Tenderly=0]="Tenderly",js[js.VaultModel=1]="VaultModel",js[js.Static=2]="Static";class Xs{constructor(a,n){this.simulateGeneralisedJoin=async(t,a,n,o,i,s,r,l,d)=>{const p=[];switch(l){case e.SimulationType.Tenderly:{if(!this.tenderlyHelper)throw new Error("Missing Tenderly config");const e=await this.tenderlyHelper.simulateMulticall(t,n,i,s,d);p.push(...this.decodeResult(e,o));break}case e.SimulationType.VaultModel:{const e=await this.simulateRequests(a);p.push(...e);break}case e.SimulationType.Static:{const e=await r.call({to:t,data:n,value:d});try{p.push(...this.decodeResult(e,o))}catch(t){const a=Buffer.from(e.split("x")[1],"hex").toString("utf8");throw new Error(`Transaction reverted with error: ${a}`)}break}default:throw new Error("Simulation type not supported")}return p},this.simulateGeneralisedExit=async(t,a,n,o,i,s,r,l)=>{const d=[];switch(l){case e.SimulationType.Tenderly:{if(!this.tenderlyHelper)throw new Error("Missing Tenderly config");const e=await this.tenderlyHelper.simulateMulticall(t,n,i,[s]);d.push(...this.decodeResult(e,o));break}case e.SimulationType.VaultModel:{const e=await this.simulateRequests(a);d.push(...e);break}case e.SimulationType.Static:{const e=await r.call({to:t,data:n});try{d.push(...this.decodeResult(e,o))}catch(t){const a=Buffer.from(e.split("x")[1],"hex").toString("utf8");throw new Error(`Transaction reverted with error: ${a}`)}break}default:throw new Error("Simulation type not supported")}return d},this.decodeResult=(e,a)=>{const n=t.defaultAbiCoder.decode(["bytes[]"],e)[0];return a.map((e=>t.defaultAbiCoder.decode(["uint256"],n[e]).toString()))},this.simulateRequests=async e=>{if(void 0===this.vaultModel)throw new Error("Missing Vault Model Config.");const t=[];for(const[a,n]of e.entries()){const e=await this.vaultModel.multicall(n,0===a),o=Object.values(e).filter((e=>e.lt(0)));if(0===o.length)throw new Error("No delta found for token out.");t.push(...o.map((e=>e.mul(-1).toString())))}return t},a.tenderly&&(this.tenderlyHelper=new Js(a.chainId,a.tenderly)),this.vaultModel=n?new Ws(n,a.addresses.tokens.wrappedNativeAsset):void 0}}const Ys=gt.createInterface();function zs(e){X.getInstance()}class Zs{constructor(e,t,o){this.poolGraph=e,this.simulationService=o,this.amountsOutByExitPath=async(e,t,a,n,o,i,s)=>await this.simulationService.simulateGeneralisedExit(this.relayer,t,a,o,e,n,i,s),this.amountsOutByTokenOut=(e,t,n)=>{const o={};t.forEach(((e,t)=>{var i;return o[e]=(null!==(i=o[e])&&void 0!==i?i:a.Zero).add(n[t])}));return e.map((e=>o[e].toString()))},this.minAmountsOut=(e,t,a)=>({minAmountsOutByExitPath:e.map((e=>$e(n.BigNumber.from(e),n.BigNumber.from(a)).toString())),minAmountsOutByTokenOut:t.map((e=>$e(n.BigNumber.from(e),n.BigNumber.from(a)).toString()))}),this.getExitPaths=(e,t)=>{const o=e.map((e=>{const n=[e];for(;n[0].parent;)n.unshift(r.cloneDeep(n[0].parent));return n[0].index=n[n.length-1].proportionOfParent.mul(t).div(a.WeiPerEther).toString(),n})),i=o.reduce(((e,t)=>{const a=t[0].index;return n.BigNumber.from(a).add(e)}),a.Zero),s=n.BigNumber.from(t).sub(i);return o[o.length-1][0].index=s.add(o[o.length-1][0].index).toString(),o},this.createUnwrap=(e,t,n,o,i,s)=>{var r,l;const d=ds.toChainedReference(this.getOutputRef(n,e.index)).toString(),p=ds.toChainedReference(this.getOutputRef(n,t.index)),u=null===(r=e.parent)||void 0===r?void 0:r.type,c={wrappedToken:e.address,sender:i,recipient:s,amount:d,outputReference:p},y=ds.encodeUnwrap(c,u);zs(),zs(),zs(JSON.stringify(c));return{modelRequest:Ws.mapUnwrapRequest(d,p,null===(l=e.parent)||void 0===l?void 0:l.id),encodedCall:y,assets:[t.address],amounts:[a.Zero.sub(o).toString()]}},this.getOutputRef=(e,t)=>100*e+parseInt(t),this.receivesFromInternal=e=>!!e.parent&&("output"!==e.exitAction&&"unwrap"!==e.exitAction&&"exitPool"!==e.exitAction);const{tokens:i,contracts:s}=Ca(t.chainId);this.wrappedNativeAsset=i.wrappedNativeAsset,this.relayer=s.balancerRelayer}async getExitInfo(t,a,n,o){zs();const i=await this.getExit(t,a,n,o,[],e.SimulationType.VaultModel);return{tokensOut:i.tokensOut,estimatedAmountsOut:i.expectedAmountsOut,priceImpact:i.priceImpact,tokensToUnwrap:i.tokensToUnwrap}}async buildExitCall(e,t,a,n,o,i,s,r){zs();const l=await this.getExit(e,t,a,o,null!=r?r:[],i,s),{minAmountsOutByExitPath:d,minAmountsOutByTokenOut:p}=this.minAmountsOut(l.expectedAmountsOutByExitPath,l.expectedAmountsOut,n);zs();const{encodedCall:u,deltas:c}=await this.createCalls(l.exitPaths,a,l.isProportional,d,s);return this.assertDeltas(e,c,t,l.tokensOut,p),{to:this.relayer,encodedCall:u,tokensOut:l.tokensOut,expectedAmountsOut:l.expectedAmountsOut,minAmountsOut:p,priceImpact:l.priceImpact}}async getExit(e,t,a,o,i,s,r){const l=await this.poolGraph.getGraphNodes(!1,e,i),d=Os.isProportionalPools(l);zs();let p=[],u=[],c=[];const y=l.filter((e=>"output"===e.exitAction));if(u=y.map((e=>e.address.toLowerCase())),c=[...new Set(u)].sort(),d){const e=l.map(((e,a)=>(0===a&&(e.index=t),e)));p[0]=e}else p=this.getExitPaths(y,t);const{multiRequests:b,encodedCall:m,outputIndexes:f}=await this.createCalls(p,a,d,void 0,r),T=await this.amountsOutByExitPath(a,b,m,l[0].address,f,o,s),h=y.filter(((e,t)=>n.BigNumber.from(T[t]).gt(e.balance))).map((e=>e.address.toLowerCase()));if(i.some((e=>h.includes(e.toLowerCase()))))throw new Error("Insufficient pool balance to perform generalised exit - try exitting with smaller amounts");if(h.length>0)return await this.getExit(e,t,a,o,[...new Set(h)].sort(),s,r);{const a=this.amountsOutByTokenOut(c,u,T),n=await this.calculatePriceImpact(e,this.poolGraph,c,a,t);return{tokensToUnwrap:i,tokensOut:c,exitPaths:p,isProportional:d,expectedAmountsOut:a,expectedAmountsOutByExitPath:T,priceImpact:n}}}async calculatePriceImpact(e,t,a,n,o){const i=await t.getGraphNodes(!0,e,[]),s=$s.getJoinPaths(i,a,n),r=$s.totalBptZeroPriceImpact(s);return Fa(BigInt(o),r.toBigInt(),!1).toString()}assertDeltas(t,a,n,o,i){var s;const r=N(t);if(a[r.toLowerCase()].sub(n).abs().gt(3))throw console.error("exit assertDeltas, bptIn: ",r,n,null===(s=a[r.toLowerCase()])||void 0===s?void 0:s.toString()),new Ma(e.BalancerErrorCode.EXIT_DELTA_AMOUNTS);delete a[r.toLowerCase()],o.forEach(((t,n)=>{var o;if(a[t.toLowerCase()].add(i[n]).abs().gt(1))throw console.error("exit assertDeltas, tokenOut: ",t,i[n],null===(o=a[t.toLowerCase()])||void 0===o?void 0:o.toString()),new Ma(e.BalancerErrorCode.EXIT_DELTA_AMOUNTS);delete a[t.toLowerCase()]}));for(const t in a)if("0"!==a[t].toString())throw console.error("exit assertDeltas, non-input token should be 0: ",t,a[t].toString()),new Ma(e.BalancerErrorCode.EXIT_DELTA_AMOUNTS)}async createCalls(e,t,a,n,o){const{multiRequests:i,calls:s,outputIndexes:l,deltas:d}=this.createActionCalls(r.cloneDeep(e),t,a,n);o&&s.unshift(ds.encodeSetRelayerApproval(this.relayer,!0,o));return{multiRequests:i,encodedCall:Ys.encodeFunctionData("multicall",[s]),outputIndexes:o?l.map((e=>e+1)):l,deltas:d}}updateDeltas(e,t,n){return t.forEach(((t,o)=>{const i=t.toLowerCase();e[i]||(e[i]=a.Zero),e[i]=e[i].add(n[o])})),e}createActionCalls(e,t,n,o){const i=[],s=[],r=[],l=!o,d={},p=(e,a)=>a.children.filter((t=>e.map((e=>e.index)).includes(t.index))).some((e=>"output"===e.exitAction))?t:this.relayer;return e.forEach(((e,u)=>{const c=[],y=e.filter((e=>"output"===e.exitAction));e.forEach((i=>{const b=i.children.find((t=>e.map((e=>e.index)).includes(t.index))),m=((e,a)=>a.parent?p(e,a.parent):t)(e,i),f=p(e,i),T=i.children.filter((t=>e.map((e=>e.index)).includes(t.index))).some((e=>"output"===e.exitAction||"unwrap"===e.exitAction));let h="0";const I=Array(i.children.length).fill("0");switch(o&&T&&(n?i.children.forEach(((e,t)=>{let n;"unwrap"===e.exitAction?(n=y.indexOf(e.children[0]),h=a.WeiPerEther.mul(o[n]).div(e.priceRate).toString()):"output"===e.exitAction?(n=y.indexOf(e),h=o[n]):h="0",I[t]=h})):h="unwrap"===(null==b?void 0:b.exitAction)?a.WeiPerEther.mul(o[u]).div(b.priceRate).toString():o[u]),i.exitAction){case"unwrap":{const{modelRequest:e,encodedCall:t,assets:a,amounts:n}=this.createUnwrap(i,b,u,h,m,f);c.push(e),s.push(t),this.updateDeltas(d,a,n);break}case"batchSwap":{const{modelRequest:e,encodedCall:t,assets:a,amounts:n}=this.createSwap(i,b,u,h,m,f);c.push(e),s.push(t),this.updateDeltas(d,a,n);break}case"exitPool":{let e;e=n?this.createExitPoolProportional(i,I,m,f):this.createExitPool(i,b,u,h,m,f);const{modelRequest:t,encodedCall:a,bptIn:o,tokensOut:r,amountsOut:l}=e;c.push(t),s.push(a),this.updateDeltas(d,[i.address,...r],[o,...l]);break}case"output":l&&(s.push(ds.encodePeekChainedReferenceValue(ds.toChainedReference(this.getOutputRef(u,i.index),!1))),r.push(s.length-1));break;default:return}})),i.push(c)})),{multiRequests:i,calls:s,outputIndexes:r,deltas:d}}createSwap(t,a,o,i,s,r){const l=!t.parent,d=l?t.index:ds.toChainedReference(this.getOutputRef(o,t.index)).toString(),p=a.address,u=[p,t.address],c=i,y={poolId:t.id,kind:e.SwapType.SwapExactIn,assetIn:t.address,assetOut:p,amount:d,userData:"0x"},b={sender:s,recipient:r,fromInternalBalance:this.receivesFromInternal(t),toInternalBalance:this.receivesFromInternal(a)},m=ds.toChainedReference(this.getOutputRef(o,a.index)),f={request:y,funds:b,limit:c,deadline:n.BigNumber.from(Math.ceil(Date.now()/1e3)+3600),value:"0",outputReference:m};zs(),zs(JSON.stringify(f));const T=ds.encodeSwap(f),h=l?d:"0";return{modelRequest:Ws.mapSwapRequest(f),encodedCall:T,assets:u,amounts:["output"!==a.exitAction?"0":n.BigNumber.from(i).mul(-1).toString(),h]}}createBatchSwap(t,o,i,s,r,l){const d=!t.parent,p=d?t.index:ds.toChainedReference(this.getOutputRef(i,t.index)).toString(),u=[...o.map((e=>e.address)),t.address],c=[...s];c.push(p);const y=[],b=[];o.forEach(((e,n)=>{const o=e.proportionOfParent.mul(p).div(a.WeiPerEther).toString(),i={poolId:t.id,assetInIndex:u.length-1,assetOutIndex:n,amount:o,userData:"0x"};y.push(i),b.push({index:n,key:ds.toChainedReference(this.getOutputRef(0,e.index))})}));const m=y.reduce(((e,t)=>e.add(t.amount)),n.BigNumber.from(0)),f=n.BigNumber.from(p).sub(m);y[0].amount=f.add(y[0].amount).toString();const T={sender:r,recipient:l,fromInternalBalance:this.receivesFromInternal(t),toInternalBalance:this.receivesFromInternal(o[0])},h={swapType:e.SwapType.SwapExactIn,swaps:y,assets:u,funds:T,limits:c,deadline:n.BigNumber.from(Math.ceil(Date.now()/1e3)+3600),value:"0",outputReferences:b};zs(),zs(JSON.stringify(h));const I=ds.encodeBatchSwap(h),g=Ws.mapBatchSwapRequest(h),_=d?p:"0",P=[...o.map(((e,t)=>"output"!==e.exitAction?"0":n.BigNumber.from(s[t]).mul(-1).toString())),_];return{modelRequest:g,encodedCall:I,assets:u,amounts:P}}createExitPool(t,n,o,i,s,r){const l=n.address,d=!t.parent,p=d?t.index:ds.toChainedReference(this.getOutputRef(o,t.index)).toString(),u=[],c=[];t.children.forEach((e=>{u.push(e.address),c.push(e.address===l?i:"0")})),t.type===e.PoolType.ComposableStable&&(u.push(t.address),c.push("0"));const y=new z(this.wrappedNativeAsset),[b,m]=y.sortTokens(u,c);let f=[];const T=b.map((e=>e.toLowerCase())).indexOf(t.address.toLowerCase());let h;f=-1===T?b:[...b.slice(0,T),...b.slice(T+1)],h=t.type===e.PoolType.Weighted?v.exitExactBPTInForOneTokenOut(p,f.indexOf(l)):S.exitExactBPTInForOneTokenOut(p,f.indexOf(l));const I=[{index:b.map((e=>e.toLowerCase())).indexOf(l.toLowerCase()),key:ds.toChainedReference(this.getOutputRef(o,n.index))}],g=this.receivesFromInternal(n),_=ds.formatExitPoolInput({poolId:t.id,poolKind:0,sender:s,recipient:r,outputReferences:I,exitPoolRequest:{},assets:b,minAmountsOut:m,userData:h,toInternalBalance:g});zs(),zs(JSON.stringify(_));const P=ds.encodeExitPool(_),w=Ws.mapExitPoolRequest(_),x=m.map((e=>ds.isChainedReference(e)?"0":a.Zero.sub(e).toString())),E=ds.isChainedReference(p)?"0":p;return{modelRequest:w,encodedCall:P,bptIn:d?E:a.Zero.toString(),tokensOut:"output"!==n.exitAction?[]:b,amountsOut:"output"!==n.exitAction?[]:x}}createExitPoolProportional(t,n,o,i){const s=!t.parent,r=s?t.index:ds.toChainedReference(this.getOutputRef(0,t.index)).toString(),l=t.children.map((e=>e.address)),d=[...n];t.type===e.PoolType.ComposableStable&&(l.push(t.address),d.push("0"));const p=new z(this.wrappedNativeAsset),[u,c]=p.sortTokens(l,d);let y;y=t.type===e.PoolType.Weighted?v.exitExactBPTInForTokensOut(r):t.type===e.PoolType.ComposableStable?O.exitExactBPTInForAllTokensOut(r):S.exitExactBPTInForTokensOut(r);const b=t.children.map((e=>({index:u.map((e=>e.toLowerCase())).indexOf(e.address.toLowerCase()),key:ds.toChainedReference(this.getOutputRef(0,e.index))})));let m=0;t.type===e.PoolType.ComposableStable&&(m=3);const f=t.children.every((e=>this.receivesFromInternal(e))),T=ds.formatExitPoolInput({poolId:t.id,poolKind:m,sender:o,recipient:i,outputReferences:b,exitPoolRequest:{},assets:u,minAmountsOut:c,userData:y,toInternalBalance:f});zs(),zs(JSON.stringify(T));const h=ds.encodeExitPool(T),I=Ws.mapExitPoolRequest(T),g=c.map((e=>ds.isChainedReference(e)?"0":a.Zero.sub(e).toString())),_=ds.isChainedReference(r)?"0":r,P=s?_:a.Zero.toString(),w=u.filter((e=>t.children.filter((e=>"output"===e.exitAction)).map((e=>e.address)).includes(e))),x=g.filter(((e,t)=>w.includes(u[t])));return{modelRequest:I,encodedCall:h,bptIn:P,tokensOut:w,amountsOut:x}}}class Qs{constructor(e){this.yesterdaysPools=e}async last24h(e){let t;return this.yesterdaysPools&&(t=await this.yesterdaysPools.find(e.id)),e.totalSwapVolume?(null==t?void 0:t.totalSwapVolume)?parseFloat(e.totalSwapVolume)-parseFloat(t.totalSwapVolume):e.createTime&&bs(e.createTime)?parseFloat(e.totalSwapVolume):0:0}}class er{constructor(t,a){this.checkCreateInputs=({tokenAddresses:t,tokenRateCacheDurations:a,exemptFromYieldProtocolFeeFlags:n,rateProviders:o,swapFeeEvm:i})=>{if(t.length!==a.length||a.length!==n.length||n.length!==o.length)throw new Ma(e.BalancerErrorCode.INPUT_LENGTH_MISMATCH);if(BigInt(i)<=BigInt(0)||BigInt(i)>BigInt(1e17))throw new Ma(e.BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE)},this.parseCreateParamsForEncoding=({name:e,symbol:t,tokenAddresses:a,amplificationParameter:n,rateProviders:o,tokenRateCacheDurations:i,exemptFromYieldProtocolFeeFlags:s,swapFeeEvm:r,owner:l,salt:d})=>{const p=new z(this.wrappedNativeAsset),[u,c,y,b]=p.sortTokens(a,o,i,s);return[e,t,u,n,c,y,b,r.toString(),l,d||tt()]},this.encodeCreateFunctionData=e=>At.createInterface().encodeFunctionData("create",e),this.checkInitJoinInputs=({poolId:t,poolAddress:a,tokensIn:n,amountsIn:o})=>{if(!t||!a)throw new Ma(e.BalancerErrorCode.NO_POOL_DATA);if(n.length!==o.length)throw new Ma(e.BalancerErrorCode.INPUT_LENGTH_MISMATCH)},this.parseParamsForInitJoin=({joiner:e,poolId:t,poolAddress:a,tokensIn:n,amountsIn:o})=>{const i=new z(this.wrappedNativeAsset),s=[...n,a],r=[...o,"0"],l=[...o,BigInt.asUintN(256,BigInt(-1)).toString()],[d,p,u]=i.sortTokens(s,r,l),c={poolId:t,sender:e,recipient:e,joinPoolRequest:{assets:d,maxAmountsIn:u,userData:O.joinInit(p),fromInternalBalance:!1}};return{attributes:c,params:[c.poolId,c.sender,c.recipient,c.joinPoolRequest]}},this.encodeInitJoinFunctionData=e=>{const t="joinPool";return{functionName:t,data:pa.createInterface().encodeFunctionData(t,e)}},this.getPoolAddressAndIdWithReceipt=async(e,t)=>{var a;const n=et({receipt:t,to:(null===(a=this.contracts.composableStablePoolFactory)||void 0===a?void 0:a.address)||"",contractInterface:At.createInterface(),logName:"PoolCreated"}).args.pool,o=this.getPoolInterface(),i=new b.Contract(n,o,e);return{poolAddress:n,poolId:await i.getPoolId()}};const{tokens:n}=Ca(t.chainId);this.wrappedNativeAsset=n.wrappedNativeAsset,this.contracts=a}create({name:e,symbol:t,tokenAddresses:a,amplificationParameter:n,rateProviders:o,tokenRateCacheDurations:i,exemptFromYieldProtocolFeeFlags:s,swapFeeEvm:r,owner:l,salt:d}){var p;this.checkCreateInputs({rateProviders:o,tokenAddresses:a,tokenRateCacheDurations:i,exemptFromYieldProtocolFeeFlags:s,swapFeeEvm:r});const u=this.parseCreateParamsForEncoding({name:e,symbol:t,tokenAddresses:a,amplificationParameter:n,rateProviders:o,tokenRateCacheDurations:i,exemptFromYieldProtocolFeeFlags:s,swapFeeEvm:r,owner:l,salt:d}),c=this.encodeCreateFunctionData(u);return{to:null===(p=this.contracts.composableStablePoolFactory)||void 0===p?void 0:p.address,data:c}}buildInitJoin({joiner:e,poolId:t,poolAddress:a,tokensIn:n,amountsIn:o}){this.checkInitJoinInputs({tokensIn:n,amountsIn:o,poolId:t,poolAddress:a});const{attributes:i,params:s}=this.parseParamsForInitJoin({joiner:e,poolId:t,poolAddress:a,tokensIn:n,amountsIn:o}),{functionName:r,data:l}=this.encodeInitJoinFunctionData(s);return{to:ka,functionName:r,data:l,attributes:i}}getPoolInterface(){return xt.createInterface()}}class tr{constructor(t,a){this.parseCreateParamsForEncoding=({name:e,symbol:t,tokenAddresses:a,normalizedWeights:n,rateProviders:o,swapFeeEvm:i,owner:s,salt:r})=>{const l=new z(this.wrappedNativeAsset),[d,p,u]=l.sortTokens(a,n,o);return[e,t,d,p,u,i.toString(),s,r||tt()]},this.encodeCreateFunctionData=e=>ba.createInterface().encodeFunctionData("create",e),this.parseParamsForInitJoin=({joiner:e,poolId:t,tokensIn:a,amountsIn:n})=>{const o=new z(this.wrappedNativeAsset),[i,s]=o.sortTokens(a,n),r={poolId:t,sender:e,recipient:e,joinPoolRequest:{assets:i,maxAmountsIn:s,userData:v.joinInit(s),fromInternalBalance:!1}};return{attributes:r,params:[r.poolId,r.sender,r.recipient,r.joinPoolRequest]}},this.encodeInitJoinFunctionData=e=>{const t="joinPool";return{functionName:t,data:pa.createInterface().encodeFunctionData(t,e)}},this.checkInitJoinInputs=({poolId:t,tokensIn:a,amountsIn:n})=>{if(!t)throw new Ma(e.BalancerErrorCode.NO_POOL_DATA);if(a.length!==n.length)throw new Ma(e.BalancerErrorCode.INPUT_LENGTH_MISMATCH)};const{tokens:n}=Ca(t.chainId);this.wrappedNativeAsset=n.wrappedNativeAsset,this.contracts=a}create({name:e,symbol:t,tokenAddresses:a,normalizedWeights:n,rateProviders:o,swapFeeEvm:i,owner:s,salt:r}){var l;this.checkCreateInputs({tokenAddresses:a,normalizedWeights:n,swapFeeEvm:i,rateProviders:o});const d=this.parseCreateParamsForEncoding({name:e,symbol:t,tokenAddresses:a,normalizedWeights:n,rateProviders:o,swapFeeEvm:i,owner:s,salt:r}),p=this.encodeCreateFunctionData(d);return{to:null===(l=this.contracts.weightedPoolFactory)||void 0===l?void 0:l.address,data:p}}checkCreateInputs({tokenAddresses:t,normalizedWeights:a,swapFeeEvm:n,rateProviders:o}){if(t.length!==a.length||a.length!==o.length)throw new Ma(e.BalancerErrorCode.INPUT_LENGTH_MISMATCH);if(t.length<2)throw new Ma(e.BalancerErrorCode.BELOW_MIN_TOKENS);if(t.length>8)throw new Ma(e.BalancerErrorCode.ABOVE_MAX_TOKENS);if(BigInt(n)<=BigInt(0)||BigInt(n)>BigInt(1e17))throw new Ma(e.BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE);if(a.reduce(((e,t)=>ye.add(e,BigInt(t))),BigInt(0))!==BigInt(1e18))throw new Ma(e.BalancerErrorCode.INVALID_WEIGHTS)}buildInitJoin({joiner:e,poolId:t,tokensIn:a,amountsIn:n}){this.checkInitJoinInputs({poolId:t,tokensIn:a,amountsIn:n});const{attributes:o,params:i}=this.parseParamsForInitJoin({joiner:e,poolId:t,tokensIn:a,amountsIn:n}),{functionName:s,data:r}=this.encodeInitJoinFunctionData(i);return{to:ka,functionName:s,data:r,attributes:o}}async getPoolAddressAndIdWithReceipt(e,t){var a;const n=et({receipt:t,to:(null===(a=this.contracts.weightedPoolFactory)||void 0===a?void 0:a.address)||"",contractInterface:ba.createInterface(),logName:"PoolCreated"}).args.pool,o=this.getPoolInterface(),i=new b.Contract(n,o,e);return{poolAddress:n,poolId:await i.getPoolId()}}getPoolInterface(){return ca.createInterface()}}var ar;e.ProtocolId=void 0,(ar=e.ProtocolId||(e.ProtocolId={}))[ar.AAVE_V1=0]="AAVE_V1",ar[ar.AAVE_V2=1]="AAVE_V2",ar[ar.AAVE_V3=2]="AAVE_V3",ar[ar.AMPLEFORTH=3]="AMPLEFORTH",ar[ar.BEEFY=4]="BEEFY",ar[ar.EULER=5]="EULER",ar[ar.GEARBOX=6]="GEARBOX",ar[ar.IDLE=7]="IDLE",ar[ar.MORPHO=8]="MORPHO",ar[ar.RADIANT=9]="RADIANT",ar[ar.REAPER=10]="REAPER",ar[ar.SILO=11]="SILO",ar[ar.STARGATE=12]="STARGATE",ar[ar.STURDY=13]="STURDY",ar[ar.TESSERA=14]="TESSERA",ar[ar.TETU=15]="TETU",ar[ar.YEARN=16]="YEARN",ar[ar.MIDAS=17]="MIDAS",ar[ar.AGAVE=18]="AGAVE";class nr{constructor(t,a){this.getPoolFactoryInterface=()=>{switch(this.poolType){case e.PoolType.AaveLinear:return lt.createInterface();case e.PoolType.Linear:case e.PoolType.ERC4626Linear:return Ft.createInterface();case e.PoolType.EulerLinear:return Dt.createInterface();case e.PoolType.GearboxLinear:return $t.createInterface();case e.PoolType.YearnLinear:return ha.createInterface();default:throw new Ma(e.BalancerErrorCode.UNSUPPORTED_POOL_TYPE)}},this.getPoolInterface=()=>{switch(this.poolType){case e.PoolType.AaveLinear:return st.createInterface();case e.PoolType.Linear:case e.PoolType.ERC4626Linear:return Ot.createInterface();case e.PoolType.EulerLinear:return Nt.createInterface();case e.PoolType.GearboxLinear:return Ht.createInterface();case e.PoolType.YearnLinear:return fa.createInterface();default:throw new Ma(e.BalancerErrorCode.UNSUPPORTED_POOL_TYPE)}},this.checkCreateInputs=({swapFeeEvm:t,protocolId:a})=>{if(!e.ProtocolId[a])throw new Ma(e.BalancerErrorCode.INVALID_PROTOCOL_ID);if(BigInt(t)<=BigInt(0)||BigInt(t)>BigInt(1e17))throw new Ma(e.BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE);this.getFactoryAddress()},this.parseCreateParamsForEncoding=({name:t,symbol:a,mainToken:n,wrappedToken:o,upperTargetEvm:i,swapFeeEvm:s,owner:r,protocolId:l,salt:d})=>this.poolType===e.PoolType.EulerLinear?[t,a,n,o,i,s,r,l.toString()]:[t,a,n,o,i,s,r,l.toString(),d||tt()],this.encodeCreateFunctionData=t=>{const a=this.getPoolFactoryInterface();return this.poolType,e.PoolType.EulerLinear,a.encodeFunctionData("create",t)},this.getFactoryAddress=()=>{switch(this.poolType){case e.PoolType.AaveLinear:if(this.contracts.aaveLinearPoolFactory)return this.contracts.aaveLinearPoolFactory.address;throw new Ma(e.BalancerErrorCode.UNSUPPORTED_POOL_TYPE);case e.PoolType.Linear:case e.PoolType.ERC4626Linear:if(this.contracts.erc4626LinearPoolFactory)return this.contracts.erc4626LinearPoolFactory.address;throw new Ma(e.BalancerErrorCode.UNSUPPORTED_POOL_TYPE);case e.PoolType.EulerLinear:if(this.contracts.eulerLinearPoolFactory)return this.contracts.eulerLinearPoolFactory.address;throw new Ma(e.BalancerErrorCode.UNSUPPORTED_POOL_TYPE);case e.PoolType.GearboxLinear:if(this.contracts.gearboxLinearPoolFactory)return this.contracts.gearboxLinearPoolFactory.address;throw new Ma(e.BalancerErrorCode.UNSUPPORTED_POOL_TYPE);case e.PoolType.YearnLinear:if(this.contracts.yearnLinearPoolFactory)return this.contracts.yearnLinearPoolFactory.address;throw new Ma(e.BalancerErrorCode.UNSUPPORTED_POOL_TYPE);default:throw new Ma(e.BalancerErrorCode.UNSUPPORTED_POOL_TYPE)}},this.getPoolAddressAndIdWithReceipt=async(e,t)=>{const a=et({receipt:t,to:this.getFactoryAddress()||"",contractInterface:this.getPoolFactoryInterface(),logName:"PoolCreated"}).args.pool,n=this.getPoolInterface(),o=new b.Contract(a,n,e);return{poolAddress:a,poolId:await o.getPoolId()}},this.contracts=t,this.poolType=a}buildInitJoin(){throw new Ma(e.BalancerErrorCode.UNSUPPORTED_POOL_TYPE)}create({name:e,symbol:t,mainToken:a,wrappedToken:n,upperTargetEvm:o,swapFeeEvm:i,owner:s,protocolId:r,salt:l}){this.checkCreateInputs({swapFeeEvm:i,protocolId:r});const d=this.parseCreateParamsForEncoding({name:e,symbol:t,mainToken:a,wrappedToken:n,upperTargetEvm:o,swapFeeEvm:i,owner:s,protocolId:r,salt:l}),p=this.encodeCreateFunctionData(d);return{to:this.getFactoryAddress(),data:p}}}class or{constructor(e,t){this.networkConfig=e,this.contracts=t.contracts}of(t){switch(t){case"Weighted":return new tr(this.networkConfig,this.contracts);case"Investment":case"LiquidityBootstrapping":case"Stable":case"MetaStable":case"StablePhantom":default:throw new Ma(e.BalancerErrorCode.UNSUPPORTED_POOL_TYPE);case"ComposableStable":return new er(this.networkConfig,this.contracts);case"Linear":case"AaveLinear":case"ERC4626Linear":case"EulerLinear":case"GearboxLinear":case"YearnLinear":return new nr(this.contracts,t)}}}class ir{constructor(t){this.pool=t;const a=(t=>{switch(t){case e.PoolType.Weighted:return v;case e.PoolType.Stable:case e.PoolType.MetaStable:case e.PoolType.StablePhantom:case e.PoolType.Element:case e.PoolType.Gyro2:case e.PoolType.Gyro3:return S;case e.PoolType.ComposableStable:return O;default:if(Qe(t))return S}})(t.poolType);if(!a)throw"Pool type not supported";this.encoder=a}buildQueryJoinExactIn({maxAmountsInByToken:e,minimumBPT:t=a.Zero}){const o=this.pool.tokensList.findIndex((e=>this.pool.id.includes(e))),i=[...this.pool.tokensList],s=this.pool.tokensList.map((t=>{var a;return null!==(a=e.get(t))&&void 0!==a?a:n.BigNumber.from("0")}));let r;r=o>-1?ze(s,o):s;const l=this.encoder.joinExactTokensInForBPTOut(r,t);return[this.pool.id,a.AddressZero,a.AddressZero,{assets:i,maxAmountsIn:s,userData:l,fromInternalBalance:!1}]}buildQueryJoinExactOut({maxAmountIn:e,bptOut:t,tokenIn:n}){const o=this.pool.tokensList.findIndex((e=>this.pool.id.includes(e)));let i=[...this.pool.tokensList];o>-1&&(i=ze(this.pool.tokensList,o));const s=i.indexOf(n),r=this.encoder.joinTokenInForExactBPTOut(t,s),l=e?this.pool.tokensList.map((t=>t===n?e:"0")):[];return[this.pool.id,a.AddressZero,a.AddressZero,{assets:this.pool.tokensList,maxAmountsIn:l,userData:r,fromInternalBalance:!1}]}buildQueryExitToSingleToken({minAmountOut:e,bptIn:t,tokenOut:n}){const o=this.pool.tokensList.findIndex((e=>this.pool.id.includes(e)));let i=[...this.pool.tokensList];o>-1&&(i=ze(this.pool.tokensList,o));const s=i.indexOf(n),r=this.encoder.exitExactBPTInForOneTokenOut(t,s),l=e?this.pool.tokensList.map((t=>t===n?e:"0")):[];return[this.pool.id,a.AddressZero,a.AddressZero,{assets:this.pool.tokensList,minAmountsOut:l,userData:r,toInternalBalance:!1}]}buildQueryExitProportionally({minAmountsOut:e=[],bptIn:t}){if(!this.encoder.exitExactBPTInForTokensOut)throw"Proportional exit not implemented";const n=this.encoder.exitExactBPTInForTokensOut(t);return[this.pool.id,a.AddressZero,a.AddressZero,{assets:this.pool.tokensList,minAmountsOut:e,userData:n,toInternalBalance:!1}]}buildQueryExitExactOut({minAmountsOut:e,maxBptIn:t=a.MaxUint256}){const n=this.pool.tokensList.findIndex((e=>this.pool.id.includes(e)));let o=[...e];n>-1&&(o=ze(e,n));const i=this.encoder.exitBPTInForExactTokensOut(o,t);return[this.pool.id,a.AddressZero,a.AddressZero,{assets:this.pool.tokensList,minAmountsOut:e,userData:i,toInternalBalance:!1}]}}class sr{constructor(e){this.liquidityGaugesRepository=e}async relativeWeight(e){const t=await this.liquidityGaugesRepository.findBy("poolId",e);return t?t.relativeWeight:0}async weekly(e){return ws()*await this.relativeWeight(e)}}const rr=(e,t,a)=>{const o=e.tokens.filter((t=>!e.id.toLowerCase().includes(t.address.toLowerCase()))),i=o.findIndex((e=>e.address.toLowerCase()===t.toLowerCase()));if(-1==i)throw new Error("Token not found in pool");const s=o.map((e=>Oe(e.balance,e.decimals))),r=n.BigNumber.from(a),l=s.map((e=>e.mul(r).div(s[i])));return{tokens:o.map((e=>e.address)),amounts:l.map((e=>e.toString()))}},lr=(e,t)=>()=>{throw`${t} for poolType ${e} not implemented`};class dr{constructor(e,t,a){this.networkConfig=e,this.repositories=t,this.balancerContracts=a,this.aprService=new vs(this.repositories.pools,this.repositories.tokenPrices,this.repositories.tokenMeta,this.repositories.tokenYields,this.repositories.feeCollector,this.repositories.yesterdaysPools,this.repositories.liquidityGauges,this.repositories.feeDistributor,this.repositories.gyroConfigRepository),this.liquidityService=new Sn(t.pools,t.tokenPrices),this.simulationService=new Xs(e,this.repositories.poolsForSimulations),this.graphService=new Os(this.repositories.poolsOnChain),this.joinService=new $s(this.graphService,e,this.simulationService),this.exitService=new Zs(this.graphService,e,this.simulationService),this.feesService=new Ss(t.yesterdaysPools),this.volumeService=new Qs(t.yesterdaysPools),this.poolFactory=new or(e,a),this.impermanentLossService=new hs(t.tokenPrices,t.tokenHistoricalPrices),t.liquidityGauges&&(this.emissionsService=new sr(t.liquidityGauges)),this.proportionalAmounts=rr}static wrap(e,t){let a,n,o;try{a=An.from(e.poolType),o={buildJoin:(t,n,o,s)=>a.join.buildJoin({joiner:t,pool:e,tokensIn:n,amountsIn:o,slippage:s,wrappedNativeAsset:i}),calcPriceImpact:async(t,n,o)=>a.priceImpactCalculator.calcPriceImpact(e,t.map(BigInt),BigInt(n),o),buildExitExactBPTIn:(t,n,o,s=!1,r,l=!1)=>{if(a.exit.buildExitExactBPTIn)return a.exit.buildExitExactBPTIn({exiter:t,pool:e,bptIn:n,slippage:o,shouldUnwrapNativeAsset:s,wrappedNativeAsset:i,singleTokenOut:r,toInternalBalance:l});throw"ExitExactBPTIn not supported"},buildExitExactTokensOut:(t,n,o,s,r=!1)=>a.exit.buildExitExactTokensOut({exiter:t,pool:e,tokensOut:n,amountsOut:o,slippage:s,wrappedNativeAsset:i,toInternalBalance:r}),buildRecoveryExit:(t,n,o,i=!1)=>a.exit.buildRecoveryExit({exiter:t,pool:e,bptIn:n,slippage:o,toInternalBalance:i}),calcSpotPrice:(t,n)=>a.spotPriceCalculator.calcPoolSpotPrice(t,n,e),calcProportionalAmounts:(t,a)=>rr(e,t,a)}}catch(t){if("UNSUPPORTED_POOL_TYPE"!=t.code){X.getInstance().warn(t)}o={buildJoin:lr(e.poolType,"buildJoin"),calcPriceImpact:lr(e.poolType,"calcPriceImpact"),buildExitExactBPTIn:lr(e.poolType,"buildExitExactBPTIn"),buildExitExactTokensOut:lr(e.poolType,"buildExitExactTokensOut"),calcSpotPrice:lr(e.poolType,"calcSpotPrice"),buildRecoveryExit:lr(e.poolType,"buildRecoveryExit")}}try{n=new ir(e),o={...o,buildQueryJoinExactIn:n.buildQueryJoinExactIn.bind(n),buildQueryJoinExactOut:n.buildQueryJoinExactOut.bind(n),buildQueryExitExactOut:n.buildQueryExitExactOut.bind(n),buildQueryExitToSingleToken:n.buildQueryExitToSingleToken.bind(n),buildQueryExitProportionally:n.buildQueryExitProportionally.bind(n)}}catch(t){o={...o,buildQueryJoinExactIn:lr(e.poolType,"buildQueryJoinExactIn"),buildQueryJoinExactOut:lr(e.poolType,"buildQueryJoinExactOut"),buildQueryExitExactOut:lr(e.poolType,"buildQueryExitExactOut"),buildQueryExitToSingleToken:lr(e.poolType,"buildQueryExitToSingleToken"),buildQueryExitProportionally:lr(e.poolType,"buildQueryExitProportionally")}}const i=t.addresses.tokens.wrappedNativeAsset.toLowerCase(),s=e.tokensList.indexOf(e.address);return{...e,...o,bptIndex:s}}dataSource(){return this.repositories.pools}async apr(e){return this.aprService.apr(e)}async impermanentLoss(e,t){return this.impermanentLossService.calcImpLoss(e,t)}async liquidity(e){return this.liquidityService.getLiquidity(e)}async bptPrice(e){return this.liquidityService.getBptPrice(e)}buildJoin({pool:e,tokensIn:t,amountsIn:a,userAddress:n,slippage:o}){const i=An.from(e.poolType);if(!i)throw`buildJoin for poolType ${e.poolType} not implemented`;return i.join.buildJoin({joiner:n,pool:e,tokensIn:t,amountsIn:a,slippage:o,wrappedNativeAsset:this.networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase()})}buildExitExactBPTIn({pool:e,bptAmount:t,userAddress:a,slippage:n,shouldUnwrapNativeAsset:o,singleTokenOut:i}){const s=An.from(e.poolType);if(!s||!s.exit.buildExitExactBPTIn)throw`buildExit for poolType ${e.poolType} not implemented`;return s.exit.buildExitExactBPTIn({pool:e,exiter:a,bptIn:t,slippage:n,wrappedNativeAsset:this.networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase(),shouldUnwrapNativeAsset:null!=o&&o,singleTokenOut:null!=i?i:void 0,toInternalBalance:!1})}buildRecoveryExit({pool:e,bptAmount:t,userAddress:a,slippage:n,toInternalBalance:o}){const i=An.from(e.poolType);if(!i||!i.exit.buildRecoveryExit)throw`buildRecoveryExit for poolType ${e.poolType} not implemented`;return i.exit.buildRecoveryExit({exiter:a,pool:e,bptIn:t,slippage:n,toInternalBalance:!!o})}async generalisedJoin(e,t,a,n,o,i,s,r){return this.joinService.joinPool(e,t,a,n,o,i,s,r)}async generalisedExit(e,t,a,n,o,i,s,r){return this.exitService.buildExitCall(e,t,a,n,o,i,s,r)}calcPriceImpact({pool:e,tokenAmounts:t,bptAmount:a,isJoin:n}){return An.from(e.poolType).priceImpactCalculator.calcPriceImpact(e,t.map(BigInt),BigInt(a),n)}async getExitInfo(e,t,a,n){return this.exitService.getExitInfo(e,t,a,n)}async fees(e){return this.feesService.last24h(e)}async volume(e){return this.volumeService.last24h(e)}async find(e){const t=await this.dataSource().find(e);if(t)return dr.wrap(t,this.networkConfig)}async findBy(e,t){if("id"==e)return this.find(t);if("address"==e){const e=await this.dataSource().findBy("address",t);if(!e)return;return dr.wrap(e,this.networkConfig)}throw`search by ${e} not implemented`}async all(){const e=await this.dataSource().all();return e?e.map((e=>dr.wrap(e,this.networkConfig))).filter((e=>e)):[]}async where(e){const t=await this.dataSource().where(e);if(!t)return[];return t.map((e=>dr.wrap(e,this.networkConfig))).filter((e=>e))}}const pr=new ve("strings/5.7.0");var ur,cr;function yr(e,t,a,n,o){if(e===cr.BAD_PREFIX||e===cr.UNEXPECTED_CONTINUE){let e=0;for(let n=t+1;n>6==2;n++)e++;return e}return e===cr.OVERRUN?a.length-t-1:0}function br(e,t=ur.current){t!=ur.current&&(pr.checkNormalize(),e=e.normalize(t));let a=[];for(let t=0;t>6|192),a.push(63&n|128);else if(55296==(64512&n)){t++;const o=e.charCodeAt(t);if(t>=e.length||56320!=(64512&o))throw new Error("invalid utf-8 string");const i=65536+((1023&n)<<10)+(1023&o);a.push(i>>18|240),a.push(i>>12&63|128),a.push(i>>6&63|128),a.push(63&i|128)}else a.push(n>>12|224),a.push(n>>6&63|128),a.push(63&n|128)}return i.arrayify(a)}function mr(e){const t=br(e);if(t.length>31)throw new Error("bytes32 string must be less than 32 bytes");return i.hexlify(i.concat([t,a.HashZero]).slice(0,32))}!function(e){e.current="",e.NFC="NFC",e.NFD="NFD",e.NFKC="NFKC",e.NFKD="NFKD"}(ur||(ur={})),function(e){e.UNEXPECTED_CONTINUE="unexpected continuation byte",e.BAD_PREFIX="bad codepoint prefix",e.OVERRUN="string overrun",e.MISSING_CONTINUE="missing continuation byte",e.OUT_OF_RANGE="out of UTF-8 range",e.UTF16_SURROGATE="UTF-16 surrogate",e.OVERLONG="overlong representation"}(cr||(cr={})),Object.freeze({error:function(e,t,a,n,o){return pr.throwArgumentError(`invalid codepoint at offset ${t}; ${e}`,"bytes",a)},ignore:yr,replace:function(e,t,a,n,o){return e===cr.OVERLONG?(n.push(o),0):(n.push(65533),yr(e,t,a))}});var fr="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},Tr={exports:{}};!function(e){!function(){var t="input is invalid type",a="object"==typeof window,n=a?window:{};n.JS_SHA3_NO_WINDOW&&(a=!1);var o=!a&&"object"==typeof self;!n.JS_SHA3_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node?n=fr:o&&(n=self);var i=!n.JS_SHA3_NO_COMMON_JS&&e.exports,s=!n.JS_SHA3_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,r="0123456789abcdef".split(""),l=[4,1024,262144,67108864],d=[0,8,16,24],p=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],u=[224,256,384,512],c=[128,256],y=["hex","buffer","arrayBuffer","array","digest"],b={128:168,256:136};!n.JS_SHA3_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!s||!n.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer});for(var m=function(e,t,a){return function(n){return new B(e,t,e).update(n)[a]()}},f=function(e,t,a){return function(n,o){return new B(e,t,o).update(n)[a]()}},T=function(e,t,a){return function(t,n,o,i){return P["cshake"+e].update(t,n,o,i)[a]()}},h=function(e,t,a){return function(t,n,o,i){return P["kmac"+e].update(t,n,o,i)[a]()}},I=function(e,t,a,n){for(var o=0;o>5,this.byteCount=this.blockCount<<2,this.outputBlocks=a>>5,this.extraBytes=(31&a)>>3;for(var n=0;n<50;++n)this.s[n]=0}function C(e,t,a){B.call(this,e,t,a)}B.prototype.update=function(e){if(this.finalized)throw new Error("finalize already called");var a,n=typeof e;if("string"!==n){if("object"!==n)throw new Error(t);if(null===e)throw new Error(t);if(s&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||s&&ArrayBuffer.isView(e)))throw new Error(t);a=!0}for(var o,i,r=this.blocks,l=this.byteCount,p=e.length,u=this.blockCount,c=0,y=this.s;c>2]|=e[c]<>2]|=i<>2]|=(192|i>>6)<>2]|=(128|63&i)<=57344?(r[o>>2]|=(224|i>>12)<>2]|=(128|i>>6&63)<>2]|=(128|63&i)<>2]|=(240|i>>18)<>2]|=(128|i>>12&63)<>2]|=(128|i>>6&63)<>2]|=(128|63&i)<=l){for(this.start=o-l,this.block=r[u],o=0;o>=8);a>0;)o.unshift(a),a=255&(e>>=8),++n;return t?o.push(n):o.unshift(n),this.update(o),o.length},B.prototype.encodeString=function(e){var a,n=typeof e;if("string"!==n){if("object"!==n)throw new Error(t);if(null===e)throw new Error(t);if(s&&e.constructor===ArrayBuffer)e=new Uint8Array(e);else if(!(Array.isArray(e)||s&&ArrayBuffer.isView(e)))throw new Error(t);a=!0}var o=0,i=e.length;if(a)o=i;else for(var r=0;r=57344?o+=3:(l=65536+((1023&l)<<10|1023&e.charCodeAt(++r)),o+=4)}return o+=this.encode(8*o),this.update(e),o},B.prototype.bytepad=function(e,t){for(var a=this.encode(t),n=0;n>2]|=this.padding[3&t],this.lastByteIndex===this.byteCount)for(e[0]=e[a],t=1;t>4&15]+r[15&e]+r[e>>12&15]+r[e>>8&15]+r[e>>20&15]+r[e>>16&15]+r[e>>28&15]+r[e>>24&15];s%t==0&&(O(a),i=0)}return o&&(e=a[i],l+=r[e>>4&15]+r[15&e],o>1&&(l+=r[e>>12&15]+r[e>>8&15]),o>2&&(l+=r[e>>20&15]+r[e>>16&15])),l},B.prototype.arrayBuffer=function(){this.finalize();var e,t=this.blockCount,a=this.s,n=this.outputBlocks,o=this.extraBytes,i=0,s=0,r=this.outputBits>>3;e=o?new ArrayBuffer(n+1<<2):new ArrayBuffer(r);for(var l=new Uint32Array(e);s>8&255,l[e+2]=t>>16&255,l[e+3]=t>>24&255;r%a==0&&O(n)}return i&&(e=r<<2,t=n[s],l[e]=255&t,i>1&&(l[e+1]=t>>8&255),i>2&&(l[e+2]=t>>16&255)),l},C.prototype=new B,C.prototype.finalize=function(){return this.encode(this.outputBits,!0),B.prototype.finalize.call(this)};var O=function(e){var t,a,n,o,i,s,r,l,d,u,c,y,b,m,f,T,h,I,g,_,P,w,x,E,A,S,v,k,B,C,O,M,F,R,N,L,D,U,V,q,G,W,H,K,$,J,j,X,Y,z,Z,Q,ee,te,ae,ne,oe,ie,se,re,le,de,pe;for(n=0;n<48;n+=2)o=e[0]^e[10]^e[20]^e[30]^e[40],i=e[1]^e[11]^e[21]^e[31]^e[41],s=e[2]^e[12]^e[22]^e[32]^e[42],r=e[3]^e[13]^e[23]^e[33]^e[43],l=e[4]^e[14]^e[24]^e[34]^e[44],d=e[5]^e[15]^e[25]^e[35]^e[45],u=e[6]^e[16]^e[26]^e[36]^e[46],c=e[7]^e[17]^e[27]^e[37]^e[47],t=(y=e[8]^e[18]^e[28]^e[38]^e[48])^(s<<1|r>>>31),a=(b=e[9]^e[19]^e[29]^e[39]^e[49])^(r<<1|s>>>31),e[0]^=t,e[1]^=a,e[10]^=t,e[11]^=a,e[20]^=t,e[21]^=a,e[30]^=t,e[31]^=a,e[40]^=t,e[41]^=a,t=o^(l<<1|d>>>31),a=i^(d<<1|l>>>31),e[2]^=t,e[3]^=a,e[12]^=t,e[13]^=a,e[22]^=t,e[23]^=a,e[32]^=t,e[33]^=a,e[42]^=t,e[43]^=a,t=s^(u<<1|c>>>31),a=r^(c<<1|u>>>31),e[4]^=t,e[5]^=a,e[14]^=t,e[15]^=a,e[24]^=t,e[25]^=a,e[34]^=t,e[35]^=a,e[44]^=t,e[45]^=a,t=l^(y<<1|b>>>31),a=d^(b<<1|y>>>31),e[6]^=t,e[7]^=a,e[16]^=t,e[17]^=a,e[26]^=t,e[27]^=a,e[36]^=t,e[37]^=a,e[46]^=t,e[47]^=a,t=u^(o<<1|i>>>31),a=c^(i<<1|o>>>31),e[8]^=t,e[9]^=a,e[18]^=t,e[19]^=a,e[28]^=t,e[29]^=a,e[38]^=t,e[39]^=a,e[48]^=t,e[49]^=a,m=e[0],f=e[1],J=e[11]<<4|e[10]>>>28,j=e[10]<<4|e[11]>>>28,k=e[20]<<3|e[21]>>>29,B=e[21]<<3|e[20]>>>29,re=e[31]<<9|e[30]>>>23,le=e[30]<<9|e[31]>>>23,W=e[40]<<18|e[41]>>>14,H=e[41]<<18|e[40]>>>14,R=e[2]<<1|e[3]>>>31,N=e[3]<<1|e[2]>>>31,T=e[13]<<12|e[12]>>>20,h=e[12]<<12|e[13]>>>20,X=e[22]<<10|e[23]>>>22,Y=e[23]<<10|e[22]>>>22,C=e[33]<<13|e[32]>>>19,O=e[32]<<13|e[33]>>>19,de=e[42]<<2|e[43]>>>30,pe=e[43]<<2|e[42]>>>30,te=e[5]<<30|e[4]>>>2,ae=e[4]<<30|e[5]>>>2,L=e[14]<<6|e[15]>>>26,D=e[15]<<6|e[14]>>>26,I=e[25]<<11|e[24]>>>21,g=e[24]<<11|e[25]>>>21,z=e[34]<<15|e[35]>>>17,Z=e[35]<<15|e[34]>>>17,M=e[45]<<29|e[44]>>>3,F=e[44]<<29|e[45]>>>3,E=e[6]<<28|e[7]>>>4,A=e[7]<<28|e[6]>>>4,ne=e[17]<<23|e[16]>>>9,oe=e[16]<<23|e[17]>>>9,U=e[26]<<25|e[27]>>>7,V=e[27]<<25|e[26]>>>7,_=e[36]<<21|e[37]>>>11,P=e[37]<<21|e[36]>>>11,Q=e[47]<<24|e[46]>>>8,ee=e[46]<<24|e[47]>>>8,K=e[8]<<27|e[9]>>>5,$=e[9]<<27|e[8]>>>5,S=e[18]<<20|e[19]>>>12,v=e[19]<<20|e[18]>>>12,ie=e[29]<<7|e[28]>>>25,se=e[28]<<7|e[29]>>>25,q=e[38]<<8|e[39]>>>24,G=e[39]<<8|e[38]>>>24,w=e[48]<<14|e[49]>>>18,x=e[49]<<14|e[48]>>>18,e[0]=m^~T&I,e[1]=f^~h&g,e[10]=E^~S&k,e[11]=A^~v&B,e[20]=R^~L&U,e[21]=N^~D&V,e[30]=K^~J&X,e[31]=$^~j&Y,e[40]=te^~ne&ie,e[41]=ae^~oe&se,e[2]=T^~I&_,e[3]=h^~g&P,e[12]=S^~k&C,e[13]=v^~B&O,e[22]=L^~U&q,e[23]=D^~V&G,e[32]=J^~X&z,e[33]=j^~Y&Z,e[42]=ne^~ie&re,e[43]=oe^~se&le,e[4]=I^~_&w,e[5]=g^~P&x,e[14]=k^~C&M,e[15]=B^~O&F,e[24]=U^~q&W,e[25]=V^~G&H,e[34]=X^~z&Q,e[35]=Y^~Z&ee,e[44]=ie^~re&de,e[45]=se^~le&pe,e[6]=_^~w&m,e[7]=P^~x&f,e[16]=C^~M&E,e[17]=O^~F&A,e[26]=q^~W&R,e[27]=G^~H&N,e[36]=z^~Q&K,e[37]=Z^~ee&$,e[46]=re^~de&te,e[47]=le^~pe&ae,e[8]=w^~m&T,e[9]=x^~f&h,e[18]=M^~E&S,e[19]=F^~A&v,e[28]=W^~R&L,e[29]=H^~N&D,e[38]=Q^~K&J,e[39]=ee^~$&j,e[48]=de^~te&ne,e[49]=pe^~ae&oe,e[0]^=p[n],e[1]^=p[n+1]};if(i)e.exports=P;else for(x=0;x256)&&Pr.throwArgumentError("invalid number type","type",e),a&&(s=256),t=n.BigNumber.from(t).toTwos(s),i.zeroPad(t,s/8)}if(o=e.match(Ir),o){const n=parseInt(o[1]);return(String(n)!==o[1]||0===n||n>32)&&Pr.throwArgumentError("invalid bytes type","type",e),i.arrayify(t).byteLength!==n&&Pr.throwArgumentError(`invalid value for ${e}`,"value",t),a?i.arrayify((t+"0000000000000000000000000000000000000000000000000000000000000000").substring(0,66)):t}if(o=e.match(_r),o&&Array.isArray(t)){const a=o[1];parseInt(o[2]||String(t.length))!=t.length&&Pr.throwArgumentError(`invalid array length for ${e}`,"value",t);const n=[];return t.forEach((function(e){n.push(wr(a,e,!0))})),i.concat(n)}return Pr.throwArgumentError("invalid type","type",e)}function xr(e,t){e.length!=t.length&&Pr.throwArgumentError("wrong number of values; expected ${ types.length }","values",t);const a=[];return e.forEach((function(e,n){a.push(wr(e,t[n]))})),i.hexlify(i.concat(a))}function Er(e,t){return a=xr(e,t),"0x"+hr.keccak_256(i.arrayify(a));var a}const Ar=mr("PROTOCOL_SWAP_FEE_PERC"),Sr=mr("E-CLP"),vr=Er(["bytes"],[t.defaultAbiCoder.encode(["bytes32","bytes32"],[Ar,Sr])]);class kr{constructor(e,t,a){this.gyroConfigAddress=e,this.multicall=t,this.gyroConfigInterface=jt.createInterface(),this.gyroConfig=jt.connect(e,a)}async getGyroProtocolFee(e){let a;const o=Er(["bytes"],[t.defaultAbiCoder.encode(["bytes32","uint256"],[Ar,e])]),i=[{target:this.gyroConfigAddress,callData:this.gyroConfigInterface.encodeFunctionData("hasKey",[o])},{target:this.gyroConfigAddress,callData:this.gyroConfigInterface.encodeFunctionData("hasKey",[vr])},{target:this.gyroConfigAddress,callData:this.gyroConfigInterface.encodeFunctionData("hasKey",[Ar])}],[,[s,r,l]]=await this.multicall.callStatic.aggregate(i),d=n.BigNumber.from(s).eq(1),p=n.BigNumber.from(r).eq(1),u=n.BigNumber.from(l).eq(1);return a=d?parseFloat(n.formatFixed(await this.gyroConfig.getUint(o),18)):p?parseFloat(n.formatFixed(await this.gyroConfig.getUint(vr),18)):u?parseFloat(n.formatFixed(await this.gyroConfig.getUint(Ar),18)):0,a}}const Br=new t.Interface(["function gauge_relative_weight(address gauge, uint timestamp) view returns (uint)"]),Cr=new t.Interface(["function gauge_relative_weight(address gauge) view returns (uint)"]);class Or{constructor(e,t,a){this.multicall=e,this.gaugeControllerAddress=t,this.gaugeControllerCheckpointerAddress=a}async getRelativeWeights(e,t){const a=e.map((e=>this.gaugeControllerCheckpointerAddress&&!t?{target:this.gaugeControllerCheckpointerAddress,callData:Cr.encodeFunctionData("gauge_relative_weight",[o.getAddress(e)])}:{target:this.gaugeControllerAddress,callData:Br.encodeFunctionData("gauge_relative_weight",[o.getAddress(e),t||Math.floor(Date.now()/1e3)])})),[,n]=await this.multicall.callStatic.aggregate(a);return e.reduce(((e,t,a)=>(e[t]||(e[t]=parseFloat(Ce(n[a],18))),e)),{})}}class Mr{async get(e){const t=await this.query(e);return(null==t?void 0:t.length)>0?t[0]:void 0}async find(e){return this.get({where:{id:e}})}async findBy(e,t){return this.get({where:{[String(e)]:t}})}async findAllBy(e,t,a=1e3,n=0){const o={where:{[String(e)]:t},first:a,skip:n};return this.query(o)}}class Fr extends Mr{constructor(e,t,a){super(),this.chainId=t,this.blockHeight=a,this.client=Ai(e)}}class Rr extends Mr{constructor(e,t,a){super(),this.chainId=t,this.blockHeight=a,this.client=Si(e)}}class Nr extends Rr{async query(e){e.orderBy||(e.orderBy=ti.balance),e.orderDirection||(e.orderDirection=li.desc),!e.block&&this.blockHeight&&(e.block={number:await this.blockHeight()});const{gaugeShares:t}=await this.client.GaugeShares(e);return t.map(this.mapType)}mapType(e){var t;return{id:e.id,balance:e.balance,userAddress:null===(t=e.user)||void 0===t?void 0:t.id,gauge:{id:e.gauge.id,poolId:e.gauge.poolId||void 0,isKilled:e.gauge.isKilled,totalSupply:e.gauge.totalSupply}}}async findByUser(t,a,n){return this.findAllBy(e.GaugeShareAttributes.UserAddress,t,a,n)}async findByGauge(t,a,n){return this.findAllBy(e.GaugeShareAttributes.GaugeId,t,a,n)}}const Lr=new t.Interface(["function totalSupply() view returns (uint)","function working_supply() view returns (uint)","function reward_count() view returns (uint)","function reward_tokens(uint rewardIndex) view returns (address)","function reward_data(address rewardToken) view returns (tuple(address token, address distributor, uint period_finish, uint rate, uint last_update, uint integral) data)"]),Dr=new t.Interface(["function inflation_rate(uint currentWeekTimestamp) view returns (uint)"]);class Ur{constructor(e,t){this.multicall=e,this.chainId=t}async getTotalSupplies(e){const t=e.map((e=>({target:e,callData:Lr.encodeFunctionData("totalSupply",[])}))),[,a]=await this.multicall.callStatic.aggregate(t),n=a.map((e=>"0x"==e?"0x0":e));return e.reduce(((e,t,a)=>(e[t]||(e[t]=parseFloat(Ce(n[a],18))),e)),{})}async getWorkingSupplies(e){const t=e.map((e=>({target:e,callData:Lr.encodeFunctionData("working_supply",[])}))),[,a]=await this.multicall.callStatic.aggregate(t),n=a.map((e=>"0x"==e?"0x0":e));return e.reduce(((e,t,a)=>(e[t]||(e[t]=parseFloat(Ce(n[a],18))),e)),{})}async getInflationRates(e){const t=Math.floor(Date.now()/1e3/604800),a=e.map((e=>({target:e,callData:Dr.encodeFunctionData("inflation_rate",[t])}))),[,n]=await this.multicall.callStatic.aggregate(a),o=n.map((e=>"0x"==e?"0x0":e));return e.reduce(((e,t,a)=>(e[t]||(e[t]=parseFloat(Ce(o[a],18))),e)),{})}async getRewardCounts(e){let t;if(1==this.chainId){const a=e.map((e=>({target:e,callData:Lr.encodeFunctionData("reward_count",[])}))),[,n]=await this.multicall.callStatic.aggregate(a),o=n.map((e=>"0x"==e?"0x0":e));t=e.reduce(((e,t,a)=>(e[t]||(e[t]=parseInt(o[a])),e)),{})}else t=e.reduce(((e,t)=>(e[t]||(e[t]=1),e)),{});return t}async getRewardTokens(e,t){const a=t||await this.getRewardCounts(e),n=e.filter((e=>a[e]>0)),o=[0],i=n.map(((e,t)=>{const n=[];for(let t=0;t{const n=o[a],i=o[a+1],r=[];for(let e=n;e{const o=[];for(let t=0;tLr.decodeFunctionResult("reward_data",e)[0]));return Object.keys(a).reduce(((e,t,o)=>{const i=n[o],r=a[t].reduce(((e,t,a)=>(e[t]||(e[t]=s[i+a]),e)),{});return e[t]||(e[t]=r),e}),{})}}class Vr{constructor(e){this.gauges=[],this.client=Si(e)}async fetch(){const e=(await this.client.Pools({first:1e3,where:{preferentialGauge_not:null}})).pools.map((e=>e.preferentialGauge));return this.gauges=e,this.gauges}async find(e){return 0==this.gauges.length&&await this.fetch(),this.gauges.find((t=>t.id==e))}async findBy(e,t){if(0==this.gauges.length&&await this.fetch(),"id"==e)return this.find(t);if("poolId"==e)return this.gauges.find((e=>e.poolId==t));if("poolAddress"==e)return this.gauges.find((e=>e.poolAddress==t));throw`search by ${e} not implemented`}}class qr{constructor(e,t,a,n,o){this.chainId=n,this.workingSupplies={},this.relativeWeights={},this.inflationRates={},this.rewardData={},a&&(this.gaugeController=new Or(t,a,o)),this.multicall=new Ur(t,n),this.subgraph=new Vr(e)}async fetch(){const e=await this.subgraph.fetch(),t=e.map((e=>e.id));if(1==this.chainId)this.workingSupplies=await this.multicall.getWorkingSupplies(t);else{const t=["0x3b8ca519122cdd8efb272b0d3085453404b25bd0","0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2","0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647","0x809b79b53f18e9bc08a961ed4678b901ac93213a"],a=e.filter((e=>!t.includes(e.factory.id.toLowerCase()))).map((e=>e.id));a.length>0&&(this.inflationRates=await this.multicall.getInflationRates(a),this.workingSupplies=await this.multicall.getWorkingSupplies(a))}return this.gaugeController&&(this.relativeWeights=await this.gaugeController.getRelativeWeights(t)),this.rewardData=e.reduce(((e,t)=>{var a;return e[a=t.id]||(e[a]=t.tokens?Object.fromEntries(t.tokens.map((e=>[e.id.split("-")[0],{distributor:"",last_update:n.BigNumber.from(0),integral:n.BigNumber.from(0),token:e.id.split("-")[0],decimals:e.decimals,rate:Oe(e.rate||"0",e.decimals),period_finish:n.BigNumber.from(e.periodFinish||"0")}]))):{}),e}),{}),e.map(this.compose.bind(this))}async find(e){return this.gauges||(this.gauges=this.fetch()),(await this.gauges).find((t=>t.id==e))}async findBy(e,t){let a;if(this.gauges||(this.gauges=this.fetch()),"id"==e)return this.find(t);if("address"==e)return this.find(t);if("poolId"==e)a=(await this.gauges).find((e=>e.poolId==t));else{if("poolAddress"!=e)throw`search by ${e} not implemented`;a=(await this.gauges).find((e=>e.poolAddress==t))}return a}compose(e){return{id:e.id,address:e.id,name:e.symbol,poolId:e.poolId,poolAddress:e.poolAddress,totalSupply:parseFloat(e.totalSupply),workingSupply:this.workingSupplies[e.id],relativeWeight:this.relativeWeights[e.id],rewardTokens:this.rewardData[e.id],balInflationRate:this.inflationRates[e.id]}}}class Gr{constructor(e,t){this.url=e,this.apiKey=t}async get(e){try{const t=this.toPayload(e),{data:a}=await E.default.post(this.url,t,{headers:{"x-api-key":this.apiKey}});if(a.errors)throw new Error(a.errors.map((e=>e.message)).join(","));return a.data}catch(e){throw console.error(e),e}return[]}toPayload(e){return JSON.stringify({query:m.jsonToGraphQLQuery({query:e})})}}function Wr(e){return new Promise((t=>setTimeout(t,e)))}const Hr=(e,t)=>{var a,n,o,i,s,r,l,d,p,u,c;return{id:e.id,name:e.name||"",address:e.address,chainId:t,poolType:e.poolType,poolTypeVersion:e.poolTypeVersion||1,swapFee:e.swapFee,swapEnabled:e.swapEnabled,protocolYieldFeeCache:e.protocolYieldFeeCache||"0.5",protocolSwapFeeCache:e.protocolSwapFeeCache||"0.5",amp:null!==(a=e.amp)&&void 0!==a?a:void 0,owner:null!==(n=e.owner)&&void 0!==n?n:void 0,factory:null!==(o=e.factory)&&void 0!==o?o:void 0,symbol:null!==(i=e.symbol)&&void 0!==i?i:void 0,tokens:(e.tokens||[]).map(Kr),tokensList:e.tokensList,tokenAddresses:(e.tokens||[]).map((e=>e.address)),totalLiquidity:e.totalLiquidity,totalShares:e.totalShares,totalSwapFee:e.totalSwapFee,totalSwapVolume:e.totalSwapVolume,priceRateProviders:null!==(s=e.priceRateProviders)&&void 0!==s?s:void 0,createTime:e.createTime,mainIndex:null!==(r=e.mainIndex)&&void 0!==r?r:void 0,wrappedIndex:null!==(l=e.wrappedIndex)&&void 0!==l?l:void 0,totalWeight:e.totalWeight||"1",lowerTarget:null!==(d=e.lowerTarget)&&void 0!==d?d:"0",upperTarget:null!==(p=e.upperTarget)&&void 0!==p?p:"0",isInRecoveryMode:null!==(u=e.isInRecoveryMode)&&void 0!==u&&u,isPaused:null!==(c=e.isPaused)&&void 0!==c&&c}},Kr=e=>{const t=$r(e.token);return{...e,isExemptFromYieldProtocolFee:e.isExemptFromYieldProtocolFee||!1,token:t}},$r=e=>{let t=null;return e.pool&&(t={id:e.pool.id,address:e.pool.address,totalShares:e.pool.totalShares,poolType:e.pool.poolType,mainIndex:e.pool.mainIndex||0},(null==e?void 0:e.pool.tokens)&&(t.tokens=e.pool.tokens.map(Jr))),{pool:t,latestUSDPrice:e.latestUSDPrice||void 0}},Jr=e=>({address:e.address,decimals:e.decimals,symbol:e.symbol,balance:e.balance,priceRate:e.priceRate,weight:e.weight,isExemptFromYieldProtocolFee:e.isExemptFromYieldProtocolFee||void 0,token:e.token?$r(e.token):void 0});class jr{constructor(e){var t,a;this.skip=0,this.client=Ai(e.url),this.blockHeight=e.blockHeight,this.chainId=e.chainId;const n={orderBy:mo.TotalLiquidity,orderDirection:lo.Desc,where:{totalShares:{gt:1e-12}}},o=Object.assign({},(null===(t=e.query)||void 0===t?void 0:t.args)||n),i=Object.assign({},(null===(a=e.query)||void 0===a?void 0:a.attrs)||{});this.query={args:o,attrs:i}}async fetchAllPools(){const e=X.getInstance();e.time("fetching pools"),this.blockHeight&&(this.query.args.block={number:await this.blockHeight()});const t=new ot(this.query.args).format(new nt),{pool0:a,pool1000:n,pool2000:o}=await this.client.AllPools(t);return e.timeEnd("fetching pools"),[...a,...n,...o].map((e=>Hr(e,this.chainId)))}async fetch(e){const t=X.getInstance();t.time("fetching pools"),(null==e?void 0:e.skip)&&(this.query.args.skip=e.skip),this.blockHeight&&(this.query.args.block={number:await this.blockHeight()}),this.query.args.first=(null==e?void 0:e.first)||this.query.args.first||1e3;const a=new ot(this.query.args).format(new nt),{pools:n}=await this.client.Pools(a);return this.skip=((null==e?void 0:e.skip)||0)+n.length,t.timeEnd("fetching pools"),n.map((e=>Hr(e,this.chainId)))}async find(e){return await this.findBy("id",e)}async findBy(e,t){return this.pools||(this.pools=this.fetchAllPools()),(await this.pools).find((a=>a[e]==t))}async all(){return this.pools||(this.pools=this.fetchAllPools()),this.pools}async block(){return this.blockHeight?{number:await this.blockHeight()}:void 0}async where(e){return this.pools||(this.pools=this.fetchAllPools()),(await this.pools).filter(e)}}class Xr{constructor(e,t,a,n){this.poolsSubgraph=e,this.poolsToIgnore=a,this.batchSize=n,this.skip=0,this.provider=t.provider,this.multicall=t.multicall,this.vault=t.vault}filterPools(e){return e.filter((e=>{if(!1===e.swapEnabled)return!1;if(!this.poolsToIgnore)return!0;return-1===this.poolsToIgnore.findIndex((t=>t.toLowerCase()===e.id.toLowerCase()))}))}async fetchDefault(){const e=await this.poolsSubgraph.all(),t=this.filterPools(e),a=X.getInstance();a.time(`fetching onchain ${t.length} pools`);const n=await Ri(t,this.multicall,this.vault,this.provider,this.batchSize);return a.timeEnd(`fetching onchain ${t.length} pools`),n}async fetch(e){const t=await this.poolsSubgraph.fetch(e),a=this.filterPools(t),n=X.getInstance();n.time(`fetching onchain ${a.length} pools`);const o=await Ri(a,this.multicall,this.vault,this.provider,this.batchSize);return n.timeEnd(`fetching onchain ${a.length} pools`),o}async find(e,t=!1){return await this.findBy("id",e,t)}async findBy(e,t,a=!1){return this.pools&&!a||(this.pools=this.fetchDefault()),(await this.pools).find((a=>a[e]==t))}async all(){return this.pools||(this.pools=this.fetchDefault()),this.pools}async where(e){return this.pools||(this.pools=this.fetchDefault()),(await this.pools).filter(e)}async refresh(e){const t=await Ri([e],this.multicall,this.vault,this.provider);if(this.pools){const a=(await this.pools).findIndex((t=>t.address===e.address));-1!==a&&(this.pools=Promise.resolve([...(await this.pools).splice(a,1),t[0]]))}return t[0]}}class Yr extends Rr{async query(e){!e.block&&this.blockHeight&&(e.block={number:await this.blockHeight()});const{pools:t}=await this.client.PoolGauges(e);return t.map(this.mapType)}mapType(e){return e}}var zr;e.PoolJoinExitAttributes=void 0,(zr=e.PoolJoinExitAttributes||(e.PoolJoinExitAttributes={})).Pool="pool",zr.Sender="sender";class Zr extends Fr{async query(e){e.orderBy||(e.orderBy=oo.Timestamp),e.orderDirection||(e.orderDirection=lo.Asc),!e.block&&this.blockHeight&&(e.block={number:await this.blockHeight()});const{joinExits:t}=await this.client.JoinExits(e);return t.map(this.mapType)}mapType(e){return{id:e.id,userAddress:e.user.id,poolId:e.pool.id,timestamp:e.timestamp,type:e.type,amounts:e.amounts,tokens:e.pool.tokensList}}async findByUser(t,a,n){return this.findAllBy(e.PoolJoinExitAttributes.Sender,t,a,n)}async findJoins(e,t){return this.query({where:{sender:e,pool:t,type:"Join"}})}async findExits(e,t){return this.query({where:{sender:e,pool:t,type:"Exit"}})}async findByPool(t,a,n){return this.findAllBy(e.PoolJoinExitAttributes.Pool,t,a,n)}}class Qr extends Fr{async query(e){e.orderBy||(e.orderBy=co.Balance),e.orderDirection||(e.orderDirection=lo.Desc),!e.block&&this.blockHeight&&(e.block={number:await this.blockHeight()});const{poolShares:t}=await this.client.PoolShares(e);return t.map(this.mapType)}mapType(e){return{id:e.id,userAddress:e.userAddress.id,poolId:e.poolId.id,balance:e.balance}}async findByUser(t,a,n){return this.findAllBy(e.PoolShareAttributes.UserAddress,t,a,n)}async findByPool(t,a,n){return this.findAllBy(e.PoolShareAttributes.PoolId,t,a,n)}}class el{constructor(e){this.tokens=e}async find(e){return this.tokens.find((t=>t.address.toLowerCase()===e.toLowerCase()))}async findBy(e,t){return this.tokens.find((a=>a[e]===t))}}class tl{constructor(e,t=1,a){var n;this.chainId=t,this.prices={},this.baseTokenAddresses=e.map(Le),this.url=`${Gi(null==a?void 0:a.isDemoApiKey)}simple/token_price/${this.platform(t)}?vs_currencies=usd,eth`,this.urlNative=`${Gi(null==a?void 0:a.isDemoApiKey)}simple/price/?vs_currencies=eth,usd&ids=`,this.coingeckoApiKeyHeaderName=Wi(null==a?void 0:a.isDemoApiKey),this.apiKey=null==a?void 0:a.coingeckoApiKey,this.debouncer=new qe(this.fetch.bind(this),200,null!==(n=null==a?void 0:a.tokensPerPriceRequest)&&void 0!==n?n:10)}async fetch(e,{signal:t}={}){var a,n,o;try{const{data:n}=await E.default.get(`${this.url}&contract_addresses=${e.join(",")}`,{signal:t,headers:{[this.coingeckoApiKeyHeaderName]:null!==(a=this.apiKey)&&void 0!==a?a:""}});return n}catch(e){const t=["Error fetching token prices from coingecko"];return e.isAxiosError?void 0!==(null===(n=e.response)||void 0===n?void 0:n.status)&&t.push(`with status ${null===(o=e.response)||void 0===o?void 0:o.status}`):t.push(e),Promise.reject(t.join(" "))}}fetchNative({signal:e}={}){var t;let a;!function(e){e.ETH="ethereum",e.MATIC="matic-network",e.XDAI="xdai"}(a||(a={}));let n=a.ETH;return 137===this.chainId&&(n=a.MATIC),100===this.chainId&&(n=a.XDAI),E.default.get(`${this.urlNative}${n}`,{signal:e,headers:{[this.coingeckoApiKeyHeaderName]:null!==(t=this.apiKey)&&void 0!==t?t:""}}).then((({data:e})=>e[n])).catch((e=>{var t;const a=["Error fetching native token from coingecko"];return e.isAxiosError?(null===(t=e.response)||void 0===t?void 0:t.status)&&a.push(`with status ${e.response.status}`):a.push(e),Promise.reject(a.join(" "))})).finally((()=>{}))}find(e){const t=Le(e,this.chainId);if(!this.prices[t]){if(0===Object.keys(this.prices).length)for(const e of this.baseTokenAddresses)this.prices[e]=this.debouncer.fetch(e).then((t=>t[e]));if(t===he(this.chainId).Addresses.nativeAsset.toLowerCase())return this.nativePrice||(this.prices[t]=this.fetchNative()),this.prices[t];this.prices[t]=this.debouncer.fetch(t).then((e=>e[t]))}return this.prices[t]}async findBy(e,t){if("address"==e)return this.find(t)}platform(e){switch(e){case 1:case 5:case 42:case 31337:return"ethereum";case 100:return"xdai";case 137:return"polygon-pos";case 250:return"fantom";case 1101:return"polygon-zkevm";case 8453:return"base";case 42161:return"arbitrum-one";case 43114:return"avalanche"}return"2"}}class al{constructor(e=1,t){this.chainId=e,this.prices={},this.urlBase=`${Gi(null==t?void 0:t.isDemoApiKey)}coins/${this.platform(e)}/contract/%TOKEN_ADDRESS%/market_chart/range?vs_currency=usd`,this.apiKey=null==t?void 0:t.coingeckoApiKey,this.coingeckoApiKeyHeaderName=Wi(null==t?void 0:t.isDemoApiKey)}async fetch(e,t,{signal:a}={}){var n,o;const i=this.urlRange(e,t);try{const{data:e}=await E.default.get(i,{signal:a,headers:{[this.coingeckoApiKeyHeaderName]:null!==(n=this.apiKey)&&void 0!==n?n:""}});return e}catch(e){if(e.isAxiosError)throw new Error("Error fetching historical token prices from coingecko - "+e.message+" - "+(null===(o=e.response)||void 0===o?void 0:o.statusText));throw new Error("Unknown Error: "+e)}}async find(e){throw"Historic price requires point-in-time timestamp, please use findBy(address, timestamp)"}async findBy(e,t){const a=Le(e,this.chainId);return{usd:`${(await this.fetch(a,t)).prices[0][1]}`}}platform(e){switch(e){case 1:case 5:case 42:case 31337:return"ethereum";case 137:return"polygon-pos";case 42161:return"arbitrum-one";case 100:return"xdai"}return"2"}urlRange(e,t){const a=t-3600,n=t+3600;return`${this.urlBase.replace("%TOKEN_ADDRESS%",e)}&from=${a}&to=${n}`}}class nl{constructor(e,t=1){this.subgraphUrl=e,this.chainId=t,this.prices={},this.debouncer=new qe(this.fetch.bind(this),200)}async fetch(e,{signal:t}={}){return e.length,E.default.post(this.subgraphUrl,{variables:{addresses:e},query:"query($addresses: [String!]) {\n tokens(\n where: {\n id_in: $addresses\n }\n ) {\n address\n latestUSDPrice\n }\n }"},{signal:t}).then((e=>e.data.data)).then((({tokens:e})=>Object.fromEntries(e.map((e=>[e.address,{usd:e.latestUSDPrice||void 0}]))))).finally((()=>{e.length}))}async find(e){const t=Le(e,this.chainId);return this.prices[t]||(this.prices[t]=this.debouncer.fetch(t).then((e=>e[t]))),this.prices[t]}async findBy(e,t){if("address"==e)return this.find(t)}}class ol{constructor(e,t,a){this.coingeckoRepository=e,this.subgraphRepository=t,this.aaveRates=a}async find(e){let t;try{if(t=await this.coingeckoRepository.find(e),!(null==t?void 0:t.usd))throw new Error("Price not found")}catch(a){X.getInstance().warn(a),t=await this.subgraphRepository.find(e)}const a=await this.aaveRates.getRate(e)||1;return t&&t.usd?{...t,usd:(parseFloat(t.usd)*a).toString()}:t}async findBy(e,t){if("address"===e)return this.find(t);throw`Token price search by ${e} not implemented`}}class il{constructor(e,t){this.coingeckoRepository=e,this.aaveRates=t}async find(e){return this.findBy(e,Math.floor(Date.now()/1e3))}async findBy(e,t){const a=await this.coingeckoRepository.findBy(e,t),n=await this.aaveRates.getRate(e)||1;return a&&a.usd?{...a,usd:(parseFloat(a.usd)*n).toString()}:a}}const sl=["function claimTokens(address user, address[] tokens) returns (uint256[])","function claimToken(address user, address token) returns (uint256)"],rl=new t.Interface(["function getTokensDistributedInWeek(address token, uint timestamp) view returns (uint)","function claimTokens(address user, address[] tokens) returns (uint256[])","function claimToken(address user, address token) returns (uint256)"]),ll=new t.Interface(["function totalSupply() view returns (uint)"]);class dl{constructor(e,t,a,n,o,i){this.multicall=e,this.feeDistributorAddress=t,this.balAddress=a,this.veBalAddress=n,this.bbAUsdAddress=o,this.feeDistributor=((e,t)=>new b.Contract(e,sl,t))(t,i)}async fetch(e){const t=this.getPreviousWeek(e),a=[{target:this.feeDistributorAddress,callData:rl.encodeFunctionData("getTokensDistributedInWeek",[o.getAddress(this.balAddress),t])},{target:this.feeDistributorAddress,callData:rl.encodeFunctionData("getTokensDistributedInWeek",[o.getAddress(this.bbAUsdAddress),t])},{target:this.veBalAddress,callData:ll.encodeFunctionData("totalSupply",[])}],[,n]=await this.multicall.callStatic.aggregate(a);return{balAmount:parseFloat(Ce(n[0],18)),bbAUsdAmount:parseFloat(Ce(n[1],18)),veBalSupply:parseFloat(Ce(n[2],18)),bbAUsdPrice:parseFloat("1.0"),balAddress:this.balAddress}}async multicallData(e){return this.data||(this.data=await this.fetch(e)),this.data}getPreviousWeek(e){const t=new Date(e);t.setUTCHours(0),t.setUTCMinutes(0),t.setUTCSeconds(0),t.setUTCMilliseconds(0);let a=t.getUTCDay()-4;return a<0&&(a+=7),a+=7,Math.floor(t.getTime()/1e3)-86400*a}async getClaimableBalances(e,t){try{const a=await this.feeDistributor.callStatic.claimTokens(e,t);return this.extractTokenBalance(t,a)}catch(e){return{}}}claimBalances(e,t){return rl.encodeFunctionData("claimTokens",[e,t])}extractTokenBalance(e,t){return e.reduce(((e,a,o)=>{var i;return e[a]=null!==(i=t[o])&&void 0!==i?i:n.BigNumber.from(0),e}),{})}}const pl=new t.Interface(["function getProtocolFeesCollector() view returns (address)"]),ul=new t.Interface(["function getSwapFeePercentage() view returns (uint)"]);let cl;class yl{constructor(e,t){this.provider=t,this.vault=new b.Contract(e,pl,this.provider)}async fetch(){const e=await this.vault.getProtocolFeesCollector(),t=new b.Contract(e,ul,this.provider),a=await t.getSwapFeePercentage();return parseFloat(Ce(a,18))}async find(){return cl||(cl=this.fetch()),this.swapFeePercentage=await cl,this.swapFeePercentage}async findBy(){return this.find()}}const bl=new t.Interface(["function getSwapFeePercentage() view returns (uint)"]);let ml;class fl{constructor(e,t){this.multicall=e,this.protocolFeePercentagesProviderAddress=t}async fetch(){const e=[{target:this.protocolFeePercentagesProviderAddress,callData:bl.encodeFunctionData("getFeeTypePercentage",[0])},{target:this.protocolFeePercentagesProviderAddress,callData:bl.encodeFunctionData("getFeeTypePercentage",[2])}],[,t]=await this.multicall.callStatic.aggregate(e);return{swapFee:parseFloat(Ce(t[0],18)),yieldFee:parseFloat(Ce(t[2],18))}}async getFees(){return ml||(ml=this.fetch()),this.protocolFees=await ml,this.protocolFees}}class Tl{constructor(e="https://yield-tokens.balancer.workers.dev/"){this.url=e}async fetch(){let e={};try{e=(await E.default.get(this.url)).data}catch(e){X.getInstance().warn(`Failed to fetch yield tokens: ${e}`)}return e}async find(e){const t=e.toLocaleLowerCase();return this.yields||(this.yields=this.fetch()),this.yields.then((e=>e[t]&&e[t]>0?e[t]:0))}async findBy(e,t){return"address"!=e?0:this.find(t)}}const hl=e=>`{\n blocks(first: 1, orderBy: timestamp, orderDirection: asc, where: { timestamp_gt: ${e} }) {\n number\n }\n}`,Il=async(e,t)=>{const a={query:hl(t)},n=await E.default.post(e,a),{data:{blocks:o}}=n.data;return parseInt(o[0].number)};class gl{constructor(e){this.endpoint=e,this.blocks={}}async find(e){if("dayAgo"==e){const e=""+(Math.floor(Date.now()/1e3)-86400);return this.blocks[e]||(this.blocks={...this.blocks,[e]:Il(this.endpoint,e)}),this.blocks[e]}}async findBy(e="",t=""){}}var _l=[{chainId:1,address:"0x8888801af4d980682e47f1a9036e589479e835c5",symbol:"mph"},{chainId:1,address:"0x27054b13b1b798b345b591a4d22e6562d47ea75a",symbol:"ast"},{chainId:1,address:"0x3301ee63fb29f863f2333bd4466acb46cd8323e6",symbol:"akita"},{chainId:1,address:"0x616e8bfa43f920657b3497dbf40d6b1a02d4608d",symbol:"aurabal"},{chainId:1,address:"0xc0c293ce456ff0ed870add98a0828dd4d2903dbf",symbol:"aura"},{chainId:1,address:"0x3472a5a71965499acd81997a54bba8d852c6e53d",symbol:"badger"},{chainId:1,address:"0xba100000625a3754423978a60c9317c58a424e3d",symbol:"bal"},{chainId:1,address:"0x804cdb9116a10bb78768d3252355a1b18067bf8f",symbol:"bb-a-dai"},{chainId:1,address:"0x9210f1204b5a24742eba12f710636d76240df3d0",symbol:"bb-a-usdc"},{chainId:1,address:"0x2bbf681cc4eb09218bee85ea2a5d3d13fa40fc0c",symbol:"bb-a-usdt"},{chainId:1,address:"0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb2",symbol:"bb-a-usd"},{chainId:1,address:"0x2d94aa3e47d9d5024503ca8491fce9a2fb4da198",symbol:"bank"},{chainId:1,address:"0x0d8775f648430679a709e98d2b0cb6250d2887ef",symbol:"bat"},{chainId:1,address:"0xf17e65822b568b3903685a7c9f496cf7656cc6c2",symbol:"bico"},{chainId:1,address:"0x799ebfabe77a6e34311eeee9825190b9ece32824",symbol:"btrst"},{chainId:1,address:"0x514910771af9ca656af840dff83e8264ecf986ca",symbol:"link"},{chainId:1,address:"0x3506424f91fd33084466f402d5d97f05f8e3b4af",symbol:"chz"},{chainId:1,address:"0x41e5560054824ea6b0732e656e3ad64e20e94e45",symbol:"cvc"},{chainId:1,address:"0xc00e94cb662c3520282e6f5717214004a7f26888",symbol:"comp"},{chainId:1,address:"0xdef1ca1fb7fbcdc777520aa7f396b4e015f497ab",symbol:"cow"},{chainId:1,address:"0xd533a949740bb3306d119cc777fa900ba034cd52",symbol:"crv"},{chainId:1,address:"0x6b175474e89094c44da98b954eedeac495271d0f",symbol:"dai"},{chainId:1,address:"0xf2051511b9b121394fa75b8f7d4e7424337af687",symbol:"haus"},{chainId:1,address:"0x888888435fde8e7d4c54cab67f206e4199454c60",symbol:"dfx"},{chainId:1,address:"0x798d1be841a82a273720ce31c822c61a67a601c3",symbol:"digg"},{chainId:1,address:"0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c",symbol:"enj"},{chainId:1,address:"0xc18360217d8f7ab5e7c516566761ea12ce7f9d72",symbol:"ens"},{chainId:1,address:"0x4e15361fd6b4bb609fa63c81a2be19d873717870",symbol:"ftm"},{chainId:1,address:"0x956f47f50a910163d8bf957cf5846d573e7f87ca",symbol:"fei"},{chainId:1,address:"0xed1480d12be41d92f36f5f7bdd88212e381a3677",symbol:"fdt"},{chainId:1,address:"0x586aa273f262909eef8fa02d90ab65f5015e0516",symbol:"fiat"},{chainId:1,address:"0xde30da39c46104798bb5aa3fe8b9e0e1f348163f",symbol:"gtc"},{chainId:1,address:"0x900db999074d9277c5da2a43f252d74366230da0",symbol:"giv"},{chainId:1,address:"0x6810e776880c02933d47db1b9fc05908e5386b96",symbol:"gno"},{chainId:1,address:"0xba485b556399123261a5f9c95d413b4f93107407",symbol:"graviaura"},{chainId:1,address:"0x3ec8798b81485a254928b70cda1cf0a2bb0b74d7",symbol:"gro"},{chainId:1,address:"0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f",symbol:"snx"},{chainId:1,address:"0x5a98fcbea516cf06857215779fd812ca3bef1b32",symbol:"ldo"},{chainId:1,address:"0x6dea81c8171d0ba574754ef6f8b412f2ed88c54d",symbol:"lqty"},{chainId:1,address:"0x5f98805a4e8be255a32880fdec7f6728c6568ba0",symbol:"lusd"},{chainId:1,address:"0x965d79f1a1016b574a62986e13ca8ab04dfdd15c",symbol:"m2"},{chainId:1,address:"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2",symbol:"mkr"},{chainId:1,address:"0xd084944d3c05cd115c09d072b9f44ba3e0e45921",symbol:"fold"},{chainId:1,address:"0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0",symbol:"matic"},{chainId:1,address:"0xa3bed4e1c75d00fa6f4e5e6922db7261b5e9acd2",symbol:"mta"},{chainId:1,address:"0x4b13006980acb09645131b91d259eaa111eaf5ba",symbol:"myc"},{chainId:1,address:"0x333a4823466879eef910a04d473505da62142069",symbol:"nation"},{chainId:1,address:"0xcfeaead4947f0705a14ec42ac3d44129e1ef3ed5",symbol:"note"},{chainId:1,address:"0x967da4048cd07ab37855c090aaf366e4ce1b9f48",symbol:"ocean"},{chainId:1,address:"0x64aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5",symbol:"ohm"},{chainId:1,address:"0xab846fb6c81370327e784ae7cbb6d6a6af6ff4bf",symbol:"pal"},{chainId:1,address:"0xcafe001067cdef266afb7eb5a286dcfd277f3de5",symbol:"psp"},{chainId:1,address:"0x68037790a0229e9ce6eaa8a99ea92964106c4703",symbol:"par"},{chainId:1,address:"0x45804880de22913dafe09f4980848ece6ecbaf78",symbol:"paxg"},{chainId:1,address:"0x89ab32156e46f46d02ade3fecbe5fc4243b9aaed",symbol:"pnt"},{chainId:1,address:"0x9992ec3cf6a55b00978cddf2b27bc6882d88d1ec",symbol:"poly"},{chainId:1,address:"0x43d4a3cd90ddd2f8f4f693170c9c8098163502ad",symbol:"d2d"},{chainId:1,address:"0xeb4c2781e4eba804ce9a9803c67d0893436bb27d",symbol:"renbtc"},{chainId:1,address:"0x408e41876cccdc0f92210600ef50372656052a38",symbol:"ren"},{chainId:1,address:"0xfb5453340c03db5ade474b27e68b6a9c6b2823eb",symbol:"robot"},{chainId:1,address:"0xd33526068d116ce69f19a9ee46f0bd304f21a51f",symbol:"rpl"},{chainId:1,address:"0xae78736cd615f374d3085123a210448e74fc6393",symbol:"reth"},{chainId:1,address:"0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6",symbol:"sbtc"},{chainId:1,address:"0x476c5e26a75bd202a9683ffd34359c0cc15be0ff",symbol:"srm"},{chainId:1,address:"0x35e78b3982e87ecfd5b3f3265b601c046cdbe232",symbol:"xai"},{chainId:1,address:"0x3affcca64c2a6f4e3b6bd9c64cd2c969efd1ecbe",symbol:"dsla"},{chainId:1,address:"0xf24d8651578a55b0c119b9910759a351a3458895",symbol:"sdbal"},{chainId:1,address:"0x11c1a6b3ed6bb362954b29d3183cfa97a0c806aa",symbol:"str"},{chainId:1,address:"0x8f693ca8d21b157107184d29d398a8d082b38b76",symbol:"data"},{chainId:1,address:"0x470ebf5f030ed85fc1ed4c2d36b9dd02e77cf1b7",symbol:"temple"},{chainId:1,address:"0xa36fdbbae3c9d55a1d67ee5821d53b50b63a1ab9",symbol:"temp"},{chainId:1,address:"0xdac17f958d2ee523a2206206994597c13d831ec7",symbol:"usdt"},{chainId:1,address:"0x9c4a4204b79dd291d6b6571c5be8bbcd0622f050",symbol:"tcr"},{chainId:1,address:"0x226f7b842e0f0120b7e194d05432b3fd14773a9d",symbol:"unn"},{chainId:1,address:"0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",symbol:"uni"},{chainId:1,address:"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",symbol:"usdc"},{chainId:1,address:"0x81f8f0bb1cb2a06649e51913a151f0e7ef6fa321",symbol:"vita"},{chainId:1,address:"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",symbol:"weth"},{chainId:1,address:"0xedb171c18ce90b633db442f2a6f72874093b49ef",symbol:"wampl"},{chainId:1,address:"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",symbol:"wbtc"},{chainId:1,address:"0xf203ca1769ca8e9e8fe1da9d147db68b6c919817",symbol:"wncg"},{chainId:1,address:"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",symbol:"wsteth"},{chainId:1,address:"0x79c71d3436f39ce382d0f58f1b011d88100b9d91",symbol:"xns"},{chainId:1,address:"0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e",symbol:"yfi"},{chainId:1,address:"0xbcca60bb61934080951369a648fb03df4f96263c",symbol:"ausdc"},{chainId:1,address:"0x028171bca77440897b824ca71d1c56cac55b68a3",symbol:"adai"},{chainId:1,address:"0x3ed3b47dd13ec9a98b44e6204a523e766b225811",symbol:"ausdt"},{chainId:137,address:"0x9c2c5fd7b07e95ee044ddeba0e97a665f142394f",symbol:"1inch"},{chainId:137,address:"0xd6df932a45c0f255f85145f286ea0b292b21c90b",symbol:"aave"},{chainId:137,address:"0xc3fdbadc7c795ef1d6ba111e06ff8f16a20ea539",symbol:"addy"},{chainId:137,address:"0xf84bd51eab957c2e7b7d646a3427c5a50848281d",symbol:"agar"},{chainId:137,address:"0x033d942a6b495c4071083f4cde1f17e986fe856c",symbol:"aga"},{chainId:137,address:"0x0e9b89007eee9c958c0eda24ef70723c2c93dd58",symbol:"amaticc"},{chainId:137,address:"0x034b2090b579228482520c589dbd397c53fc51cc",symbol:"vision"},{chainId:137,address:"0x2c89bbc92bd86f8075d1decc58c7f4e0107f286b",symbol:"avax"},{chainId:137,address:"0x49690541e3f6e933a9aa3cffee6010a7bb5b72d7",symbol:"axiav3"},{chainId:137,address:"0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3",symbol:"bal"},{chainId:137,address:"0xdb7cb471dd0b49b29cab4a1c14d070f27216a0ab",symbol:"bank"},{chainId:137,address:"0xfbdd194376de19a88118e84e279b977f165d01b8",symbol:"bifi"},{chainId:137,address:"0xd6ca869a4ec9ed2c7e618062cdc45306d8dbbc14",symbol:"btc2x-fli-p"},{chainId:137,address:"0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39",symbol:"link"},{chainId:137,address:"0x172370d5cd63279efa6d502dab29171933a610af",symbol:"crv"},{chainId:137,address:"0x8f3cf7ad23cd3cadbd9735aff958023239c6a063",symbol:"dai"},{chainId:137,address:"0x1d607faa0a51518a7728580c238d912747e71f7a",symbol:"data"},{chainId:137,address:"0x85955046df4668e1dd369d2de9f3aeb98dd2a369",symbol:"dpi"},{chainId:137,address:"0xe7804d91dfcde7f776c90043e03eaa6df87e6395",symbol:"dfx"},{chainId:137,address:"0xf28164a485b0b2c90639e47b0f377b4a438a16b1",symbol:"dquick"},{chainId:137,address:"0x45c32fa6df82ead1e2ef74d17b76547eddfaff89",symbol:"frax"},{chainId:137,address:"0x50b728d8d964fd00c2d0aad81718b71311fef68a",symbol:"snx"},{chainId:137,address:"0x72928d5436ff65e57f72d5566dcd3baedc649a88",symbol:"hdao"},{chainId:137,address:"0x3ad707da309f3845cd602059901e39c4dcd66473",symbol:"eth2x-fli-p"},{chainId:137,address:"0x4f025829c4b13df652f38abd2ab901185ff1e609",symbol:"ieth-fli-p"},{chainId:137,address:"0x340f412860da7b7823df372a2b59ff78b7ae6abc",symbol:"imatic-fli-p"},{chainId:137,address:"0xf287d97b6345bad3d88856b26fb7c0ab3f2c7976",symbol:"matic2x-fli-p"},{chainId:137,address:"0x130ce4e4f76c2265f94a961d70618562de0bb8d2",symbol:"ibtc-fli-p"},{chainId:137,address:"0x596ebe76e2db4470966ea395b0d063ac6197a8c5",symbol:"jrt"},{chainId:137,address:"0x3a58a54c066fdc0f2d55fc9c89f0415c92ebf3c4",symbol:"stmatic"},{chainId:137,address:"0xf501dd45a1198c2e1b5aef5314a68b9006d842e0",symbol:"mta"},{chainId:137,address:"0xeaecc18198a475c921b24b8a6c1c1f0f5f3f7ea0",symbol:"seed"},{chainId:137,address:"0xfe712251173a2cd5f5be2b46bb528328ea3565e1",symbol:"mvi"},{chainId:137,address:"0xa3fa99a148fa48d14ed51d610c367c61876997f1",symbol:"mimatic"},{chainId:137,address:"0xa486c6bc102f409180ccb8a94ba045d39f8fc7cb",symbol:"nex"},{chainId:137,address:"0xe2aa7db6da1dae97c5f5c6914d285fbfcc32a128",symbol:"par"},{chainId:137,address:"0x580a84c73811e1839f75d86d75d88cca0c241ff4",symbol:"qi"},{chainId:137,address:"0x831753dd7087cac61ab5644b308642cc1c33dc13",symbol:"quick"},{chainId:137,address:"0xb5c064f955d8e7f38fe0460c556a72987494ee17",symbol:"quick"},{chainId:137,address:"0x00e5646f60ac6fb446f621d146b6e1886f002905",symbol:"rai"},{chainId:137,address:"0x431cd3c9ac9fc73644bf68bf5691f4b83f9e104f",symbol:"rbw"},{chainId:137,address:"0xdbf31df14b66535af65aac99c32e9ea844e14501",symbol:"renbtc"},{chainId:137,address:"0x501ace9c35e60f03a2af4d484f49f9b1efde9f40",symbol:"solace"},{chainId:137,address:"0xfa68fb4628dff1028cfec22b4162fccd0d45efb6",symbol:"maticx"},{chainId:137,address:"0x0b3f868e0be5597d5db7feb59e1cadbb0fdda50a",symbol:"sushi"},{chainId:137,address:"0xdf7837de1f2fa4631d716cf2502f8b230f1dcc32",symbol:"tel"},{chainId:137,address:"0xe6469ba6d2fd6130788e0ea9c0a0515900563b59",symbol:"ust"},{chainId:137,address:"0xc2132d05d31c914a87c6611c10748aeb04b58e8f",symbol:"usdt"},{chainId:137,address:"0x5fe2b58c013d7601147dcdd68c143a77499f5531",symbol:"grt"},{chainId:137,address:"0xbbba073c31bf03b8acf7c28ef0738decf3695683",symbol:"sand"},{chainId:137,address:"0x2934b36ca9a4b31e633c5be670c8c8b28b6aa015",symbol:"thx"},{chainId:137,address:"0x2f800db0fdb5223b3c3f354886d907a671414a7f",symbol:"bct"},{chainId:137,address:"0x2e1ad108ff1d8c782fcbbb89aad783ac49586756",symbol:"tusd"},{chainId:137,address:"0x3809dcdd5dde24b37abe64a5a339784c3323c44f",symbol:"swap"},{chainId:137,address:"0x7fbc10850cae055b27039af31bd258430e714c62",symbol:"ubt"},{chainId:137,address:"0x2791bca1f2de4661ed88a30c99a7a9449aa84174",symbol:"usdc"},{chainId:137,address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",symbol:"weth"},{chainId:137,address:"0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270",symbol:"wmatic"},{chainId:137,address:"0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6",symbol:"wbtc"},{chainId:137,address:"0x24834bbec7e39ef42f4a75eaf8e5b6486d3f0e57",symbol:"lunc"},{chainId:137,address:"0xf153eff70dc0bf3b085134928daeea248d9b30d0",symbol:"xmark"},{chainId:42161,address:"0x9f20de1fc9b161b34089cbeae888168b44b03461",symbol:"arbis"},{chainId:42161,address:"0x040d1edc9569d4bab2d15287dc5a4f10f56a56b8",symbol:"bal"},{chainId:42161,address:"0x031d35296154279dc1984dcd93e392b1f946737b",symbol:"cap"},{chainId:42161,address:"0xf97f4df75117a78c1a5a0dbb814af92458539fb4",symbol:"link"},{chainId:42161,address:"0x354a6da3fcde098f8389cad84b0182725c6c91de",symbol:"comp"},{chainId:42161,address:"0xf4d48ce3ee1ac3651998971541badbb9a14d7234",symbol:"cream"},{chainId:42161,address:"0x11cdb42b0eb46d95f990bedd4695a6e3fa034978",symbol:"crv"},{chainId:42161,address:"0xda10009cbd5d07dd0cecc66161fc93d7c9000da1",symbol:"dai"},{chainId:42161,address:"0x8038f3c971414fd1fc220ba727f2d4a0fc98cb65",symbol:"dht"},{chainId:42161,address:"0xf0b5ceefc89684889e5f7e0a7775bd100fcd3709",symbol:"dusd"},{chainId:42161,address:"0x6c2c06790b3e3e3c38e12ee22f8183b37a13ee55",symbol:"dpx"},{chainId:42161,address:"0x32eb7902d4134bf98a28b963d26de779af92a212",symbol:"rdpx"},{chainId:42161,address:"0xc3ae0333f0f34aa734d5493276223d95b8f9cb37",symbol:"dxd"},{chainId:42161,address:"0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a",symbol:"gmx"},{chainId:42161,address:"0xa0b862f60edef4452f25b4160f177db44deb6cf1",symbol:"gno"},{chainId:42161,address:"0xb965029343d55189c25a7f3e0c9394dc0f5d41b1",symbol:"ndx"},{chainId:42161,address:"0x539bde0d7dbd336b79148aa742883198bbf60342",symbol:"magic"},{chainId:42161,address:"0x4e352cf164e64adcbad318c3a1e222e9eba4ce42",symbol:"mcb"},{chainId:42161,address:"0x3f56e0c36d275367b8c502090edf38289b3dea0d",symbol:"mimatic"},{chainId:42161,address:"0x965772e0e9c84b6f359c8597c891108dcf1c5b1a",symbol:"pickle"},{chainId:42161,address:"0x6694340fc020c5e6b96567843da2df01b2ce1eb6",symbol:"stg"},{chainId:42161,address:"0xd4d42f0b6def4ce0383636770ef773390d85c61a",symbol:"sushi"},{chainId:42161,address:"0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9",symbol:"usdt"},{chainId:42161,address:"0x23a941036ae778ac51ab04cea08ed6e2fe103614",symbol:"grt"},{chainId:42161,address:"0xa72159fc390f0e3c6d415e658264c7c4051e9b87",symbol:"tcr"},{chainId:42161,address:"0x4d15a3a2286d883af0aa1b3f21367843fac63e07",symbol:"tusd"},{chainId:42161,address:"0xfa7f8980b0f1e64a2062791cc3b0871572f1f7f0",symbol:"uni"},{chainId:42161,address:"0xff970a61a04b1ca14834a43f5de4533ebddb5cc8",symbol:"usdc"},{chainId:42161,address:"0xa684cd057951541187f288294a1e1c2646aa2d24",symbol:"vsta"},{chainId:42161,address:"0x64343594ab9b56e99087bfa6f2335db24c2d1f17",symbol:"vst"},{chainId:42161,address:"0x82af49447d8a07e3bd95bd0d56f35241523fbab1",symbol:"weth"},{chainId:42161,address:"0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f",symbol:"wbtc"},{chainId:42161,address:"0x82e3a8f066a6989666b031d916c43672085b1582",symbol:"yfi"}];class Pl{constructor(e,t,a,n,o){if(this.pools=new jr({url:e.urls.subgraph,chainId:e.chainId,query:n}),this.poolsForSimulations=new Ni(Ai(e.urls.subgraph),t,e,void 0,n),this.poolsOnChain=new Xr(this.pools,{provider:t,multicall:e.addresses.contracts.multicall,vault:e.addresses.contracts.vault},e.poolsToIgnore,e.multicallBatchSize),this.poolShares=new Qr(e.urls.subgraph,e.chainId),this.poolJoinExits=new Zr(e.urls.subgraph,e.chainId),e.urls.gaugesSubgraph&&(this.poolGauges=new Yr(e.urls.gaugesSubgraph,e.chainId),this.gaugeShares=new Nr(e.urls.gaugesSubgraph,e.chainId)),e.urls.blockNumberSubgraph){this.blockNumbers=new gl(e.urls.blockNumberSubgraph);const t=async()=>{if(this.blockNumbers)return await this.blockNumbers.find("dayAgo")};this.yesterdaysPools=new jr({url:e.urls.subgraph,chainId:e.chainId,blockHeight:t,query:n})}else if(e.averageBlockTime){const a=async()=>await t.getBlockNumber()-Math.round(86400/(e.averageBlockTime||2));this.yesterdaysPools=new jr({url:e.urls.subgraph,chainId:e.chainId,blockHeight:a,query:n})}const i=_l.filter((t=>t.chainId==e.chainId)).map((e=>e.address)),s=new tl(i,e.chainId,o),r=new nl(e.urls.subgraph,e.chainId),l=new Ne(a.contracts.multicall,e.chainId);this.tokenPrices=new ol(s,r,l);const d=new al(e.chainId,o);this.tokenHistoricalPrices=new il(d,l),this.tokenMeta=new el([]),e.urls.gaugesSubgraph&&(this.liquidityGauges=new qr(e.urls.gaugesSubgraph,a.contracts.multicall,e.addresses.contracts.gaugeController||"",e.chainId,e.addresses.contracts.gaugeControllerCheckpointer)),e.addresses.contracts.feeDistributor&&e.addresses.tokens.bal&&e.addresses.tokens.veBal&&e.addresses.tokens.bbaUsd&&(this.feeDistributor=new dl(a.contracts.multicall,e.addresses.contracts.feeDistributor,e.addresses.tokens.bal,e.addresses.tokens.veBal,e.addresses.tokens.bbaUsd,t)),this.feeCollector=new yl(e.addresses.contracts.vault,t),e.addresses.contracts.protocolFeePercentagesProvider&&(this.protocolFees=new fl(a.contracts.multicall,e.addresses.contracts.protocolFeePercentagesProvider)),this.tokenYields=new Tl,e.addresses.contracts.gyroConfigProxy&&(this.gyroConfigRepository=new kr(e.addresses.contracts.gyroConfigProxy,a.contracts.multicall,t))}}const wl=(t,a)=>"Stable"===t?e.PoolKind.LEGACY_STABLE:"ComposableStable"===t&&1===a?e.PoolKind.COMPOSABLE_STABLE:"ComposableStable"===t?e.PoolKind.COMPOSABLE_STABLE_V2:e.PoolKind.WEIGHTED,xl=ds.encodeSetRelayerApproval,El=ds.encodeGaugeWithdraw,Al=ds.encodeGaugeDeposit,Sl=ds.encodePeekChainedReferenceValue,vl=gt.createInterface(),kl=(e,t)=>{var a;return(null===(a=e.poolType)||void 0===a?void 0:a.match(/.*Linear.*/))?Bl(e,t):[]},Bl=(e,t)=>{if(!(e.id&&t.id&&e.tokens&&t.tokens&&e.mainIndex&&t.mainIndex))throw"Missing tokens";const a=e.tokens[e.mainIndex];return[{poolId:e.id,assetIn:e.address,assetOut:a.address},{poolId:t.id,assetIn:a.address,assetOut:t.address}]},Cl=async(e,t)=>{const a=await t.find(e);if(!a)throw`Pool ${e} not found`;const n=async(e,a)=>{let o=[{address:e}];const i=await t.findBy("address",e);if(i&&e!=a){const t=i.tokens.sort(Ol),a=await Promise.all(t.map((({address:e})=>n(e,i.address))));o=[{address:e,id:i.id,poolType:i.poolType,poolTypeVersion:i.poolTypeVersion,mainIndex:i.mainIndex,tokens:a.flat()}]}return o},o=a.tokens.sort(Ol);return{id:e,address:a.address,tokens:(await Promise.all(o.map((({address:e})=>n(e,a.address))))).flat(),poolType:a.poolType,poolTypeVersion:a.poolTypeVersion,mainIndex:a.mainIndex}},Ol=(e,t)=>e.address.toLowerCase()>t.address.toLowerCase()?1:-1,Ml=(t,o,i,s,r,l,d=!1,p,u,c)=>{if(!(r.id&&l.id&&r.tokens&&l.tokens&&r.poolType&&l.poolType))throw"Pool data is missing";const y=r.tokens.flatMap((({address:e})=>e)),b=l.tokens.flatMap((({address:e})=>e)),m="ComposableStable"==r.poolType&&1==r.poolTypeVersion?0:-1;let f,T=[];m>-1?(f=[{index:m,key:ds.toChainedReference(`10${m}`)}],T=[ds.toChainedReference(`20${m}`)]):(f=y.map(((e,t)=>({index:t,key:ds.toChainedReference(`10${t}`)}))),T=y.map(((e,t)=>ds.toChainedReference(`20${t}`))));const h=ds.toChainedReference("999"),I=[];let g=!1;"ComposableStable"===r.poolType&&(g=!0),c&&I.push(xl(o,!0,c)),p&&I.push(El(p,t,o,i)),I.push(((e,t,a,n,o=-1,i,s,r,l,d=!0)=>{let p;const u="ComposableStable"===t&&1===a;p=o>-1?S.exitExactBPTInForOneTokenOut(s,o):(u?O.exitExactBPTInForAllTokensOut:S.exitExactBPTInForTokensOut)(s);const c=wl(t,a);return ds.encodeExitPool({poolId:e,poolKind:c,sender:r,recipient:l,outputReferences:i,exitPoolRequest:{assets:n,minAmountsOut:new Array(n.length).fill("0"),userData:p,toInternalBalance:d}})})(r.id,r.poolType,r.poolTypeVersion||1,y,m,f,i,p?o:t,o));const _=((e,t,a)=>{const n=({tokens:e,mainIndex:t})=>e&&t&&e[t].address||"",o=e.flatMap(n),i=t.flatMap(n),s=o.map(((e,t)=>e&&[t,i.indexOf(e)]||[-1,-1])).map((([a,n])=>{if(-1===a||-1===n)return[];const o=e[a],i=t[n];return kl(o,i)}));return a>-1?[s[a]]:s})(r.tokens,l.tokens,m);if(_.flat().length>0){const t=_.map(((e,t)=>({path:e,inputAmount:String(f[t].key),outputReference:T[t]}))).filter((({path:e})=>e.length>0));I.push(((t,o,i,s,r=!0)=>{const l=[],d=[],p=[],u=[];i.forEach((e=>{const{path:t,inputAmount:n,outputReference:o}=e;for(let e=0;el.address!=e)).map((e=>{var t;const a=y.indexOf(e);return String(g&&T[a]||(null===(t=f[a])||void 0===t?void 0:t.key)||0)}));I.push(((e,t,n,o,i,s,r,l,d,p=!0)=>{const u=o.map((()=>a.MaxInt256)),c=S.joinExactTokensInForBPTOut(i,s),y=wl(t,n);return ds.encodeJoinPool({poolId:e,kind:y,sender:l,recipient:d,joinPoolRequest:{assets:o,maxAmountsIn:u,userData:c,fromInternalBalance:p},value:"0",outputReference:r})})(l.id,l.poolType,l.poolTypeVersion||1,b,P,s,String(h),o,u?o:t,!0)),!0===d&&I.push(Sl(String(h))),u&&I.push(Al(u,o,t,String(h)));return vl.encodeFunctionData("multicall",[I])};class Fl{constructor({relayerAddress:e,poolsRepository:t,gaugesRepository:a,provider:n}){this.getExpectedBptOut=Fl.getExpectedBptOut,this.relayerAddress=e,this.poolsRepository=t,this.gaugesRepository=a,this.provider=n}async pool2pool({user:e,from:t,to:a,balance:n,minBptOut:o="0",authorisation:i}){const s=await Cl(t,this.poolsRepository),r=await Cl(a,this.poolsRepository),l=Ml(e,this.relayerAddress,String(n),o,s,r,"0"==o,void 0,void 0,i);return{to:this.relayerAddress,data:l}}async pool2poolWithGauges({user:e,from:t,to:a,balance:n,minBptOut:o="0",authorisation:i}){const s=await this.gaugesRepository.findBy("poolId",t),r=await this.gaugesRepository.findBy("poolId",a);if(!(s&&s.poolId&&r&&r.poolId))throw new Error("Gauge not found");const l=await Cl(s.poolId,this.poolsRepository),d=await Cl(r.poolId,this.poolsRepository),p=Ml(e,this.relayerAddress,String(n),o,l,d,"0"==o,s.id,r.id,i);return{to:this.relayerAddress,data:p}}async gauge2gauge({user:e,from:t,to:a,balance:n,authorisation:o}){const i=[El(t,e,this.relayerAddress,n),Al(a,this.relayerAddress,e,n)];o&&i.unshift(xl(this.relayerAddress,!0,o));const s=vl.encodeFunctionData("multicall",[i]);return{to:this.relayerAddress,data:s}}}Fl.getExpectedBptOut=e=>{const t=vl.decodeFunctionResult("multicall",e)[0].slice(-2).filter((e=>"0x"!==e));return String(BigInt(t))};var Rl,Nl;!function(e){e[e.Direct=0]="Direct",e[e.TokenIn=1]="TokenIn",e[e.TokenOut=2]="TokenOut",e[e.Middle=3]="Middle"}(Rl||(Rl={})),function(e){e[e.BatchSwap=0]="BatchSwap",e[e.Join=1]="Join",e[e.Exit=2]="Exit"}(Nl||(Nl={}));class Ll{constructor(e,t,a,n,o,i,s,r,l,d){const p=this.getActionStep(e,t,a,n);this.amountIn=this.getActionAmount(o,Nl.BatchSwap,p,s),this.hasTokenIn=this.actionHasTokenIn(p),this.hasTokenOut=this.actionHasTokenOut(p);const u=this.hasTokenOut?i:"0";this.minOut=this.getActionMinOut(u,r);const[c,y]=this.getActionOutputRef(p,n,s);this.nextOpRefKey=y,this.opRefStart=c,this.sender=this.getSender(this.hasTokenIn,l,d),this.receiver=this.getReceiver(this.hasTokenOut,l,d)}getActionAmount(e,t,a,n){let o=e;return(a===Rl.TokenOut||a===Rl.Middle&&t===Nl.Join||a===Rl.Middle&&t===Nl.Exit)&&(o=ds.toChainedReference(n-1).toString()),o}getActionOutputRef(e,t,a){let n={};return e!==Rl.TokenIn&&e!==Rl.Middle||(n=this.getOutputRef(a,t),a++),[n,a]}getActionMinOut(e,t){return $e(n.BigNumber.from(e),n.BigNumber.from(t)).toString()}getActionStep(e,t,a,n){let o;return o=a===e&&n===t?Rl.Direct:a===e?Rl.TokenIn:n===t?Rl.TokenOut:Rl.Middle,o}getOutputRef(e,t){return{index:t,key:ds.toChainedReference(e)}}getFromInternal(e,t){return!e&&!t}getToInternal(e,t){return!e&&!t}actionHasTokenIn(e){return e===Rl.Direct||e===Rl.TokenIn}actionHasTokenOut(e){return e===Rl.Direct||e===Rl.TokenOut}getSender(e,t,a){return e?t:a}getReceiver(e,t,a){return e?t:a}getPoolKind(e){let t=0;return["MetaStable","Stable","StablePhantom"].includes(e)?t=1:"ComposableStable"===e&&(t=3),t}}class Dl extends Ll{constructor(e,t,a,n,o,i,s,r){var l;super(t,a,e.assetInIndex,e.assetOutIndex,e.amount,null!==(l=e.returnAmount)&&void 0!==l?l:"0",n,i,s,r),this.opRefKey=n,this.type=Nl.Exit,this.poolId=e.poolId,this.tokenOut=o[e.assetOutIndex],this.toInternalBalance=this.getToInternal(this.hasTokenOut),this.opRef=this.opRefStart}callData(e,t){const a=e.tokensList,n=new z(t),[o]=n.sortTokens(a),i=this.tokenOut,s=o.findIndex((e=>e.toLowerCase()===i.toLowerCase())),r=Array(a.length).fill("0");r[s]=this.minOut;const l=this.amountIn,d={assets:o,minAmountsOut:r,userData:v.exitExactBPTInForOneTokenOut(l,s),toInternalBalance:this.toInternalBalance,poolId:this.poolId,poolKind:this.getPoolKind(e.poolType),sender:this.sender,recipient:this.receiver,outputReferences:this.opRef.key?[this.opRef]:[],exitPoolRequest:{}},p=ds.formatExitPoolInput(d);return{params:d,encoded:ds.encodeExitPool(p)}}getAmountIn(){return this.hasTokenIn?this.amountIn:"0"}getAmountOut(){return this.hasTokenOut?this.minOut:"0"}}class Ul extends Ll{constructor(e,t,a,n,o,i,s,r){var l;super(t,a,e.assetInIndex,e.assetOutIndex,e.amount,null!==(l=e.returnAmount)&&void 0!==l?l:"0",n,i,s,r),this.opRefKey=n,this.type=Nl.Join,this.poolId=e.poolId,this.tokenIn=o[e.assetInIndex],this.fromInternal=this.getFromInternal(this.hasTokenIn),this.opRef=this.opRefStart}callData(e,t){const a=e.tokensList,n=new z(t),[o]=n.sortTokens(a),i=this.tokenIn,s=o.findIndex((e=>e.toLowerCase()===i.toLowerCase())),r=Array(a.length).fill("0");r[s]=this.amountIn;const l=this.minOut,d=v.joinExactTokensInForBPTOut(r,l),p={poolId:this.poolId,sender:this.sender,recipient:this.receiver,kind:this.getPoolKind(e.poolType),joinPoolRequest:{assets:o,maxAmountsIn:r,userData:d,fromInternalBalance:this.fromInternal},value:"0",outputReference:this.opRef.key?this.opRef.key.toString():"0"};return{params:p,encoded:ds.encodeJoinPool(p)}}getAmountIn(){return this.hasTokenIn?this.amountIn:"0"}getAmountOut(){return this.hasTokenOut?this.minOut:"0"}}class Vl extends Ll{constructor(e,t,a,n,o,i,s,r,l){var d;super(t,a,e.assetInIndex,e.assetOutIndex,e.amount,null!==(d=e.returnAmount)&&void 0!==d?d:"0",n,i,r,l),this.mainTokenInIndex=t,this.mainTokenOutIndex=a,this.opRefKey=n,this.assets=o,this.slippage=i,this.pools=s,this.user=r,this.relayer=l,this.approveTokens=[],this.opRef=[],this.type=Nl.BatchSwap,this.swaps=[{...e,amount:this.amountIn}];const p=this.isBpt(s,o[e.assetInIndex]);p&&this.approveTokens.push(o[e.assetInIndex]),this.fromInternal=this.getFromInternal(this.hasTokenIn,p);const u=this.isBpt(s,o[e.assetOutIndex]);this.toInternal=this.getToInternal(this.hasTokenOut,u),this.limits=this.getLimits(o,e.assetInIndex,e.assetOutIndex,e.amount,this.hasTokenIn,this.hasTokenOut,this.minOut),this.opRefStart.index&&this.opRef.push(this.opRefStart)}getLimits(e,t,o,i,s,r,l){const d=e.map((()=>n.BigNumber.from(0)));return d[t]=s?n.BigNumber.from(i):a.MaxInt256,r&&(d[o]=n.BigNumber.from(l).mul(-1)),d}updateLimits(e,t){t.hasTokenIn&&(e[t.swaps[0].assetInIndex]=e[t.swaps[0].assetInIndex].add(t.amountIn)),t.hasTokenOut&&(e[t.swaps[0].assetOutIndex]=e[t.swaps[0].assetOutIndex].sub(t.minOut))}isChainedSwap(e){return this.opRef[this.swaps.length-1]&&this.toInternal===e.fromInternal&&this.receiver===e.sender&&this.opRef[this.swaps.length-1].key.toString()===e.amountIn}canAddSwap(e){return!!this.isChainedSwap(e)||e.fromInternal===this.fromInternal&&e.toInternal===this.toInternal&&e.receiver===this.receiver&&e.sender===this.sender}callData(){const t=[];for(const e of this.approveTokens){const n=ds.encodeApproveVault(e,a.MaxUint256.toString());t.push(n)}const o={sender:this.sender,recipient:this.receiver,fromInternalBalance:this.fromInternal,toInternalBalance:this.toInternal},i={swapType:e.SwapType.SwapExactIn,swaps:this.swaps,assets:this.assets,funds:o,limits:this.limits.map((e=>e.toString())),deadline:n.BigNumber.from(Math.ceil(Date.now()/1e3)+3600),value:"0",outputReferences:this.opRef},s=ds.encodeBatchSwap(i);return t.push(s),{params:i,encoded:t}}getAmountIn(){return this.limits[this.mainTokenInIndex].toString()}getAmountOut(){return this.limits[this.mainTokenOutIndex].abs().toString()}copy(){return new Vl(this.swaps[0],this.mainTokenInIndex,this.mainTokenOutIndex,this.opRefKey,this.assets,this.slippage,this.pools,this.user,this.relayer)}addSwap(e){const t=this.isChainedSwap(e);this.swaps.push(e.swaps[0]),this.approveTokens=[...new Set([...this.approveTokens,...e.approveTokens])],this.toInternal=e.toInternal,this.receiver=e.receiver,this.hasTokenOut=e.hasTokenOut,this.minOut=e.minOut,this.opRef=[...this.opRef,...e.opRef],t||(this.amountIn=n.BigNumber.from(this.amountIn).add(e.amountIn).toString()),this.updateLimits(this.limits,e)}isBpt(e,t){return e.some((e=>e.address.toLowerCase()===t.toLowerCase()))}}function ql(e){const t=function(e){const t=[],a=[],n=[];for(const o of e)o.type===Nl.Exit||o.type===Nl.Join?o.hasTokenIn?t.push(o):o.hasTokenOut?a.push(o):n.push(o):n.push(o);return[...t,...n,...a]}(e);return function(e){const t=[];let a;for(const n of e)n.type===Nl.BatchSwap?a?a.canAddSwap(n)?a.addSwap(n):(t.push(a),a=n.copy()):a=n.copy():(a&&(t.push(a),a=void 0),t.push(n));return a&&t.push(a),t}(t)}const Gl=new t.Interface([{inputs:[{internalType:"contract IVault",name:"vault",type:"address"},{internalType:"address",name:"libraryAddress",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"getLibrary",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getVault",outputs:[{internalType:"contract IVault",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes[]",name:"data",type:"bytes[]"}],name:"multicall",outputs:[{internalType:"bytes[]",name:"results",type:"bytes[]"}],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"}]);function Wl(e){X.getInstance()}function Hl(e,t,a){if("Weighted"!==a)return!1;const n=t[e.assetOutIndex],o=N(e.poolId);return n.toLowerCase()===o.toLowerCase()}function Kl(e,t,a){if("Weighted"!==a)return!1;const n=t[e.assetInIndex],o=N(e.poolId);return n.toLowerCase()===o.toLowerCase()}Object.defineProperty(e,"PoolFilter",{enumerable:!0,get:function(){return d.PoolFilter}}),Object.defineProperty(e,"SOR",{enumerable:!0,get:function(){return d.SOR}}),Object.defineProperty(e,"SwapTypes",{enumerable:!0,get:function(){return d.SwapTypes}}),Object.defineProperty(e,"stableBPTForTokensZeroPriceImpact",{enumerable:!0,get:function(){return d.stableBPTForTokensZeroPriceImpact}}),Object.defineProperty(e,"weightedBPTForTokensZeroPriceImpact",{enumerable:!0,get:function(){return d.weightedBPTForTokensZeroPriceImpact}}),e.AMP_PRECISION=3,e.APR_THRESHOLD=1e4,e.AaveLinearPoolFactory__factory=lt,e.AaveLinearPool__factory=st,e.AaveRates=Ne,e.AaveWrapping__factory=pt,e.AssetHelpers=z,e.Authoriser__factory=ct,e.BALANCER_NETWORK_CONFIG=Ba,e.BalancerAPIArgsFormatter=at,e.BalancerError=Ma,e.BalancerErrors=Q,e.BalancerHelpers__factory=bt,e.BalancerMinterAuthorization=ne,e.BalancerMinter__factory=ft,e.BalancerPoolDataQueries__factory=ht,e.BalancerRelayer__factory=gt,e.BalancerSDK=class{constructor(e,t=new Ki(e),a=new ps(e)){this.config=e,this.sor=t,this.subgraph=a;X.getInstance().setLoggingEnabled(!!e.enableLogging),this.networkConfig=Di(e),this.provider=t.provider,this.balancerContracts=new Ts(this.networkConfig.addresses.contracts,t.provider),this.data=new Pl(this.networkConfig,t.provider,this.balancerContracts,e.subgraphQuery,e.coingecko),this.swaps=new ss(this.config),this.relayer=new ds,this.pricing=new us(e,this.swaps),this.pools=new dr(this.networkConfig,this.data,this.balancerContracts),this.data.liquidityGauges&&(this.claimService=new Rn(this.data.liquidityGauges,this.data.feeDistributor,this.networkConfig.chainId,this.contracts.multicall,this.networkConfig.addresses.contracts.gaugeClaimHelper,this.networkConfig.addresses.contracts.balancerMinter),this.migrationService=new Fl({relayerAddress:this.networkConfig.addresses.contracts.balancerRelayer,poolsRepository:this.data.pools,gaugesRepository:this.data.liquidityGauges.subgraph,provider:this.provider})),this.vaultModel=new Ws(this.data.poolsForSimulations,this.networkConfig.addresses.tokens.wrappedNativeAsset)}get contracts(){return this.balancerContracts.contracts}},e.BasePoolEncoder=A,e.BatchRelayerLibrary__factory=Pt,e.BlockNumberRepository=gl,e.CoingeckoHistoricalPriceRepository=al,e.CoingeckoPriceRepository=tl,e.ComposableStablePoolEncoder=O,e.ComposableStablePoolFactory__factory=At,e.ComposableStablePool__factory=xt,e.ConvergentCurvePool__factory=vt,e.Data=Pl,e.Debouncer=qe,e.ERC20__factory=Bt,e.ERC4626LinearPoolFactory__factory=Ft,e.ERC4626LinearPool__factory=Ot,e.EulerLinearPoolFactory__factory=Dt,e.EulerLinearPool__factory=Nt,e.FXPool__factory=Vt,e.FeeCollectorRepository=yl,e.FeeDistributorRepository=dl,e.GaugeClaimHelper__factory=Gt,e.GaugeControllerMulticallRepository=Or,e.GaugeSharesRepository=Nr,e.GearboxLinearPoolFactory__factory=$t,e.GearboxLinearPool__factory=Ht,e.GraphQLArgsBuilder=ot,e.GyroConfig__factory=jt,e.GyroEV2__factory=ga,e.HistoricalPriceProvider=il,e.LidoRelayer__factory=Yt,e.LinearPool__factory=Zt,e.Liquidity=Sn,e.LiquidityGaugeSubgraphRPCProvider=qr,e.LiquidityGaugeV5__factory=ea,e.LiquidityGaugesMulticallRepository=Ur,e.LiquidityGaugesSubgraphRepository=Vr,e.ManagedPoolEncoder=k,e.Migrations=Fl,e.Multicall3__factory=oa,e.Multicall__factory=aa,e.POOLS=function(e){return q[e]?q[e]:V},e.PoolGaugesRepository=Yr,e.PoolJoinExitRepository=Zr,e.PoolSharesRepository=Qr,e.Pools=dr,e.PoolsBalancerAPIRepository=class{constructor(e){var t,a;this.pools=[],this.skip=0,this.hasFetched=!1,this.isFetching=!1,this.client=new Gr(e.url,e.apiKey);this.query={args:Object.assign({},(null===(t=e.query)||void 0===t?void 0:t.args)||{chainId:1,orderBy:"totalLiquidity",orderDirection:"desc",where:{swapEnabled:{eq:!0},totalShares:{gt:.05}}}),attrs:Object.assign({},(null===(a=e.query)||void 0===a?void 0:a.attrs)||{id:!0,address:!0})},delete this.query.args.skip}fetchFromCache(e,t){return this.pools.slice(t,e+t)}async fetch(e){const t=(null==e?void 0:e.first)||10,a=(null==e?void 0:e.skip)||0;return this.hasFetched||this.fetchAll(e),await this.awaitEnoughPoolsFetched(t,a),this.fetchFromCache(t,a)}async fetchAll(e){this.isFetching=!0,this.hasFetched=!0,this.nextToken&&(this.query.args.nextToken=this.nextToken),this.query.args.first=1e3;const t=new ot(this.query.args).format(new at),a=this.query.attrs;a.nextToken=!0;const n={pools:{__args:t,...a}},o=(await this.client.get(n)).pools;if(this.nextToken=o.nextToken,this.pools=this.pools.concat(o.pools.map(this.format)),this.nextToken)return await this.fetchAll(e);this.isFetching=!1}async awaitEnoughPoolsFetched(e,t){for(let a=0;a<1e3;a++){if(this.pools.length>e+t)return;if(!this.isFetching)return;await Wr(10)}}async find(e){return 0==this.pools.length&&await this.fetch(),this.findBy("id",e)}async findBy(e,t){0==this.pools.length&&await this.fetch();const a=this.pools.find((a=>a[e]==t));if(a)return this.format(a)}format(e){var t,a,n,o;if(null===(t=e.apr)||void 0===t?void 0:t.rewardAprs.breakdown){const t=JSON.parse(null===(a=e.apr)||void 0===a?void 0:a.rewardAprs.breakdown);e.apr.rewardAprs.breakdown=t}if(null===(n=e.apr)||void 0===n?void 0:n.tokenAprs.breakdown){const t=JSON.parse(null===(o=e.apr)||void 0===o?void 0:o.tokenAprs.breakdown);e.apr.tokenAprs.breakdown=t}return e}},e.PoolsFallbackRepository=class{constructor(e,t={}){this.providers=e,this.currentProviderIdx=0,this.timeout=t.timeout||1e4}async fetch(e){return this.fallbackQuery("fetch",[e])}get currentProvider(){if(this.providers.length&&!(this.currentProviderIdx>=this.providers.length))return this.providers[this.currentProviderIdx]}async find(e){return this.fallbackQuery("find",[e])}async findBy(e,t){return this.fallbackQuery("findBy",[e,t])}async fallbackQuery(e,t){if(this.currentProviderIdx>=this.providers.length)throw new Error("No working providers found");let a;try{const n=this.providers[this.currentProviderIdx];a=await Promise.race([n[e].apply(n,t),new Promise(((e,t)=>setTimeout((()=>t(new Error("timeout"))),this.timeout)))])}catch(n){const o=n.message;if("timeout"===o){X.getInstance().warn("Provider "+this.currentProviderIdx+" timed out, falling back to next provider")}else{const e=X.getInstance();e.warn(`Provider ${this.currentProviderIdx} failed with error, falling back to next provider.`),e.warn(o)}this.currentProviderIdx++,a=await this.fallbackQuery.call(this,e,t)}return a}},e.PoolsStaticRepository=class{constructor(e){this.pools=e}async find(e){return this.pools.find((t=>t.id.toLowerCase()===e.toLowerCase()))}async findBy(e,t){return this.pools.find((a=>a[e]===t))}async all(){return this.pools}async where(e){return(await this.all()).filter(e)}},e.PoolsSubgraphOnChainRepository=Xr,e.PoolsSubgraphRepository=jr,e.ProtocolFeesProvider=fl,e.Relayer=ds,e.RelayerAuthorization=ae,e.SHALLOW_COMPOSABLE_STABLE_BUFFER=1e6,e.Sor=Ki,e.StablePoolEncoder=S,e.StablePool__factory=sa,e.StaticATokenRateProvider__factory=la,e.StaticTokenPriceProvider=class{constructor(e){this.tokenPrices=Object.fromEntries(Object.entries(e).map((([e,t])=>[e.toLowerCase(),t])))}async find(e){const t=e.toLowerCase(),a=this.tokenPrices[t];if(a)return a}async findBy(e,t){if("address"==e)return this.find(t)}},e.StaticTokenProvider=el,e.Subgraph=ps,e.SubgraphArgsFormatter=nt,e.SubgraphPriceRepository=nl,e.Swaps=ss,e.TokenPriceProvider=ol,e.TokenYieldsRepository=Tl,e.Vault__factory=pa,e.VeBal__factory=Pa,e.VeDelegationProxy__factory=xa,e.WeightedPoolEncoder=v,e.WeightedPoolFactory__factory=ba,e.WeightedPool__factory=ca,e.YearnLinearPoolFactory__factory=ha,e.YearnLinearPool__factory=fa,e.accountToAddress=ee,e.addSlippage=Je,e.addressMapIn=De,e.balEmissions=Es,e.bn=e=>n.parseFixed(`${e}`,18),e.buildRelayerCalls=function(t,a,o,i,s,r,l){const d=function(e,t,a,n,o,i,s,r){var l;const d=n.findIndex((t=>t.toLowerCase()===e.toLowerCase())),p=n.findIndex((e=>e.toLowerCase()===t.toLowerCase())),u=[];let c=0;for(const e of a){const t=null===(l=i.find((t=>t.id===e.poolId)))||void 0===l?void 0:l.poolType;if(Hl(e,n,t)){const t=new Ul(e,d,p,c,n,o,s,r);c=t.nextOpRefKey,u.push(t)}else{if(!Kl(e,n,t)){const t=new Vl(e,d,p,c,n,o,i,s,r);c=t.nextOpRefKey,u.push(t);continue}{const t=new Dl(e,d,p,c,n,o,s,r);c=t.nextOpRefKey,u.push(t)}}}return u}(t.tokenIn,t.tokenOut,t.swaps,t.tokenAddresses,r,a,o,i),p=ql(d),u=[],c=[];l&&u.push(ds.encodeSetRelayerApproval(i,!0,l));for(const t of p){if(t.type===Nl.Exit||t.type===Nl.Join){const n=a.find((e=>e.id===t.poolId));if(void 0===n)throw new Ma(e.BalancerErrorCode.NO_POOL_DATA);const{params:o,encoded:i}=t.callData(n,s);u.push(i),c.push(o)}if(t.type===Nl.BatchSwap){const{params:e,encoded:a}=t.callData();u.push(...a),c.push(e)}}return function(t,a,o,i){const s=t.reduce(((e=n.BigNumber.from(0),t)=>e.add(t))),r=a.reduce(((e=n.BigNumber.from(0),t)=>e.add(t)));Wl(s.toString()),Wl(o.swapAmount.toString()),Wl(r.toString()),Wl($e(o.returnAmount,n.BigNumber.from(i)).toString()),Wl(o.returnAmount.toString());const l=r.sub($e(o.returnAmount,n.BigNumber.from(i)));if(!s.eq(o.swapAmount)||!l.lt("3"))throw new Ma(e.BalancerErrorCode.RELAY_SWAP_AMOUNTS)}(p.map((e=>n.BigNumber.from(e.getAmountIn()))),p.map((e=>n.BigNumber.from(e.getAmountOut()))),t,r),{to:i,data:Gl.encodeFunctionData("multicall",[u]),rawCalls:u,inputs:c}},e.canUseJoinExit=function(e,t,n){return e!==d.SwapTypes.SwapExactOut&&t.toLowerCase()!==a.AddressZero.toLowerCase()&&n.toLowerCase()!==a.AddressZero.toLowerCase()},e.factories=Aa,e.fetchOnChainPoolData=Fi,e.findEventInReceiptLogs=et,e.formatFixed=We,e.formatFromBigInt18=function(e){return n.formatFixed(n.BigNumber.from(e),18)},e.getEthValue=Ve,e.getLimitsForSlippage=Sa,e.getOnChainBalances=Ri,e.getPoolAddress=N,e.getPoolNonce=D,e.getPoolSpecialization=L,e.getRandomBytes32=tt,e.insert=Xe,e.isLinearish=Qe,e.isNormalizedWeights=e=>{const t=e.reduce(((e,t)=>e.add(t)),a.Zero);return t.eq(a.WeiPerEther)},e.isSameAddress=je,e.mulSlippage=Ke,e.parseFixed=Ge,e.parsePoolInfo=me,e.parseToBigInt18=function(e){return Ge(e,18).toBigInt()},e.removeItem=ze,e.reorderArrays=Ze,e.replace=Ye,e.signPermit=async(e,t,o,s,r=a.MaxUint256,l)=>{const{chainId:d}=await e.provider.getNetwork(),p=await t.getAddress();l||(l=await e.nonces(p));const u={name:await e.name(),version:"1",chainId:d,verifyingContract:e.address},c={owner:p,spender:await ee(o),value:s,nonce:l,deadline:r},y=await t._signTypedData(u,{Permit:[{name:"owner",type:"address"},{name:"spender",type:"address"},{name:"value",type:"uint256"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]},c);return{...i.splitSignature(y),deadline:n.BigNumber.from(r),nonce:n.BigNumber.from(l)}},e.someJoinExit=function(e,t,a){return t.some((t=>function(e,t,a){const n=e.find((e=>e.id===t.poolId));return"Weighted"===(null==n?void 0:n.poolType)&&[a[t.assetInIndex],a[t.assetOutIndex]].includes(n.address)}(e,t,a)))},e.splitPoolId=e=>({address:N(e),specialization:L(e),nonce:D(e)}),e.subSlippage=$e,e.toNormalizedWeights=function(e){if(100==e.length)return Array(100).fill(a.WeiPerEther.div(100));const t=e.reduce(((e,t)=>e.add(t)),a.Zero);if(t.eq(a.WeiPerEther))return e;const n=[];let o=a.Zero;for(let i=0;i{e.price&&(t[e.address]=e.price)})),t},e.truncateAddresses=function(e){return e.map((e=>`${e.slice(0,6)}...${e.slice(38,42)}`))},e.unwrapToken=Ue,e.wrappedTokensMap=Fe,e.yieldTokens=Me,Object.defineProperty(e,"__esModule",{value:!0})})); +//# sourceMappingURL=index.umd.js.map diff --git a/package/dist/index.umd.js.map b/package/dist/index.umd.js.map new file mode 100644 index 000000000..e7d0ea8e4 --- /dev/null +++ b/package/dist/index.umd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.umd.js","sources":["../../src/pool-base/encoder.ts","../../src/pool-stable/encoder.ts","../../src/pool-weighted/encoder.ts","../../src/pool-composable-stable/encoder.ts","../node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../../src/pool-utils/poolId.ts","../../src/lib/constants/network.ts","../../src/lib/constants/pools.ts","../../src/modules/data/pool-gauges/types.ts","../../src/modules/data/pool-shares/types.ts","../../src/modules/data/gauge-shares/types.ts","../../src/types.ts","../../src/lib/utils/logger.ts","../../src/lib/utils/assetHelpers.ts","../../src/lib/utils/errors.ts","../../src/lib/utils/signatures.ts","../../src/lib/utils/permit.ts","../../src/lib/utils/solidityMaths.ts","../../src/lib/utils/poolHelper.ts","../../src/lib/constants/tokens.ts","../node_modules/@ethersproject/logger/lib.esm/index.js","../node_modules/@ethersproject/logger/lib.esm/_version.js","../node_modules/@ethersproject/units/lib.esm/_version.js","../node_modules/@ethersproject/units/lib.esm/index.js","../../src/modules/data/token-prices/aave-rates.ts","../../src/lib/utils/tokens.ts","../../src/lib/utils/debouncer.ts","../../src/lib/utils/math.ts","../../src/lib/utils/slippageHelper.ts","../../src/lib/utils/index.ts","../../src/lib/graphql/formatters/balancer-api.ts","../../src/lib/graphql/formatters/subgraph.ts","../../src/lib/graphql/args-builder.ts","../../src/contracts/factories/AaveLinearPool__factory.ts","../../src/contracts/factories/AaveLinearPoolFactory__factory.ts","../../src/contracts/factories/AaveWrapping__factory.ts","../../src/contracts/factories/Authoriser__factory.ts","../../src/contracts/factories/BalancerHelpers__factory.ts","../../src/contracts/factories/BalancerMinter__factory.ts","../../src/contracts/factories/BalancerPoolDataQueries__factory.ts","../../src/contracts/factories/BalancerRelayer__factory.ts","../../src/contracts/factories/BatchRelayerLibrary__factory.ts","../../src/contracts/factories/ComposableStablePool__factory.ts","../../src/contracts/factories/ComposableStablePoolFactory__factory.ts","../../src/contracts/factories/ConvergentCurvePool__factory.ts","../../src/contracts/factories/ERC20__factory.ts","../../src/contracts/factories/ERC4626LinearPool__factory.ts","../../src/contracts/factories/ERC4626LinearPoolFactory__factory.ts","../../src/contracts/factories/EulerLinearPool__factory.ts","../../src/contracts/factories/EulerLinearPoolFactory__factory.ts","../../src/contracts/factories/FXPool__factory.ts","../../src/contracts/factories/GaugeClaimHelper__factory.ts","../../src/contracts/factories/GearboxLinearPool__factory.ts","../../src/contracts/factories/GearboxLinearPoolFactory__factory.ts","../../src/contracts/factories/GyroConfig__factory.ts","../../src/contracts/factories/LidoRelayer__factory.ts","../../src/contracts/factories/LinearPool__factory.ts","../../src/contracts/factories/LiquidityGaugeV5__factory.ts","../../src/contracts/factories/Multicall__factory.ts","../../src/contracts/factories/Multicall3__factory.ts","../../src/contracts/factories/StablePool__factory.ts","../../src/contracts/factories/StaticATokenRateProvider__factory.ts","../../src/contracts/factories/Vault__factory.ts","../../src/contracts/factories/WeightedPool__factory.ts","../../src/contracts/factories/WeightedPoolFactory__factory.ts","../../src/contracts/factories/YearnLinearPool__factory.ts","../../src/contracts/factories/YearnLinearPoolFactory__factory.ts","../../src/contracts/factories/GyroEV2__factory.ts","../../src/contracts/factories/VeBal__factory.ts","../../src/contracts/factories/VeDelegationProxy__factory.ts","../../src/modules/swaps/types.ts","../../src/modules/swaps/helpers.ts","../../src/lib/constants/config.ts","../../src/balancerErrors.ts","../../src/modules/pricing/priceImpact.ts","../../src/lib/utils/stableMathHelpers.ts","../../src/modules/pools/pool-types/concerns/stable/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/stable/exit.concern.ts","../../src/modules/pools/pool-types/concerns/stable/join.concern.ts","../../src/modules/pools/pool-types/concerns/stable/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/stable/spotPrice.concern.ts","../../src/modules/pools/pool-types/stable.module.ts","../../src/modules/pools/pool-types/concerns/stablePhantom/spotPrice.concern.ts","../../src/modules/pools/pool-types/concerns/composableStable/join.concern.ts","../../src/modules/pools/pool-types/concerns/composableStable/exit.concern.ts","../../src/modules/pools/pool-types/composableStable.module.ts","../../src/modules/pools/pool-types/concerns/weighted/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/weighted/exit.concern.ts","../../src/modules/pools/pool-types/concerns/weighted/join.concern.ts","../../src/modules/pools/pool-types/concerns/weighted/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/weighted/spotPrice.concern.ts","../../src/modules/pools/pool-types/weighted.module.ts","../../src/modules/pools/pool-types/concerns/metaStable/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/metaStable/spotPrice.concern.ts","../../src/modules/pools/pool-types/metaStable.module.ts","../../src/modules/pools/pool-types/concerns/stablePhantom/exit.concern.ts","../../src/modules/pools/pool-types/concerns/stablePhantom/join.concern.ts","../../src/modules/pools/pool-types/stablePhantom.module.ts","../../src/modules/pools/pool-types/concerns/linear/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/linear/exit.concern.ts","../../src/modules/pools/pool-types/concerns/linear/join.concern.ts","../../src/modules/pools/pool-types/concerns/linear/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/linear/spotPrice.concern.ts","../../src/modules/pools/pool-types/linear.module.ts","../../src/modules/pools/pool-types/concerns/fx/exit.concern.ts","../../src/modules/pools/pool-types/concerns/fx/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/fx/spotPrice.concern.ts","../../src/modules/pools/pool-types/concerns/fx/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/fx/join.concern.ts","../../src/modules/pools/pool-types/fx.module.ts","../../src/modules/pools/pool-types/concerns/gyro/exit.concern.ts","../../src/modules/pools/pool-types/concerns/gyro/liquidity.concern.ts","../../src/modules/pools/pool-types/concerns/gyro/spotPrice.concern.ts","../../src/modules/pools/pool-types/concerns/gyro/priceImpact.concern.ts","../../src/modules/pools/pool-types/concerns/gyro/join.concern.ts","../../src/modules/pools/pool-types/gyro.module.ts","../../src/modules/pools/pool-type-concerns.ts","../../src/modules/liquidity/liquidity.module.ts","../../src/modules/claims/helper.ts","../../src/modules/claims/ClaimService.ts","../../src/modules/swaps/queryBatchSwap.ts","../node_modules/tslib/tslib.es6.js","../node_modules/graphql-tag/lib/index.js","../../src/modules/subgraph/generated/balancer-subgraph-types.ts","../../src/modules/subgraph/generated/balancer-gauges.ts","../../src/modules/subgraph/subgraph.ts","../../src/lib/utils/multiCaller3.ts","../../src/modules/data/pool/onchain-data.ts","../../src/modules/sor/pool-data/subgraphPoolDataService.ts","../../src/modules/sor/token-price/subgraphTokenPriceService.ts","../../src/modules/sdk.helpers.ts","../../src/lib/constants/poolsToIgnore.ts","../../src/modules/sor/token-price/apiTokenPriceService.ts","../../src/lib/utils/coingecko-api.ts","../../src/modules/sor/token-price/coingeckoTokenPriceService.ts","../../src/modules/sor/sor.module.ts","../../src/modules/swaps/flashSwap/index.ts","../../src/modules/swaps/swap_builder/swap_utils.ts","../../src/modules/swaps/swap_builder/swap_info_decorator.ts","../../src/modules/swaps/swap_builder/single_swap_builder.ts","../../src/modules/swaps/swap_builder/batch_swap_builder.ts","../../src/modules/swaps/swaps.module.ts","../../src/modules/relayer/types.ts","../../src/modules/relayer/relayer.module.ts","../../src/modules/subgraph/subgraph.module.ts","../../src/modules/pricing/pricing.module.ts","../../src/modules/contracts/implementations/base-pool.ts","../../src/lib/utils/multiCaller.ts","../../src/lib/utils/time.ts","../../src/modules/contracts/implementations/veBAL.ts","../../src/modules/contracts/implementations/veBAL-proxy.ts","../../src/modules/contracts/contracts.module.ts","../../src/modules/pools/impermanentLoss/impermanentLossService.ts","../../src/modules/data/bal/emissions.ts","../../src/modules/pools/apr/protocol-revenue.ts","../../src/modules/pools/fees/fees.ts","../../src/modules/pools/apr/apr.ts","../../src/modules/graph/graph.ts","../../src/pool-weighted/decoder.ts","../../src/modules/vaultModel/poolModel/join.ts","../../src/modules/vaultModel/poolModel/exit.ts","../../src/modules/vaultModel/poolModel/swap.ts","../../src/modules/vaultModel/poolModel/unwrap.ts","../../src/modules/vaultModel/poolModel/poolModel.ts","../../src/modules/vaultModel/relayer.ts","../../src/modules/vaultModel/poolSource.ts","../../src/modules/vaultModel/vaultModel.module.ts","../../src/modules/joins/joins.module.ts","../../src/lib/utils/tenderlyHelper.ts","../../src/modules/simulation/simulation.module.ts","../../src/modules/exits/exits.module.ts","../../src/modules/pools/volume/volume.ts","../../src/modules/pools/factory/composable-stable/composable-stable.factory.ts","../../src/modules/pools/factory/weighted/weighted.factory.ts","../../src/modules/pools/factory/types.ts","../../src/modules/pools/factory/linear/linear.factory.ts","../../src/modules/pools/pool-factory__factory.ts","../../src/modules/pools/queries/params_builder.ts","../../src/modules/pools/queries/get_encoder.ts","../../src/modules/pools/emissions/index.ts","../../src/modules/pools/proportional-amounts/index.ts","../../src/modules/pools/index.ts","../node_modules/@ethersproject/strings/lib.esm/_version.js","../node_modules/@ethersproject/strings/lib.esm/utf8.js","../node_modules/@ethersproject/strings/lib.esm/bytes32.js","../node_modules/js-sha3/src/sha3.js","../node_modules/@ethersproject/solidity/lib.esm/_version.js","../node_modules/@ethersproject/solidity/lib.esm/index.js","../node_modules/@ethersproject/keccak256/lib.esm/index.js","../../src/modules/data/gyro-config/repository.ts","../../src/modules/data/gauge-controller/multicall.ts","../../src/modules/subgraph/repository/abstract-subgraph-repository.ts","../../src/modules/subgraph/repository/balancer-subgraph-repository.ts","../../src/modules/subgraph/repository/gauges-subgraph-repository.ts","../../src/modules/data/gauge-shares/repository.ts","../../src/modules/data/liquidity-gauges/multicall.ts","../../src/modules/data/liquidity-gauges/subgraph.ts","../../src/modules/data/liquidity-gauges/provider.ts","../../src/modules/api/balancer-api.client.ts","../../src/modules/data/pool/balancer-api.ts","../../src/modules/data/pool/subgraph-helpers.ts","../../src/modules/data/pool/subgraph.ts","../../src/modules/data/pool/subgraphOnChain.ts","../../src/modules/data/pool-gauges/repository.ts","../../src/modules/data/pool-joinExit/types.ts","../../src/modules/data/pool-joinExit/repository.ts","../../src/modules/data/pool-shares/repository.ts","../../src/modules/data/token/static.ts","../../src/modules/data/token-prices/coingecko.ts","../../src/modules/data/token-prices/coingecko-historical.ts","../../src/modules/data/token-prices/subgraph.ts","../../src/modules/data/token-prices/provider.ts","../../src/modules/data/token-prices/historical-price-provider.ts","../../src/modules/contracts/implementations/feeDistributor.ts","../../src/modules/data/fee-distributor/repository.ts","../../src/modules/data/fee-collector/repository.ts","../../src/modules/data/protocol-fees/provider.ts","../../src/modules/data/token-yields/repository.ts","../../src/modules/data/block-number/index.ts","../../src/modules/data/index.ts","../../src/modules/relayer/actions.ts","../../src/modules/liquidity-managment/migrations/helpers.ts","../../src/modules/liquidity-managment/migrations/builder.ts","../../src/modules/liquidity-managment/migrations.ts","../../src/modules/swaps/joinExit/actions/types.ts","../../src/modules/swaps/joinExit/actions/baseAction.ts","../../src/modules/swaps/joinExit/actions/exit.ts","../../src/modules/swaps/joinExit/actions/join.ts","../../src/modules/swaps/joinExit/actions/swap.ts","../../src/modules/swaps/joinExit/actions/helpers.ts","../../src/modules/swaps/joinExit/joinAndExit.ts","../../src/modules/sdk.module.ts","../../src/modules/data/pool/fallback.ts","../../src/modules/data/pool/static.ts","../../src/modules/data/token-prices/static.ts","../../src/pool-weighted/normalizedWeights.ts"],"sourcesContent":["import { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\n\n// RECOVERY_MODE must match BasePoolUserData.RECOVERY_MODE_EXIT_KIND, the value that (Legacy)BasePool uses to detect the special exit enabled in recovery mode.\nenum BasePoolExitKind {\n RECOVERY_MODE = 255,\n}\n\nexport class BasePoolEncoder {\n /**\n * Encodes the userData parameter for exiting any Pool in recovery mode, by removing tokens in return for\n * an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n */\n static recoveryModeExit = (bptAmountIn: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [BasePoolExitKind.RECOVERY_MODE, bptAmountIn]\n );\n}\n","import { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\n\nexport enum StablePoolJoinKind {\n INIT = 0,\n EXACT_TOKENS_IN_FOR_BPT_OUT,\n TOKEN_IN_FOR_EXACT_BPT_OUT,\n}\n\nexport enum StablePhantomPoolJoinKind {\n INIT = 0,\n COLLECT_PROTOCOL_FEES,\n}\n\nexport enum StablePoolExitKind {\n EXACT_BPT_IN_FOR_ONE_TOKEN_OUT = 0,\n EXACT_BPT_IN_FOR_TOKENS_OUT,\n BPT_IN_FOR_EXACT_TOKENS_OUT,\n}\n\nexport class StablePoolEncoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Encodes the userData parameter for providing the initial liquidity to a StablePool\n * @param initialBalances - the amounts of tokens to send to the pool to form the initial balances\n */\n static joinInit = (amountsIn: BigNumberish[]): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]'],\n [StablePoolJoinKind.INIT, amountsIn]\n );\n\n /**\n * Encodes the userData parameter for collecting protocol fees for StablePhantomPool\n */\n static joinCollectProtocolFees = (): string =>\n defaultAbiCoder.encode(\n ['uint256'],\n [StablePhantomPoolJoinKind.COLLECT_PROTOCOL_FEES]\n );\n\n /**\n * Encodes the userData parameter for joining a StablePool with exact token inputs\n * @param amountsIn - the amounts each of token to deposit in the pool as liquidity\n * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens\n */\n static joinExactTokensInForBPTOut = (\n amountsIn: BigNumberish[],\n minimumBPT: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [StablePoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT, amountsIn, minimumBPT]\n );\n\n /**\n * Encodes the userData parameter for joining a StablePool with to receive an exact amount of BPT\n * @param bptAmountOut - the amount of BPT to be minted\n * @param enterTokenIndex - the index of the token to be provided as liquidity\n */\n static joinTokenInForExactBPTOut = (\n bptAmountOut: BigNumberish,\n enterTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n StablePoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,\n bptAmountOut,\n enterTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a StablePool by removing a single token in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n * @param enterTokenIndex - the index of the token to removed from the pool\n */\n static exitExactBPTInForOneTokenOut = (\n bptAmountIn: BigNumberish,\n exitTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n StablePoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,\n bptAmountIn,\n exitTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a StablePool by removing tokens in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n */\n static exitExactBPTInForTokensOut = (bptAmountIn: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [StablePoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT, bptAmountIn]\n );\n\n /**\n * Encodes the userData parameter for exiting a StablePool by removing exact amounts of tokens\n * @param amountsOut - the amounts of each token to be withdrawn from the pool\n * @param maxBPTAmountIn - the minimum acceptable BPT to burn in return for withdrawn tokens\n */\n static exitBPTInForExactTokensOut = (\n amountsOut: BigNumberish[],\n maxBPTAmountIn: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n StablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,\n amountsOut,\n maxBPTAmountIn,\n ]\n );\n}\n","import { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\n\nexport enum WeightedPoolJoinKind {\n INIT = 0,\n EXACT_TOKENS_IN_FOR_BPT_OUT,\n TOKEN_IN_FOR_EXACT_BPT_OUT,\n ALL_TOKENS_IN_FOR_EXACT_BPT_OUT,\n}\n\nexport enum WeightedPoolExitKind {\n EXACT_BPT_IN_FOR_ONE_TOKEN_OUT = 0,\n EXACT_BPT_IN_FOR_TOKENS_OUT,\n BPT_IN_FOR_EXACT_TOKENS_OUT,\n MANAGEMENT_FEE_TOKENS_OUT,\n}\n\nexport class WeightedPoolEncoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Encodes the userData parameter for providing the initial liquidity to a WeightedPool\n * @param initialBalances - the amounts of tokens to send to the pool to form the initial balances\n */\n static joinInit = (amountsIn: BigNumberish[]): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]'],\n [WeightedPoolJoinKind.INIT, amountsIn]\n );\n\n /**\n * Encodes the userData parameter for joining a WeightedPool with exact token inputs\n * @param amountsIn - the amounts each of token to deposit in the pool as liquidity\n * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens\n */\n static joinExactTokensInForBPTOut = (\n amountsIn: BigNumberish[],\n minimumBPT: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT, amountsIn, minimumBPT]\n );\n\n /**\n * Encodes the userData parameter for joining a WeightedPool with a single token to receive an exact amount of BPT\n * @param bptAmountOut - the amount of BPT to be minted\n * @param enterTokenIndex - the index of the token to be provided as liquidity\n */\n static joinTokenInForExactBPTOut = (\n bptAmountOut: BigNumberish,\n enterTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,\n bptAmountOut,\n enterTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for joining a WeightedPool proportionally to receive an exact amount of BPT\n * @param bptAmountOut - the amount of BPT to be minted\n */\n static joinAllTokensInForExactBPTOut = (bptAmountOut: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT, bptAmountOut]\n );\n\n /**\n * Encodes the userData parameter for exiting a WeightedPool by removing a single token in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n * @param enterTokenIndex - the index of the token to removed from the pool\n */\n static exitExactBPTInForOneTokenOut = (\n bptAmountIn: BigNumberish,\n exitTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,\n bptAmountIn,\n exitTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a WeightedPool by removing tokens in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n */\n static exitExactBPTInForTokensOut = (bptAmountIn: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT, bptAmountIn]\n );\n\n /**\n * Encodes the userData parameter for exiting a WeightedPool by removing exact amounts of tokens\n * @param amountsOut - the amounts of each token to be withdrawn from the pool\n * @param maxBPTAmountIn - the minimum acceptable BPT to burn in return for withdrawn tokens\n */\n static exitBPTInForExactTokensOut = (\n amountsOut: BigNumberish[],\n maxBPTAmountIn: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,\n amountsOut,\n maxBPTAmountIn,\n ]\n );\n}\n\nexport class ManagedPoolEncoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Encodes the userData parameter for exiting a ManagedPool for withdrawing management fees.\n * This can only be done by the pool owner.\n */\n static exitForManagementFees = (): string =>\n defaultAbiCoder.encode(\n ['uint256'],\n [WeightedPoolExitKind.MANAGEMENT_FEE_TOKENS_OUT]\n );\n}\n","import { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\nimport { StablePhantomPoolJoinKind } from '../pool-stable/index';\n\nexport enum ComposableStablePoolJoinKind {\n INIT = 0,\n EXACT_TOKENS_IN_FOR_BPT_OUT,\n TOKEN_IN_FOR_EXACT_BPT_OUT,\n}\n\nexport enum ComposableStablePoolExitKind {\n EXACT_BPT_IN_FOR_ONE_TOKEN_OUT = 0,\n BPT_IN_FOR_EXACT_TOKENS_OUT,\n EXACT_BPT_IN_FOR_ALL_TOKENS_OUT,\n}\n\nexport class ComposableStablePoolEncoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Encodes the userData parameter for providing the initial liquidity to a ComposableStablePool\n * @param initialBalances - the amounts of tokens to send to the pool to form the initial balances\n */\n static joinInit = (amountsIn: BigNumberish[]): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]'],\n [ComposableStablePoolJoinKind.INIT, amountsIn]\n );\n\n /**\n * Encodes the userData parameter for collecting protocol fees for StablePhantomPool\n */\n static joinCollectProtocolFees = (): string =>\n defaultAbiCoder.encode(\n ['uint256'],\n [StablePhantomPoolJoinKind.COLLECT_PROTOCOL_FEES]\n );\n\n /**\n * Encodes the userData parameter for joining a ComposableStablePool with exact token inputs\n * @param amountsIn - the amounts each of token to deposit in the pool as liquidity\n * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens\n */\n static joinExactTokensInForBPTOut = (\n amountsIn: BigNumberish[],\n minimumBPT: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n ComposableStablePoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT,\n amountsIn,\n minimumBPT,\n ]\n );\n\n /**\n * Encodes the userData parameter for joining a ComposableStablePool with to receive an exact amount of BPT\n * @param bptAmountOut - the amount of BPT to be minted\n * @param enterTokenIndex - the index of the token to be provided as liquidity\n */\n static joinTokenInForExactBPTOut = (\n bptAmountOut: BigNumberish,\n enterTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n ComposableStablePoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT,\n bptAmountOut,\n enterTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a ComposableStablePool by removing a single token in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n * @param enterTokenIndex - the index of the token to removed from the pool\n */\n static exitExactBPTInForOneTokenOut = (\n bptAmountIn: BigNumberish,\n exitTokenIndex: number\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT,\n bptAmountIn,\n exitTokenIndex,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a StablePool by removing tokens in return for an exact amount of BPT\n * @param bptAmountIn - the amount of BPT to be burned\n */\n static exitExactBPTInForAllTokensOut = (bptAmountIn: BigNumberish): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [\n ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT,\n bptAmountIn,\n ]\n );\n\n /**\n * Encodes the userData parameter for exiting a ComposableStablePool by removing exact amounts of tokens\n * @param amountsOut - the amounts of each token to be withdrawn from the pool\n * @param maxBPTAmountIn - the max acceptable BPT to burn in return for withdrawn tokens\n */\n static exitBPTInForExactTokensOut = (\n amountsOut: BigNumberish[],\n maxBPTAmountIn: BigNumberish\n ): string =>\n defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n ComposableStablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT,\n amountsOut,\n maxBPTAmountIn,\n ]\n );\n}\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n var provided = typeof message === 'function' ? message() : message;\n var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n throw new Error(value);\n}\n\nexport { invariant as default };\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { PoolSpecialization } from '../types';\nimport invariant from 'tiny-invariant';\n\n/**\n * Splits a poolId into its components, i.e. pool address, pool specialization and its nonce\n * @param poolId - a bytes32 string of the pool's ID\n * @returns an object with the decomposed poolId\n */\nexport const splitPoolId = (\n poolId: string\n): {\n address: string;\n specialization: PoolSpecialization;\n nonce: BigNumber;\n} => {\n return {\n address: getPoolAddress(poolId),\n specialization: getPoolSpecialization(poolId),\n nonce: getPoolNonce(poolId),\n };\n};\n\n/**\n * Extracts a pool's address from its poolId\n * @param poolId - a bytes32 string of the pool's ID\n * @returns the pool's address\n */\nexport const getPoolAddress = (poolId: string): string => {\n invariant(poolId.length === 66, 'Invalid poolId length');\n return poolId.slice(0, 42);\n};\n\n/**\n * Extracts a pool's specialization from its poolId\n * @param poolId - a bytes32 string of the pool's ID\n * @returns the pool's specialization\n */\nexport const getPoolSpecialization = (poolId: string): PoolSpecialization => {\n invariant(poolId.length === 66, 'Invalid poolId length');\n\n // Only have 3 pool specializations so we can just pull the relevant character\n const specializationCode = parseInt(poolId[45]);\n invariant(specializationCode < 3, 'Invalid pool specialization');\n\n return specializationCode;\n};\n\n/**\n * Extracts a pool's nonce from its poolId\n * @param poolId - a bytes32 string of the pool's ID\n * @returns the pool's nonce\n */\nexport const getPoolNonce = (poolId: string): BigNumber => {\n invariant(poolId.length === 66, 'Invalid poolId length');\n return BigNumber.from(`0x${poolId.slice(46)}`);\n};\n","export enum Network {\n MAINNET = 1,\n GOERLI = 5,\n GÖRLI = 5,\n OPTIMISM = 10,\n GNOSIS = 100,\n POLYGON = 137,\n FANTOM = 250,\n BASE = 8453,\n ZKEVM = 1101,\n ARBITRUM = 42161,\n AVALANCHE = 43114,\n SEPOLIA = 11155111,\n}\n","import { Network } from '@/lib/constants/network';\n\n// Do not display APR values greater than this amount; they are likely to be nonsensical\n// These can arise from pools with extremely low balances (e.g., completed LBPs)\nexport const APR_THRESHOLD = 10_000;\n\n/**\n * For proportional exits from ComposableStable pools the ExactBPTInForTokensOut\n * exit type was removed. Therefore we have to use BPTInForExactTokensOut which\n * makes proportional exits using a user's total BPT balance impossible. In\n * order to 'fix' this we need to subtract a little bit from the bptIn value\n * when calculating the ExactTokensOut. The variable below is that \"little bit\".\n */\nexport const SHALLOW_COMPOSABLE_STABLE_BUFFER = 1e6; // EVM scale, so this is 1 Mwei\n\ntype FactoryType =\n | 'oracleWeightedPool'\n | 'weightedPool'\n | 'stablePool'\n | 'managedPool'\n | 'liquidityBootstrappingPool'\n | 'boostedPool'\n | 'composableStablePool';\n\ntype PoolMetadata = {\n name: string;\n hasIcon: boolean;\n};\n\nexport type NamedPools = {\n staBAL: string;\n bbAaveUSD: {\n v1: string;\n v2: string;\n };\n xMatic: {\n v1: string;\n v2: string;\n };\n stMatic: {\n v1: string;\n v2: string;\n };\n mai4: {\n mai4: string;\n maiBbaUsd: string;\n };\n veBAL: string;\n};\n\ntype Pools = {\n IdsMap: Partial;\n Pagination: {\n PerPage: number;\n PerPool: number;\n PerPoolInitial: number;\n };\n DelegateOwner: string;\n ZeroAddress: string;\n DynamicFees: {\n Gauntlet: string[];\n };\n BlockList: string[];\n ExcludedPoolTypes: string[];\n Stable: {\n AllowList: string[];\n };\n Investment: {\n AllowList: string[];\n };\n Factories: Record;\n Stakable: {\n AllowList: string[];\n };\n Metadata: Record;\n};\n\nconst POOLS_GOERLI: Pools = {\n IdsMap: {\n staBAL:\n '0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062',\n bbAaveUSD: {\n v1: '0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f',\n v2: '0x3d5981bdd8d3e49eb7bbdc1d2b156a3ee019c18e0000000000000000000001a7',\n },\n veBAL: '0xf8a0623ab66f985effc1c69d05f1af4badb01b00000200000000000000000060',\n },\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [\n '0x22d398c68030ef6b1c55321cca6e0cecc5c93b2f000200000000000000000678',\n ],\n ExcludedPoolTypes: ['Element', 'AaveLinear', 'Linear', 'ERC4626Linear', 'FX'],\n Stable: {\n AllowList: [\n '0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f',\n '0xb60e46d90f2de35f7062a27d3a98749414036d5d000200000000000000000061',\n '0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062',\n '0xc957b1acceb21707b782eb8eee2ed8e20088463d000200000000000000000076',\n '0x3d5981bdd8d3e49eb7bbdc1d2b156a3ee019c18e0000000000000000000001a7',\n '0x14f93df8a4e37bfdb49d2cec4789df7a010603d700000000000000000000011d',\n '0x00a62d31b6c776b6813543bc99ff265f7222dbe100000000000000000000011e',\n '0x0c925fce89a22e36ebd9b3c6e0262234e853d2f600000000000000000000019c',\n ],\n },\n Investment: {\n AllowList: [],\n },\n Factories: {\n '0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0': 'oracleWeightedPool',\n '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9': 'weightedPool',\n '0x44afeb87c871d8fea9398a026dea2bd3a13f5769': 'stablePool',\n '0xa55f73e2281c60206ba43a3590db07b8955832be': 'stablePool', // Metastable\n '0xb48cc42c45d262534e46d5965a9ac496f1b7a830': 'liquidityBootstrappingPool',\n '0xb0c726778c3ae4b3454d85557a48e8fa502bdd6a': 'liquidityBootstrappingPool', // LBP (zero protocol fee)\n '0x41e9036ae350baedcc7107760a020dca3c0731ec': 'boostedPool',\n '0xb848f50141f3d4255b37ac288c25c109104f2158': 'composableStablePool',\n '0x94f68b54191f62f781fe8298a8a5fa3ed772d227': 'weightedPool', // weighted pool v2\n },\n Stakable: {\n AllowList: [\n '0x16faf9f73748013155b7bc116a3008b57332d1e600020000000000000000005b',\n '0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f',\n '0xdcdd4a3d36dec8d57594e89763d069a7e9b223e2000000000000000000000062',\n '0x67f8fcb9d3c463da05de1392efdbb2a87f8599ea000200000000000000000059',\n ],\n },\n Metadata: {\n '0x13acd41c585d7ebb4a9460f7c8f50be60dc080cd00000000000000000000005f': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: false,\n },\n },\n};\n\nconst POOLS_MAINNET: Pools = {\n IdsMap: {\n staBAL:\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063',\n bbAaveUSD: {\n v1: '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe',\n v2: '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d',\n },\n veBAL: '0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014',\n },\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: [\n 'Element',\n 'AaveLinear',\n 'Linear',\n 'ERC4626Linear',\n 'Gyro2',\n 'Gyro3',\n 'GyroE',\n 'FX',\n ],\n Stable: {\n AllowList: [\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063', // staBAL3 (DAI-USD-USDC)\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066', // WBTC-renBTC-sBTC\n '0x9f19a375709baf0e8e35c2c5c65aca676c4c719100000000000000000000006e', // PAR-sEUR-EURS\n '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080', // Lido Metastable\n '0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112', // Rocket Pool Metastable\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe', // Mainnet bb-a-USD\n '0x851523a36690bf267bbfec389c823072d82921a90002000000000000000001ed', // wstETH/WETH #2\n '0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249', // b-auraBAL-Stable (auraBal / 8020 BALETH)\n '0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d', // sdBAL Stable Pool (sdBAL / 8020 BALETH)\n '0x178e029173417b1f9c8bc16dcec6f697bc32374600000000000000000000025d', // Fiat DAO Stable Pool\n '0xf93579002dbe8046c43fefe86ec78b1112247bb80000000000000000000002bc', // USDD 3 pool\n '0xf3aeb3abba741f0eece8a1b1d2f11b85899951cb000200000000000000000351', // MAI stable pool\n '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d', // bb-a-USD V2\n '0x5b3240b6be3e7487d61cd1afdfc7fe4fa1d81e6400000000000000000000037b', // DOLA/INV stable pool\n ],\n },\n Investment: {\n AllowList: [\n '0xccf5575570fac94cec733a58ff91bb3d073085c70002000000000000000000af', // iROBOT mainnet\n '0xe7b1d394f3b40abeaa0b64a545dbcf89da1ecb3f00010000000000000000009a', // Techemy mainnet\n '0x3b40d7d5ae25df2561944dd68b252016c4c7b2800001000000000000000000c2', // WSB-DEFI mainnet\n ],\n },\n Factories: {\n '0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0': 'oracleWeightedPool',\n '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9': 'weightedPool',\n '0xc66ba2b6595d3613ccab350c886ace23866ede24': 'stablePool',\n '0x67d27634e44793fe63c467035e31ea8635117cd4': 'stablePool', // Metastable\n '0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de': 'liquidityBootstrappingPool', // Mainnet LBP\n '0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e': 'liquidityBootstrappingPool', // Mainnet LBP (zero protocol fee)\n '0x48767f9f868a4a7b86a90736632f6e44c2df7fa9': 'managedPool', // Mainnet Managed\n '0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2': 'boostedPool', // mainnet stablephantom\n '0x8df6efec5547e31b0eb7d1291b511ff8a2bf987c': 'stablePool', // stable pool v2\n '0xf9ac7b9df2b3454e841110cce5550bd5ac6f875f': 'composableStablePool', // ComposableStable\n '0xcc508a455f5b0073973107db6a878ddbdab957bc': 'weightedPool', // weighted pool v2\n },\n Stakable: {\n AllowList: [\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063',\n '0x072f14b85add63488ddad88f855fda4a99d6ac9b000200000000000000000027',\n '0x0b09dea16768f0799065c475be02919503cb2a3500020000000000000000001a',\n '0x186084ff790c65088ba694df11758fae4943ee9e000200000000000000000013',\n '0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112',\n '0x27c9f71cc31464b906e0006d4fcbc8900f48f15f00020000000000000000010f',\n '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080',\n '0x350196326aeaa9b98f1903fb5e8fc2686f85318c000200000000000000000084',\n '0x3e5fa9518ea95c3e533eb377c001702a9aacaa32000200000000000000000052',\n '0x51735bdfbfe3fc13dea8dc6502e2e958989429610002000000000000000000a0',\n '0x5d66fff62c17d841935b60df5f07f6cf79bd0f4700020000000000000000014c',\n '0x5f7fa48d765053f8dd85e052843e12d23e3d7bc50002000000000000000000c0',\n '0x702605f43471183158938c1a3e5f5a359d7b31ba00020000000000000000009f',\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe',\n '0x7edde0cb05ed19e03a9a47cd5e53fc57fde1c80c0002000000000000000000c8',\n '0x8f4205e1604133d1875a3e771ae7e4f2b086563900020000000000000000010e',\n '0x90291319f1d4ea3ad4db0dd8fe9e12baf749e84500020000000000000000013c',\n '0x96646936b91d6b9d7d0c47c496afbf3d6ec7b6f8000200000000000000000019',\n '0x96ba9025311e2f47b840a1f68ed57a3df1ea8747000200000000000000000160',\n '0xa02e4b3d18d4e6b8d18ac421fbc3dfff8933c40a00020000000000000000004b',\n '0xa6f548df93de924d73be7d25dc02554c6bd66db500020000000000000000000e',\n '0xbaeec99c90e3420ec6c1e7a769d2a856d2898e4d00020000000000000000008a',\n '0xbf96189eee9357a95c7719f4f5047f76bde804e5000200000000000000000087',\n '0xe2469f47ab58cf9cf59f9822e3c5de4950a41c49000200000000000000000089',\n '0xe99481dc77691d8e2456e5f3f61c1810adfc1503000200000000000000000018',\n '0xec60a5fef79a92c741cb74fdd6bfc340c0279b01000200000000000000000015',\n '0xedf085f65b4f6c155e13155502ef925c9a756003000200000000000000000123',\n '0xefaa1604e82e1b3af8430b90192c1b9e8197e377000200000000000000000021',\n '0xf4c0dd9b82da36c07605df83c8a416f11724d88b000200000000000000000026',\n '0xf5aaf7ee8c39b651cebf5f1f50c10631e78e0ef9000200000000000000000069',\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066',\n '0x92762b42a06dcdddc5b7362cfb01e631c4d44b40000200000000000000000182',\n '0xde8c195aa41c11a0c4787372defbbddaa31306d2000200000000000000000181',\n '0x17ddd9646a69c9445cd8a9f921d4cd93bf50d108000200000000000000000159',\n '0xc45d42f801105e861e86658648e3678ad7aa70f900010000000000000000011e',\n '0x2d344a84bac123660b021eebe4eb6f12ba25fe8600020000000000000000018a',\n '0xb460daa847c45f1c4a41cb05bfb3b51c92e41b36000200000000000000000194',\n '0x5122e01d819e58bb2e22528c0d68d310f0aa6fd7000200000000000000000163',\n '0x851523a36690bf267bbfec389c823072d82921a90002000000000000000001ed',\n '0xe8cc7e765647625b95f59c15848379d10b9ab4af0002000000000000000001de',\n '0x85370d9e3bb111391cc89f6de344e801760461830002000000000000000001ef',\n '0xa7ff759dbef9f3efdd1d59beee44b966acafe214000200000000000000000180',\n '0x3f7c10701b14197e2695dec6428a2ca4cf7fc3b800020000000000000000023c',\n '0x2d011adf89f0576c9b722c28269fcb5d50c2d17900020000000000000000024d',\n '0x178e029173417b1f9c8bc16dcec6f697bc32374600000000000000000000025d',\n '0xcfca23ca9ca720b6e98e3eb9b6aa0ffc4a5c08b9000200000000000000000274',\n '0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249',\n '0x0578292cb20a443ba1cde459c985ce14ca2bdee5000100000000000000000269',\n '0x8eb6c82c3081bbbd45dcac5afa631aac53478b7c000100000000000000000270',\n '0x1b65fe4881800b91d4277ba738b567cbb200a60d0002000000000000000002cc',\n '0x99a14324cfd525a34bbc93ac7e348929909d57fd00020000000000000000030e',\n '0x9b532ab955417afd0d012eb9f7389457cd0ea712000000000000000000000338',\n '0x48607651416a943bf5ac71c41be1420538e78f87000200000000000000000327',\n '0x6a5ead5433a50472642cd268e584dafa5a394490000200000000000000000366',\n '0x0fd5663d4893ae0d579d580584806aadd2dd0b8b000200000000000000000367',\n '0x441b8a1980f2f2e43a9397099d15cc2fe6d3625000020000000000000000035f',\n '0xf3aeb3abba741f0eece8a1b1d2f11b85899951cb000200000000000000000351',\n '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d',\n ],\n },\n Metadata: {\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: true,\n },\n '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: true,\n },\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063': {\n name: 'Balancer Stable USD',\n hasIcon: true,\n },\n '0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd000200000000000000000249': {\n name: 'AuraBAL Stable Pool',\n hasIcon: false,\n },\n },\n};\n\nconst POOLS_POLYGON: Pools = {\n IdsMap: {\n xMatic: {\n v1: '0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4',\n v2: '0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c',\n },\n stMatic: {\n v1: '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366',\n v2: '0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d',\n },\n mai4: {\n mai4: '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012',\n maiBbaUsd:\n '0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e',\n },\n },\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: [\n 'Element',\n 'AaveLinear',\n 'Linear',\n 'ERC4626Linear',\n 'Gyro2',\n 'Gyro3',\n 'GyroE',\n 'FX',\n ],\n Stable: {\n AllowList: [\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012', // polygon MAI/DAI/USDC/USDT\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e', // polygon WBTC/renBTC\n '0xf38cf113d2d4f60c36cbd95af2f48a9a0167045a00000000000000000000005b', // polygon,\n '0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068', // tusd polygon\n '0x5028497af0c9a54ea8c6d42a054c0341b9fc616800020000000000000000007b', // dusd polygon\n '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366', // polygon staked matic\n '0xb4670d1389c758e4380c4211bcbc85342688b9c50002000000000000000003d8', // vQi,\n '0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455', // 4pool\n '0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4', // maticx metastable\n '0xb4b22bd6cdad0ab828be6f8a4086dfa54e9b373600020000000000000000058f', // Polygon tetuBAL-80BAL-20WETH\n '0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba', // tetuBAL-80BAL-20WETH V2 (with short name)\n '0x0b8319061732b34cab22445fa83b81f950e4b7ed000000000000000000000709',\n '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366',\n '0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d',\n '0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c',\n '0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e', // mai / bb-am-USD\n '0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b', // bb-am-USD\n '0xa48d164f6eb0edc68bd03b56fa59e12f24499ad10000000000000000000007c4', // ageur stable\n ],\n },\n Investment: {\n AllowList: [''],\n },\n Factories: {\n '0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0': 'oracleWeightedPool',\n '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9': 'weightedPool',\n '0xc66ba2b6595d3613ccab350c886ace23866ede24': 'stablePool',\n '0xdae7e32adc5d490a43ccba1f0c736033f2b4efca': 'stablePool', // Metastable\n '0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de': 'liquidityBootstrappingPool', // LBP\n '0x41b953164995c11c81da73d212ed8af25741b7ac': 'liquidityBootstrappingPool', // LBP (zero protocol fee)\n '0x0f7bb7ce7b6ed9366f9b6b910adefe72dc538193': 'managedPool', // Polygon Managed\n '0xc128a9954e6c874ea3d62ce62b468ba073093f25': 'boostedPool', // polygon stablephantom\n '0xca96c4f198d343e251b1a01f3eba061ef3da73c1': 'stablePool', // stable pool v2,\n '0x136fd06fa01ecf624c7f2b3cb15742c1339dc2c4': 'composableStablePool', // ComposableStable\n '0x0e39c3d9b2ec765efd9c5c70bb290b1fcd8536e3': 'weightedPool', // weighted pool v2\n },\n Stakable: {\n AllowList: [\n '0x0297e37f1873d2dab4487aa67cd56b58e2f27875000100000000000000000002',\n '0x03cd191f589d12b0582a99808cf19851e468e6b500010000000000000000000a',\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012',\n '0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068',\n '0x10f21c9bd8128a29aa785ab2de0d044dcdd79436000200000000000000000059',\n '0x186084ff790c65088ba694df11758fae4943ee9e000200000000000000000032',\n '0x36128d5436d2d70cab39c9af9cce146c38554ff0000100000000000000000008',\n '0x5a6ae1fd70d04ba4a279fc219dfabc53825cb01d00020000000000000000020e',\n '0x614b5038611729ed49e0ded154d8a5d3af9d1d9e00010000000000000000001d',\n '0x7c9cf12d783821d5c63d8e9427af5c44bad92445000100000000000000000051',\n '0x805ca3ccc61cc231851dee2da6aabff0a7714aa7000200000000000000000361',\n '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366',\n '0xb204bf10bc3a5435017d3db247f56da601dfe08a0002000000000000000000fe',\n '0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455',\n '0xce66904b68f1f070332cbc631de7ee98b650b499000100000000000000000009',\n '0xcf354603a9aebd2ff9f33e1b04246d8ea204ae9500020000000000000000005a',\n '0xdb1db6e248d7bb4175f6e5a382d0a03fe3dcc813000100000000000000000035',\n '0xea4e073c8ac859f2994c07e627178719c8002dc00002000000000000000003dc',\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e',\n '0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4',\n '0x2dbc9ab0160087ae59474fb7bed95b9e808fa6bc0001000000000000000003db',\n '0xb797adfb7b268faeaa90cadbfed464c76ee599cd0002000000000000000005ba',\n '0x8f9dd2064eb38e8e40f2ab67bde27c0e16ea9b080002000000000000000004ca',\n '0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b',\n '0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e',\n '0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d',\n '0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c',\n ],\n },\n Metadata: {},\n};\n\nconst POOLS_ARBITRUM: Pools = {\n IdsMap: {},\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: ['Element', 'AaveLinear', 'Linear', 'ERC4626Linear', 'FX'],\n Stable: {\n AllowList: [\n '0x9be7de742865d021c0e8fb9d64311b2c040c1ec1000200000000000000000012', // arbitrum\n '0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016', // arbitrum\n '0x386b5d43ba8b97c43d4afb4cdae7877a1b295e8a000000000000000000000020', // tusd arbitrum\n '0x0510ccf9eb3ab03c1508d3b9769e8ee2cfd6fdcf00000000000000000000005d', // mai\n '0x5a5884fc31948d59df2aeccca143de900d49e1a300000000000000000000006f', // VST\n '0xd89746affa5483627a87e55713ec1905114394950002000000000000000000bf', // fluid stable\n '0x7bceaa9c5e7f4836fec3bce2d5346637c9b13970000000000000000000000102', // vesta new stable\n '0xfb5e6d0c1dfed2ba000fbc040ab8df3615ac329c000000000000000000000159', // stETH\n ],\n },\n Investment: {\n AllowList: [''],\n },\n Factories: {\n '0x7dfdef5f355096603419239ce743bfaf1120312b': 'weightedPool', // Arbitrum Weighted\n '0xcf0a32bbef8f064969f21f7e02328fb577382018': 'weightedPool', // Arbitrum WeightedOracle\n '0x2433477a10fc5d31b9513c638f19ee85caed53fd': 'stablePool', // Arbitrum Stable\n '0xebfd5681977e38af65a7487dc70b8221d089ccad': 'stablePool', // Arbitrum MetaStable\n '0x142b9666a0a3a30477b052962dda81547e7029ab': 'liquidityBootstrappingPool', // Arbitrum LBP (old)\n '0x1802953277fd955f9a254b80aa0582f193cf1d77': 'liquidityBootstrappingPool', // Arbitrum LBP (new)\n '0xacd615b3705b9c880e4e7293f1030b34e57b4c1c': 'managedPool', // arbitrum managed\n '0xdae7e32adc5d490a43ccba1f0c736033f2b4efca': 'boostedPool', // arbitrum stablephantom\n '0xef44d6786b2b4d544b7850fe67ce6381626bf2d6': 'stablePool', // stable pool v2\n '0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33': 'composableStablePool', // ComposableStable\n '0x8df6efec5547e31b0eb7d1291b511ff8a2bf987c': 'weightedPool', // weighted pool v2\n },\n Stakable: {\n AllowList: [\n '0x0510ccf9eb3ab03c1508d3b9769e8ee2cfd6fdcf00000000000000000000005d',\n '0x0adeb25cb5920d4f7447af4a0428072edc2cee2200020000000000000000004a',\n '0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016',\n '0x1779900c7707885720d39aa741f4086886307e9e00020000000000000000004b',\n '0x4a3a22a3e7fee0ffbb66f1c28bfac50f75546fc7000200000000000000000008',\n '0x5a5884fc31948d59df2aeccca143de900d49e1a300000000000000000000006f',\n '0x64541216bafffeec8ea535bb71fbc927831d0595000100000000000000000002',\n '0x651e00ffd5ecfa7f3d4f33d62ede0a97cf62ede2000200000000000000000006',\n '0xb28670b3e7ad27bd41fb5938136bf9e9cba90d6500020000000000000000001e',\n '0xb340b6b1a34019853cb05b2de6ee8ffd0b89a008000100000000000000000036',\n '0xb5b77f1ad2b520df01612399258e7787af63025d000200000000000000000010',\n '0xc2f082d33b5b8ef3a7e3de30da54efd3114512ac000200000000000000000017',\n '0xc61ff48f94d801c1ceface0289085197b5ec44f000020000000000000000004d',\n '0xcc65a812ce382ab909a11e434dbf75b34f1cc59d000200000000000000000001',\n '0xe1b40094f1446722c424c598ac412d590e0b3ffb000200000000000000000076',\n '0xb3028ca124b80cfe6e9ca57b70ef2f0ccc41ebd40002000000000000000000ba',\n '0x7bceaa9c5e7f4836fec3bce2d5346637c9b13970000000000000000000000102',\n '0xfb5e6d0c1dfed2ba000fbc040ab8df3615ac329c000000000000000000000159',\n '0x178e029173417b1f9c8bc16dcec6f697bc323746000200000000000000000158',\n ],\n },\n Metadata: {},\n};\n\nconst POOLS_GNOSIS: Pools = {\n IdsMap: {},\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: [\n 'Element',\n 'AaveLinear',\n 'Linear',\n 'ERC4626Linear',\n 'FX',\n 'Gyro2',\n 'Gyro3',\n 'GyroE',\n 'HighAmpComposableStable',\n 'FX',\n ],\n Stable: {\n AllowList: [\n '0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000004',\n '0x707b7d4a1bae449d546dcab869256591bbb3d70b000000000000000000000000',\n ],\n },\n Investment: {\n AllowList: [],\n },\n Factories: {},\n Stakable: {\n AllowList: [],\n },\n Metadata: {},\n};\n\nconst POOLS_GENERIC: Pools = {\n IdsMap: {},\n Pagination: {\n PerPage: 10,\n PerPool: 10,\n PerPoolInitial: 5,\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [],\n },\n BlockList: [''],\n ExcludedPoolTypes: ['Element', 'AaveLinear', 'Linear', 'ERC4626Linear', 'FX'],\n Stable: {\n AllowList: [\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063',\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066',\n '0x9f19a375709baf0e8e35c2c5c65aca676c4c719100000000000000000000006e',\n '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080', // Lido Metastable\n '0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112', // Rocket Pool Metastable\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012', // polygon\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e', // polygon\n '0x9be7de742865d021c0e8fb9d64311b2c040c1ec1000200000000000000000012', // arbitrum\n '0x9f19a375709baf0e8e35c2c5c65aca676c4c7191000200000000000000000022', // polygon PAR/PAR,\n '0x1533a3278f3f9141d5f820a184ea4b017fce2382000000000000000000000016', // arbitrum\n '0xf38cf113d2d4f60c36cbd95af2f48a9a0167045a00000000000000000000005b', // polygon,\n '0x0d34e5dd4d8f043557145598e4e2dc286b35fd4f000000000000000000000068', // tusd polygon\n '0x386b5d43ba8b97c43d4afb4cdae7877a1b295e8a000000000000000000000020', // tusd arbitrum\n '0x5028497af0c9a54ea8c6d42a054c0341b9fc616800020000000000000000007b', // dusd polygon\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe', // Mainnet bb-a-USD\n '0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366', // staked matic\n ],\n },\n Investment: {\n AllowList: [\n '0xccf5575570fac94cec733a58ff91bb3d073085c70002000000000000000000af', // iROBOT mainnet\n '0xe7b1d394f3b40abeaa0b64a545dbcf89da1ecb3f00010000000000000000009a', // Techemy mainnet\n '0x3b40d7d5ae25df2561944dd68b252016c4c7b2800001000000000000000000c2', // WSB-DEFI mainnet\n ],\n },\n Factories: {\n '0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0': 'oracleWeightedPool',\n '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9': 'weightedPool',\n '0xc66ba2b6595d3613ccab350c886ace23866ede24': 'stablePool',\n '0x67d27634e44793fe63c467035e31ea8635117cd4': 'stablePool', // Metastable\n '0x7dfdef5f355096603419239ce743bfaf1120312b': 'weightedPool', // Arbitrum Weighted\n '0xcf0a32bbef8f064969f21f7e02328fb577382018': 'weightedPool', // Arbitrum WeightedOracle\n '0x2433477a10fc5d31b9513c638f19ee85caed53fd': 'stablePool', // Arbitrum Stable\n '0xebfd5681977e38af65a7487dc70b8221d089ccad': 'stablePool', // Arbitrum MetaStable\n '0x751a0bc0e3f75b38e01cf25bfce7ff36de1c87de': 'liquidityBootstrappingPool', // Mainnet LBP\n '0x0f3e0c4218b7b0108a3643cfe9d3ec0d4f57c54e': 'liquidityBootstrappingPool', // Mainnet LBP (zero protocol fee)\n '0x142b9666a0a3a30477b052962dda81547e7029ab': 'liquidityBootstrappingPool', // Arbitrum LBP (old)\n '0x1802953277fd955f9a254b80aa0582f193cf1d77': 'liquidityBootstrappingPool', // Arbitrum LBP (new)\n '0x48767f9f868a4a7b86a90736632f6e44c2df7fa9': 'managedPool', // Mainnet Managed\n '0x0f7bb7ce7b6ed9366f9b6b910adefe72dc538193': 'managedPool', // Polygon Managed\n '0xacd615b3705b9c880e4e7293f1030b34e57b4c1c': 'managedPool', // arbitrum managed\n '0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2': 'boostedPool', // mainnet stablephantom\n '0xdae7e32adc5d490a43ccba1f0c736033f2b4efca': 'boostedPool', // arbitrum stablephantom\n '0xc128a9954e6c874ea3d62ce62b468ba073093f25': 'boostedPool', // polygon stablephantom\n },\n Stakable: {\n AllowList: [],\n },\n Metadata: {\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: true,\n },\n '0x8fd162f338b770f7e879030830cde9173367f3010000000000000000000004d8': {\n name: 'Balancer Boosted Aave USD',\n hasIcon: true,\n },\n '0xd387dfd3a786e7caa06e6cf0c675352c7ffff30400000000000000000000063e': {\n name: 'Balancer Stable USD',\n hasIcon: true,\n },\n },\n};\n\nconst POOLS_MAP = {\n [Network.GOERLI]: POOLS_GOERLI,\n [Network.MAINNET]: POOLS_MAINNET,\n [Network.POLYGON]: POOLS_POLYGON,\n [Network.ARBITRUM]: POOLS_ARBITRUM,\n [Network.GNOSIS]: POOLS_GNOSIS,\n};\n\nexport function POOLS(networkId: Network): Pools {\n const id = networkId as keyof typeof POOLS_MAP;\n return POOLS_MAP[id] ? POOLS_MAP[id] : POOLS_GENERIC;\n}\n","export enum PoolGaugesAttributes {\n Id = 'id',\n Address = 'address',\n PoolId = 'poolId',\n}\n\nexport interface PoolGauges {\n preferentialGauge: {\n id: string;\n };\n gauges: {\n id: string;\n relativeWeightCap?: string | null;\n }[];\n}\n","export enum PoolShareAttributes {\n Balance = 'balance',\n Id = 'id',\n PoolId = 'poolId',\n UserAddress = 'userAddress',\n}\n\nexport interface PoolShare {\n id: string;\n userAddress: string;\n poolId: string;\n balance: string;\n}\n","export enum GaugeShareAttributes {\n Id = 'id',\n UserAddress = 'user',\n GaugeId = 'gauge',\n Balance = 'balance',\n}\n\nexport interface GaugeShare {\n id: string;\n balance: string;\n userAddress: string;\n gauge: {\n id: string;\n poolId?: string;\n isKilled: boolean;\n totalSupply: string;\n };\n}\n","import { Network } from './lib/constants/network';\nimport type { BigNumberish } from '@ethersproject/bignumber';\nimport type { Contract } from '@ethersproject/contracts';\nimport type { PoolDataService, TokenPriceService } from '@balancer-labs/sor';\nimport type {\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n JoinPoolAttributes,\n} from './modules/pools/pool-types/concerns/types';\nimport type {\n Findable,\n Searchable,\n LiquidityGauge,\n PoolAttribute,\n TokenAttribute,\n Cacheable,\n} from '@/modules/data/types';\nimport type {\n BaseFeeDistributor,\n GaugeSharesRepository,\n PoolGaugesRepository,\n PoolSharesRepository,\n ProtocolFeesProvider,\n PoolJoinExitRepository,\n} from './modules/data';\nimport type { GraphQLArgs } from './lib/graphql';\nimport type { AprBreakdown } from '@/modules/pools/apr/apr';\nimport { SubgraphPoolDataService } from '@/modules/sor/pool-data/subgraphPoolDataService';\nimport * as Queries from '@/modules/pools/queries/types';\nimport { GyroConfigRepository } from '@/modules/data/gyro-config/repository';\n\nexport * from '@/modules/data/types';\nexport { Network, AprBreakdown };\n\nexport type Address = string;\n\nexport interface BalancerSdkConfig {\n //use a known network or provide an entirely custom config\n network: Network | BalancerNetworkConfig;\n rpcUrl: string;\n //overwrite the subgraph url if you don't want to use the balancer labs maintained version\n customSubgraphUrl?: string;\n subgraphQuery?: GraphQLQuery;\n //optionally overwrite parts of the standard SOR config\n sor?: Partial;\n tenderly?: BalancerTenderlyConfig;\n enableLogging?: boolean;\n coingecko?: CoingeckoConfig;\n}\n\nexport interface BalancerTenderlyConfig {\n accessKey: string;\n user: string;\n project: string;\n blockNumber?: number;\n}\n\nexport interface BalancerSdkSorConfig {\n //use a built-in service or provide a custom implementation of a TokenPriceService\n //defaults to coingecko\n tokenPriceService: 'api' | 'coingecko' | 'subgraph' | TokenPriceService;\n //use a built-in service or provide a custom implementation of a PoolDataService\n //defaults to subgraph\n poolDataService: 'subgraph' | PoolDataService;\n //if a custom PoolDataService is provided, on chain balance fetching needs to be handled externally\n //default to true.\n fetchOnChainBalances: boolean;\n}\n\nexport interface ContractAddresses {\n vault: string;\n multicall: string;\n poolDataQueries: string;\n gaugeClaimHelper?: string;\n balancerHelpers: string;\n balancerMinter?: string;\n lidoRelayer?: string;\n balancerRelayer: string;\n gaugeController?: string;\n feeDistributor?: string;\n veBal?: string;\n veBalProxy?: string;\n protocolFeePercentagesProvider?: string;\n weightedPoolFactory?: string;\n composableStablePoolFactory?: string;\n\n aaveLinearPoolFactory?: string;\n erc4626LinearPoolFactory?: string;\n eulerLinearPoolFactory?: string;\n gearboxLinearPoolFactory?: string;\n yearnLinearPoolFactory?: string;\n\n [key: string]: string | undefined;\n}\n\nexport interface BalancerNetworkConfig {\n chainId: Network;\n addresses: {\n contracts: ContractAddresses;\n tokens: {\n wrappedNativeAsset: string;\n lbpRaisingTokens?: string[];\n stETH?: string;\n wstETH?: string;\n bal: string;\n veBal?: string;\n bbaUsd?: string;\n };\n };\n tenderly?: BalancerTenderlyConfig;\n urls: {\n subgraph: string;\n gaugesSubgraph?: string;\n blockNumberSubgraph?: string;\n };\n thirdParty: {\n coingecko: {\n nativeAssetId: string;\n platformId: string;\n };\n };\n averageBlockTime?: number; // In seconds, used if blockNumberSubgraph not set\n multicallBatchSize?: number; // Only zkEVM needs a smaller batch size of 128, defaults to 1024\n pools: {\n wETHwstETH?: PoolReference;\n };\n poolsToIgnore?: string[];\n sorConnectingTokens?: { symbol: string; address: string }[];\n sorTriPathMidPoolIds?: string[];\n}\n\nexport interface BalancerDataRepositories {\n feeDistributor?: BaseFeeDistributor;\n feeCollector: Findable;\n gaugeShares?: GaugeSharesRepository;\n gyroConfigRepository?: GyroConfigRepository;\n liquidityGauges?: Findable;\n protocolFees?: ProtocolFeesProvider;\n /**\n * Why do we need 3 different pools repositories?\n */\n pools: Findable & Searchable;\n // Does it need to be different from the pools repository?\n poolsForSimulations: SubgraphPoolDataService;\n poolGauges?: PoolGaugesRepository;\n poolJoinExits: PoolJoinExitRepository;\n // Perhaps better to use a function to get upto date balances when needed.\n poolsOnChain: Findable &\n Searchable &\n Cacheable;\n poolShares: PoolSharesRepository;\n tokenHistoricalPrices: Findable;\n tokenMeta: Findable;\n tokenPrices: Findable;\n tokenYields: Findable;\n // Replace with a swapFeeRepository, we don't need historic pools for any other reason than to get the swap fee\n yesterdaysPools?: Findable & Searchable;\n}\n\nexport type PoolReference = {\n id: string;\n address: string;\n};\n\nexport enum PoolSpecialization {\n GeneralPool = 0,\n MinimalSwapInfoPool,\n TwoTokenPool,\n}\n\n// Joins\n\nexport type JoinPoolRequest = {\n assets: string[];\n maxAmountsIn: BigNumberish[];\n userData: string;\n fromInternalBalance: boolean;\n};\n\n// Exit\n\nexport type ExitPoolRequest = {\n assets: string[];\n minAmountsOut: string[];\n userData: string;\n toInternalBalance: boolean;\n};\n\n// Balance Operations\n\nexport enum UserBalanceOpKind {\n DepositInternal = 0,\n WithdrawInternal,\n TransferInternal,\n TransferExternal,\n}\n\nexport type UserBalanceOp = {\n kind: UserBalanceOpKind;\n asset: string;\n amount: BigNumberish;\n sender: string;\n recipient: string;\n};\n\nexport enum PoolBalanceOpKind {\n Withdraw = 0,\n Deposit = 1,\n Update = 2,\n}\n\nexport type PoolBalanceOp = {\n kind: PoolBalanceOpKind;\n poolId: string;\n token: string;\n amount: BigNumberish;\n};\n\nexport interface TransactionData {\n contract?: Contract;\n function: string;\n params: string[];\n outputs?: {\n amountsIn?: string[];\n amountsOut?: string[];\n };\n}\n\nexport type Currency = 'eth' | 'usd';\n\nexport type Price = { [currency in Currency]?: string };\nexport type TokenPrices = { [address: string]: Price };\nexport type HistoricalPrices = {\n prices: [[number, number]];\n market_caps: [[number, number]];\n total_volumes: [[number, number]];\n};\n\nexport interface Token {\n address: string;\n decimals?: number;\n symbol?: string;\n price?: Price;\n}\n\nexport interface PoolToken extends Token {\n balance: string;\n priceRate?: string;\n weight?: string | null;\n isExemptFromYieldProtocolFee?: boolean;\n token?: SubPoolMeta;\n}\n\nexport interface SubPoolMeta {\n pool: SubPool | null;\n latestUSDPrice?: string;\n latestFXPrice?: string;\n}\n\nexport interface SubPool {\n id: string;\n address: string;\n poolType: PoolType;\n totalShares: string;\n mainIndex: number;\n tokens?: PoolToken[];\n}\n\nexport interface OnchainTokenData {\n balance: string;\n weight: number;\n decimals: number;\n logoURI: string | undefined;\n name: string;\n symbol: string;\n}\n\nexport interface OnchainPoolData {\n tokens: Record;\n totalSupply: string;\n decimals: number;\n swapFee: string;\n amp?: string;\n swapEnabled: boolean;\n tokenRates?: string[];\n}\n\nexport enum PoolType {\n Weighted = 'Weighted',\n Investment = 'Investment',\n Stable = 'Stable',\n ComposableStable = 'ComposableStable',\n MetaStable = 'MetaStable',\n StablePhantom = 'StablePhantom',\n LiquidityBootstrapping = 'LiquidityBootstrapping',\n Element = 'Element',\n Gyro2 = 'Gyro2',\n Gyro3 = 'Gyro3',\n GyroE = 'GyroE',\n Managed = 'Managed',\n // Linear Pools defined below all operate the same mathematically but have different factories and names in Subgraph\n AaveLinear = 'AaveLinear',\n Linear = 'Linear',\n EulerLinear = 'EulerLinear',\n ERC4626Linear = 'ERC4626Linear',\n BeefyLinear = 'BeefyLinear',\n GearboxLinear = 'GearboxLinear',\n MidasLinear = 'MidasLinear',\n ReaperLinear = 'ReaperLinear',\n SiloLinear = 'SiloLinear',\n TetuLinear = 'TetuLinear',\n YearnLinear = 'YearnLinear',\n FX = 'FX',\n}\n\nexport interface Pool {\n id: string;\n name: string;\n address: string;\n chainId: number;\n poolType: PoolType;\n poolTypeVersion: number;\n swapFee: string;\n protocolYieldFeeCache: string;\n protocolSwapFeeCache: string;\n owner?: string;\n factory?: string;\n tokens: PoolToken[];\n tokensList: string[];\n tokenAddresses?: string[];\n totalLiquidity: string;\n totalShares: string;\n totalSwapFee?: string;\n totalSwapVolume?: string;\n onchain?: OnchainPoolData;\n createTime?: number;\n mainTokens?: string[];\n wrappedTokens?: string[];\n unwrappedTokens?: string[];\n isNew?: boolean;\n volumeSnapshot?: string;\n feesSnapshot?: string;\n boost?: string;\n symbol?: string;\n swapEnabled: boolean;\n amp?: string;\n wrappedIndex?: number;\n mainIndex?: number;\n apr?: AprBreakdown;\n liquidity?: string;\n totalWeight: string;\n lowerTarget: string;\n upperTarget: string;\n priceRateProviders?: PriceRateProvider[];\n lastJoinExitInvariant?: string;\n isInRecoveryMode?: boolean;\n isPaused?: boolean;\n tokenRates?: string[];\n}\n\nexport interface PriceRateProvider {\n address: string;\n token: {\n address: string;\n };\n}\n\n/**\n * Pool use-cases / controller layer\n */\nexport interface PoolWithMethods extends Pool, Queries.ParamsBuilder {\n /**\n * Build join pool transaction parameters with exact tokens in and minimum BPT out based on slippage tolerance\n * @param joiner Account address joining pool\n * @param tokensIn Token addresses provided for joining pool (same length and order as amountsIn)\n * @param amountsIn Token amounts provided for joining pool in EVM scale\n * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildJoin: (\n joiner: string,\n tokensIn: string[],\n amountsIn: string[],\n slippage: string\n ) => JoinPoolAttributes;\n\n /**\n * Calculate price impact of bptAmount against zero price impact BPT amount.\n * @param tokenAmounts Token amounts. Needs a value for each pool token.\n * @param bptAmount BPT amount for comparison (in EVM scale).\n * @param isJoin boolean indicating if the price impact is for a join or exit.\n * @returns price impact in EVM scale.\n */\n calcPriceImpact: (\n tokenAmounts: string[],\n bptAmount: string,\n isJoin: boolean\n ) => Promise;\n\n /**\n * Build exit pool transaction parameters with exact BPT in and minimum token amounts out based on slippage tolerance\n * @param exiter Account address exiting pool\n * @param bptIn BPT provided for exiting pool in EVM scale\n * @param slippage Maximum slippage tolerance in bps. i.e. 50 = 5%\n * @param shouldUnwrapNativeAsset Indicates whether wrapped native asset should be unwrapped after exit. Defaults to false.\n * @param singleTokenOut Optional: token address that if provided will exit to given token\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildExitExactBPTIn: (\n exiter: string,\n bptIn: string,\n slippage: string,\n shouldUnwrapNativeAsset?: boolean,\n singleTokenOut?: string,\n toInternalBalance?: boolean\n ) => ExitExactBPTInAttributes;\n\n /**\n * Build exit pool transaction parameters with exact tokens out and maximum BPT in based on slippage tolerance\n * @param exiter Account address exiting pool\n * @param tokensOut Tokens provided for exiting pool (same length and order as amountsOut)\n * @param amountsOut Amounts provided for exiting pool in EVM scale\n * @param slippage Maximum slippage tolerance in bps. i.e. 50 = 5%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildExitExactTokensOut: (\n exiter: string,\n tokensOut: string[],\n amountsOut: string[],\n slippage: string,\n toInternalBalance?: boolean\n ) => ExitExactTokensOutAttributes;\n\n /**\n * Build recovery exit pool transaction parameters with exact BPT in and minimum token amounts out based on slippage tolerance\n * @param exiter Account address exiting pool\n * @param bptIn BPT amount in EVM scale\n * @param slippage Maximum slippage tolerance in basis points. i.e. 50 = 5%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildRecoveryExit: (\n exiter: string,\n bptIn: string,\n slippage: string,\n toInternalBalance?: boolean\n ) => ExitExactBPTInAttributes;\n\n /**\n * Calculate spot price for swapping tokenIn with tokenOut\n * @param tokenIn Token address\n * @param tokenOut Token address\n * @returns spot price for swapping tokenIn with tokenOut in EVM scale\n */\n calcSpotPrice: (tokenIn: string, tokenOut: string) => string;\n\n bptIndex: number;\n}\n\nexport interface GraphQLQuery {\n args: GraphQLArgs;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attrs: any;\n}\n\nexport type CoingeckoConfig = {\n coingeckoApiKey: string;\n tokensPerPriceRequest?: number;\n isDemoApiKey?: boolean;\n};\n","export class Logger {\n private enableLogging: boolean;\n\n private static instance: Logger;\n\n private constructor() {\n this.enableLogging = true; // Logging is initially enabled\n }\n\n static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger();\n }\n return Logger.instance;\n }\n\n setLoggingEnabled(enabled: boolean): void {\n this.enableLogging = enabled;\n }\n\n info(message: string): void {\n if (this.enableLogging) {\n console.log(`[INFO] ${message}`);\n }\n }\n\n warn(message: string): void {\n if (this.enableLogging) {\n console.warn(`[WARN] ${message}`);\n }\n }\n\n error(message: string): void {\n if (this.enableLogging) {\n console.error(`[ERROR] ${message}`);\n }\n }\n\n time(message: string): void {\n if (this.enableLogging) {\n console.time(`[TIME] ${message}`);\n }\n }\n\n timeEnd(message: string): void {\n if (this.enableLogging) {\n console.timeEnd(`[TIME] ${message}`);\n }\n }\n}\n","import { getAddress } from '@ethersproject/address';\nimport { AddressZero } from '@ethersproject/constants';\nimport invariant from 'tiny-invariant';\n\nconst cmpTokens = (tokenA: string, tokenB: string): number =>\n tokenA.toLowerCase() > tokenB.toLowerCase() ? 1 : -1;\n\nconst transposeMatrix = (matrix: unknown[][]): unknown[][] =>\n matrix[0].map((_, columnIndex) => matrix.map((row) => row[columnIndex]));\n\nexport class AssetHelpers {\n public readonly ETH: string = AddressZero;\n public readonly WETH: string;\n\n constructor(wethAddress: string) {\n this.WETH = getAddress(wethAddress);\n }\n\n static isEqual = (addressA: string, addressB: string): boolean =>\n getAddress(addressA) === getAddress(addressB);\n\n /**\n * Tests whether `token` is ETH (represented by `0x0000...0000`).\n *\n * @param token - the address of the asset to be checked\n */\n isETH = (token: string): boolean => AssetHelpers.isEqual(token, this.ETH);\n\n /**\n * Tests whether `token` is WETH.\n *\n * @param token - the address of the asset to be checked\n */\n isWETH = (token: string): boolean => AssetHelpers.isEqual(token, this.WETH);\n\n /**\n * Converts an asset to the equivalent ERC20 address.\n *\n * For ERC20s this will return the passed address but passing ETH (`0x0000...0000`) will return the WETH address\n * @param token - the address of the asset to be translated to an equivalent ERC20\n * @returns the address of translated ERC20 asset\n */\n translateToERC20 = (token: string): string =>\n this.isETH(token) ? this.WETH : token;\n\n /**\n * Sorts an array of token addresses into ascending order to match the format expected by the Vault.\n *\n * Passing additional arrays will result in each being sorted to maintain relative ordering to token addresses.\n *\n * The zero address (representing ETH) is sorted as if it were the WETH address.\n * This matches the behaviour expected by the Vault when receiving an array of addresses.\n *\n * @param tokens - an array of token addresses to be sorted in ascending order\n * @param others - a set of arrays to be sorted in the same order as the tokens, e.g. token weights or asset manager addresses\n * @returns an array of the form `[tokens, ...others]` where each subarray has been sorted to maintain its ordering relative to `tokens`\n *\n * @example\n * const [tokens] = sortTokens([tokenB, tokenC, tokenA])\n * const [tokens, weights] = sortTokens([tokenB, tokenC, tokenA], [weightB, weightC, weightA])\n * // where tokens = [tokenA, tokenB, tokenC], weights = [weightA, weightB, weightC]\n */\n sortTokens(\n tokens: string[],\n ...others: unknown[][]\n ): [string[], ...unknown[][]] {\n others.forEach((array) =>\n invariant(tokens.length === array.length, 'array length mismatch')\n );\n\n // We want to sort ETH as if were WETH so we translate to ERC20s\n const erc20Tokens = tokens.map(this.translateToERC20);\n\n const transpose = transposeMatrix([erc20Tokens, ...others]) as [\n string,\n ...unknown[]\n ][];\n const sortedTranspose = transpose.sort(([tokenA], [tokenB]) =>\n cmpTokens(tokenA, tokenB)\n );\n const [sortedErc20s, ...sortedOthers] = transposeMatrix(\n sortedTranspose\n ) as [string[], ...unknown[][]];\n\n // If one of the tokens was ETH, we need to translate back from WETH\n const sortedTokens = tokens.includes(this.ETH)\n ? sortedErc20s.map((token) => (this.isWETH(token) ? this.ETH : token))\n : sortedErc20s;\n return [sortedTokens, ...sortedOthers];\n }\n}\n","const balancerErrorCodes: Record = {\n '000': 'ADD_OVERFLOW',\n '001': 'SUB_OVERFLOW',\n '002': 'SUB_UNDERFLOW',\n '003': 'MUL_OVERFLOW',\n '004': 'ZERO_DIVISION',\n '005': 'DIV_INTERNAL',\n '006': 'X_OUT_OF_BOUNDS',\n '007': 'Y_OUT_OF_BOUNDS',\n '008': 'PRODUCT_OUT_OF_BOUNDS',\n '009': 'INVALID_EXPONENT',\n '100': 'OUT_OF_BOUNDS',\n '101': 'UNSORTED_ARRAY',\n '102': 'UNSORTED_TOKENS',\n '103': 'INPUT_LENGTH_MISMATCH',\n '104': 'ZERO_TOKEN',\n '200': 'MIN_TOKENS',\n '201': 'MAX_TOKENS',\n '202': 'MAX_SWAP_FEE_PERCENTAGE',\n '203': 'MIN_SWAP_FEE_PERCENTAGE',\n '204': 'MINIMUM_BPT',\n '205': 'CALLER_NOT_VAULT',\n '206': 'UNINITIALIZED',\n '207': 'BPT_IN_MAX_AMOUNT',\n '208': 'BPT_OUT_MIN_AMOUNT',\n '209': 'EXPIRED_PERMIT',\n '210': 'NOT_TWO_TOKENS',\n '211': 'DISABLED',\n '300': 'MIN_AMP',\n '301': 'MAX_AMP',\n '302': 'MIN_WEIGHT',\n '303': 'MAX_STABLE_TOKENS',\n '304': 'MAX_IN_RATIO',\n '305': 'MAX_OUT_RATIO',\n '306': 'MIN_BPT_IN_FOR_TOKEN_OUT',\n '307': 'MAX_OUT_BPT_FOR_TOKEN_IN',\n '308': 'NORMALIZED_WEIGHT_INVARIANT',\n '309': 'INVALID_TOKEN',\n '310': 'UNHANDLED_JOIN_KIND',\n '311': 'ZERO_INVARIANT',\n '312': 'ORACLE_INVALID_SECONDS_QUERY',\n '313': 'ORACLE_NOT_INITIALIZED',\n '314': 'ORACLE_QUERY_TOO_OLD',\n '315': 'ORACLE_INVALID_INDEX',\n '316': 'ORACLE_BAD_SECS',\n '317': 'AMP_END_TIME_TOO_CLOSE',\n '318': 'AMP_ONGOING_UPDATE',\n '319': 'AMP_RATE_TOO_HIGH',\n '320': 'AMP_NO_ONGOING_UPDATE',\n '321': 'STABLE_INVARIANT_DIDNT_CONVERGE',\n '322': 'STABLE_GET_BALANCE_DIDNT_CONVERGE',\n '323': 'RELAYER_NOT_CONTRACT',\n '324': 'BASE_POOL_RELAYER_NOT_CALLED',\n '325': 'REBALANCING_RELAYER_REENTERED',\n '326': 'GRADUAL_UPDATE_TIME_TRAVEL',\n '327': 'SWAPS_DISABLED',\n '328': 'CALLER_IS_NOT_LBP_OWNER',\n '329': 'PRICE_RATE_OVERFLOW',\n '330': 'INVALID_JOIN_EXIT_KIND_WHILE_SWAPS_DISABLED',\n '331': 'WEIGHT_CHANGE_TOO_FAST',\n '332': 'LOWER_GREATER_THAN_UPPER_TARGET',\n '333': 'UPPER_TARGET_TOO_HIGH',\n '334': 'UNHANDLED_BY_LINEAR_POOL',\n '335': 'OUT_OF_TARGET_RANGE',\n '336': 'UNHANDLED_EXIT_KIND ',\n '337': 'UNAUTHORIZED_EXIT',\n '338': 'MAX_MANAGEMENT_SWAP_FEE_PERCENTAGE',\n '339': 'UNHANDLED_BY_MANAGED_POOL',\n '340': 'UNHANDLED_BY_PHANTOM_POOL',\n '341': 'TOKEN_DOES_NOT_HAVE_RATE_PROVIDER',\n '342': 'INVALID_INITIALIZATION',\n '343': 'OUT_OF_NEW_TARGET_RANGE',\n '344': 'UNAUTHORIZED_OPERATION',\n '345': 'UNINITIALIZED_POOL_CONTROLLER',\n '400': 'REENTRANCY',\n '401': 'SENDER_NOT_ALLOWED',\n '402': 'PAUSED',\n '403': 'PAUSE_WINDOW_EXPIRED',\n '404': 'MAX_PAUSE_WINDOW_DURATION',\n '405': 'MAX_BUFFER_PERIOD_DURATION',\n '406': 'INSUFFICIENT_BALANCE',\n '407': 'INSUFFICIENT_ALLOWANCE',\n '408': 'ERC20_TRANSFER_FROM_ZERO_ADDRESS',\n '409': 'ERC20_TRANSFER_TO_ZERO_ADDRESS',\n '410': 'ERC20_MINT_TO_ZERO_ADDRESS',\n '411': 'ERC20_BURN_FROM_ZERO_ADDRESS',\n '412': 'ERC20_APPROVE_FROM_ZERO_ADDRESS',\n '413': 'ERC20_APPROVE_TO_ZERO_ADDRESS',\n '414': 'ERC20_TRANSFER_EXCEEDS_ALLOWANCE',\n '415': 'ERC20_DECREASED_ALLOWANCE_BELOW_ZERO',\n '416': 'ERC20_TRANSFER_EXCEEDS_BALANCE',\n '417': 'ERC20_BURN_EXCEEDS_ALLOWANCE',\n '418': 'SAFE_ERC20_CALL_FAILED',\n '419': 'ADDRESS_INSUFFICIENT_BALANCE',\n '420': 'ADDRESS_CANNOT_SEND_VALUE',\n '421': 'SAFE_CAST_VALUE_CANT_FIT_INT256',\n '422': 'GRANT_SENDER_NOT_ADMIN',\n '423': 'REVOKE_SENDER_NOT_ADMIN',\n '424': 'RENOUNCE_SENDER_NOT_ALLOWED',\n '425': 'BUFFER_PERIOD_EXPIRED',\n '426': 'CALLER_IS_NOT_OWNER',\n '427': 'NEW_OWNER_IS_ZERO',\n '428': 'CODE_DEPLOYMENT_FAILED',\n '429': 'CALL_TO_NON_CONTRACT',\n '430': 'LOW_LEVEL_CALL_FAILED',\n '431': 'NOT_PAUSED',\n '432': 'ADDRESS_ALREADY_ALLOWLISTED',\n '433': 'ADDRESS_NOT_ALLOWLISTED',\n '434': 'ERC20_BURN_EXCEEDS_BALANCE',\n '500': 'INVALID_POOL_ID',\n '501': 'CALLER_NOT_POOL',\n '502': 'SENDER_NOT_ASSET_MANAGER',\n '503': 'USER_DOESNT_ALLOW_RELAYER',\n '504': 'INVALID_SIGNATURE',\n '505': 'EXIT_BELOW_MIN',\n '506': 'JOIN_ABOVE_MAX',\n '507': 'SWAP_LIMIT',\n '508': 'SWAP_DEADLINE',\n '509': 'CANNOT_SWAP_SAME_TOKEN',\n '510': 'UNKNOWN_AMOUNT_IN_FIRST_SWAP',\n '511': 'MALCONSTRUCTED_MULTIHOP_SWAP',\n '512': 'INTERNAL_BALANCE_OVERFLOW',\n '513': 'INSUFFICIENT_INTERNAL_BALANCE',\n '514': 'INVALID_ETH_INTERNAL_BALANCE',\n '515': 'INVALID_POST_LOAN_BALANCE',\n '516': 'INSUFFICIENT_ETH',\n '517': 'UNALLOCATED_ETH',\n '518': 'ETH_TRANSFER',\n '519': 'CANNOT_USE_ETH_SENTINEL',\n '520': 'TOKENS_MISMATCH',\n '521': 'TOKEN_NOT_REGISTERED',\n '522': 'TOKEN_ALREADY_REGISTERED',\n '523': 'TOKENS_ALREADY_SET',\n '524': 'TOKENS_LENGTH_MUST_BE_2',\n '525': 'NONZERO_TOKEN_BALANCE',\n '526': 'BALANCE_TOTAL_OVERFLOW',\n '527': 'POOL_NO_TOKENS',\n '528': 'INSUFFICIENT_FLASH_LOAN_BALANCE',\n '600': 'SWAP_FEE_PERCENTAGE_TOO_HIGH',\n '601': 'FLASH_LOAN_FEE_PERCENTAGE_TOO_HIGH',\n '602': 'INSUFFICIENT_FLASH_LOAN_FEE_AMOUNT',\n};\n\nexport class BalancerErrors {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n static isErrorCode = (error: string): boolean => {\n if (!error.includes('BAL#')) return false;\n\n const errorCode = error.replace('BAL#', '');\n return Object.keys(balancerErrorCodes).includes(errorCode);\n };\n\n /**\n * Decodes a Balancer error code into the corresponding reason\n * @param error - a Balancer error code of the form `BAL#000`\n * @returns The decoded error reason\n */\n static parseErrorCode = (error: string): string => {\n if (!error.includes('BAL#')) throw new Error('Error code not found');\n const errorCode = error.replace('BAL#', '');\n\n const actualError = balancerErrorCodes[errorCode];\n\n if (!actualError) throw new Error('Error code not found');\n\n return actualError;\n };\n\n /**\n * Decodes a Balancer error code into the corresponding reason\n * @param error - a Balancer error code of the form `BAL#000`\n * @returns The decoded error reason if passed a valid error code, otherwise returns passed input\n */\n static tryParseErrorCode = (error: string): string => {\n try {\n return BalancerErrors.parseErrorCode(error);\n } catch {\n return error;\n }\n };\n\n /**\n * Tests whether a string is a known Balancer error message\n * @param error - a string to be checked verified as a Balancer error message\n */\n static isBalancerError = (error: string): boolean =>\n Object.values(balancerErrorCodes).includes(error);\n\n /**\n * Encodes an error string into the corresponding error code\n * @param error - a Balancer error message string\n * @returns a Balancer error code of the form `BAL#000`\n */\n static encodeError = (error: string): string => {\n const encodedError = Object.entries(balancerErrorCodes).find(\n ([, message]) => message === error\n );\n\n if (!encodedError) throw Error('Error message not found');\n\n return `BAL#${encodedError[0]}`;\n };\n}\n","import { MaxUint256 as MAX_DEADLINE } from '@ethersproject/constants';\nimport { Contract } from '@ethersproject/contracts';\nimport { hexValue, hexZeroPad, splitSignature } from '@ethersproject/bytes';\nimport { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { Signer, TypedDataSigner } from '@ethersproject/abstract-signer';\n\nexport type Account = string | Signer | Contract;\n\nexport async function accountToAddress(account: Account): Promise {\n if (typeof account == 'string') return account;\n if (Signer.isSigner(account)) return account.getAddress();\n if (account.address) return account.address;\n throw new Error('Could not read account address');\n}\n\nexport enum RelayerAction {\n JoinPool = 'JoinPool',\n ExitPool = 'ExitPool',\n Swap = 'Swap',\n BatchSwap = 'BatchSwap',\n SetRelayerApproval = 'SetRelayerApproval',\n}\n\nexport class RelayerAuthorization {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n static encodeCalldataAuthorization = (\n calldata: string,\n deadline: BigNumberish,\n signature: string\n ): string => {\n const encodedDeadline = hexZeroPad(hexValue(deadline), 32).slice(2);\n const { v, r, s } = splitSignature(signature);\n const encodedV = hexZeroPad(hexValue(v), 32).slice(2);\n const encodedR = r.slice(2);\n const encodedS = s.slice(2);\n return `${calldata}${encodedDeadline}${encodedV}${encodedR}${encodedS}`;\n };\n\n static signJoinAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.JoinPool,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signExitAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.ExitPool,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signSwapAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.Swap,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signBatchSwapAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.BatchSwap,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signSetRelayerApprovalAuthorization = (\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline?: BigNumberish,\n nonce?: BigNumberish\n ): Promise =>\n RelayerAuthorization.signAuthorizationFor(\n RelayerAction.SetRelayerApproval,\n validator,\n user,\n allowedSender,\n allowedCalldata,\n deadline,\n nonce\n );\n\n static signAuthorizationFor = async (\n type: RelayerAction,\n validator: Contract,\n user: Signer & TypedDataSigner,\n allowedSender: Account,\n allowedCalldata: string,\n deadline: BigNumberish = MAX_DEADLINE,\n nonce?: BigNumberish\n ): Promise => {\n const { chainId } = await validator.provider.getNetwork();\n if (!nonce) {\n const userAddress = await user.getAddress();\n nonce = (await validator.getNextNonce(userAddress)) as BigNumberish;\n }\n\n const domain = {\n name: 'Balancer V2 Vault',\n version: '1',\n chainId,\n verifyingContract: validator.address,\n };\n\n const types = {\n [type]: [\n { name: 'calldata', type: 'bytes' },\n { name: 'sender', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n };\n\n const value = {\n calldata: allowedCalldata,\n sender: await accountToAddress(allowedSender),\n nonce: nonce.toString(),\n deadline: deadline.toString(),\n };\n\n return user._signTypedData(domain, types, value);\n };\n}\n\nexport class BalancerMinterAuthorization {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n static signSetMinterApproval = async (\n minterContract: Contract,\n minter: Account,\n approval: boolean,\n user: Signer & TypedDataSigner,\n deadline: BigNumberish = MAX_DEADLINE,\n nonce?: BigNumberish\n ): Promise<{ v: number; r: string; s: string; deadline: BigNumber }> => {\n const { chainId } = await minterContract.provider.getNetwork();\n if (!nonce) {\n const userAddress = await user.getAddress();\n nonce = (await minterContract.getNextNonce(userAddress)) as BigNumberish;\n }\n\n const domain = {\n name: 'Balancer Minter',\n version: '1',\n chainId,\n verifyingContract: minterContract.address,\n };\n\n const types = {\n SetMinterApproval: [\n { name: 'minter', type: 'address' },\n { name: 'approval', type: 'bool' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n };\n\n const value = {\n minter: await accountToAddress(minter),\n approval,\n nonce: nonce.toString(),\n deadline: deadline.toString(),\n };\n\n const signature = await user._signTypedData(domain, types, value);\n\n return {\n ...splitSignature(signature),\n deadline: BigNumber.from(deadline),\n };\n };\n}\n","import { Signer, TypedDataSigner } from '@ethersproject/abstract-signer';\nimport { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { splitSignature } from '@ethersproject/bytes';\nimport { MaxUint256 as MAX_DEADLINE } from '@ethersproject/constants';\nimport { Contract } from '@ethersproject/contracts';\nimport { Account, accountToAddress } from './signatures';\n\nexport const signPermit = async (\n token: Contract,\n owner: Signer & TypedDataSigner,\n spender: Account,\n amount: BigNumberish,\n deadline: BigNumberish = MAX_DEADLINE,\n nonce?: BigNumberish\n): Promise<{\n v: number;\n r: string;\n s: string;\n deadline: BigNumber;\n nonce: BigNumber;\n}> => {\n const { chainId } = await token.provider.getNetwork();\n const ownerAddress = await owner.getAddress();\n\n if (!nonce) nonce = (await token.nonces(ownerAddress)) as BigNumberish;\n\n const domain = {\n name: await token.name(),\n version: '1',\n chainId,\n verifyingContract: token.address,\n };\n\n const types = {\n Permit: [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n };\n\n const value = {\n owner: ownerAddress,\n spender: await accountToAddress(spender),\n value: amount,\n nonce,\n deadline,\n };\n\n const signature = await owner._signTypedData(domain, types, value);\n return {\n ...splitSignature(signature),\n deadline: BigNumber.from(deadline),\n nonce: BigNumber.from(nonce),\n };\n};\n","export const BZERO = BigInt(0);\nexport const BONE = BigInt(1);\nexport const ONE = BigInt('1000000000000000000'); // 18 decimal places\n\nconst _require = (b: boolean, message: string) => {\n if (!b) throw new Error(message);\n};\n\n/**\n * @dev Returns a scaling factor that, when multiplied to a token amount for `token`, normalizes its balance as if\n * it had 18 decimals.\n */\nexport function _computeScalingFactor(tokenDecimals: bigint): bigint {\n // Tokens with more than 18 decimals are not supported.\n const decimalsDifference = BigInt(18) - tokenDecimals;\n return ONE * BigInt(10) ** decimalsDifference;\n}\n\n/**\n * @dev Applies `scalingFactor` to `amount`, resulting in a larger or equal value depending on whether it needed\n * scaling or not.\n */\nexport function _upscale(amount: bigint, scalingFactor: bigint): bigint {\n // Upscale rounding wouldn't necessarily always go in the same direction: in a swap for example the balance of\n // token in should be rounded up, and that of token out rounded down. This is the only place where we round in\n // the same direction for all amounts, as the impact of this rounding is expected to be minimal (and there's no\n // rounding error unless `_scalingFactor()` is overriden).\n return SolidityMaths.mulDownFixed(amount, scalingFactor);\n}\n\n/**\n * @dev Same as `_upscale`, but for an entire array. This function does not return anything, but instead *mutates*\n * the `amounts` array.\n */\nexport function _upscaleArray(\n amounts: bigint[],\n scalingFactors: bigint[]\n): bigint[] {\n const upscaledAmounts = new Array(amounts.length);\n for (let i = 0; i < amounts.length; ++i) {\n upscaledAmounts[i] = SolidityMaths.mulDownFixed(\n amounts[i],\n scalingFactors[i]\n );\n }\n return upscaledAmounts;\n}\n\n/**\n * @dev Reverses the `scalingFactor` applied to `amount`, resulting in a smaller or equal value depending on\n * whether it needed scaling or not. The result is rounded down.\n */\nexport function _downscaleDown(amount: bigint, scalingFactor: bigint): bigint {\n return SolidityMaths.divDownFixed(amount, scalingFactor);\n}\n\n/**\n * @dev Same as `_downscaleDown`, but for an entire array. This function does not return anything, but instead\n * *mutates* the `amounts` array.\n */\nexport function _downscaleDownArray(\n amounts: bigint[],\n scalingFactors: bigint[]\n): bigint[] {\n const downscaledAmounts = new Array(amounts.length);\n for (let i = 0; i < amounts.length; ++i) {\n downscaledAmounts[i] = SolidityMaths.divDownFixed(\n amounts[i],\n scalingFactors[i]\n );\n }\n return downscaledAmounts;\n}\n\n/**\n * @dev Reverses the `scalingFactor` applied to `amount`, resulting in a smaller or equal value depending on\n * whether it needed scaling or not. The result is rounded up.\n */\nexport function _downscaleUp(amount: bigint, scalingFactor: bigint): bigint {\n return SolidityMaths.divUpFixed(amount, scalingFactor);\n}\n\nexport class SolidityMaths {\n /**\n * @dev Returns the addition of two unsigned integers of 256 bits, reverting on overflow.\n */\n // add(a: bigint, b: bigint): bigint {\n // const c = a + b;\n // // _require(c >= a, Errors.ADD_OVERFLOW);\n // return c;\n // }\n\n /**\n * @dev Returns the addition of two signed integers, reverting on overflow.\n */\n static add(a: bigint, b: bigint): bigint {\n const c = a + b;\n _require((b >= 0 && c >= a) || (b < 0 && c < a), 'Errors.ADD_OVERFLOW');\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers of 256 bits, reverting on overflow.\n */\n static sub(a: bigint, b: bigint): bigint {\n _require(b <= a, 'Errors.SUB_OVERFLOW');\n const c = a - b;\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two signed integers, reverting on overflow.\n */\n // sub(int256 a, int256 b) internal pure returns (int256) {\n // int256 c = a - b;\n // // _require((b >= 0 && c <= a) || (b < 0 && c > a), Errors.SUB_OVERFLOW);\n // return c;\n // }\n\n /**\n * @dev Returns the largest bigint in the array.\n */\n static max(args: bigint[]): bigint {\n if (args.length === 0) throw new Error('Errors.EMPTY_ARRAY');\n if (args.length === 1) return args[0];\n return args.reduce((previous, current) =>\n current > previous ? current : previous\n );\n }\n\n /**\n * @dev Returns the smallest of two numbers of 256 bits.\n */\n static min(a: bigint, b: bigint): bigint {\n return a < b ? a : b;\n }\n\n static mul(a: bigint, b: bigint): bigint {\n const c = a * b;\n _require(a == BZERO || c / a == b, 'Errors.MUL_OVERFLOW');\n return c;\n }\n\n static div(a: bigint, b: bigint, roundUp: boolean): bigint {\n return roundUp ? this.divUp(a, b) : this.divDown(a, b);\n }\n\n static divDown(a: bigint, b: bigint): bigint {\n _require(b != BZERO, 'Errors.ZERO_DIVISION');\n return a / b;\n }\n\n static divUp(a: bigint, b: bigint): bigint {\n _require(b != BZERO, 'Errors.ZERO_DIVISION');\n\n if (a == BZERO) {\n return BZERO;\n } else {\n return BONE + (a - BONE) / b;\n }\n }\n\n // Modification: Taken from the fixed point class\n static MAX_POW_RELATIVE_ERROR = BigInt(10000);\n\n static mulUpFixed(a: bigint, b: bigint): bigint {\n const product = a * b;\n _require(a == BZERO || product / a == b, 'Errors.MUL_OVERFLOW');\n\n if (product == BZERO) {\n return BZERO;\n } else {\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, which we already tested for.\n\n return (product - BONE) / ONE + BONE;\n }\n }\n\n // Modification: Taken from the fixed point class\n static divDownFixed(a: bigint, b: bigint): bigint {\n _require(b != BZERO, 'Errors.ZERO_DIVISION');\n if (a == BZERO) {\n return BZERO;\n } else {\n const aInflated = a * ONE;\n // _require(aInflated / a == ONE, Errors.DIV_INTERNAL); // mul overflow\n\n return aInflated / b;\n }\n }\n\n // Modification: Taken from the fixed point class\n static divUpFixed(a: bigint, b: bigint): bigint {\n _require(b != BZERO, 'Errors.ZERO_DIVISION');\n\n if (a == BZERO) {\n return BZERO;\n } else {\n const aInflated = a * ONE;\n _require(aInflated / a == ONE, 'Errors.DIV_INTERNAL'); // mul overflow\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, which we already tested for.\n\n return (aInflated - BONE) / b + BONE;\n }\n }\n\n // Modification: Taken from the fixed point class\n static powUpFixed(x: bigint, y: bigint): bigint {\n const raw = LogExpMath.pow(x, y);\n const maxError = this.add(\n this.mulUpFixed(raw, this.MAX_POW_RELATIVE_ERROR),\n BONE\n );\n\n return this.add(raw, maxError);\n }\n\n // Modification: Taken from the fixed point class\n static complementFixed(x: bigint): bigint {\n return x < ONE ? ONE - x : BZERO;\n }\n\n static mulDownFixed(a: bigint, b: bigint): bigint {\n const product = a * b;\n _require(a == BZERO || product / a == b, 'Errors.MUL_OVERFLOW');\n\n return product / ONE;\n }\n}\n\nclass LogExpMath {\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n static ONE_18 = BigInt('1000000000000000000');\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n static ONE_20 = BigInt('100000000000000000000');\n static ONE_36 = BigInt('1000000000000000000000000000000000000');\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n static MAX_NATURAL_EXPONENT = BigInt('130000000000000000000');\n static MIN_NATURAL_EXPONENT = BigInt('-41000000000000000000');\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n static LN_36_LOWER_BOUND: bigint =\n BigInt(LogExpMath.ONE_18) - BigInt('100000000000000000');\n static LN_36_UPPER_BOUND: bigint =\n BigInt(LogExpMath.ONE_18) + BigInt('100000000000000000');\n\n static MILD_EXPONENT_BOUND: bigint =\n BigInt(2) ** BigInt(254) / LogExpMath.ONE_20;\n\n // 18 decimal constants\n static x0 = BigInt('128000000000000000000'); // 2ˆ7\n static a0 = BigInt(\n '38877084059945950922200000000000000000000000000000000000'\n ); // eˆ(x0) (no decimals)\n static x1 = BigInt('64000000000000000000'); // 2ˆ6\n static a1 = BigInt('6235149080811616882910000000'); // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n static x2 = BigInt('3200000000000000000000'); // 2ˆ5\n static a2 = BigInt('7896296018268069516100000000000000'); // eˆ(x2)\n static x3 = BigInt('1600000000000000000000'); // 2ˆ4\n static a3 = BigInt('888611052050787263676000000'); // eˆ(x3)\n static x4 = BigInt('800000000000000000000'); // 2ˆ3\n static a4 = BigInt('298095798704172827474000'); // eˆ(x4)\n static x5 = BigInt('400000000000000000000'); // 2ˆ2\n static a5 = BigInt('5459815003314423907810'); // eˆ(x5)\n static x6 = BigInt('200000000000000000000'); // 2ˆ1\n static a6 = BigInt('738905609893065022723'); // eˆ(x6)\n static x7 = BigInt('100000000000000000000'); // 2ˆ0\n static a7 = BigInt('271828182845904523536'); // eˆ(x7)\n static x8 = BigInt('50000000000000000000'); // 2ˆ-1\n static a8 = BigInt('164872127070012814685'); // eˆ(x8)\n static x9 = BigInt('25000000000000000000'); // 2ˆ-2\n static a9 = BigInt('128402541668774148407'); // eˆ(x9)\n static x10 = BigInt('12500000000000000000'); // 2ˆ-3\n static a10 = BigInt('113314845306682631683'); // eˆ(x10)\n static x11 = BigInt('6250000000000000000'); // 2ˆ-4\n static a11 = BigInt('106449445891785942956'); // eˆ(x11)\n\n // All arguments and return values are 18 decimal fixed point numbers.\n static pow(x: bigint, y: bigint): bigint {\n if (y === BZERO) {\n // We solve the 0^0 indetermination by making it equal one.\n return this.ONE_18;\n }\n\n if (x == BZERO) {\n return BZERO;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n _require(\n x <\n BigInt(\n '57896044618658097711785492504343953926634992332820282019728792003956564819968'\n ),\n 'Errors.X_OUT_OF_BOUNDS'\n );\n const x_int256 = x;\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n _require(y < this.MILD_EXPONENT_BOUND, 'Errors.Y_OUT_OF_BOUNDS');\n const y_int256 = y;\n\n let logx_times_y;\n if (\n this.LN_36_LOWER_BOUND < x_int256 &&\n x_int256 < this.LN_36_UPPER_BOUND\n ) {\n const ln_36_x = this._ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y =\n (ln_36_x / this.ONE_18) * y_int256 +\n ((ln_36_x % this.ONE_18) * y_int256) / this.ONE_18;\n } else {\n logx_times_y = this._ln(x_int256) * y_int256;\n }\n logx_times_y /= this.ONE_18;\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n _require(\n this.MIN_NATURAL_EXPONENT <= logx_times_y &&\n logx_times_y <= this.MAX_NATURAL_EXPONENT,\n 'Errors.PRODUCT_OUT_OF_BOUNDS'\n );\n\n // return uint256(exp(logx_times_y));\n return this.exp(logx_times_y);\n }\n\n static exp(x: bigint): bigint {\n _require(\n x >= this.MIN_NATURAL_EXPONENT && x <= this.MAX_NATURAL_EXPONENT,\n 'Errors.INVALID_EXPONENT'\n );\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT).\n // Fixed point division requires multiplying by ONE_18.\n return (this.ONE_18 * this.ONE_18) / this.exp(BigInt(-1) * x);\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n let firstAN;\n if (x >= this.x0) {\n x -= this.x0;\n firstAN = this.a0;\n } else if (x >= this.x1) {\n x -= this.x1;\n firstAN = this.a1;\n } else {\n firstAN = BigInt(1); // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= BigInt(100);\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n let product = this.ONE_20;\n\n if (x >= this.x2) {\n x -= this.x2;\n product = (product * this.a2) / this.ONE_20;\n }\n if (x >= this.x3) {\n x -= this.x3;\n product = (product * this.a3) / this.ONE_20;\n }\n if (x >= this.x4) {\n x -= this.x4;\n product = (product * this.a4) / this.ONE_20;\n }\n if (x >= this.x5) {\n x -= this.x5;\n product = (product * this.a5) / this.ONE_20;\n }\n if (x >= this.x6) {\n x -= this.x6;\n product = (product * this.a6) / this.ONE_20;\n }\n if (x >= this.x7) {\n x -= this.x7;\n product = (product * this.a7) / this.ONE_20;\n }\n if (x >= this.x8) {\n x -= this.x8;\n product = (product * this.a8) / this.ONE_20;\n }\n if (x >= this.x9) {\n x -= this.x9;\n product = (product * this.a9) / this.ONE_20;\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n let seriesSum = this.ONE_20; // The initial one in the sum, with 20 decimal places.\n let term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by this.ONE_20, but dividing by the non-fixed point n values does not.\n\n term = (term * x) / this.ONE_20 / BigInt(2);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(3);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(4);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(5);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(6);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(7);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(8);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(9);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(10);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(11);\n seriesSum += term;\n\n term = (term * x) / this.ONE_20 / BigInt(12);\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by this.ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n return (((product * seriesSum) / this.ONE_20) * firstAN) / BigInt(100);\n }\n\n static _ln_36(x: bigint): bigint {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n x *= this.ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n const z = ((x - this.ONE_36) * this.ONE_36) / (x + this.ONE_36);\n const z_squared = (z * z) / this.ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n let num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n let seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(3);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(5);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(7);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(9);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(11);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(13);\n\n num = (num * z_squared) / this.ONE_36;\n seriesSum += num / BigInt(15);\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * BigInt(2);\n }\n\n /**\n * @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n */\n static _ln(a: bigint): bigint {\n if (a < this.ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, and this if statement will not be entered in the recursive call.\n // Fixed point division requires multiplying by this.ONE_18.\n return BigInt(-1) * this._ln((this.ONE_18 * this.ONE_18) / a);\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // this.ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n let sum = BZERO;\n if (a >= this.a0 * this.ONE_18) {\n a /= this.a0; // Integer, not fixed point division\n sum += this.x0;\n }\n\n if (a >= this.a1 * this.ONE_18) {\n a /= this.a1; // Integer, not fixed point division\n sum += this.x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= BigInt(100);\n a *= BigInt(100);\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= this.a2) {\n a = (a * this.ONE_20) / this.a2;\n sum += this.x2;\n }\n\n if (a >= this.a3) {\n a = (a * this.ONE_20) / this.a3;\n sum += this.x3;\n }\n\n if (a >= this.a4) {\n a = (a * this.ONE_20) / this.a4;\n sum += this.x4;\n }\n\n if (a >= this.a5) {\n a = (a * this.ONE_20) / this.a5;\n sum += this.x5;\n }\n\n if (a >= this.a6) {\n a = (a * this.ONE_20) / this.a6;\n sum += this.x6;\n }\n\n if (a >= this.a7) {\n a = (a * this.ONE_20) / this.a7;\n sum += this.x7;\n }\n\n if (a >= this.a8) {\n a = (a * this.ONE_20) / this.a8;\n sum += this.x8;\n }\n\n if (a >= this.a9) {\n a = (a * this.ONE_20) / this.a9;\n sum += this.x9;\n }\n\n if (a >= this.a10) {\n a = (a * this.ONE_20) / this.a10;\n sum += this.x10;\n }\n\n if (a >= this.a11) {\n a = (a * this.ONE_20) / this.a11;\n sum += this.x11;\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n const z = ((a - this.ONE_20) * this.ONE_20) / (a + this.ONE_20);\n const z_squared = (z * z) / this.ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n let num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n let seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(3);\n\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(5);\n\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(7);\n\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(9);\n\n num = (num * z_squared) / this.ONE_20;\n seriesSum += num / BigInt(11);\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= BigInt(2);\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n return (sum + seriesSum) / BigInt(100);\n }\n}\n","import { parseFixed } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport { Pool } from '../../types';\nimport {\n SolidityMaths,\n _computeScalingFactor,\n _upscaleArray,\n} from '@/lib/utils/solidityMaths';\nimport { AssetHelpers } from '@/lib/utils/assetHelpers';\n\nexport const AMP_PRECISION = 3; // number of decimals -> precision 1000\n\ntype ParsedPoolInfo = {\n bptIndex: number;\n higherBalanceTokenIndex: number;\n ampWithPrecision: bigint;\n balancesEvm: bigint[];\n balancesEvmWithoutBpt: bigint[];\n priceRates: bigint[];\n priceRatesWithoutBpt: bigint[];\n swapFeeEvm: bigint;\n poolTokens: string[];\n poolTokensWithoutBpt: string[];\n weights: bigint[];\n scalingFactors: bigint[];\n scalingFactorsWithoutBpt: bigint[];\n scalingFactorsRaw: bigint[];\n scalingFactorsRawWithoutBpt: bigint[];\n upScaledBalances: bigint[];\n upScaledBalancesWithoutBpt: bigint[];\n totalSharesEvm: bigint;\n};\n\n/**\n * Parse pool info into EVM amounts. Sorts by token order if wrappedNativeAsset param passed.\n * @param pool Pool object to be parsed\n * @param wrappedNativeAsset e.g. wETH address\n * @param unwrapNativeAsset if true, changes wETH address to ETH address\n * @returns parsed pool info\n */\nexport const parsePoolInfo = (\n pool: Pool,\n wrappedNativeAsset?: string,\n unwrapNativeAsset?: boolean\n): ParsedPoolInfo => {\n let poolTokens = unwrapNativeAsset\n ? pool.tokens.map((token) =>\n token.address === wrappedNativeAsset ? AddressZero : token.address\n )\n : pool.tokens.map((token) => token.address);\n let decimals = pool.tokens.map((token) => {\n return token.decimals ?? 18;\n });\n let balancesEvm = pool.tokens.map((token) =>\n parseFixed(token.balance, token.decimals).toBigInt()\n );\n let weights = pool.tokens.map((token) => {\n return parseFixed(token.weight ?? '1', 18).toBigInt();\n });\n let priceRates = pool.tokens.map((token) => {\n return parseFixed(token.priceRate ?? '1', 18).toBigInt();\n });\n\n let scalingFactorsRaw = decimals.map((d) => _computeScalingFactor(BigInt(d)));\n let scalingFactors = scalingFactorsRaw.map((sf, i) =>\n SolidityMaths.mulDownFixed(sf, priceRates[i])\n );\n // This assumes token.balance is in human scale (e.g. from SG)\n let upScaledBalances = _upscaleArray(balancesEvm, scalingFactors);\n if (wrappedNativeAsset) {\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n [\n poolTokens,\n decimals,\n scalingFactors,\n scalingFactorsRaw,\n balancesEvm,\n upScaledBalances,\n weights,\n priceRates,\n ] = assetHelpers.sortTokens(\n poolTokens,\n decimals,\n scalingFactors,\n scalingFactorsRaw,\n balancesEvm,\n upScaledBalances,\n weights,\n priceRates\n ) as [\n string[],\n number[],\n bigint[],\n bigint[],\n bigint[],\n bigint[],\n bigint[],\n bigint[]\n ];\n }\n\n // Solidity maths uses precison method for amp that must be replicated\n const ampWithPrecision = parseFixed(\n pool.amp ?? '1',\n AMP_PRECISION\n ).toBigInt();\n\n const higherBalanceTokenIndex = upScaledBalances.indexOf(\n SolidityMaths.max(upScaledBalances)\n );\n\n const scalingFactorsWithoutBpt = [...scalingFactors];\n const scalingFactorsRawWithoutBpt = [...scalingFactorsRaw];\n const poolTokensWithoutBpt = [...poolTokens];\n const balancesEvmWithoutBpt = [...balancesEvm];\n const priceRatesWithoutBpt = [...priceRates];\n const upScaledBalancesWithoutBpt = [...upScaledBalances];\n\n const bptIndex = poolTokens.indexOf(pool.address);\n if (bptIndex !== -1) {\n scalingFactorsWithoutBpt.splice(bptIndex, 1);\n scalingFactorsRawWithoutBpt.splice(bptIndex, 1);\n poolTokensWithoutBpt.splice(bptIndex, 1);\n balancesEvmWithoutBpt.splice(bptIndex, 1);\n priceRatesWithoutBpt.splice(bptIndex, 1);\n upScaledBalancesWithoutBpt.splice(bptIndex, 1);\n }\n\n return {\n bptIndex,\n higherBalanceTokenIndex,\n ampWithPrecision,\n balancesEvm,\n balancesEvmWithoutBpt,\n priceRates,\n priceRatesWithoutBpt,\n swapFeeEvm: parseFixed(pool.swapFee, 18).toBigInt(),\n poolTokens,\n poolTokensWithoutBpt,\n weights,\n scalingFactors,\n scalingFactorsWithoutBpt,\n scalingFactorsRaw,\n scalingFactorsRawWithoutBpt,\n upScaledBalances,\n upScaledBalancesWithoutBpt,\n totalSharesEvm: parseFixed(pool.totalShares || '0', 18).toBigInt(),\n };\n};\n","import { Network } from '@/lib/constants/network';\n\n/**\n * TYPES\n */\ntype CommonTokens = {\n nativeAsset: string;\n wNativeAsset: string;\n WETH: string;\n BAL: string;\n bbaUSD?: string;\n bbaUSDv2?: string;\n};\n\ntype TokenConstants = {\n Popular: {\n Symbols: string[];\n };\n Addresses: CommonTokens;\n PriceChainMap?: Record;\n};\n\n/**\n * CONSTANTS\n */\nexport const DEFAULT_TOKEN_DECIMALS = 18;\n\nexport const TOKENS_MAINNET: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'AAVE', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n WETH: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n BAL: '0xba100000625a3754423978a60c9317c58a424e3d',\n bbaUSD: '0x7B50775383d3D6f0215A8F290f2C9e2eEBBEceb2',\n bbaUSDv2: '0xA13a9247ea42D743238089903570127DdA72fE44',\n },\n};\n\nexport const TOKENS_POLYGON: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'AAVE', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270',\n WETH: '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619',\n BAL: '0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3',\n },\n};\n\nexport const TOKENS_ARBITRUM: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'AAVE', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n WETH: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n BAL: '0x040d1EdC9569d4Bab2D15287Dc5A4F10F56a56B8',\n },\n};\n\nexport const TOKENS_GNOSIS: TokenConstants = {\n Popular: {\n Symbols: ['xDAI', 'WXDAI', 'WETH', 'BAL'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0xe91d153e0b41518a2ce8dd3d7944fa863463a97d',\n WETH: '0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1',\n BAL: '0x7eF541E2a22058048904fE5744f9c7E4C57AF717',\n },\n};\nexport const TOKENS_GOERLI: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'USDT', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1',\n WETH: '0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1',\n BAL: '0xfA8449189744799aD2AcE7e0EBAC8BB7575eff47',\n bbaUSD: '0x13ACD41C585d7EbB4a9460f7C8f50BE60DC080Cd',\n },\n PriceChainMap: {\n /**\n * Addresses must be lower case and map from goerli to mainnet, e.g\n * [goerli address]: mainnet address\n */\n '0xdfcea9088c8a88a76ff74892c1457c17dfeef9c1':\n '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n '0x37f03a12241e9fd3658ad6777d289c3fb8512bc9':\n '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599',\n '0xfa8449189744799ad2ace7e0ebac8bb7575eff47':\n '0xba100000625a3754423978a60c9317c58a424e3d',\n '0xe0c9275e44ea80ef17579d33c55136b7da269aeb':\n '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n '0x8c9e6c40d3402480ace624730524facc5482798c':\n '0x6b175474e89094c44da98b954eedeac495271d0f',\n '0x1f1f156e0317167c11aa412e3d1435ea29dc3cce':\n '0xdac17f958d2ee523a2206206994597c13d831ec7',\n '0x4cb1892fddf14f772b2e39e299f44b2e5da90d04':\n '0x3ed3b47dd13ec9a98b44e6204a523e766b225811',\n '0x811151066392fd641fe74a9b55a712670572d161':\n '0xbcca60bb61934080951369a648fb03df4f96263c',\n '0x89534a24450081aa267c79b07411e9617d984052':\n '0x028171bca77440897b824ca71d1c56cac55b68a3',\n '0x829f35cebbcd47d3c120793c12f7a232c903138b':\n '0x956f47f50a910163d8bf957cf5846d573e7f87ca',\n '0xff386a3d08f80ac38c77930d173fa56c6286dc8b':\n '0x6810e776880c02933d47db1b9fc05908e5386b96',\n },\n};\n\nexport const TOKENS_GENERIC: TokenConstants = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'BAL', 'AAVE', 'WETH'],\n },\n Addresses: {\n nativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n wNativeAsset: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n WETH: '0x0000000000000000000000000000000000000000',\n BAL: '0x0000000000000000000000000000000000000000',\n },\n};\n\nexport const TOKENS_MAP = {\n [Network.GOERLI]: TOKENS_GOERLI,\n [Network.MAINNET]: TOKENS_MAINNET,\n [Network.POLYGON]: TOKENS_POLYGON,\n [Network.ARBITRUM]: TOKENS_ARBITRUM,\n [Network.GNOSIS]: TOKENS_GNOSIS,\n};\n\nexport function TOKENS(networkId: Network): TokenConstants {\n const id = networkId as keyof typeof TOKENS_MAP;\n return TOKENS_MAP[id] ? TOKENS_MAP[id] : TOKENS_GENERIC;\n}\n","\"use strict\";\nlet _permanentCensorErrors = false;\nlet _censorErrors = false;\nconst LogLevels = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nlet _logLevel = LogLevels[\"default\"];\nimport { version } from \"./_version\";\nlet _globalLogger = null;\nfunction _checkNormalize() {\n try {\n const missing = [];\n // Make sure all forms of normalization are supported\n [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].forEach((form) => {\n try {\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad normalize\");\n }\n ;\n }\n catch (error) {\n missing.push(form);\n }\n });\n if (missing.length) {\n throw new Error(\"missing \" + missing.join(\", \"));\n }\n if (String.fromCharCode(0xe9).normalize(\"NFD\") !== String.fromCharCode(0x65, 0x0301)) {\n throw new Error(\"broken implementation\");\n }\n }\n catch (error) {\n return error.message;\n }\n return null;\n}\nconst _normalizeError = _checkNormalize();\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[\"DEBUG\"] = \"DEBUG\";\n LogLevel[\"INFO\"] = \"INFO\";\n LogLevel[\"WARNING\"] = \"WARNING\";\n LogLevel[\"ERROR\"] = \"ERROR\";\n LogLevel[\"OFF\"] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\nexport var ErrorCode;\n(function (ErrorCode) {\n ///////////////////\n // Generic Errors\n // Unknown Error\n ErrorCode[\"UNKNOWN_ERROR\"] = \"UNKNOWN_ERROR\";\n // Not Implemented\n ErrorCode[\"NOT_IMPLEMENTED\"] = \"NOT_IMPLEMENTED\";\n // Unsupported Operation\n // - operation\n ErrorCode[\"UNSUPPORTED_OPERATION\"] = \"UNSUPPORTED_OPERATION\";\n // Network Error (i.e. Ethereum Network, such as an invalid chain ID)\n // - event (\"noNetwork\" is not re-thrown in provider.ready; otherwise thrown)\n ErrorCode[\"NETWORK_ERROR\"] = \"NETWORK_ERROR\";\n // Some sort of bad response from the server\n ErrorCode[\"SERVER_ERROR\"] = \"SERVER_ERROR\";\n // Timeout\n ErrorCode[\"TIMEOUT\"] = \"TIMEOUT\";\n ///////////////////\n // Operational Errors\n // Buffer Overrun\n ErrorCode[\"BUFFER_OVERRUN\"] = \"BUFFER_OVERRUN\";\n // Numeric Fault\n // - operation: the operation being executed\n // - fault: the reason this faulted\n ErrorCode[\"NUMERIC_FAULT\"] = \"NUMERIC_FAULT\";\n ///////////////////\n // Argument Errors\n // Missing new operator to an object\n // - name: The name of the class\n ErrorCode[\"MISSING_NEW\"] = \"MISSING_NEW\";\n // Invalid argument (e.g. value is incompatible with type) to a function:\n // - argument: The argument name that was invalid\n // - value: The value of the argument\n ErrorCode[\"INVALID_ARGUMENT\"] = \"INVALID_ARGUMENT\";\n // Missing argument to a function:\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n ErrorCode[\"MISSING_ARGUMENT\"] = \"MISSING_ARGUMENT\";\n // Too many arguments\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n ErrorCode[\"UNEXPECTED_ARGUMENT\"] = \"UNEXPECTED_ARGUMENT\";\n ///////////////////\n // Blockchain Errors\n // Call exception\n // - transaction: the transaction\n // - address?: the contract address\n // - args?: The arguments passed into the function\n // - method?: The Solidity method signature\n // - errorSignature?: The EIP848 error signature\n // - errorArgs?: The EIP848 error parameters\n // - reason: The reason (only for EIP848 \"Error(string)\")\n ErrorCode[\"CALL_EXCEPTION\"] = \"CALL_EXCEPTION\";\n // Insufficient funds (< value + gasLimit * gasPrice)\n // - transaction: the transaction attempted\n ErrorCode[\"INSUFFICIENT_FUNDS\"] = \"INSUFFICIENT_FUNDS\";\n // Nonce has already been used\n // - transaction: the transaction attempted\n ErrorCode[\"NONCE_EXPIRED\"] = \"NONCE_EXPIRED\";\n // The replacement fee for the transaction is too low\n // - transaction: the transaction attempted\n ErrorCode[\"REPLACEMENT_UNDERPRICED\"] = \"REPLACEMENT_UNDERPRICED\";\n // The gas limit could not be estimated\n // - transaction: the transaction passed to estimateGas\n ErrorCode[\"UNPREDICTABLE_GAS_LIMIT\"] = \"UNPREDICTABLE_GAS_LIMIT\";\n // The transaction was replaced by one with a higher gas price\n // - reason: \"cancelled\", \"replaced\" or \"repriced\"\n // - cancelled: true if reason == \"cancelled\" or reason == \"replaced\")\n // - hash: original transaction hash\n // - replacement: the full TransactionsResponse for the replacement\n // - receipt: the receipt of the replacement\n ErrorCode[\"TRANSACTION_REPLACED\"] = \"TRANSACTION_REPLACED\";\n ///////////////////\n // Interaction Errors\n // The user rejected the action, such as signing a message or sending\n // a transaction\n ErrorCode[\"ACTION_REJECTED\"] = \"ACTION_REJECTED\";\n})(ErrorCode || (ErrorCode = {}));\n;\nconst HEX = \"0123456789abcdef\";\nexport class Logger {\n constructor(version) {\n Object.defineProperty(this, \"version\", {\n enumerable: true,\n value: version,\n writable: false\n });\n }\n _log(logLevel, args) {\n const level = logLevel.toLowerCase();\n if (LogLevels[level] == null) {\n this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n }\n if (_logLevel > LogLevels[level]) {\n return;\n }\n console.log.apply(console, args);\n }\n debug(...args) {\n this._log(Logger.levels.DEBUG, args);\n }\n info(...args) {\n this._log(Logger.levels.INFO, args);\n }\n warn(...args) {\n this._log(Logger.levels.WARNING, args);\n }\n makeError(message, code, params) {\n // Errors are being censored\n if (_censorErrors) {\n return this.makeError(\"censored error\", code, {});\n }\n if (!code) {\n code = Logger.errors.UNKNOWN_ERROR;\n }\n if (!params) {\n params = {};\n }\n const messageDetails = [];\n Object.keys(params).forEach((key) => {\n const value = params[key];\n try {\n if (value instanceof Uint8Array) {\n let hex = \"\";\n for (let i = 0; i < value.length; i++) {\n hex += HEX[value[i] >> 4];\n hex += HEX[value[i] & 0x0f];\n }\n messageDetails.push(key + \"=Uint8Array(0x\" + hex + \")\");\n }\n else {\n messageDetails.push(key + \"=\" + JSON.stringify(value));\n }\n }\n catch (error) {\n messageDetails.push(key + \"=\" + JSON.stringify(params[key].toString()));\n }\n });\n messageDetails.push(`code=${code}`);\n messageDetails.push(`version=${this.version}`);\n const reason = message;\n let url = \"\";\n switch (code) {\n case ErrorCode.NUMERIC_FAULT: {\n url = \"NUMERIC_FAULT\";\n const fault = message;\n switch (fault) {\n case \"overflow\":\n case \"underflow\":\n case \"division-by-zero\":\n url += \"-\" + fault;\n break;\n case \"negative-power\":\n case \"negative-width\":\n url += \"-unsupported\";\n break;\n case \"unbound-bitwise-result\":\n url += \"-unbound-result\";\n break;\n }\n break;\n }\n case ErrorCode.CALL_EXCEPTION:\n case ErrorCode.INSUFFICIENT_FUNDS:\n case ErrorCode.MISSING_NEW:\n case ErrorCode.NONCE_EXPIRED:\n case ErrorCode.REPLACEMENT_UNDERPRICED:\n case ErrorCode.TRANSACTION_REPLACED:\n case ErrorCode.UNPREDICTABLE_GAS_LIMIT:\n url = code;\n break;\n }\n if (url) {\n message += \" [ See: https:/\\/links.ethers.org/v5-errors-\" + url + \" ]\";\n }\n if (messageDetails.length) {\n message += \" (\" + messageDetails.join(\", \") + \")\";\n }\n // @TODO: Any??\n const error = new Error(message);\n error.reason = reason;\n error.code = code;\n Object.keys(params).forEach(function (key) {\n error[key] = params[key];\n });\n return error;\n }\n throwError(message, code, params) {\n throw this.makeError(message, code, params);\n }\n throwArgumentError(message, name, value) {\n return this.throwError(message, Logger.errors.INVALID_ARGUMENT, {\n argument: name,\n value: value\n });\n }\n assert(condition, message, code, params) {\n if (!!condition) {\n return;\n }\n this.throwError(message, code, params);\n }\n assertArgument(condition, message, name, value) {\n if (!!condition) {\n return;\n }\n this.throwArgumentError(message, name, value);\n }\n checkNormalize(message) {\n if (message == null) {\n message = \"platform missing String.prototype.normalize\";\n }\n if (_normalizeError) {\n this.throwError(\"platform missing String.prototype.normalize\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"String.prototype.normalize\", form: _normalizeError\n });\n }\n }\n checkSafeUint53(value, message) {\n if (typeof (value) !== \"number\") {\n return;\n }\n if (message == null) {\n message = \"value not safe\";\n }\n if (value < 0 || value >= 0x1fffffffffffff) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"out-of-safe-range\",\n value: value\n });\n }\n if (value % 1) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"non-integer\",\n value: value\n });\n }\n }\n checkArgumentCount(count, expectedCount, message) {\n if (message) {\n message = \": \" + message;\n }\n else {\n message = \"\";\n }\n if (count < expectedCount) {\n this.throwError(\"missing argument\" + message, Logger.errors.MISSING_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n if (count > expectedCount) {\n this.throwError(\"too many arguments\" + message, Logger.errors.UNEXPECTED_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n }\n checkNew(target, kind) {\n if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n checkAbstract(target, kind) {\n if (target === kind) {\n this.throwError(\"cannot instantiate abstract class \" + JSON.stringify(kind.name) + \" directly; use a sub-class\", Logger.errors.UNSUPPORTED_OPERATION, { name: target.name, operation: \"new\" });\n }\n else if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n static globalLogger() {\n if (!_globalLogger) {\n _globalLogger = new Logger(version);\n }\n return _globalLogger;\n }\n static setCensorship(censorship, permanent) {\n if (!censorship && permanent) {\n this.globalLogger().throwError(\"cannot permanently disable censorship\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n if (_permanentCensorErrors) {\n if (!censorship) {\n return;\n }\n this.globalLogger().throwError(\"error censorship permanent\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n _censorErrors = !!censorship;\n _permanentCensorErrors = !!permanent;\n }\n static setLogLevel(logLevel) {\n const level = LogLevels[logLevel.toLowerCase()];\n if (level == null) {\n Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n return;\n }\n _logLevel = level;\n }\n static from(version) {\n return new Logger(version);\n }\n}\nLogger.errors = ErrorCode;\nLogger.levels = LogLevel;\n//# sourceMappingURL=index.js.map","export const version = \"logger/5.7.0\";\n//# sourceMappingURL=_version.js.map","export const version = \"units/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { formatFixed, parseFixed } from \"@ethersproject/bignumber\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nconst names = [\n \"wei\",\n \"kwei\",\n \"mwei\",\n \"gwei\",\n \"szabo\",\n \"finney\",\n \"ether\",\n];\n// Some environments have issues with RegEx that contain back-tracking, so we cannot\n// use them.\nexport function commify(value) {\n const comps = String(value).split(\".\");\n if (comps.length > 2 || !comps[0].match(/^-?[0-9]*$/) || (comps[1] && !comps[1].match(/^[0-9]*$/)) || value === \".\" || value === \"-.\") {\n logger.throwArgumentError(\"invalid value\", \"value\", value);\n }\n // Make sure we have at least one whole digit (0 if none)\n let whole = comps[0];\n let negative = \"\";\n if (whole.substring(0, 1) === \"-\") {\n negative = \"-\";\n whole = whole.substring(1);\n }\n // Make sure we have at least 1 whole digit with no leading zeros\n while (whole.substring(0, 1) === \"0\") {\n whole = whole.substring(1);\n }\n if (whole === \"\") {\n whole = \"0\";\n }\n let suffix = \"\";\n if (comps.length === 2) {\n suffix = \".\" + (comps[1] || \"0\");\n }\n while (suffix.length > 2 && suffix[suffix.length - 1] === \"0\") {\n suffix = suffix.substring(0, suffix.length - 1);\n }\n const formatted = [];\n while (whole.length) {\n if (whole.length <= 3) {\n formatted.unshift(whole);\n break;\n }\n else {\n const index = whole.length - 3;\n formatted.unshift(whole.substring(index));\n whole = whole.substring(0, index);\n }\n }\n return negative + formatted.join(\",\") + suffix;\n}\nexport function formatUnits(value, unitName) {\n if (typeof (unitName) === \"string\") {\n const index = names.indexOf(unitName);\n if (index !== -1) {\n unitName = 3 * index;\n }\n }\n return formatFixed(value, (unitName != null) ? unitName : 18);\n}\nexport function parseUnits(value, unitName) {\n if (typeof (value) !== \"string\") {\n logger.throwArgumentError(\"value must be a string\", \"value\", value);\n }\n if (typeof (unitName) === \"string\") {\n const index = names.indexOf(unitName);\n if (index !== -1) {\n unitName = 3 * index;\n }\n }\n return parseFixed(value, (unitName != null) ? unitName : 18);\n}\nexport function formatEther(wei) {\n return formatUnits(wei, 18);\n}\nexport function parseEther(ether) {\n return parseUnits(ether, 18);\n}\n//# sourceMappingURL=index.js.map","import { Interface } from '@ethersproject/abi';\nimport { formatUnits } from '@ethersproject/units';\nimport { Multicall } from '@/contracts';\nimport { Network } from '@/types';\n\nexport const yieldTokens = {\n [Network.MAINNET]: {\n waUSDT: '0xf8fd466f12e236f4c96f7cce6c79eadb819abf58',\n waUSDC: '0xd093fa4fb80d09bb30817fdcd442d4d02ed3e5de',\n waDAI: '0x02d60b84491589974263d922d9cc7a3152618ef6',\n },\n [Network.POLYGON]: {\n wamDAI: '0xee029120c72b0607344f35b17cdd90025e647b00',\n wamUSDC: '0x221836a597948dce8f3568e044ff123108acc42a',\n wamUSDT: '0x19c60a251e525fa88cd6f3768416a8024e98fc19',\n },\n};\n\nexport const wrappedTokensMap = {\n [Network.MAINNET]: {\n // USDT\n [yieldTokens[Network.MAINNET].waUSDT]: {\n aToken: '0x3ed3b47dd13ec9a98b44e6204a523e766b225811',\n underlying: '0xdac17f958d2ee523a2206206994597c13d831ec7',\n },\n // USDC\n [yieldTokens[Network.MAINNET].waUSDC]: {\n aToken: '0xbcca60bb61934080951369a648fb03df4f96263c',\n underlying: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n },\n // DAI\n [yieldTokens[Network.MAINNET].waDAI]: {\n aToken: '0x028171bca77440897b824ca71d1c56cac55b68a3',\n underlying: '0x6b175474e89094c44da98b954eedeac495271d0f',\n },\n },\n [Network.POLYGON]: {\n // USDT\n [yieldTokens[Network.POLYGON].wamUSDT]: {\n aToken: '0x60d55f02a771d515e077c9c2403a1ef324885cec',\n underlying: '0xc2132d05d31c914a87c6611c10748aeb04b58e8f',\n },\n // USDC\n [yieldTokens[Network.POLYGON].wamUSDC]: {\n aToken: '0x1a13f4ca1d028320a707d99520abfefca3998b7f',\n underlying: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174',\n },\n // DAI\n [yieldTokens[Network.POLYGON].wamDAI]: {\n aToken: '0x27f8d03b3a2196956ed754badc28d73be8830a6e',\n underlying: '0x8f3cf7ad23cd3cadbd9735aff958023239c6a063',\n },\n },\n};\n\nconst wrappedATokenInterface = new Interface([\n 'function rate() view returns (uint256)',\n]);\n\nexport interface IAaveRates {\n getRate: (address: string) => Promise;\n}\n\nexport class AaveRates implements IAaveRates {\n rates?: Promise<{ [wrappedATokenAddress: string]: number }>;\n\n constructor(private multicall: Multicall, private network: Network) {}\n\n private async fetch(\n network: Network.MAINNET | Network.POLYGON\n ): Promise<{ [wrappedATokenAddress: string]: number }> {\n console.time('Fetching aave rates');\n const addresses = Object.values(yieldTokens[network]);\n const payload = addresses.map((wrappedATokenAddress) => ({\n target: wrappedATokenAddress,\n callData: wrappedATokenInterface.encodeFunctionData('rate', []),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const rates = addresses.reduce((p: { [key: string]: number }, a, i) => {\n p[a] ||= res[i] == '0x' ? 0 : parseFloat(formatUnits(res[i], 27));\n return p;\n }, {});\n console.timeEnd('Fetching aave rates');\n\n return rates;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async getRate(wrappedAToken: string): Promise {\n //To prevent bricked linear pools from effecting this call\n /*if (this.network != Network.MAINNET && this.network != Network.POLYGON) {\n return 1;\n }\n if (!Object.values(yieldTokens[this.network]).includes(wrappedAToken)) {\n return 1;\n }\n if (!this.rates) {\n this.rates = this.fetch(this.network);\n }\n\n return (await this.rates)[wrappedAToken];*/\n\n return 1;\n }\n}\n","import { Token, TokenPrices, Network } from '@/types';\nimport { TOKENS } from '@/lib/constants/tokens';\nimport { wrappedTokensMap as aaveWrappedMap } from '@/modules/data/token-prices/aave-rates';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\n\nexport function tokensToTokenPrices(tokens: Token[]): TokenPrices {\n const tokenPrices: TokenPrices = {};\n tokens.forEach((token) => {\n if (token.price) {\n tokenPrices[token.address] = token.price;\n }\n });\n\n return tokenPrices;\n}\n\nexport function tokenAddressForPricing(\n address: string,\n chainId: Network\n): string {\n let a = address.toLowerCase();\n a = addressMapIn(a, chainId);\n a = unwrapToken(a, chainId);\n\n return a;\n}\n\n/**\n * Maps testnet tokens, eg: on Göreli to a mainnet one.\n * Used to get the pricing information on networks not supported by a price feed.\n *\n * @param address Address on a testnet network\n */\nexport const addressMapIn = (address: string, chainId: Network): string => {\n const addressMap = TOKENS(chainId).PriceChainMap;\n return (addressMap && addressMap[address.toLowerCase()]) || address;\n};\n\n/**\n * Finds an underlying token address for a wrapped one\n *\n * @param wrappedAddress\n * @param chainId\n * @returns underlying token address\n */\nexport const unwrapToken = (\n wrappedAddress: string,\n chainId: Network\n): string => {\n const lowercase = wrappedAddress.toLocaleLowerCase();\n\n const aaveChain = chainId as keyof typeof aaveWrappedMap;\n if (\n aaveWrappedMap[aaveChain] != undefined &&\n aaveWrappedMap[aaveChain] != null\n ) {\n // Double if to avoid skipping just to at after compile: Object.keys()?.includes\n if (Object.keys(aaveWrappedMap[aaveChain]).includes(lowercase)) {\n return aaveWrappedMap[aaveChain][\n lowercase as keyof (typeof aaveWrappedMap)[typeof aaveChain]\n ].aToken;\n } else {\n return lowercase;\n }\n } else {\n return lowercase;\n }\n};\n\n// filter native asset (e.g. ETH) amounts\nexport const getEthValue = (tokens: string[], amounts: string[]): BigNumber => {\n const values = amounts.filter((amount, i) => tokens[i] === AddressZero);\n return values[0] ? BigNumber.from(values[0]) : BigNumber.from(0);\n};\n","/* eslint-disable @typescript-eslint/no-empty-function */\n\n/**\n * Debouncer for different attributes requested over time, which need to be aggregated into a single resolving call\n *\n * Choosing deferred promise since we have setTimeout that returns a promise\n * Some reference for history buffs: https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns\n */\n\ninterface Promised {\n promise: Promise;\n resolve: (value: T) => void;\n reject: (reason: unknown) => void;\n}\n\nconst makePromise = (): Promised => {\n let resolve: (value: T) => void = () => {};\n let reject: (reason: unknown) => void = () => {};\n const promise = new Promise((res, rej) => {\n [resolve, reject] = [res, rej];\n });\n return { promise, reject, resolve };\n};\n\n/**\n * Aggregates attributes and exectutes a debounced call\n *\n * @param fn Function to debounce\n * @param wait Debouncing waiting time [ms]\n * @param limit Maximum number of attributes to execute in one promise\n * @returns Debouncer instance\n */\nexport class Debouncer {\n requestSets = []>[]; // new Set(); // collection of requested attributes\n promisedCalls: Promised[] = []; // When requesting a price we return a deferred promise\n promisedCount = 0; // New request coming when setTimeout is executing will make a new promise\n timeout?: ReturnType;\n debounceCancel = (): void => {}; // Allow to cancel mid-flight requests\n\n constructor(\n private fn: (attrs: A[]) => Promise,\n private wait = 200,\n private limit = 100\n ) {}\n\n fetch(attr?: A): Promise {\n this.requestSets[this.promisedCount] ||= new Set();\n\n // Accumulate attributes for debounced execution\n if (attr) {\n this.requestSets[this.promisedCount].add(attr);\n }\n\n // Execute immediately when limit is reached\n if (this.requestSets[this.promisedCount].size >= this.limit) {\n return this.execute(0);\n }\n\n // Return a running promise\n if (this.promisedCalls[this.promisedCount]) {\n return this.promisedCalls[this.promisedCount].promise;\n }\n\n // If no promise is running, start a new one\n return this.execute(this.wait);\n }\n\n execute(timeout = 0): Promise {\n // if no promise is running, start a new one\n if (!this.promisedCalls[this.promisedCount]) {\n this.promisedCalls[this.promisedCount] = makePromise();\n }\n\n const { promise, resolve, reject } = this.promisedCalls[this.promisedCount];\n\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n\n const call = () => {\n const requestAttrs = [...this.requestSets[this.promisedCount]];\n this.promisedCount++;\n this.fn(requestAttrs)\n .then((results) => {\n resolve(results);\n this.debounceCancel = () => {};\n })\n .catch((reason) => {\n if (\n reason.response &&\n reason.response.data &&\n reason.response.data.error\n ) {\n reason = reason.response.data.error;\n }\n reject(reason);\n });\n };\n\n if (timeout > 0) {\n this.timeout = setTimeout(call.bind(this), timeout);\n } else {\n call();\n }\n\n this.debounceCancel = () => {\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n reject('Cancelled');\n delete this.promisedCalls[this.promisedCount];\n };\n\n return promise;\n }\n}\n","import {\n BigNumber,\n BigNumberish,\n parseFixed as _parseFixed,\n formatFixed as _formatFixed,\n} from '@ethersproject/bignumber';\n\n/**\n * Scales a number up by 10 ^ decimals. Also ensures the returned value is an\n * integer, any additional decimals post scaling are removed.\n * @param value The value to be scaled up\n * @param decimals The total decimal places / order of magnitude to scale by\n * @returns The scaled value\n */\nexport function parseFixed(value: string, decimals?: BigNumberish): BigNumber {\n const valueWithTrimmedDecimals = new RegExp(`[0-9]+\\\\.?[0-9]{0,${decimals}}`);\n const result = value.match(valueWithTrimmedDecimals);\n let parsedValue = value;\n if (result) {\n parsedValue = result[0];\n }\n\n return _parseFixed(parsedValue, decimals);\n}\n\n/**\n * Scales a number down by 10 ^ decimals. Also ensures the returned value doesn't\n * have a .0 at the end, so integers are returned as integers.\n * @param value The value to be scaled down\n * @param decimals The total decimal places / order of magnitude to scale down by\n * @returns The scaled value\n */\nexport function formatFixed(\n value: BigNumberish,\n decimals: BigNumberish\n): string {\n const ethersFormat = _formatFixed(value, decimals);\n return ethersFormat.replace(/(.0$)/, '');\n}\n\nexport function parseToBigInt18(value: string): bigint {\n return parseFixed(value, 18).toBigInt();\n}\n\nexport function formatFromBigInt18(value: bigint): string {\n return _formatFixed(BigNumber.from(value), 18);\n}\n\n/**\n * Like parseEther but for numbers. Converts floating point to BigNumber using 18 decimals\n */\nexport const bn = (value: number): BigNumber => _parseFixed(`${value}`, 18);\n","import { BigNumber } from '@ethersproject/bignumber';\n\nconst bpsPerOne = BigNumber.from('10000'); // number of basis points in 100%\n\n/**\n * Multiplies input by slippage amount\n *\n * @param amount Input amount (not parsed)\n * @param slippage Slippage value in bps - i.e. 50 = 0.5%\n * @returns Result delta from multiplying amount and slippage\n */\nexport const mulSlippage = (\n amount: BigNumber,\n slippage: BigNumber\n): BigNumber => {\n const delta = amount.mul(slippage).div(bpsPerOne);\n return delta;\n};\n\n/**\n * Reduce input amount by slippage factor\n *\n * @param amount Input in EVM amounts\n * @param slippage Slippage value in bps - i.e. 50 = 0.5%\n * @returns Result amount subtracting slippage\n */\nexport const subSlippage = (\n amount: BigNumber,\n slippage: BigNumber\n): BigNumber => {\n const delta = mulSlippage(amount, slippage);\n return amount.sub(delta);\n};\n\n/**\n * Increase input amount by slippage factor\n *\n * @param amount Input in EVM amounts\n * @param slippage Slippage value in bps - i.e. 50 = 0.5%\n * @returns Result amount adding slippage\n */\nexport const addSlippage = (\n amount: BigNumber,\n slippage: BigNumber\n): BigNumber => {\n const delta = mulSlippage(amount, slippage);\n return amount.add(delta);\n};\n","import { Address, PoolType } from '@/types';\nimport { getAddress } from '@ethersproject/address';\nimport { Log, TransactionReceipt } from '@ethersproject/providers';\nimport { Interface, LogDescription } from '@ethersproject/abi';\nimport { Logger } from '@/lib/utils/logger';\n\nexport * from './assetHelpers';\nexport * from './errors';\nexport * from './permit';\nexport * from './poolHelper';\nexport * from './signatures';\nexport * from './tokens';\nexport * from './debouncer';\nexport * from './math';\nexport * from './slippageHelper';\n\nexport const isSameAddress = (address1: string, address2: string): boolean =>\n getAddress(address1) === getAddress(address2);\n\nexport function insert(arr: T[], index: number, newItem: T): T[] {\n if (index < 0 || index > arr.length) {\n return arr;\n }\n return [\n // part of the array before the specified index\n ...arr.slice(0, index),\n // inserted item\n newItem,\n // part of the array after the specified index\n ...arr.slice(index),\n ];\n}\n\n/**\n * Returns a new array with item on the specified index replaced by newItem\n * @param arr\n * @param index\n * @param newItem\n */\nexport function replace(arr: T[], index: number, newItem: T): T[] {\n if (index < 0 || index >= arr.length) {\n return arr;\n }\n return [\n // part of the array before the specified index\n ...arr.slice(0, index),\n // inserted item\n newItem,\n // part of the array after the specified index\n ...arr.slice(index + 1),\n ];\n}\n\n/**\n * Removes item from array at specified index and returns new array. (Does not mutate original)\n * @param arr Original array\n * @param index Index of item to be removed\n * @returns New array with item at index removed\n */\nexport function removeItem(arr: T[], index: number): T[] {\n const newArray = [...arr];\n if (index < 0 || index >= arr.length) {\n return newArray;\n }\n newArray.splice(index, 1);\n return newArray;\n}\n\n/**\n * REORDER ARRAYS USING A REFERENCE AND ORIGINAL ARRAY,\n * Example:\n * Input -> reference: [c,b,a], original: [a,b,c], others: [[1,2,3], [4,5,6]]\n * Sorts like -> [[c,b,a],[3,2,1],[6,5,4]]\n * Returns -> [6,5,4]\n * @param reference\n * @param original\n * @param others\n * @returns Sorted others\n */\nexport function reorderArrays(\n reference: T[],\n original: T[],\n ...others: unknown[][]\n): unknown[][] {\n if (\n reference.length !== original.length ||\n others.some((arr) => arr.length !== original.length)\n ) {\n throw new Error('Array length mismatch');\n }\n const indexesOfOriginal = reference.map((value) => original.indexOf(value));\n if (indexesOfOriginal.indexOf(-1) >= 0) {\n throw new Error('Invalid reference or original array');\n }\n const othersResorted: unknown[][] = [];\n indexesOfOriginal.forEach((indexOfOriginal, i) => {\n others.forEach((arr, arrIndex) => {\n if (!othersResorted[arrIndex]) {\n othersResorted[arrIndex] = [];\n }\n othersResorted[arrIndex][i] = arr[indexOfOriginal];\n });\n });\n return othersResorted;\n}\n\nexport function isLinearish(poolType: string): boolean {\n const supportedPoolTypes: string[] = Object.values(PoolType);\n if (poolType.includes('Linear') && supportedPoolTypes.includes(poolType))\n return true;\n else return false;\n}\n\nexport function truncateAddresses(addresses: string[]): string[] {\n return addresses.map((t) => `${t.slice(0, 6)}...${t.slice(38, 42)}`);\n}\n\nexport const findEventInReceiptLogs = ({\n receipt,\n to,\n contractInterface,\n logName,\n}: {\n receipt: TransactionReceipt;\n to: Address;\n contractInterface: Interface;\n logName: string;\n}): LogDescription => {\n const event = receipt.logs\n .filter((log: Log) => {\n return isSameAddress(log.address, to);\n })\n .map((log) => {\n try {\n return contractInterface.parseLog(log);\n } catch (error) {\n const logger = Logger.getInstance();\n logger.warn(error as string);\n return null;\n }\n })\n .find((parsedLog) => parsedLog?.name === logName);\n if (!event) {\n throw new Error('Event not found in logs');\n }\n return event;\n};\n\nexport const getRandomBytes32 = (): string => {\n const getRandomBytes8 = () => Math.random().toString(16).slice(2, 10);\n const randomBytes32 = Array(8).fill(null).map(getRandomBytes8).join('');\n return `0x${randomBytes32}`;\n};\n","import { GraphQLArgs, GraphQLArgsFormatter } from '../types';\n\nexport class BalancerAPIArgsFormatter implements GraphQLArgsFormatter {\n format(args: GraphQLArgs): GraphQLArgs {\n return args;\n }\n}\n","import { GraphQLArgs, GraphQLArgsFormatter, GraphQLFilter } from '../types';\n\nexport class SubgraphArgsFormatter implements GraphQLArgsFormatter {\n operatorMap: Record;\n\n constructor() {\n this.operatorMap = {\n gt: '_gt',\n lt: '_lt',\n eq: '',\n in: '_in',\n not_in: '_not_in',\n contains: '_contains',\n };\n }\n\n format(args: GraphQLArgs): GraphQLArgs {\n const whereQuery: Record = {};\n if (args.where) {\n Object.entries(args.where).forEach(([name, filter]) => {\n Object.entries(filter).forEach(([operator, value]) => {\n whereQuery[`${name}${this.operatorMap[operator]}`] = value;\n });\n });\n }\n\n return {\n ...args,\n ...{ where: whereQuery },\n };\n }\n}\n","import { mergeWith } from 'lodash';\nimport { GraphQLArgs, GraphQLArgsFormatter } from './types';\n\nexport * from './formatters';\n\nexport class GraphQLArgsBuilder {\n constructor(readonly args: GraphQLArgs) {}\n\n merge(other: GraphQLArgsBuilder): GraphQLArgsBuilder {\n const mergedArgs = mergeWith(\n this.args,\n other.args,\n (objValue: unknown, srcValue: unknown) => {\n if (Array.isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n );\n\n return new GraphQLArgsBuilder(mergedArgs);\n }\n\n format(formatter: GraphQLArgsFormatter): unknown {\n return formatter.format(this.args);\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n AaveLinearPool,\n AaveLinearPoolInterface,\n} from \"../AaveLinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct AaveLinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class AaveLinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): AaveLinearPoolInterface {\n return new utils.Interface(_abi) as AaveLinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): AaveLinearPool {\n return new Contract(address, _abi, signerOrProvider) as AaveLinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n AaveLinearPoolFactory,\n AaveLinearPoolFactoryInterface,\n} from \"../AaveLinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"AaveLinearPoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract AaveLinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class AaveLinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): AaveLinearPoolFactoryInterface {\n return new utils.Interface(_abi) as AaveLinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): AaveLinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as AaveLinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { AaveWrapping, AaveWrappingInterface } from \"../AaveWrapping\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approveVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStaticATokenLM\",\n name: \"staticToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"toUnderlying\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapAaveStaticToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStaticATokenLM\",\n name: \"staticToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"fromUnderlying\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapAaveDynamicToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n] as const;\n\nexport class AaveWrapping__factory {\n static readonly abi = _abi;\n static createInterface(): AaveWrappingInterface {\n return new utils.Interface(_abi) as AaveWrappingInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): AaveWrapping {\n return new Contract(address, _abi, signerOrProvider) as AaveWrapping;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { Authoriser, AuthoriserInterface } from \"../Authoriser\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"admin\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"previousAdminRole\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"newAdminRole\",\n type: \"bytes32\",\n },\n ],\n name: \"RoleAdminChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"RoleGranted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"RoleRevoked\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DEFAULT_ADMIN_ROLE\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"actionId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"canPerform\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n ],\n name: \"getRoleAdmin\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n ],\n name: \"getRoleMember\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n ],\n name: \"getRoleMemberCount\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"grantRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"roles\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"grantRoles\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"roles\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"address[]\",\n name: \"accounts\",\n type: \"address[]\",\n },\n ],\n name: \"grantRolesToMany\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"hasRole\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"renounceRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"role\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"revokeRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"roles\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"revokeRoles\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"roles\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"address[]\",\n name: \"accounts\",\n type: \"address[]\",\n },\n ],\n name: \"revokeRolesFromMany\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class Authoriser__factory {\n static readonly abi = _abi;\n static createInterface(): AuthoriserInterface {\n return new utils.Interface(_abi) as AuthoriserInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): Authoriser {\n return new Contract(address, _abi, signerOrProvider) as Authoriser;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BalancerHelpers,\n BalancerHelpersInterface,\n} from \"../BalancerHelpers\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"_vault\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"minAmountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.ExitPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"maxAmountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.JoinPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"vault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class BalancerHelpers__factory {\n static readonly abi = _abi;\n static createInterface(): BalancerHelpersInterface {\n return new utils.Interface(_abi) as BalancerHelpersInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BalancerHelpers {\n return new Contract(address, _abi, signerOrProvider) as BalancerHelpers;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BalancerMinter,\n BalancerMinterInterface,\n} from \"../BalancerMinter\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IBalancerTokenAdmin\",\n name: \"tokenAdmin\",\n type: \"address\",\n },\n {\n internalType: \"contract IGaugeController\",\n name: \"gaugeController\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minted\",\n type: \"uint256\",\n },\n ],\n name: \"Minted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approval\",\n type: \"bool\",\n },\n ],\n name: \"MinterApprovalSet\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"allowed_to_mint_for\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBalancerToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBalancerTokenAdmin\",\n outputs: [\n {\n internalType: \"contract IBalancerTokenAdmin\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getGaugeController\",\n outputs: [\n {\n internalType: \"contract IGaugeController\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"getMinterApproval\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n ],\n name: \"mint\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"mintFor\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n ],\n name: \"mintMany\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"mintManyFor\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"mint_for\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[8]\",\n name: \"gauges\",\n type: \"address[8]\",\n },\n ],\n name: \"mint_many\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"gauge\",\n type: \"address\",\n },\n ],\n name: \"minted\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approval\",\n type: \"bool\",\n },\n ],\n name: \"setMinterApproval\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approval\",\n type: \"bool\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"setMinterApprovalWithSignature\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n ],\n name: \"toggle_approve_mint\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class BalancerMinter__factory {\n static readonly abi = _abi;\n static createInterface(): BalancerMinterInterface {\n return new utils.Interface(_abi) as BalancerMinterInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BalancerMinter {\n return new Contract(address, _abi, signerOrProvider) as BalancerMinter;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BalancerPoolDataQueries,\n BalancerPoolDataQueriesInterface,\n} from \"../BalancerPoolDataQueries\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"_vault\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getAmpForPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getInRecoveryModeForPools\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"\",\n type: \"bool[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getIsPausedForPools\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"\",\n type: \"bool[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getLinearTargetsForPools\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"\",\n type: \"uint256[][]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getNormalizedWeightsForPools\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"\",\n type: \"uint256[][]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"poolIds\",\n type: \"bytes32[]\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"loadTokenBalanceUpdatesAfterBlock\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadTotalSupply\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadSwapFees\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadLinearWrappedTokenRates\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadLinearTargets\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadNormalizedWeights\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadScalingFactors\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadAmps\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadRates\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"enum TotalSupplyType[]\",\n name: \"totalSupplyTypes\",\n type: \"uint8[]\",\n },\n {\n internalType: \"enum SwapFeeType[]\",\n name: \"swapFeeTypes\",\n type: \"uint8[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"linearPoolIdxs\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"weightedPoolIdxs\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"scalingFactorPoolIdxs\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ampPoolIdxs\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ratePoolIdxs\",\n type: \"uint256[]\",\n },\n ],\n internalType: \"struct PoolDataQueryConfig\",\n name: \"config\",\n type: \"tuple\",\n },\n ],\n name: \"getPoolData\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"balances\",\n type: \"uint256[][]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"totalSupplies\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"swapFees\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"linearWrappedTokenRates\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[][]\",\n name: \"linearTargets\",\n type: \"uint256[][]\",\n },\n {\n internalType: \"uint256[][]\",\n name: \"weights\",\n type: \"uint256[][]\",\n },\n {\n internalType: \"uint256[][]\",\n name: \"scalingFactors\",\n type: \"uint256[][]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amps\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"rates\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ignoreIdxs\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"poolIds\",\n type: \"bytes32[]\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"loadInRecoveryMode\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"loadIsPaused\",\n type: \"bool\",\n },\n ],\n internalType: \"struct PoolStatusQueryConfig\",\n name: \"config\",\n type: \"tuple\",\n },\n ],\n name: \"getPoolStatus\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"isPaused\",\n type: \"bool[]\",\n },\n {\n internalType: \"bool[]\",\n name: \"inRecoveryMode\",\n type: \"bool[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32[]\",\n name: \"poolIds\",\n type: \"bytes32[]\",\n },\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n ],\n name: \"getPoolTokenBalancesWithUpdatesAfterBlock\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"\",\n type: \"uint256[][]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getRateForPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getScalingFactorsForPools\",\n outputs: [\n {\n internalType: \"uint256[][]\",\n name: \"\",\n type: \"uint256[][]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n {\n internalType: \"enum SwapFeeType[]\",\n name: \"swapFeeTypes\",\n type: \"uint8[]\",\n },\n ],\n name: \"getSwapFeePercentageForPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n {\n internalType: \"enum TotalSupplyType[]\",\n name: \"totalSupplyTypes\",\n type: \"uint8[]\",\n },\n ],\n name: \"getTotalSupplyForPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"poolAddresses\",\n type: \"address[]\",\n },\n ],\n name: \"getWrappedTokenRateForLinearPools\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"vault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class BalancerPoolDataQueries__factory {\n static readonly abi = _abi;\n static createInterface(): BalancerPoolDataQueriesInterface {\n return new utils.Interface(_abi) as BalancerPoolDataQueriesInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BalancerPoolDataQueries {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as BalancerPoolDataQueries;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BalancerRelayer,\n BalancerRelayerInterface,\n} from \"../BalancerRelayer\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"libraryAddress\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [],\n name: \"getLibrary\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes[]\",\n name: \"data\",\n type: \"bytes[]\",\n },\n ],\n name: \"multicall\",\n outputs: [\n {\n internalType: \"bytes[]\",\n name: \"results\",\n type: \"bytes[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n] as const;\n\nexport class BalancerRelayer__factory {\n static readonly abi = _abi;\n static createInterface(): BalancerRelayerInterface {\n return new utils.Interface(_abi) as BalancerRelayerInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BalancerRelayer {\n return new Contract(address, _abi, signerOrProvider) as BalancerRelayer;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n BatchRelayerLibrary,\n BatchRelayerLibraryInterface,\n} from \"../BatchRelayerLibrary\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wstETH\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerMinter\",\n name: \"minter\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approveVault\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"assetInIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"assetOutIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.BatchSwapStep[]\",\n name: \"swaps\",\n type: \"tuple[]\",\n },\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"int256[]\",\n name: \"limits\",\n type: \"int256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"key\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct VaultActions.OutputReference[]\",\n name: \"outputReferences\",\n type: \"tuple[]\",\n },\n ],\n name: \"batchSwap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum VaultActions.PoolKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"minAmountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.ExitPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"key\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct VaultActions.OutputReference[]\",\n name: \"outputReferences\",\n type: \"tuple[]\",\n },\n ],\n name: \"exitPool\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStakingLiquidityGauge[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n ],\n name: \"gaugeClaimRewards\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStakingLiquidityGauge\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"gaugeDeposit\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"gaugeMint\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"approval\",\n type: \"bool\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"gaugeSetMinterApproval\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStakingLiquidityGauge\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"gaugeWithdraw\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getEntrypoint\",\n outputs: [\n {\n internalType: \"contract IBalancerRelayer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum VaultActions.PoolKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"maxAmountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.JoinPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"joinPool\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.UserBalanceOpKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"asset\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct IVault.UserBalanceOp[]\",\n name: \"ops\",\n type: \"tuple[]\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"manageUserBalance\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"ref\",\n type: \"uint256\",\n },\n ],\n name: \"peekChainedReferenceValue\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"relayer\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"authorisation\",\n type: \"bytes\",\n },\n ],\n name: \"setRelayerApproval\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"stakeETH\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"stakeETHAndWrap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.SingleSwap\",\n name: \"singleSwap\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"limit\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"swap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStaticATokenLM\",\n name: \"staticToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"toUnderlying\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapAaveStaticToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract ICToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapCompoundV2\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC4626\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapERC4626\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IEulerToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapEuler\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IGearboxDieselToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"dieselAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapGearbox\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IReaperTokenVault\",\n name: \"vaultToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapReaperVaultToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IShareToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapShareToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract ITetuSmartVault\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapTetu\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IUnbuttonToken\",\n name: \"wrapperToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapUnbuttonToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapWstETH\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IYearnTokenVault\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"unwrapYearn\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20Permit\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"vaultPermit\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20PermitDAI\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"holder\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"expiry\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"allowed\",\n type: \"bool\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"vaultPermitDAI\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IStaticATokenLM\",\n name: \"staticToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"fromUnderlying\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapAaveDynamicToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract ICToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapCompoundV2\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC4626\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapERC4626\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IEulerToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"eulerProtocol\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapEuler\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IGearboxDieselToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"mainAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapGearbox\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IReaperTokenVault\",\n name: \"vaultToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapReaperVaultToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IShareToken\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapShareToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapStETH\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract ITetuSmartVault\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapTetu\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IUnbuttonToken\",\n name: \"wrapperToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"uAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapUnbuttonToken\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IYearnTokenVault\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"outputReference\",\n type: \"uint256\",\n },\n ],\n name: \"wrapYearn\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n] as const;\n\nexport class BatchRelayerLibrary__factory {\n static readonly abi = _abi;\n static createInterface(): BatchRelayerLibraryInterface {\n return new utils.Interface(_abi) as BatchRelayerLibraryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): BatchRelayerLibrary {\n return new Contract(address, _abi, signerOrProvider) as BatchRelayerLibrary;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ComposableStablePool,\n ComposableStablePoolInterface,\n} from \"../ComposableStablePool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"contract IRateProvider[]\",\n name: \"rateProviders\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"tokenRateCacheDurations\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bool[]\",\n name: \"exemptFromYieldProtocolFeeFlags\",\n type: \"bool[]\",\n },\n {\n internalType: \"uint256\",\n name: \"amplificationParameter\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n internalType: \"struct ComposableStablePool.NewPoolParams\",\n name: \"params\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"startValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"endValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n ],\n name: \"AmpUpdateStarted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"currentValue\",\n type: \"uint256\",\n },\n ],\n name: \"AmpUpdateStopped\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"feeType\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"protocolFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"ProtocolFeePercentageCacheUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenIndex\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"rate\",\n type: \"uint256\",\n },\n ],\n name: \"TokenRateCacheUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"tokenIndex\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"contract IRateProvider\",\n name: \"provider\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"cacheDuration\",\n type: \"uint256\",\n },\n ],\n name: \"TokenRateProviderSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getActualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAmplificationParameter\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"isUpdating\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"precision\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastJoinExitData\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lastJoinExitAmplification\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"lastPostJoinExitInvariant\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMinimumBpt\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"feeType\",\n type: \"uint256\",\n },\n ],\n name: \"getProtocolFeePercentageCache\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolSwapFeeDelegation\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRateProviders\",\n outputs: [\n {\n internalType: \"contract IRateProvider[]\",\n name: \"\",\n type: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"getTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"getTokenRateCache\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"rate\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"oldRate\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"expires\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"isTokenExemptFromYieldProtocolFee\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"swapRequest\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"poolConfig\",\n type: \"bytes\",\n },\n ],\n name: \"setAssetManagerPoolConfig\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"duration\",\n type: \"uint256\",\n },\n ],\n name: \"setTokenRateCacheDuration\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"rawEndValue\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n ],\n name: \"startAmplificationParameterUpdate\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"stopAmplificationParameterUpdate\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"updateProtocolFeePercentageCache\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"updateTokenRateCache\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class ComposableStablePool__factory {\n static readonly abi = _abi;\n static createInterface(): ComposableStablePoolInterface {\n return new utils.Interface(_abi) as ComposableStablePoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ComposableStablePool {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as ComposableStablePool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ComposableStablePoolFactory,\n ComposableStablePoolFactoryInterface,\n} from \"../ComposableStablePoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"amplificationParameter\",\n type: \"uint256\",\n },\n {\n internalType: \"contract IRateProvider[]\",\n name: \"rateProviders\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"tokenRateCacheDurations\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bool[]\",\n name: \"exemptFromYieldProtocolFeeFlags\",\n type: \"bool[]\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract ComposableStablePool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class ComposableStablePoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): ComposableStablePoolFactoryInterface {\n return new utils.Interface(_abi) as ComposableStablePoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ComposableStablePoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as ComposableStablePoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ConvergentCurvePool,\n ConvergentCurvePoolInterface,\n} from \"../ConvergentCurvePool\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"_underlying\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"_bond\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_expiration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_unitSeconds\",\n type: \"uint256\",\n },\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_percentFee\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_percentFeeGov\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"_governance\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"collectedBase\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"collectedBond\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"remainingBase\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"remainingBond\",\n type: \"uint256\",\n },\n ],\n name: \"FeeCollection\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"FEE_BOUND\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"bond\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"bondDecimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseApproval\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"expiration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"feesBond\",\n outputs: [\n {\n internalType: \"uint128\",\n name: \"\",\n type: \"uint128\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"feesUnderlying\",\n outputs: [\n {\n internalType: \"uint128\",\n name: \"\",\n type: \"uint128\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"governance\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"increaseApproval\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"currentBalances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFee\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"currentBalances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFee\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"swapRequest\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"currentBalanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"currentBalanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"percentFee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"percentFeeGov\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"amountX\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"reserveX\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"reserveY\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"out\",\n type: \"bool\",\n },\n ],\n name: \"solveTradeInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"underlying\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"underlyingDecimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unitSeconds\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class ConvergentCurvePool__factory {\n static readonly abi = _abi;\n static createInterface(): ConvergentCurvePoolInterface {\n return new utils.Interface(_abi) as ConvergentCurvePoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ConvergentCurvePool {\n return new Contract(address, _abi, signerOrProvider) as ConvergentCurvePool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { ERC20, ERC20Interface } from \"../ERC20\";\n\nconst _abi = [\n {\n constant: true,\n inputs: [],\n name: \"name\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n },\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n name: \"\",\n type: \"uint8\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n name: \"balance\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n {\n name: \"_spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n payable: false,\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n payable: true,\n stateMutability: \"payable\",\n type: \"fallback\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n] as const;\n\nexport class ERC20__factory {\n static readonly abi = _abi;\n static createInterface(): ERC20Interface {\n return new utils.Interface(_abi) as ERC20Interface;\n }\n static connect(address: string, signerOrProvider: Signer | Provider): ERC20 {\n return new Contract(address, _abi, signerOrProvider) as ERC20;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ERC4626LinearPool,\n ERC4626LinearPoolInterface,\n} from \"../ERC4626LinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct ERC4626LinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class ERC4626LinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): ERC4626LinearPoolInterface {\n return new utils.Interface(_abi) as ERC4626LinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ERC4626LinearPool {\n return new Contract(address, _abi, signerOrProvider) as ERC4626LinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n ERC4626LinearPoolFactory,\n ERC4626LinearPoolFactoryInterface,\n} from \"../ERC4626LinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"Erc4626LinearPoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract LinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class ERC4626LinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): ERC4626LinearPoolFactoryInterface {\n return new utils.Interface(_abi) as ERC4626LinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): ERC4626LinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as ERC4626LinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n EulerLinearPool,\n EulerLinearPoolInterface,\n} from \"../EulerLinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct EulerLinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class EulerLinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): EulerLinearPoolInterface {\n return new utils.Interface(_abi) as EulerLinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): EulerLinearPool {\n return new Contract(address, _abi, signerOrProvider) as EulerLinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n EulerLinearPoolFactory,\n EulerLinearPoolFactoryInterface,\n} from \"../EulerLinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"_eulerProtocol\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"EulerLinearPoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract LinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"eulerProtocol\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class EulerLinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): EulerLinearPoolFactoryInterface {\n return new utils.Interface(_abi) as EulerLinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): EulerLinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as EulerLinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { FXPool, FXPoolInterface } from \"../FXPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"_assetsToRegister\",\n type: \"address[]\",\n },\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"_protocolPercentFee\",\n type: \"uint256\",\n },\n {\n internalType: \"string\",\n name: \"_name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"_symbol\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"numeraire\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"reserve\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"weight\",\n type: \"uint256\",\n },\n ],\n name: \"AssetIncluded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"derivative\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"numeraire\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"reserve\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"assimilator\",\n type: \"address\",\n },\n ],\n name: \"AssimilatorIncluded\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newCollector\",\n type: \"address\",\n },\n ],\n name: \"ChangeCollectorAddress\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"isEmergency\",\n type: \"bool\",\n },\n ],\n name: \"EmergencyAlarm\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lptAmountBurned\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"amountsWithdrawn\",\n type: \"uint256[]\",\n },\n ],\n name: \"EmergencyWithdraw\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"feesCollected\",\n type: \"uint256\",\n },\n ],\n name: \"FeesAccrued\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"feesCollected\",\n type: \"uint256\",\n },\n ],\n name: \"FeesCollected\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lptAmountBurned\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"amountsWithdrawn\",\n type: \"uint256[]\",\n },\n ],\n name: \"OnExitPool\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lptAmountMinted\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"amountsDeposited\",\n type: \"uint256[]\",\n },\n ],\n name: \"OnJoinPool\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"alpha\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"beta\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"delta\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"epsilon\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lambda\",\n type: \"uint256\",\n },\n ],\n name: \"ParametersSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Paused\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"updater\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newProtocolPercentage\",\n type: \"uint256\",\n },\n ],\n name: \"ProtocolFeeShareUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"trader\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"origin\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"originAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"targetAmount\",\n type: \"uint256\",\n },\n ],\n name: \"Trade\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"Unpaused\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_derivative\",\n type: \"address\",\n },\n ],\n name: \"assimilator\",\n outputs: [\n {\n internalType: \"address\",\n name: \"assimilator_\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"collectorAddress\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"curve\",\n outputs: [\n {\n internalType: \"int128\",\n name: \"alpha\",\n type: \"int128\",\n },\n {\n internalType: \"int128\",\n name: \"beta\",\n type: \"int128\",\n },\n {\n internalType: \"int128\",\n name: \"delta\",\n type: \"int128\",\n },\n {\n internalType: \"int128\",\n name: \"epsilon\",\n type: \"int128\",\n },\n {\n internalType: \"int128\",\n name: \"lambda\",\n type: \"int128\",\n },\n {\n internalType: \"uint256\",\n name: \"cap\",\n type: \"uint256\",\n },\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"fxPoolAddress\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"derivatives\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"emergency\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"_assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"_assetWeights\",\n type: \"uint256[]\",\n },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"liquidity\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"total_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"individual_\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"numeraires\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"swapRequest\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paused\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"protocolPercentFee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"reserves\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_cap\",\n type: \"uint256\",\n },\n ],\n name: \"setCap\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_collectorAddress\",\n type: \"address\",\n },\n ],\n name: \"setCollectorAddress\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"_emergency\",\n type: \"bool\",\n },\n ],\n name: \"setEmergency\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_alpha\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_beta\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_feeAtHalt\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_epsilon\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"_lambda\",\n type: \"uint256\",\n },\n ],\n name: \"setParams\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_protocolPercentFee\",\n type: \"uint256\",\n },\n ],\n name: \"setProtocolPercentFee\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalUnclaimedFeesInNumeraire\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"totalDepositNumeraire\",\n type: \"uint256\",\n },\n ],\n name: \"viewDeposit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"viewParameters\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"alpha_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"beta_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"delta_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"epsilon_\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"lambda_\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_curvesToBurn\",\n type: \"uint256\",\n },\n ],\n name: \"viewWithdraw\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class FXPool__factory {\n static readonly abi = _abi;\n static createInterface(): FXPoolInterface {\n return new utils.Interface(_abi) as FXPoolInterface;\n }\n static connect(address: string, signerOrProvider: Signer | Provider): FXPool {\n return new Contract(address, _abi, signerOrProvider) as FXPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n GaugeClaimHelper,\n GaugeClaimHelperInterface,\n} from \"../GaugeClaimHelper\";\n\nconst _abi = [\n {\n inputs: [],\n name: \"CLAIM_FREQUENCY\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IRewardsOnlyGauge\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"claimRewardsFromGauge\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IRewardsOnlyGauge[]\",\n name: \"gauges\",\n type: \"address[]\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"claimRewardsFromGauges\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IRewardsOnlyGauge\",\n name: \"gauge\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"getPendingRewards\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class GaugeClaimHelper__factory {\n static readonly abi = _abi;\n static createInterface(): GaugeClaimHelperInterface {\n return new utils.Interface(_abi) as GaugeClaimHelperInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GaugeClaimHelper {\n return new Contract(address, _abi, signerOrProvider) as GaugeClaimHelper;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n GearboxLinearPool,\n GearboxLinearPoolInterface,\n} from \"../GearboxLinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct GearboxLinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class GearboxLinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): GearboxLinearPoolInterface {\n return new utils.Interface(_abi) as GearboxLinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GearboxLinearPool {\n return new Contract(address, _abi, signerOrProvider) as GearboxLinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n GearboxLinearPoolFactory,\n GearboxLinearPoolFactoryInterface,\n} from \"../GearboxLinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"GearboxLinearPoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract GearboxLinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class GearboxLinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): GearboxLinearPoolFactoryInterface {\n return new utils.Interface(_abi) as GearboxLinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GearboxLinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as GearboxLinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { GyroConfig, GyroConfigInterface } from \"../GyroConfig\";\n\nconst _abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"previousValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newValue\",\n type: \"uint256\",\n },\n ],\n name: \"ConfigChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"ConfigFrozen\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"ConfigUnset\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"newGovernor\",\n type: \"address\",\n },\n ],\n name: \"GovernorChangeRequested\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"oldGovernor\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"newGovernor\",\n type: \"address\",\n },\n ],\n name: \"GovernorChanged\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"acceptGovernance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"newGovernor\",\n type: \"address\",\n },\n ],\n name: \"changeGovernor\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"freeze\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"defaultValue\",\n type: \"address\",\n },\n ],\n name: \"getAddress\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"getAddress\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"getConfigMeta\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"getUint\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"governor\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"hasKey\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_governor\",\n type: \"address\",\n },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"listKeys\",\n outputs: [\n {\n internalType: \"bytes32[]\",\n name: \"\",\n type: \"bytes32[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pendingGovernor\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"newValue\",\n type: \"address\",\n },\n ],\n name: \"setAddress\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"newValue\",\n type: \"uint256\",\n },\n ],\n name: \"setUint\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"key\",\n type: \"bytes32\",\n },\n ],\n name: \"unset\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class GyroConfig__factory {\n static readonly abi = _abi;\n static createInterface(): GyroConfigInterface {\n return new utils.Interface(_abi) as GyroConfigInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GyroConfig {\n return new Contract(address, _abi, signerOrProvider) as GyroConfig;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { LidoRelayer, LidoRelayerInterface } from \"../LidoRelayer\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IwstETH\",\n name: \"wstETH\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"assetInIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"assetOutIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.BatchSwapStep[]\",\n name: \"swaps\",\n type: \"tuple[]\",\n },\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"int256[]\",\n name: \"limits\",\n type: \"int256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n ],\n name: \"batchSwap\",\n outputs: [\n {\n internalType: \"int256[]\",\n name: \"swapAmounts\",\n type: \"int256[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"minAmountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.ExitPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"exitPool\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getStETH\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWstETH\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"maxAmountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.JoinPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"joinPool\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.SingleSwap\",\n name: \"singleSwap\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"limit\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n ],\n name: \"swap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"swapAmount\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n] as const;\n\nexport class LidoRelayer__factory {\n static readonly abi = _abi;\n static createInterface(): LidoRelayerInterface {\n return new utils.Interface(_abi) as LidoRelayerInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): LidoRelayer {\n return new Contract(address, _abi, signerOrProvider) as LidoRelayer;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { LinearPool, LinearPoolInterface } from \"../LinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"poolConfig\",\n type: \"bytes\",\n },\n ],\n name: \"setAssetManagerPoolConfig\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class LinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): LinearPoolInterface {\n return new utils.Interface(_abi) as LinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): LinearPool {\n return new Contract(address, _abi, signerOrProvider) as LinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n LiquidityGaugeV5,\n LiquidityGaugeV5Interface,\n} from \"../LiquidityGaugeV5\";\n\nconst _abi = [\n {\n name: \"Deposit\",\n inputs: [\n {\n name: \"provider\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Withdraw\",\n inputs: [\n {\n name: \"provider\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"UpdateLiquidityLimit\",\n inputs: [\n {\n name: \"user\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"original_balance\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"original_supply\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"working_balance\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"working_supply\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Transfer\",\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"_to\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"_value\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Approval\",\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"_spender\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"_value\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n inputs: [\n {\n name: \"minter\",\n type: \"address\",\n },\n {\n name: \"veBoostProxy\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_addr\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_claim_rewards\",\n type: \"bool\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"withdraw\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"withdraw\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_claim_rewards\",\n type: \"bool\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"claim_rewards\",\n inputs: [],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"claim_rewards\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"claim_rewards\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_receiver\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"transferFrom\",\n inputs: [\n {\n name: \"_from\",\n type: \"address\",\n },\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"transfer\",\n inputs: [\n {\n name: \"_to\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"approve\",\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"permit\",\n inputs: [\n {\n name: \"_owner\",\n type: \"address\",\n },\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_deadline\",\n type: \"uint256\",\n },\n {\n name: \"_v\",\n type: \"uint8\",\n },\n {\n name: \"_r\",\n type: \"bytes32\",\n },\n {\n name: \"_s\",\n type: \"bytes32\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"increaseAllowance\",\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_added_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"decreaseAllowance\",\n inputs: [\n {\n name: \"_spender\",\n type: \"address\",\n },\n {\n name: \"_subtracted_value\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"user_checkpoint\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"set_rewards_receiver\",\n inputs: [\n {\n name: \"_receiver\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"kick\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit_reward_token\",\n inputs: [\n {\n name: \"_reward_token\",\n type: \"address\",\n },\n {\n name: \"_amount\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"add_reward\",\n inputs: [\n {\n name: \"_reward_token\",\n type: \"address\",\n },\n {\n name: \"_distributor\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"set_reward_distributor\",\n inputs: [\n {\n name: \"_reward_token\",\n type: \"address\",\n },\n {\n name: \"_distributor\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"set_killed\",\n inputs: [\n {\n name: \"_is_killed\",\n type: \"bool\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"claimed_reward\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_token\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"claimable_reward\",\n inputs: [\n {\n name: \"_user\",\n type: \"address\",\n },\n {\n name: \"_reward_token\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"claimable_reward_write\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_token\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"claimable_tokens\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_checkpoint\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"future_epoch_time\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"inflation_rate\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"decimals\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"version\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"allowance\",\n inputs: [\n {\n name: \"owner\",\n type: \"address\",\n },\n {\n name: \"spender\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"initialize\",\n inputs: [\n {\n name: \"_lp_token\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"balanceOf\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"totalSupply\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"name\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"symbol\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"DOMAIN_SEPARATOR\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"bytes32\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"nonces\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"factory\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"lp_token\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"is_killed\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"bool\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"reward_count\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"reward_data\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n {\n name: \"token\",\n type: \"address\",\n },\n {\n name: \"distributor\",\n type: \"address\",\n },\n {\n name: \"period_finish\",\n type: \"uint256\",\n },\n {\n name: \"rate\",\n type: \"uint256\",\n },\n {\n name: \"last_update\",\n type: \"uint256\",\n },\n {\n name: \"integral\",\n type: \"uint256\",\n },\n ],\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"rewards_receiver\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"reward_integral_for\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n {\n name: \"arg1\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"working_balances\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"working_supply\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_inv_supply_of\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_checkpoint_of\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_fraction\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"period\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"int128\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"reward_tokens\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"period_timestamp\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"integrate_inv_supply\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n] as const;\n\nexport class LiquidityGaugeV5__factory {\n static readonly abi = _abi;\n static createInterface(): LiquidityGaugeV5Interface {\n return new utils.Interface(_abi) as LiquidityGaugeV5Interface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): LiquidityGaugeV5 {\n return new Contract(address, _abi, signerOrProvider) as LiquidityGaugeV5;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { Multicall, MulticallInterface } from \"../Multicall\";\n\nconst _abi = [\n {\n constant: false,\n inputs: [\n {\n components: [\n {\n name: \"target\",\n type: \"address\",\n },\n {\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate\",\n outputs: [\n {\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n name: \"returnData\",\n type: \"bytes[]\",\n },\n ],\n payable: false,\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class Multicall__factory {\n static readonly abi = _abi;\n static createInterface(): MulticallInterface {\n return new utils.Interface(_abi) as MulticallInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): Multicall {\n return new Contract(address, _abi, signerOrProvider) as Multicall;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { Multicall3, Multicall3Interface } from \"../Multicall3\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes[]\",\n name: \"returnData\",\n type: \"bytes[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"allowFailure\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call3[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate3\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"allowFailure\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call3Value[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"aggregate3Value\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"blockAndAggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBasefee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"basefee\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n ],\n name: \"getBlockHash\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBlockNumber\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getChainId\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"chainid\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockCoinbase\",\n outputs: [\n {\n internalType: \"address\",\n name: \"coinbase\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockDifficulty\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"difficulty\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockGasLimit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"gaslimit\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCurrentBlockTimestamp\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"timestamp\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"addr\",\n type: \"address\",\n },\n ],\n name: \"getEthBalance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"balance\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastBlockHash\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"requireSuccess\",\n type: \"bool\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"tryAggregate\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"requireSuccess\",\n type: \"bool\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Call[]\",\n name: \"calls\",\n type: \"tuple[]\",\n },\n ],\n name: \"tryBlockAndAggregate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"blockNumber\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"blockHash\",\n type: \"bytes32\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"success\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"returnData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Multicall3.Result[]\",\n name: \"returnData\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n] as const;\n\nexport class Multicall3__factory {\n static readonly abi = _abi;\n static createInterface(): Multicall3Interface {\n return new utils.Interface(_abi) as Multicall3Interface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): Multicall3 {\n return new Contract(address, _abi, signerOrProvider) as Multicall3;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { StablePool, StablePoolInterface } from \"../StablePool\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"amplificationParameter\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"startValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"endValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n ],\n name: \"AmpUpdateStarted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"currentValue\",\n type: \"uint256\",\n },\n ],\n name: \"AmpUpdateStopped\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAmplificationParameter\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"isUpdating\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"precision\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"swapRequest\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"poolConfig\",\n type: \"bytes\",\n },\n ],\n name: \"setAssetManagerPoolConfig\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"rawEndValue\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n ],\n name: \"startAmplificationParameterUpdate\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"stopAmplificationParameterUpdate\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class StablePool__factory {\n static readonly abi = _abi;\n static createInterface(): StablePoolInterface {\n return new utils.Interface(_abi) as StablePoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): StablePool {\n return new Contract(address, _abi, signerOrProvider) as StablePool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n StaticATokenRateProvider,\n StaticATokenRateProviderInterface,\n} from \"../StaticATokenRateProvider\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IStaticAToken\",\n name: \"_waToken\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"waToken\",\n outputs: [\n {\n internalType: \"contract IStaticAToken\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class StaticATokenRateProvider__factory {\n static readonly abi = _abi;\n static createInterface(): StaticATokenRateProviderInterface {\n return new utils.Interface(_abi) as StaticATokenRateProviderInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): StaticATokenRateProvider {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as StaticATokenRateProvider;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { Vault, VaultInterface } from \"../Vault\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"authorizer\",\n type: \"address\",\n },\n {\n internalType: \"contract IWETH\",\n name: \"weth\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IAuthorizer\",\n name: \"newAuthorizer\",\n type: \"address\",\n },\n ],\n name: \"AuthorizerChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"ExternalBalanceTransfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IFlashLoanRecipient\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"feeAmount\",\n type: \"uint256\",\n },\n ],\n name: \"FlashLoan\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"int256\",\n name: \"delta\",\n type: \"int256\",\n },\n ],\n name: \"InternalBalanceChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"liquidityProvider\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n indexed: false,\n internalType: \"int256[]\",\n name: \"deltas\",\n type: \"int256[]\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"protocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n name: \"PoolBalanceChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"int256\",\n name: \"cashDelta\",\n type: \"int256\",\n },\n {\n indexed: false,\n internalType: \"int256\",\n name: \"managedDelta\",\n type: \"int256\",\n },\n ],\n name: \"PoolBalanceManaged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"poolAddress\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"enum IVault.PoolSpecialization\",\n name: \"specialization\",\n type: \"uint8\",\n },\n ],\n name: \"PoolRegistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"relayer\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"RelayerApprovalChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amountIn\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amountOut\",\n type: \"uint256\",\n },\n ],\n name: \"Swap\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n ],\n name: \"TokensDeregistered\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n indexed: false,\n internalType: \"address[]\",\n name: \"assetManagers\",\n type: \"address[]\",\n },\n ],\n name: \"TokensRegistered\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"WETH\",\n outputs: [\n {\n internalType: \"contract IWETH\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"assetInIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"assetOutIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.BatchSwapStep[]\",\n name: \"swaps\",\n type: \"tuple[]\",\n },\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"int256[]\",\n name: \"limits\",\n type: \"int256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n ],\n name: \"batchSwap\",\n outputs: [\n {\n internalType: \"int256[]\",\n name: \"assetDeltas\",\n type: \"int256[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n ],\n name: \"deregisterTokens\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"minAmountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.ExitPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"exitPool\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IFlashLoanRecipient\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amounts\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"flashLoan\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n ],\n name: \"getInternalBalance\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n ],\n name: \"getPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"enum IVault.PoolSpecialization\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"getPoolTokenInfo\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"cash\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"managed\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n ],\n name: \"getPoolTokens\",\n outputs: [\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract ProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"relayer\",\n type: \"address\",\n },\n ],\n name: \"hasApprovedRelayer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"maxAmountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.JoinPoolRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n ],\n name: \"joinPool\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.PoolBalanceOpKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IVault.PoolBalanceOp[]\",\n name: \"ops\",\n type: \"tuple[]\",\n },\n ],\n name: \"managePoolBalance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.UserBalanceOpKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"asset\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct IVault.UserBalanceOp[]\",\n name: \"ops\",\n type: \"tuple[]\",\n },\n ],\n name: \"manageUserBalance\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"assetInIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"assetOutIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.BatchSwapStep[]\",\n name: \"swaps\",\n type: \"tuple[]\",\n },\n {\n internalType: \"contract IAsset[]\",\n name: \"assets\",\n type: \"address[]\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n ],\n name: \"queryBatchSwap\",\n outputs: [\n {\n internalType: \"int256[]\",\n name: \"\",\n type: \"int256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IVault.PoolSpecialization\",\n name: \"specialization\",\n type: \"uint8\",\n },\n ],\n name: \"registerPool\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"address[]\",\n name: \"assetManagers\",\n type: \"address[]\",\n },\n ],\n name: \"registerTokens\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"newAuthorizer\",\n type: \"address\",\n },\n ],\n name: \"setAuthorizer\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"relayer\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"setRelayerApproval\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IAsset\",\n name: \"assetOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IVault.SingleSwap\",\n name: \"singleSwap\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"fromInternalBalance\",\n type: \"bool\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"toInternalBalance\",\n type: \"bool\",\n },\n ],\n internalType: \"struct IVault.FundManagement\",\n name: \"funds\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"limit\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n ],\n name: \"swap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"amountCalculated\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n] as const;\n\nexport class Vault__factory {\n static readonly abi = _abi;\n static createInterface(): VaultInterface {\n return new utils.Interface(_abi) as VaultInterface;\n }\n static connect(address: string, signerOrProvider: Signer | Provider): Vault {\n return new Contract(address, _abi, signerOrProvider) as Vault;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { WeightedPool, WeightedPoolInterface } from \"../WeightedPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"normalizedWeights\",\n type: \"uint256[]\",\n },\n {\n internalType: \"contract IRateProvider[]\",\n name: \"rateProviders\",\n type: \"address[]\",\n },\n {\n internalType: \"address[]\",\n name: \"assetManagers\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct WeightedPool.NewPoolParams\",\n name: \"params\",\n type: \"tuple\",\n },\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"feeType\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"protocolFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"ProtocolFeePercentageCacheUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getATHRateProduct\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getActualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastPostJoinExitInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getNormalizedWeights\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"feeType\",\n type: \"uint256\",\n },\n ],\n name: \"getProtocolFeePercentageCache\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolSwapFeeDelegation\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRateProviders\",\n outputs: [\n {\n internalType: \"contract IRateProvider[]\",\n name: \"\",\n type: \"address[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"poolConfig\",\n type: \"bytes\",\n },\n ],\n name: \"setAssetManagerPoolConfig\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"updateProtocolFeePercentageCache\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class WeightedPool__factory {\n static readonly abi = _abi;\n static createInterface(): WeightedPoolInterface {\n return new utils.Interface(_abi) as WeightedPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): WeightedPool {\n return new Contract(address, _abi, signerOrProvider) as WeightedPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n WeightedPoolFactory,\n WeightedPoolFactoryInterface,\n} from \"../WeightedPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20[]\",\n name: \"tokens\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"normalizedWeights\",\n type: \"uint256[]\",\n },\n {\n internalType: \"contract IRateProvider[]\",\n name: \"rateProviders\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class WeightedPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): WeightedPoolFactoryInterface {\n return new utils.Interface(_abi) as WeightedPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): WeightedPoolFactory {\n return new Contract(address, _abi, signerOrProvider) as WeightedPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n YearnLinearPool,\n YearnLinearPoolInterface,\n} from \"../YearnLinearPool\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"assetManager\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n ],\n internalType: \"struct YearnLinearPool.ConstructorArgs\",\n name: \"args\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"RecoveryModeStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"contract IERC20\",\n name: \"token\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"TargetsSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableRecoveryMode\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBptIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDomainSeparator\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMainToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"getNextNonce\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeesCollector\",\n outputs: [\n {\n internalType: \"contract IProtocolFeesCollector\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getScalingFactors\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTargets\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"lowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVirtualSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedIndex\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedToken\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getWrappedTokenRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"inRecoveryMode\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFees\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"indexIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"indexOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"newLowerTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"newUpperTarget\",\n type: \"uint256\",\n },\n ],\n name: \"setTargets\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class YearnLinearPool__factory {\n static readonly abi = _abi;\n static createInterface(): YearnLinearPoolInterface {\n return new utils.Interface(_abi) as YearnLinearPoolInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): YearnLinearPool {\n return new Contract(address, _abi, signerOrProvider) as YearnLinearPool;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n YearnLinearPoolFactory,\n YearnLinearPoolFactoryInterface,\n} from \"../YearnLinearPoolFactory\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"protocolFeeProvider\",\n type: \"address\",\n },\n {\n internalType: \"contract IBalancerQueries\",\n name: \"queries\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"factoryVersion\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"poolVersion\",\n type: \"string\",\n },\n {\n internalType: \"uint256\",\n name: \"initialPauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"FactoryDisabled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"PoolCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n ],\n name: \"YearnLinearPoolCreated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"mainToken\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"wrappedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"upperTarget\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolId\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"salt\",\n type: \"bytes32\",\n },\n ],\n name: \"create\",\n outputs: [\n {\n internalType: \"contract LinearPool\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"disable\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCode\",\n outputs: [\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getCreationCodeContracts\",\n outputs: [\n {\n internalType: \"address\",\n name: \"contractA\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"contractB\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastCreatedPool\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPauseConfiguration\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolVersion\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getProtocolFeePercentagesProvider\",\n outputs: [\n {\n internalType: \"contract IProtocolFeePercentagesProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"isDisabled\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"pool\",\n type: \"address\",\n },\n ],\n name: \"isPoolFromFactory\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport class YearnLinearPoolFactory__factory {\n static readonly abi = _abi;\n static createInterface(): YearnLinearPoolFactoryInterface {\n return new utils.Interface(_abi) as YearnLinearPoolFactoryInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): YearnLinearPoolFactory {\n return new Contract(\n address,\n _abi,\n signerOrProvider\n ) as YearnLinearPoolFactory;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { GyroEV2, GyroEV2Interface, GyroECLPPool } from \"../GyroEV2\";\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"string\",\n name: \"name\",\n type: \"string\",\n },\n {\n internalType: \"string\",\n name: \"symbol\",\n type: \"string\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"token0\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"token1\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodDuration\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"oracleEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n internalType: \"struct ExtensibleWeightedPool2Tokens.NewPoolParams\",\n name: \"baseParams\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"int256\",\n name: \"alpha\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"beta\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"c\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"s\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"lambda\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Params\",\n name: \"eclpParams\",\n type: \"tuple\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"tauAlpha\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"tauBeta\",\n type: \"tuple\",\n },\n {\n internalType: \"int256\",\n name: \"u\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"v\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"w\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"z\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"dSq\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.DerivedParams\",\n name: \"derivedEclpParams\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"rateProvider0\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"rateProvider1\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"capManager\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"bool\",\n name: \"capEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint120\",\n name: \"perAddressCap\",\n type: \"uint120\",\n },\n {\n internalType: \"uint128\",\n name: \"globalCap\",\n type: \"uint128\",\n },\n ],\n internalType: \"struct ICappedLiquidity.CapParams\",\n name: \"capParams\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"pauseManager\",\n type: \"address\",\n },\n ],\n internalType: \"struct GyroECLPPool.GyroParams\",\n name: \"params\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"configAddress\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"capManager\",\n type: \"address\",\n },\n ],\n name: \"CapManagerUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"capEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint120\",\n name: \"perAddressCap\",\n type: \"uint120\",\n },\n {\n internalType: \"uint128\",\n name: \"globalCap\",\n type: \"uint128\",\n },\n ],\n indexed: false,\n internalType: \"struct ICappedLiquidity.CapParams\",\n name: \"params\",\n type: \"tuple\",\n },\n ],\n name: \"CapParamsUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"derivedParamsValidated\",\n type: \"bool\",\n },\n ],\n name: \"ECLPDerivedParamsValidated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paramsValidated\",\n type: \"bool\",\n },\n ],\n name: \"ECLPParamsValidated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"invariantAfterJoin\",\n type: \"uint256\",\n },\n ],\n name: \"InvariantAterInitializeJoin\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"oldInvariant\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newInvariant\",\n type: \"uint256\",\n },\n ],\n name: \"InvariantOldAndNew\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"enabled\",\n type: \"bool\",\n },\n ],\n name: \"OracleEnabledChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"oracleUpdatedIndex\",\n type: \"uint256\",\n },\n ],\n name: \"OracleIndexUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"oldPauseManager\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"newPauseManager\",\n type: \"address\",\n },\n ],\n name: \"PauseManagerChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"PausedLocally\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"PausedStateChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"SwapFeePercentageChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n indexed: false,\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"invariant\",\n type: \"tuple\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"SwapParams\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [],\n name: \"UnpausedLocally\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_dSq\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsAlpha\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsBeta\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsC\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsLambda\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_paramsS\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_tauAlphaX\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_tauAlphaY\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_tauBetaX\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_tauBetaY\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_u\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_v\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_w\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"_z\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"\",\n type: \"int256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"capManager\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"capParams\",\n outputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"capEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint120\",\n name: \"perAddressCap\",\n type: \"uint120\",\n },\n {\n internalType: \"uint128\",\n name: \"globalCap\",\n type: \"uint128\",\n },\n ],\n internalType: \"struct ICappedLiquidity.CapParams\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_pauseManager\",\n type: \"address\",\n },\n ],\n name: \"changePauseManager\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"decreaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"startIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endIndex\",\n type: \"uint256\",\n },\n ],\n name: \"dirtyUninitializedOracleSamples\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"enableOracle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getECLPParams\",\n outputs: [\n {\n components: [\n {\n internalType: \"int256\",\n name: \"alpha\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"beta\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"c\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"s\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"lambda\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Params\",\n name: \"params\",\n type: \"tuple\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"tauAlpha\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"int256\",\n name: \"x\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"y\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.Vector2\",\n name: \"tauBeta\",\n type: \"tuple\",\n },\n {\n internalType: \"int256\",\n name: \"u\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"v\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"w\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"z\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"dSq\",\n type: \"int256\",\n },\n ],\n internalType: \"struct GyroECLPMath.DerivedParams\",\n name: \"d\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLargestSafeQueryWindow\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getLastInvariant\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"enum IPriceOracle.Variable\",\n name: \"variable\",\n type: \"uint8\",\n },\n ],\n name: \"getLatest\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getMiscData\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"logInvariant\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"logTotalSupply\",\n type: \"int256\",\n },\n {\n internalType: \"uint256\",\n name: \"oracleSampleCreationTimestamp\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"oracleIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"oracleEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getNormalizedWeights\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getOwner\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IPriceOracle.Variable\",\n name: \"variable\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"ago\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IPriceOracle.OracleAccumulatorQuery[]\",\n name: \"queries\",\n type: \"tuple[]\",\n },\n ],\n name: \"getPastAccumulators\",\n outputs: [\n {\n internalType: \"int256[]\",\n name: \"results\",\n type: \"int256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPausedState\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"pauseWindowEndTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"bufferPeriodEndTime\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPoolId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getPrice\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"spotPrice\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getRate\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n ],\n name: \"getSample\",\n outputs: [\n {\n internalType: \"int256\",\n name: \"logPairPrice\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"accLogPairPrice\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"logBptPrice\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"accLogBptPrice\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"logInvariant\",\n type: \"int256\",\n },\n {\n internalType: \"int256\",\n name: \"accLogInvariant\",\n type: \"int256\",\n },\n {\n internalType: \"uint256\",\n name: \"timestamp\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getSwapFeePercentage\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IPriceOracle.Variable\",\n name: \"variable\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"secs\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"ago\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IPriceOracle.OracleAverageQuery[]\",\n name: \"queries\",\n type: \"tuple[]\",\n },\n ],\n name: \"getTimeWeightedAverage\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"results\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTokenRates\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"rate0\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"rate1\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getTotalSamples\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"gyroConfig\",\n outputs: [\n {\n internalType: \"contract IGyroConfig\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"addedValue\",\n type: \"uint256\",\n },\n ],\n name: \"increaseAllowance\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onExitPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"onJoinPool\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"dueProtocolFeeAmounts\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"enum IVault.SwapKind\",\n name: \"kind\",\n type: \"uint8\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenIn\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"tokenOut\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IPoolSwapStructs.SwapRequest\",\n name: \"request\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"balanceTokenOut\",\n type: \"uint256\",\n },\n ],\n name: \"onSwap\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pauseManager\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryExit\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptIn\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsOut\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"poolId\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256\",\n name: \"lastChangeBlock\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"protocolSwapFeePercentage\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"userData\",\n type: \"bytes\",\n },\n ],\n name: \"queryJoin\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"bptOut\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amountsIn\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rateProvider0\",\n outputs: [\n {\n internalType: \"contract IRateProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rateProvider1\",\n outputs: [\n {\n internalType: \"contract IRateProvider\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_capManager\",\n type: \"address\",\n },\n ],\n name: \"setCapManager\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"bool\",\n name: \"capEnabled\",\n type: \"bool\",\n },\n {\n internalType: \"uint120\",\n name: \"perAddressCap\",\n type: \"uint120\",\n },\n {\n internalType: \"uint128\",\n name: \"globalCap\",\n type: \"uint128\",\n },\n ],\n internalType: \"struct ICappedLiquidity.CapParams\",\n name: \"params\",\n type: \"tuple\",\n },\n ],\n name: \"setCapParams\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"paused\",\n type: \"bool\",\n },\n ],\n name: \"setPaused\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"swapFeePercentage\",\n type: \"uint256\",\n },\n ],\n name: \"setSwapFeePercentage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class GyroEV2__factory {\n static readonly abi = _abi;\n static createInterface(): GyroEV2Interface {\n return new utils.Interface(_abi) as GyroEV2Interface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): GyroEV2 {\n return new Contract(address, _abi, signerOrProvider) as GyroEV2;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type { VeBal, VeBalInterface } from \"../VeBal\";\n\nconst _abi = [\n {\n name: \"Deposit\",\n inputs: [\n {\n name: \"provider\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"locktime\",\n type: \"uint256\",\n indexed: true,\n },\n {\n name: \"type\",\n type: \"int128\",\n indexed: false,\n },\n {\n name: \"ts\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Withdraw\",\n inputs: [\n {\n name: \"provider\",\n type: \"address\",\n indexed: true,\n },\n {\n name: \"value\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"ts\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n name: \"Supply\",\n inputs: [\n {\n name: \"prevSupply\",\n type: \"uint256\",\n indexed: false,\n },\n {\n name: \"supply\",\n type: \"uint256\",\n indexed: false,\n },\n ],\n anonymous: false,\n type: \"event\",\n },\n {\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n inputs: [\n {\n name: \"token_addr\",\n type: \"address\",\n },\n {\n name: \"_name\",\n type: \"string\",\n },\n {\n name: \"_symbol\",\n type: \"string\",\n },\n {\n name: \"_authorizer_adaptor\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"token\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"name\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"symbol\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"string\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"decimals\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"admin\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"commit_smart_wallet_checker\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"apply_smart_wallet_checker\",\n inputs: [],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"get_last_user_slope\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"int128\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"user_point_history__ts\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_idx\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"locked__end\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"checkpoint\",\n inputs: [],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"deposit_for\",\n inputs: [\n {\n name: \"_addr\",\n type: \"address\",\n },\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"create_lock\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n {\n name: \"_unlock_time\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"increase_amount\",\n inputs: [\n {\n name: \"_value\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"increase_unlock_time\",\n inputs: [\n {\n name: \"_unlock_time\",\n type: \"uint256\",\n },\n ],\n outputs: [],\n },\n {\n stateMutability: \"nonpayable\",\n type: \"function\",\n name: \"withdraw\",\n inputs: [],\n outputs: [],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"balanceOf\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"balanceOf\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n {\n name: \"_t\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"balanceOfAt\",\n inputs: [\n {\n name: \"addr\",\n type: \"address\",\n },\n {\n name: \"_block\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"totalSupply\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"totalSupply\",\n inputs: [\n {\n name: \"t\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"totalSupplyAt\",\n inputs: [\n {\n name: \"_block\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"supply\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"locked\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n {\n name: \"amount\",\n type: \"int128\",\n },\n {\n name: \"end\",\n type: \"uint256\",\n },\n ],\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"epoch\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"point_history\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n {\n name: \"bias\",\n type: \"int128\",\n },\n {\n name: \"slope\",\n type: \"int128\",\n },\n {\n name: \"ts\",\n type: \"uint256\",\n },\n {\n name: \"blk\",\n type: \"uint256\",\n },\n ],\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"user_point_history\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n {\n name: \"arg1\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n {\n name: \"bias\",\n type: \"int128\",\n },\n {\n name: \"slope\",\n type: \"int128\",\n },\n {\n name: \"ts\",\n type: \"uint256\",\n },\n {\n name: \"blk\",\n type: \"uint256\",\n },\n ],\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"user_point_epoch\",\n inputs: [\n {\n name: \"arg0\",\n type: \"address\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"uint256\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"slope_changes\",\n inputs: [\n {\n name: \"arg0\",\n type: \"uint256\",\n },\n ],\n outputs: [\n {\n name: \"\",\n type: \"int128\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"future_smart_wallet_checker\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n {\n stateMutability: \"view\",\n type: \"function\",\n name: \"smart_wallet_checker\",\n inputs: [],\n outputs: [\n {\n name: \"\",\n type: \"address\",\n },\n ],\n },\n] as const;\n\nexport class VeBal__factory {\n static readonly abi = _abi;\n static createInterface(): VeBalInterface {\n return new utils.Interface(_abi) as VeBalInterface;\n }\n static connect(address: string, signerOrProvider: Signer | Provider): VeBal {\n return new Contract(address, _abi, signerOrProvider) as VeBal;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Signer, utils } from \"ethers\";\nimport type { Provider } from \"@ethersproject/providers\";\nimport type {\n VeDelegationProxy,\n VeDelegationProxyInterface,\n} from \"../VeDelegationProxy\";\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: \"contract IVault\",\n name: \"vault\",\n type: \"address\",\n },\n {\n internalType: \"contract IERC20\",\n name: \"votingEscrow\",\n type: \"address\",\n },\n {\n internalType: \"contract IVeDelegation\",\n name: \"delegation\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"newImplementation\",\n type: \"address\",\n },\n ],\n name: \"DelegationImplementationUpdated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"adjustedBalanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"user\",\n type: \"address\",\n },\n ],\n name: \"adjusted_balance_of\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"selector\",\n type: \"bytes4\",\n },\n ],\n name: \"getActionId\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getAuthorizer\",\n outputs: [\n {\n internalType: \"contract IAuthorizer\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getDelegationImplementation\",\n outputs: [\n {\n internalType: \"contract IVeDelegation\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVault\",\n outputs: [\n {\n internalType: \"contract IVault\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getVotingEscrow\",\n outputs: [\n {\n internalType: \"contract IERC20\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"killDelegation\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IVeDelegation\",\n name: \"delegation\",\n type: \"address\",\n },\n ],\n name: \"setDelegation\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport class VeDelegationProxy__factory {\n static readonly abi = _abi;\n static createInterface(): VeDelegationProxyInterface {\n return new utils.Interface(_abi) as VeDelegationProxyInterface;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider\n ): VeDelegationProxy {\n return new Contract(address, _abi, signerOrProvider) as VeDelegationProxy;\n }\n}\n","import { SwapInfo } from '@balancer-labs/sor';\nimport { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { Vault } from '@/contracts/Vault';\n\nexport interface TokenAmounts {\n [token: string]: string;\n}\n\nexport interface SwapsOptions {\n maxPools?: number;\n gasPrice?: string;\n deadline?: string;\n maxSlippage?: number;\n}\n\nexport enum SwapType {\n SwapExactIn,\n SwapExactOut,\n}\n\nexport type FundManagement = {\n sender: string;\n recipient: string;\n fromInternalBalance: boolean;\n toInternalBalance: boolean;\n};\n\nexport type SingleSwap = {\n poolId: string;\n kind: SwapType;\n assetIn: string;\n assetOut: string;\n amount: BigNumberish;\n userData: string;\n};\n\nexport type Swap = {\n request: SingleSwap;\n funds: FundManagement;\n limit: BigNumberish;\n deadline: BigNumberish;\n value?: BigNumberish;\n outputReference?: BigNumberish;\n};\n\nexport type BatchSwapStep = {\n poolId: string;\n assetInIndex: number;\n assetOutIndex: number;\n amount: string;\n userData: string;\n};\n\nexport type BatchSwap = {\n kind: SwapType;\n swaps: BatchSwapStep[];\n assets: string[];\n funds: FundManagement;\n limits: BigNumberish[];\n deadline: BigNumberish;\n value?: BigNumberish;\n outputReferences?: { index: BigNumberish; key: BigNumberish }[];\n};\n\nexport interface SwapInput {\n tokenIn: string;\n tokenOut: string;\n swapType: SwapType;\n amount: string;\n}\n\nexport interface QuerySimpleFlashSwapParameters {\n poolIds: string[];\n assets: BatchSwap['assets'];\n flashLoanAmount: string;\n vaultContract: Vault;\n}\n\nexport interface SimpleFlashSwapParameters {\n poolIds: string[];\n assets: BatchSwap['assets'];\n flashLoanAmount: string;\n walletAddress: string;\n}\n\nexport interface QuerySimpleFlashSwapResponse {\n profits: Record;\n isProfitable: boolean;\n}\n\nexport interface FindRouteParameters {\n tokenIn: string;\n tokenOut: string;\n amount: BigNumber;\n gasPrice: BigNumber;\n maxPools?: number;\n}\n\nexport interface BuildTransactionParameters {\n userAddress: string;\n recipient?: string;\n swapInfo: SwapInfo;\n kind: SwapType;\n deadline: string;\n maxSlippage: number;\n}\n\nexport interface SwapTransactionRequest {\n to: string;\n data: string;\n value?: BigNumber;\n}\n\nexport interface SwapAttributes {\n to: string;\n functionName: string;\n attributes: Swap | BatchSwap;\n data: string;\n value?: BigNumber;\n}\n","import { BigNumberish, BigNumber } from '@ethersproject/bignumber';\nimport { Zero, WeiPerEther } from '@ethersproject/constants';\n\nimport { SwapType } from './types';\nimport { isSameAddress } from '@/lib/utils';\n\n/**\n * Helper to create limits using a defined slippage amount.\n * @param tokensIn - Array of token in addresses.\n * @param tokensOut - Array of token out addresses.\n * @param swapType - Type of swap - SwapExactIn or SwapExactOut\n * @param deltas - An array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at the same index in the `assets` array.\n * @param assets - array contains the addresses of all assets involved in the swaps.\n * @param slippage - Slippage to be applied. i.e. 5%=50000000000000000.\n * @returns Returns an array (same length as assets) with limits applied for each asset.\n */\nexport function getLimitsForSlippage(\n tokensIn: string[],\n tokensOut: string[],\n swapType: SwapType,\n deltas: BigNumberish[],\n assets: string[],\n slippage: BigNumberish\n): BigNumberish[] {\n // Limits:\n // +ve means max to send\n // -ve mean min to receive\n // For a multihop the intermediate tokens should be 0\n const limits: BigNumber[] = new Array(assets.length).fill(Zero);\n\n assets.forEach((token, i) => {\n if (tokensIn.some((tokenIn) => isSameAddress(token, tokenIn))) {\n // For SwapExactOut slippage is on tokenIn, i.e. amtIn + slippage\n const slippageAmount = BigNumber.from(slippage).add(WeiPerEther);\n limits[i] =\n swapType === SwapType.SwapExactOut\n ? limits[i].add(\n BigNumber.from(deltas[i]).mul(slippageAmount).div(WeiPerEther)\n )\n : limits[i].add(deltas[i]);\n }\n\n if (tokensOut.some((tokenOut) => isSameAddress(token, tokenOut))) {\n // For SwapExactIn slippage is on tokenOut, i.e. amtOut - slippage\n const slippageAmount = WeiPerEther.sub(BigNumber.from(slippage));\n limits[i] =\n swapType === SwapType.SwapExactIn\n ? limits[i].add(\n BigNumber.from(deltas[i]).mul(slippageAmount).div(WeiPerEther)\n )\n : limits[i].add(deltas[i]);\n }\n });\n\n return limits;\n}\n","import { Network } from './network';\nimport { BalancerNetworkConfig } from '@/types';\nimport addressesByNetwork from './addresses.json';\n\nexport const balancerVault = '0xBA12222222228d8Ba445958a75a0704d566BF2C8';\n\n// Info fetched using npm package slot20\nexport const BPT_SLOT = 0;\nexport const BPT_DECIMALS = 18;\n\nexport const BALANCER_NETWORK_CONFIG: Record = {\n [Network.MAINNET]: {\n chainId: Network.MAINNET, //1\n addresses: {\n //Mainnet deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/mainnet.html\n contracts: {\n multicall: '0xeefba1e63905ef1d7acba5a8513c70307c1ce441',\n poolDataQueries: '0xf5CDdF6feD9C589f1Be04899F48f9738531daD59',\n lidoRelayer: '0xdcdbf71A870cc60C6F9B621E28a7D3Ffd6Dd4965',\n veBal: '0xC128a9954e6c874eA3d62ce62B468bA073093F25',\n gaugeControllerCheckpointer:\n '0x8e5698dc4897dc12243c8642e77b4f21349db97c',\n veBalProxy: '0x6f5a2eE11E7a772AeB5114A20d0D7c0ff61EB8A0',\n gyroConfigProxy: '0xac89cc9d78bbad7eb3a02601b4d65daa1f908aa6',\n ...addressesByNetwork[Network.MAINNET].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.MAINNET].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.MAINNET].contracts.weth,\n bbaUsd: addressesByNetwork[Network.MAINNET].tokens.bb_a_usd,\n lbpRaisingTokens: [\n '0x6b175474e89094c44da98b954eedeac495271d0f', // DAI\n '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC\n '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', // WETH\n ],\n stETH: '0xae7ab96520de3a18e5e111b5eaab095312d7fe84',\n wstETH: '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',\n veBal: '0xC128a9954e6c874eA3d62ce62B468bA073093F25',\n ...addressesByNetwork[Network.MAINNET].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/blocklytics/ethereum-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'ethereum',\n },\n },\n pools: {\n wETHwstETH: {\n id: '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080',\n address: '0x32296969ef14eb0c6d29669c550d4a0449130230',\n },\n },\n poolsToIgnore: [\n '0xbd482ffb3e6e50dc1c437557c3bea2b68f3683ee0000000000000000000003c6', // a pool made by an external dev who was playing with a novel rate provider mechanism in production.\n '0x0afbd58beca09545e4fb67772faf3858e610bcd00000000000000000000004b9',\n '0xf22ff21e17157340575158ad7394e068048dd98b0000000000000000000004b8',\n '0xf71d0774b214c4cf51e33eb3d30ef98132e4dbaa00000000000000000000046e',\n ],\n sorConnectingTokens: [\n {\n symbol: 'wEth',\n address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n },\n {\n symbol: 'wstEth',\n address: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',\n },\n {\n symbol: 'DOLA',\n address: '0x865377367054516e17014CcdED1e7d814EDC9ce4',\n },\n {\n symbol: 'rEth',\n address: '0xae78736cd615f374d3085123a210448e74fc6393',\n },\n {\n symbol: 'ETHx',\n address: '0xa35b1b31ce002fbf2058d22f30f95d405200a15b',\n },\n ],\n sorTriPathMidPoolIds: [\n '0x1e19cf2d73a72ef1332c882f20534b6519be0276000200000000000000000112', // rETH/WETH\n ],\n },\n [Network.POLYGON]: {\n chainId: Network.POLYGON, //137\n addresses: {\n //Polygon deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/polygon.html\n contracts: {\n multicall: '0xa1B2b503959aedD81512C37e9dce48164ec6a94d',\n poolDataQueries: '0x84813aA3e079A665C0B80F944427eE83cBA63617',\n gaugeClaimHelper: '0xaeb406b0e430bf5ea2dc0b9fe62e4e53f74b3a33',\n gyroConfigProxy: '0xfdc2e9e03f515804744a40d0f8d25c16e93fbe67',\n ...addressesByNetwork[Network.POLYGON].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.POLYGON].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.POLYGON].contracts.weth,\n lbpRaisingTokens: [\n '0x8f3cf7ad23cd3cadbd9735aff958023239c6a063', // DAI\n '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // USDC\n '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', // WMATIC\n ],\n ...addressesByNetwork[Network.POLYGON].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-polygon-prune-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-polygon',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/ianlapham/polygon-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: '',\n platformId: 'polygon-pos',\n },\n },\n pools: {},\n poolsToIgnore: [\n '0x600bd01b6526611079e12e1ff93aba7a3e34226f0000000000000000000009e4', // This pool has rateProviders with incorrect scaling\n '0xc31a37105b94ab4efca1954a14f059af11fcd9bb000000000000000000000455', // Stable pool with Convergence issues\n ],\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270',\n },\n {\n symbol: 'bbrz2',\n address: '0xe22483774bd8611be2ad2f4194078dac9159f4ba',\n }, // Joins Stables<>BRZ via https://app.balancer.fi/#/polygon/pool/0x4a0b73f0d13ff6d43e304a174697e3d5cfd310a400020000000000000000091c\n ],\n },\n [Network.ARBITRUM]: {\n chainId: Network.ARBITRUM, //42161\n //Arbitrum deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/arbitrum.html\n addresses: {\n contracts: {\n multicall: '0x269ff446d9892c9e19082564df3f5e8741e190a1',\n poolDataQueries: '0x7Ba29fE8E83dd6097A7298075C4AFfdBda3121cC',\n gaugeClaimHelper: '0xa0dabebaad1b243bbb243f933013d560819eb66f',\n gyroConfigProxy: '0x9b683ca24b0e013512e2566b68704dbe9677413c',\n ...addressesByNetwork[Network.ARBITRUM].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.ARBITRUM].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.ARBITRUM].contracts.weth,\n lbpRaisingTokens: [\n '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', // DAI\n '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8', // USDC\n '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', // WETH\n ],\n ...addressesByNetwork[Network.ARBITRUM].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-arbitrum-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-arbitrum',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/ianlapham/arbitrum-one-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'arbitrum-one',\n },\n },\n pools: {},\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n },\n ],\n sorTriPathMidPoolIds: [\n '0x178e029173417b1f9c8bc16dcec6f697bc323746000200000000000000000158', // wstEth/USDC.e to open up auraBAL/USDC\n '0x0052688295413b32626d226a205b95cdb337de860002000000000000000003d1', // arb/USDC.e to open up aura/USDC\n '0xa1a8bf131571a2139feb79401aa4a2e9482df6270002000000000000000004b4', // wstEth/Stable4Pool\n ],\n },\n [Network.GOERLI]: {\n chainId: Network.GOERLI, //5\n //Goerli deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/goerli.html\n addresses: {\n contracts: {\n multicall: '0x77dCa2C955b15e9dE4dbBCf1246B4B85b651e50e',\n poolDataQueries: '0x6d3197d069F8F9f1Fe7e23665Bc64CB77ED8b089',\n veBal: '0x33A99Dcc4C85C014cf12626959111D5898bbCAbF',\n veBalProxy: '0xA1F107D1cD709514AE8A914eCB757E95f9cedB31',\n erc4626LinearPoolFactory: '0xba240c856498e2d7a70af4911aafae0d6b565a5b',\n aaveLinearPoolFactory: '0x76578ecf9a141296ec657847fb45b0585bcda3a6',\n ...addressesByNetwork[Network.GOERLI].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.GOERLI].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.GOERLI].contracts.weth,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-goerli-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-goerli',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/blocklytics/goerli-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'ethereum',\n },\n },\n pools: {},\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1',\n },\n ],\n },\n [Network.OPTIMISM]: {\n chainId: Network.OPTIMISM, //10\n // Optimism deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/optimism.html\n addresses: {\n contracts: {\n multicall: '0x2dc0e2aa608532da689e89e237df582b783e552c',\n poolDataQueries: '0x6B5dA774890Db7B7b96C6f44e6a4b0F657399E2e',\n gyroConfigProxy: '0x32acb44fc929339b9f16f0449525cc590d2a23f3',\n ...addressesByNetwork[Network.OPTIMISM].contracts,\n },\n tokens: {\n bal: '0xfe8b128ba8c78aabc59d4c64cee7ff28e9379921',\n wrappedNativeAsset: addressesByNetwork[Network.OPTIMISM].contracts.weth,\n lbpRaisingTokens: [\n '0xda10009cbd5d07dd0cecc66161fc93d7c9000da1', // DAI\n '0x7f5c764cbc14f9669b88837ca1490cca17c31607', // USDC\n '0x4200000000000000000000000000000000000006', // WETH\n ],\n ...addressesByNetwork[Network.OPTIMISM].tokens,\n },\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'optimistic-ethereum',\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-optimism',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-optimism',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/lyra-finance/optimism-mainnet-blocks',\n },\n pools: {},\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x4200000000000000000000000000000000000006',\n },\n ],\n },\n [Network.GNOSIS]: {\n chainId: Network.GNOSIS, //100\n // Gnosis deployment addresses: https://docs.balancer.fi/reference/contracts/deployment-addresses/gnosis.html\n addresses: {\n contracts: {\n multicall: '0xbb6fab6b627947dae0a75808250d8b2652952cb5',\n poolDataQueries: '0x3f170631ed9821Ca51A59D996aB095162438DC10',\n ...addressesByNetwork[Network.GNOSIS].contracts,\n },\n tokens: {\n wrappedNativeAsset: addressesByNetwork[Network.GNOSIS].contracts.weth,\n bal: addressesByNetwork[Network.GNOSIS].contracts.bal,\n ...addressesByNetwork[Network.GNOSIS].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gnosis-chain-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-gnosis-chain',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'xdai',\n platformId: 'xdai',\n },\n },\n averageBlockTime: 5,\n pools: {},\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d',\n },\n {\n symbol: 'wsEth',\n address: '0x6C76971f98945AE98dD7d4DFcA8711ebea946eA6',\n },\n ],\n sorTriPathMidPoolIds: [\n '0xeb30c85cc528537f5350cf5684ce6a4538e13394000200000000000000000059', // 3POOL_BPT/wstETH\n '0x7644fa5d0ea14fcf3e813fdf93ca9544f8567655000000000000000000000066', // sBAL3\n ],\n },\n [Network.FANTOM]: {\n chainId: Network.FANTOM, //250\n //Fantom deployment addresses: https://docs.beets.fi/technicals/deployments\n addresses: {\n contracts: {\n vault: '0x20dd72Ed959b6147912C2e529F0a0C651c33c9ce',\n multicall: '0x66335d7ad8011f6aa3f48aadcb523b62b38ed961',\n poolDataQueries: '0xb132F1E145DcC085980C531e2dA81f2b84efc14F',\n gaugeClaimHelper: '0x0000000000000000000000000000000000000000', // no guages on fantom\n balancerRelayer: '0x419f7925b8c9e409b6ee8792242556fa210a7a09',\n balancerHelpers: '0xfE18C7C70b0a2c6541bEde0367124278BC345Dc8',\n weightedPoolFactory: '0x60467cb225092cE0c989361934311175f437Cf53',\n composableStablePoolFactory:\n '0x44814E3A603bb7F1198617995c5696C232F6e8Ed',\n yearnLinearPoolFactory: '0x1f73ae6ed391a2b1e84ff988a1bb5394b78a4a71',\n },\n tokens: {\n bal: '0xF24Bcf4d1e507740041C9cFd2DddB29585aDCe1e', //beets\n wrappedNativeAsset: '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83',\n lbpRaisingTokens: [\n '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83', // WFTM\n '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75', // USDC\n '0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E', // DAI\n ],\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/beethovenxfi/beethovenx-v2-fantom',\n gaugesSubgraph: '', // no guages on fantom\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/beethovenxfi/fantom-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'ftm',\n platformId: 'fantom',\n },\n },\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [\n {\n symbol: 'wftm',\n address: '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83',\n },\n ],\n },\n [Network.SEPOLIA]: {\n chainId: Network.SEPOLIA, //11155111\n addresses: {\n contracts: {\n multicall: '0xcA11bde05977b3631167028862bE2a173976CA11',\n poolDataQueries: '0x9805dcfD25e6De36bad8fe9D3Fe2c9b44B764102',\n ...addressesByNetwork[Network.SEPOLIA].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.SEPOLIA].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.SEPOLIA].contracts.weth,\n ...addressesByNetwork[Network.SEPOLIA].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-sepolia-v2/version/latest',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'ethereum',\n },\n },\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [],\n },\n [Network.ZKEVM]: {\n chainId: Network.ZKEVM, //1101\n addresses: {\n contracts: {\n balancerMinter: '0x475D18169BE8a89357A9ee3Ab00ca386d20fA229',\n multicall: '0xcA11bde05977b3631167028862bE2a173976CA11',\n poolDataQueries: '0xF24917fB88261a37Cc57F686eBC831a5c0B9fD39',\n ...addressesByNetwork[Network.ZKEVM].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.ZKEVM].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.ZKEVM].contracts.weth,\n ...addressesByNetwork[Network.ZKEVM].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-polygon-zk-v2/version/latest',\n gaugesSubgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-gauges-polygon-zk/version/latest',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'polygon-zkevm',\n },\n },\n averageBlockTime: 4,\n multicallBatchSize: 128,\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9',\n },\n {\n symbol: 'wsEth',\n address: '0x5D8cfF95D7A57c0BF50B30b43c7CC0D52825D4a9',\n },\n ],\n },\n [Network.AVALANCHE]: {\n chainId: Network.AVALANCHE, //43114\n addresses: {\n contracts: {\n balancerMinter: '0xEa924b45a3fcDAAdf4E5cFB1665823B8F8F2039B',\n multicall: '0xcA11bde05977b3631167028862bE2a173976CA11',\n poolDataQueries: '0x67af5D428d38C5176a286a2371Df691cDD914Fb8',\n ...addressesByNetwork[Network.AVALANCHE].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.AVALANCHE].contracts.bal,\n wrappedNativeAsset:\n addressesByNetwork[Network.AVALANCHE].contracts.weth,\n ...addressesByNetwork[Network.AVALANCHE].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-avalanche-v2',\n gaugesSubgraph:\n 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-gauges-avalanche',\n blockNumberSubgraph:\n 'https://api.thegraph.com/subgraphs/name/iliaazhel/avalanche-blocks',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'avalanche-2',\n platformId: 'avalanche',\n },\n },\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [\n {\n symbol: 'WAVAX',\n address: '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7',\n },\n {\n symbol: 'sAVAX',\n address: '0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be',\n },\n ],\n },\n [Network.BASE]: {\n chainId: Network.BASE, //8453\n addresses: {\n contracts: {\n balancerMinter: '0xc7E5ED1054A24Ef31D827E6F86caA58B3Bc168d7',\n multicall: '0xcA11bde05977b3631167028862bE2a173976CA11',\n poolDataQueries: '',\n ...addressesByNetwork[Network.BASE].contracts,\n },\n tokens: {\n bal: addressesByNetwork[Network.BASE].contracts.bal,\n wrappedNativeAsset: addressesByNetwork[Network.BASE].contracts.weth,\n ...addressesByNetwork[Network.BASE].tokens,\n },\n },\n urls: {\n subgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest',\n gaugesSubgraph:\n 'https://api.studio.thegraph.com/query/24660/balancer-gauges-base/version/latest',\n blockNumberSubgraph:\n 'https://api.studio.thegraph.com/query/48427/bleu-base-blocks/version/latest',\n },\n thirdParty: {\n coingecko: {\n nativeAssetId: 'eth',\n platformId: 'base',\n },\n },\n averageBlockTime: 2,\n pools: {},\n poolsToIgnore: [],\n sorConnectingTokens: [\n {\n symbol: 'weth',\n address: '0x4200000000000000000000000000000000000006',\n },\n ],\n sorTriPathMidPoolIds: [\n '0x2db50a0e0310723ef0c2a165cb9a9f80d772ba2f00020000000000000000000d', // weth/staBal\n ],\n },\n};\n\nexport const networkAddresses = (\n chainId: number\n): BalancerNetworkConfig['addresses'] =>\n BALANCER_NETWORK_CONFIG[chainId as Network].addresses;\n","export enum BalancerErrorCode {\n ABOVE_MAX_TOKENS = 'ABOVE_MAX_TOKENS',\n BELOW_MIN_TOKENS = 'BELOW_MIN_TOKENS',\n EXIT_DELTA_AMOUNTS = 'EXIT_DELTA_AMOUNTS',\n FEE_PROVIDER_NOT_PROVIDED = 'FEE_PROVIDER_NOT_PROVIDED',\n GAUGES_HELPER_ADDRESS_NOT_PROVIDED = 'GAUGES_HELPER_ADDRESS_NOT_PROVIDED',\n GAUGES_NOT_FOUND = 'GAUGES_NOT_FOUND',\n GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED = 'GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED',\n GAUGES_REWARD_TOKEN_EMPTY = 'GAUGES_REWARD_TOKEN_EMPTY',\n ILLEGAL_PARAMETER = 'ILLEGAL_PARAMETER',\n INTERNAL_ERROR_INVALID_ABI = 'INTERNAL_ERROR_INVALID_ABI',\n INPUT_LENGTH_MISMATCH = 'INPUT_LENGTH_MISMATCH',\n INPUT_OUT_OF_BOUNDS = 'INPUT_OUT_OF_BOUNDS',\n INPUT_TOKEN_INVALID = 'INPUT_TOKEN_INVALID',\n INVALID_PROTOCOL_ID = 'INVALID_PROTOCOL_ID',\n INVALID_SWAP_FEE_PERCENTAGE = 'INVALID_SWAP_FEE_PERCENTAGE',\n INVALID_WEIGHTS = 'INVALID_WEIGHTS',\n JOIN_DELTA_AMOUNTS = 'JOIN_DELTA_AMOUNTS',\n JOIN_WITH_ZERO_AMOUNT = 'JOIN_WITH_ZERO_AMOUNT',\n MISSING_AMP = 'MISSING_AMP',\n MISSING_DECIMALS = 'MISSING_DECIMALS',\n MISSING_PRICE_RATE = 'MISSING_PRICE_RATE',\n MISSING_TOKENS = 'MISSING_TOKENS',\n MISSING_WEIGHT = 'MISSING_WEIGHT',\n NO_POOL_DATA = 'NO_POOL_DATA',\n NO_VALUE_PARAMETER = 'NO_VALUE_PARAMETER',\n POOL_DOESNT_EXIST = 'POOL_DOESNT_EXIST',\n QUERY_BATCH_SWAP = 'QUERY_BATCH_SWAP',\n RELAY_SWAP_AMOUNTS = 'RELAY_SWAP_AMOUNTS',\n REWARD_TOKEN_ZERO = 'REWARD_TOKEN_ZERO',\n TIMESTAMP_IN_THE_FUTURE = 'TIMESTAMP_IN_THE_FUTURE',\n TOKEN_MISMATCH = 'TOKEN_MISMATCH',\n UNSUPPORTED_PAIR = 'UNSUPPORTED_PAIR',\n UNSUPPORTED_POOL_TYPE = 'UNSUPPORTED_POOL_TYPE',\n UNSUPPORTED_POOL_TYPE_VERSION = 'UNSUPPORTED_POOL_TYPE_VERSION',\n}\n\nexport class BalancerError extends Error {\n constructor(public code: BalancerErrorCode) {\n super(BalancerError.getMessage(code));\n this.name = 'BalancerError';\n }\n\n static getMessage(code: BalancerErrorCode): string {\n switch (code) {\n case BalancerErrorCode.ABOVE_MAX_TOKENS:\n return 'the array contains more tokens than the maximum allowed';\n case BalancerErrorCode.BELOW_MIN_TOKENS:\n return 'the array does not contain the minimum quantity of tokens';\n case BalancerErrorCode.EXIT_DELTA_AMOUNTS:\n return 'Error when checking exit call deltas';\n case BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED:\n return 'Fee Provider Repository has not been provided';\n case BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED:\n return 'Liquidity Gauges Helper Contract address has not been provided';\n case BalancerErrorCode.GAUGES_NOT_FOUND:\n return 'Liquidity Gauges not found with given addresses';\n case BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED:\n return 'Liquidity Gauges Reward Minter Contract address has not been provided';\n case BalancerErrorCode.GAUGES_REWARD_TOKEN_EMPTY:\n return 'No Reward Tokens for Liquidity Gauges provided';\n case BalancerErrorCode.INPUT_LENGTH_MISMATCH:\n return 'input length mismatch';\n case BalancerErrorCode.INPUT_OUT_OF_BOUNDS:\n return 'input out of bounds';\n case BalancerErrorCode.INPUT_TOKEN_INVALID:\n return 'input token invalid';\n case BalancerErrorCode.INVALID_PROTOCOL_ID:\n return 'The provided protocol id does not correspond to a protocol';\n case BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE:\n return 'The swap fee needs to be greater than zero and less than 1e17(10%)';\n case BalancerErrorCode.INVALID_WEIGHTS:\n return 'The sum of the weights needs to be equal to 1e18(100%)';\n case BalancerErrorCode.JOIN_DELTA_AMOUNTS:\n return 'Error when checking join call deltas';\n case BalancerErrorCode.JOIN_WITH_ZERO_AMOUNT:\n return 'Cant join pool with 0 amount of token in';\n case BalancerErrorCode.MISSING_AMP:\n return 'missing amp';\n case BalancerErrorCode.MISSING_DECIMALS:\n return 'missing decimals';\n case BalancerErrorCode.MISSING_PRICE_RATE:\n return 'missing price rate';\n case BalancerErrorCode.MISSING_TOKENS:\n return 'missing tokens';\n case BalancerErrorCode.MISSING_WEIGHT:\n return 'missing weight';\n case BalancerErrorCode.NO_POOL_DATA:\n return 'no pool data';\n case BalancerErrorCode.NO_VALUE_PARAMETER:\n return 'Illegal value passed as parameter';\n case BalancerErrorCode.POOL_DOESNT_EXIST:\n return 'balancer pool does not exist';\n case BalancerErrorCode.RELAY_SWAP_AMOUNTS:\n return 'Error when checking swap amounts';\n case BalancerErrorCode.REWARD_TOKEN_ZERO:\n return 'All Zero Values for Reward Tokens';\n case BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE:\n return 'Timestamp cannot be in the future';\n case BalancerErrorCode.TOKEN_MISMATCH:\n return 'token mismatch';\n case BalancerErrorCode.UNSUPPORTED_PAIR:\n return 'unsupported token pair';\n case BalancerErrorCode.UNSUPPORTED_POOL_TYPE:\n return 'unsupported pool type';\n default:\n return 'Unknown error';\n }\n }\n}\n","import { ONE, SolidityMaths } from '@/lib/utils/solidityMaths';\n\nexport function calcPriceImpact(\n bptAmount: bigint,\n bptZeroPriceImpact: bigint,\n isJoin: boolean\n): bigint {\n if (isJoin) return calcPriceImpactJoin(bptAmount, bptZeroPriceImpact);\n else return calcPriceImpactExit(bptAmount, bptZeroPriceImpact);\n}\n\nfunction calcPriceImpactJoin(\n bptAmount: bigint,\n bptZeroPriceImpact: bigint\n): bigint {\n // 1 - (bptAmount/bptZeroPI)\n const pi = ONE - SolidityMaths.divDownFixed(bptAmount, bptZeroPriceImpact);\n return pi < 0 ? BigInt(0) : pi;\n}\nfunction calcPriceImpactExit(\n bptAmount: bigint,\n bptZeroPriceImpact: bigint\n): bigint {\n // (bptAmount/bptZeroPI) - 1\n const pi = SolidityMaths.divDownFixed(bptAmount, bptZeroPriceImpact) - ONE;\n return pi < 0 ? BigInt(0) : pi;\n}\n","import { BZERO, SolidityMaths } from './solidityMaths';\n\nconst AMP_PRECISION = BigInt(1e3);\n\nexport function bptSpotPrice(\n amp: bigint,\n balances: bigint[],\n bptSupply: bigint,\n tokenIndexIn: number\n): bigint {\n const totalCoins = balances.length;\n const D = _calculateInvariant(amp, balances, true);\n let S = BZERO;\n let D_P = D / BigInt(totalCoins);\n for (let i = 0; i < totalCoins; i++) {\n if (i != tokenIndexIn) {\n S = S + balances[i];\n D_P = (D_P * D) / (BigInt(totalCoins) * balances[i]);\n }\n }\n const x = balances[tokenIndexIn];\n const alpha = amp * BigInt(totalCoins);\n const beta = alpha * S; // units: 10 ** 21\n const gamma = BigInt(AMP_PRECISION) - alpha;\n const partial_x = BigInt(2) * alpha * x + beta + gamma * D;\n const minus_partial_D =\n D_P * BigInt(totalCoins + 1) * AMP_PRECISION - gamma * x;\n const ans = SolidityMaths.divUpFixed(\n (partial_x * bptSupply) / minus_partial_D,\n D\n );\n return ans;\n}\n\nfunction _calculateInvariant(\n amp: bigint,\n balances: bigint[],\n roundUp: boolean\n): bigint {\n /**********************************************************************************************\n // invariant //\n // D = invariant D^(n+1) //\n // A = amplification coefficient A n^n S + D = A D n^n + ----------- //\n // S = sum of balances n^n P //\n // P = product of balances //\n // n = number of tokens //\n *********x************************************************************************************/\n\n // We support rounding up or down.\n\n let sum = BZERO;\n const numTokens = balances.length;\n for (let i = 0; i < numTokens; i++) {\n sum = sum + balances[i];\n }\n if (sum == BZERO) {\n return BZERO;\n }\n\n let prevInvariant = BZERO;\n let invariant = sum;\n const ampTimesTotal = amp * BigInt(numTokens);\n\n for (let i = 0; i < 255; i++) {\n let P_D = balances[0] * BigInt(numTokens);\n for (let j = 1; j < numTokens; j++) {\n P_D = SolidityMaths.div(\n SolidityMaths.mul(\n SolidityMaths.mul(P_D, balances[j]),\n BigInt(numTokens)\n ),\n invariant,\n roundUp\n );\n }\n prevInvariant = invariant;\n invariant = SolidityMaths.div(\n SolidityMaths.mul(\n SolidityMaths.mul(BigInt(numTokens), invariant),\n invariant\n ) +\n SolidityMaths.div(\n SolidityMaths.mul(SolidityMaths.mul(ampTimesTotal, sum), P_D),\n AMP_PRECISION,\n roundUp\n ),\n SolidityMaths.mul(BigInt(numTokens + 1), invariant) +\n // No need to use checked arithmetic for the amp precision, the amp is guaranteed to be at least 1\n SolidityMaths.div(\n SolidityMaths.mul(ampTimesTotal - AMP_PRECISION, P_D),\n AMP_PRECISION,\n !roundUp\n ),\n roundUp\n );\n\n if (invariant > prevInvariant) {\n if (invariant - prevInvariant <= 1) {\n return invariant;\n }\n } else if (prevInvariant - invariant <= 1) {\n return invariant;\n }\n }\n\n throw new Error('Errors.STABLE_INVARIANT_DIDNT_CONVERGE');\n}\n","import { PriceImpactConcern } from '@/modules/pools/pool-types/concerns/types';\nimport { ONE, BZERO, _upscale } from '@/lib/utils/solidityMaths';\nimport { calcPriceImpact } from '@/modules/pricing/priceImpact';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Pool } from '@/types';\nimport { bptSpotPrice } from '@/lib/utils/stableMathHelpers';\nimport { parsePoolInfo } from '@/lib/utils';\n\n// Note: this concern is used by Stable, MetaStable and StablePhantom pools\nexport class StablePoolPriceImpact implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n // upscales amp, swapfee, totalshares\n const {\n ampWithPrecision,\n scalingFactorsWithoutBpt,\n totalSharesEvm,\n upScaledBalancesWithoutBpt,\n } = parsePoolInfo(pool);\n\n // Check against array without BPT because concern is being reused by stablePhantom pools\n // Stable and MetaStable pools don't have BPT in the token list, so array without BPT is the same as the original array\n if (tokenAmounts.length !== upScaledBalancesWithoutBpt.length)\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n\n let bptZeroPriceImpact = BZERO;\n for (let i = 0; i < upScaledBalancesWithoutBpt.length; i++) {\n const price = bptSpotPrice(\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n totalSharesEvm,\n i\n );\n const amountUpscaled = _upscale(\n tokenAmounts[i],\n scalingFactorsWithoutBpt[i]\n );\n const newTerm = (price * amountUpscaled) / ONE;\n bptZeroPriceImpact += newTerm;\n }\n return bptZeroPriceImpact;\n }\n\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n const bptZeroPriceImpact = this.bptZeroPriceImpact(pool, tokenAmounts);\n return calcPriceImpact(bptAmount, bptZeroPriceImpact, isJoin).toString();\n }\n}\n","import { BigNumber, parseFixed } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport * as SOR from '@balancer-labs/sor';\nimport {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n ExitExactBPTInParameters,\n ExitExactTokensOutParameters,\n ExitPool,\n ExitPoolAttributes,\n} from '../types';\nimport { AssetHelpers, isSameAddress, parsePoolInfo } from '@/lib/utils';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { addSlippage, subSlippage } from '@/lib/utils/slippageHelper';\nimport { balancerVault } from '@/lib/constants/config';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport {\n _downscaleDown,\n _downscaleDownArray,\n _upscaleArray,\n} from '@/lib/utils/solidityMaths';\nimport { Pool } from '@/types';\nimport { BasePoolEncoder } from '@/pool-base';\nimport { StablePoolPriceImpact } from '../stable/priceImpact.concern';\n\ninterface SortedValues {\n poolTokens: string[];\n ampWithPrecision: bigint;\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n}\n\ntype ExactBPTInSortedValues = SortedValues & {\n scalingFactors: bigint[];\n singleTokenOutIndex: number;\n};\n\ntype ExactTokensOutSortedValues = SortedValues & {\n upScaledAmountsOut: bigint[];\n downScaledAmountsOut: string[];\n};\ntype CalcBptInGivenExactTokensOutParams = ExactTokensOutSortedValues &\n Pick;\n\ntype SortValuesParams = {\n pool: Pool;\n wrappedNativeAsset: string;\n shouldUnwrapNativeAsset?: boolean;\n};\n\ntype SortValuesExactBptInParams = SortValuesParams & {\n singleTokenOut?: string;\n};\n\ntype SortValuesExactTokensOutParams = SortValuesParams & {\n amountsOut: string[];\n tokensOut: string[];\n};\n\ntype EncodeExitParams = Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'toInternalBalance'\n> & {\n poolTokens: string[];\n poolId: string;\n userData: string;\n minAmountsOut: string[];\n};\n\nexport class StablePoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n });\n const sortedValues = this.sortValuesExitExactBptIn({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n });\n const { minAmountsOut, expectedAmountsOut } =\n sortedValues.singleTokenOutIndex >= 0\n ? this.calcTokenOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n })\n : this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData =\n sortedValues.singleTokenOutIndex >= 0\n ? StablePoolEncoder.exitExactBPTInForOneTokenOut(\n bptIn,\n sortedValues.singleTokenOutIndex\n )\n : StablePoolEncoder.exitExactBPTInForTokensOut(bptIn);\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n this.checkInputsExactTokensOut(amountsOut, tokensOut, pool);\n\n const sortedValues = this.sortValuesExitExactTokensOut({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n });\n const { expectedBPTIn, maxBPTIn } = this.calcBptInGivenExactTokensOut({\n ...sortedValues,\n slippage,\n });\n\n const { downScaledAmountsOut, poolTokens } = sortedValues;\n const userData = StablePoolEncoder.exitBPTInForExactTokensOut(\n downScaledAmountsOut,\n maxBPTIn\n );\n const encodedData = this.encodeExitPool({\n poolId: pool.id,\n userData,\n poolTokens,\n minAmountsOut: downScaledAmountsOut,\n exiter,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n downScaledAmountsOut.map(BigInt),\n BigInt(expectedBPTIn),\n false\n );\n\n return {\n ...encodedData,\n expectedBPTIn,\n maxBPTIn,\n priceImpact,\n };\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut: undefined,\n pool,\n shouldUnwrapNativeAsset: false,\n });\n const sortedValues = parsePoolInfo(pool);\n const { minAmountsOut, expectedAmountsOut } =\n this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n singleTokenOutIndex: -1,\n bptIn,\n slippage,\n });\n\n const userData = BasePoolEncoder.recoveryModeExit(bptIn);\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt inserted in the transaction\n * @param singleTokenOut (optional) the address of the single token that will be withdrawn, if null|undefined, all tokens will be withdrawn proportionally.\n * @param pool the pool that is being exited\n * @param shouldUnwrapNativeAsset Set true if the weth should be unwrapped to Eth\n */\n checkInputsExactBPTIn = ({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n }: Pick<\n ExitExactBPTInParameters,\n 'bptIn' | 'singleTokenOut' | 'pool' | 'shouldUnwrapNativeAsset'\n >): void => {\n if (!bptIn.length || parseFixed(bptIn, 18).isNegative()) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n if (\n singleTokenOut &&\n singleTokenOut !== AddressZero &&\n !pool.tokens\n .map((t) => t.address)\n .some((a) => isSameAddress(a, singleTokenOut))\n ) {\n throw new BalancerError(BalancerErrorCode.TOKEN_MISMATCH);\n }\n\n if (!shouldUnwrapNativeAsset && singleTokenOut === AddressZero)\n throw new Error(\n 'shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values'\n );\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n /**\n * Checks if the input of buildExitExactTokensOut is valid\n * @param amountsOut Must have an amount for each token, if the user will not withdraw any amount for a token, the value shall be '0'\n * @param tokensOut Must contain all the tokens of the pool\n * @param pool The pool that is being exited\n */\n checkInputsExactTokensOut = (\n amountsOut: string[],\n tokensOut: string[],\n pool: Pool\n ): void => {\n if (\n tokensOut.length != amountsOut.length ||\n tokensOut.length != pool.tokensList.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n sortValuesExitExactBptIn = ({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n }: SortValuesExactBptInParams): ExactBPTInSortedValues => {\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n // Parse pool info into EVM amounts in order to match amountsIn scalling\n const { poolTokens } = parsedPoolInfo;\n let singleTokenOutIndex = -1;\n if (singleTokenOut) {\n singleTokenOutIndex = poolTokens.indexOf(singleTokenOut);\n }\n return {\n ...parsedPoolInfo,\n singleTokenOutIndex,\n };\n };\n sortValuesExitExactTokensOut = ({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n }: SortValuesExactTokensOutParams): ExactTokensOutSortedValues => {\n const shouldUnwrapNativeAsset = tokensOut.some((a) => a === AddressZero);\n // Parse pool info into EVM amounts in order to match amountsOut scaling\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n const { scalingFactors } = parsedPoolInfo;\n\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts in into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, downScaledAmountsOut] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n // Maths should use upscaled amounts, e.g. 1USDC => 1e18 not 1e6\n const upScaledAmountsOut = _upscaleArray(\n downScaledAmountsOut.map((a) => BigInt(a)),\n scalingFactors.map((a) => BigInt(a))\n );\n\n return {\n ...parsedPoolInfo,\n upScaledAmountsOut,\n downScaledAmountsOut,\n };\n };\n calcTokenOutGivenExactBptIn = ({\n poolTokens,\n ampWithPrecision,\n upScaledBalances,\n totalSharesEvm,\n swapFeeEvm,\n singleTokenOutIndex,\n bptIn,\n slippage,\n scalingFactors,\n }: Pick<\n ExactBPTInSortedValues,\n | 'poolTokens'\n | 'ampWithPrecision'\n | 'upScaledBalances'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n | 'singleTokenOutIndex'\n | 'scalingFactors'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n // Calculate amount out given BPT in\n const amountOut = SOR.StableMathBigInt._calcTokenOutGivenExactBptIn(\n ampWithPrecision,\n upScaledBalances,\n singleTokenOutIndex,\n BigInt(bptIn),\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n const downscaledAmountOut = _downscaleDown(\n BigInt(amountOut) - BigInt(1), // The -1 is to solve rounding errors, sometimes the amount comes 1 point lower than expected\n scalingFactors[singleTokenOutIndex]\n ).toString();\n\n const expectedAmountsOut = Array(poolTokens.length).fill('0');\n const minAmountsOut = Array(poolTokens.length).fill('0');\n\n expectedAmountsOut[singleTokenOutIndex] = downscaledAmountOut;\n // Apply slippage tolerance\n minAmountsOut[singleTokenOutIndex] = subSlippage(\n BigNumber.from(downscaledAmountOut),\n BigNumber.from(slippage)\n ).toString();\n\n return { minAmountsOut, expectedAmountsOut };\n };\n\n calcTokensOutGivenExactBptIn = ({\n upScaledBalances,\n totalSharesEvm,\n scalingFactors,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n | 'upScaledBalances'\n | 'totalSharesEvm'\n | 'scalingFactors'\n | 'singleTokenOutIndex'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n const amountsOut = SOR.StableMathBigInt._calcTokensOutGivenExactBptIn(\n upScaledBalances,\n BigInt(bptIn),\n totalSharesEvm\n );\n // Maths return numbers scaled to 18 decimals. Must scale down to token decimals.\n const amountsOutScaledDown = _downscaleDownArray(\n amountsOut,\n scalingFactors\n );\n\n const expectedAmountsOut = amountsOutScaledDown.map((amount) =>\n amount.toString()\n );\n // Apply slippage tolerance\n const minAmountsOut = amountsOutScaledDown.map((amount) => {\n const minAmount = subSlippage(\n BigNumber.from(amount),\n BigNumber.from(slippage)\n );\n return minAmount.toString();\n });\n return { minAmountsOut, expectedAmountsOut };\n };\n calcBptInGivenExactTokensOut = ({\n ampWithPrecision,\n upScaledBalances,\n upScaledAmountsOut,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: CalcBptInGivenExactTokensOutParams): {\n maxBPTIn: string;\n expectedBPTIn: string;\n } => {\n // Calculate expected BPT in given tokens out\n const bptIn = SOR.StableMathBigInt._calcBptInGivenExactTokensOut(\n ampWithPrecision,\n upScaledBalances,\n upScaledAmountsOut,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n // Apply slippage tolerance\n const maxBPTIn = addSlippage(\n BigNumber.from(bptIn),\n BigNumber.from(slippage)\n ).toString();\n return { maxBPTIn, expectedBPTIn: bptIn };\n };\n\n encodeExitPool = ({\n poolId,\n exiter,\n poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n }: EncodeExitParams): ExitPoolAttributes => {\n const to = balancerVault;\n const functionName = 'exitPool';\n const attributes: ExitPool = {\n poolId,\n sender: exiter,\n recipient: exiter,\n exitPoolRequest: {\n assets: poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n },\n };\n // Encode transaction data into an ABI byte string which can be sent to the network to be executed\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.exitPoolRequest,\n ]);\n return { data, to, functionName, attributes };\n };\n}\n","import * as SOR from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { balancerVault } from '@/lib/constants/config';\nimport { AssetHelpers, getEthValue, parsePoolInfo } from '@/lib/utils';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { _upscaleArray } from '@/lib/utils/solidityMaths';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport { Pool } from '@/types';\n\nimport { StablePoolPriceImpact } from '../stable/priceImpact.concern';\nimport {\n JoinConcern,\n JoinPool,\n JoinPoolAttributes,\n JoinPoolParameters,\n} from '../types';\nimport { AddressZero } from '@ethersproject/constants';\n\ntype SortedValues = {\n poolTokens: string[];\n ampWithPrecision: bigint;\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n upScaledAmountsIn: bigint[];\n sortedAmountsIn: string[];\n};\n\ntype EncodeJoinPoolParams = {\n joiner: string;\n poolId: string;\n minBPTOut: string;\n} & Pick &\n Pick;\n\nexport class StablePoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n this.checkInputs(tokensIn, amountsIn, pool);\n const sortedValues = this.sortValues({\n pool,\n wrappedNativeAsset,\n tokensIn,\n amountsIn,\n });\n\n const { expectedBPTOut, minBPTOut } = this.calcBptOutGivenExactTokensIn({\n ...sortedValues,\n slippage,\n });\n\n const encodedData = this.encodeJoinPool({\n joiner,\n amountsIn,\n tokensIn,\n poolId: pool.id,\n minBPTOut,\n ...sortedValues,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n sortedValues.sortedAmountsIn.map(BigInt),\n BigInt(expectedBPTOut),\n true\n );\n\n return {\n ...encodedData,\n minBPTOut,\n expectedBPTOut,\n priceImpact,\n };\n };\n\n /**\n * Check if the input parameters of the buildJoin function are right\n * @param amountsIn Must have an amount for each token, if the user will not deposit any amount for a token, the value shall be '0'\n * @param tokensIn Must contain all the tokens of the pool\n * @param pool The pool that is being joined\n */\n checkInputs = (amountsIn: string[], tokensIn: string[], pool: Pool): void => {\n if (\n tokensIn.length != amountsIn.length ||\n tokensIn.length != pool.tokensList.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n\n sortValues = ({\n pool,\n wrappedNativeAsset,\n amountsIn,\n tokensIn,\n }: Pick<\n JoinPoolParameters,\n 'pool' | 'wrappedNativeAsset' | 'amountsIn' | 'tokensIn'\n >): SortedValues => {\n // Parse pool info into EVM amounts in order to match amountsIn scalling\n const {\n poolTokens,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n scalingFactors,\n upScaledBalances,\n } = parsePoolInfo(pool, wrappedNativeAsset, tokensIn.includes(AddressZero));\n\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts in into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, sortedAmountsIn] = assetHelpers.sortTokens(\n tokensIn,\n amountsIn\n ) as [string[], string[]];\n\n // Maths should use upscaled amounts, e.g. 1USDC => 1e18 not 1e6\n const upScaledAmountsIn = _upscaleArray(\n sortedAmountsIn.map((a) => BigInt(a)),\n scalingFactors.map((a) => BigInt(a))\n );\n return {\n poolTokens,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n upScaledBalances,\n upScaledAmountsIn,\n sortedAmountsIn,\n };\n };\n\n calcBptOutGivenExactTokensIn = ({\n ampWithPrecision,\n upScaledBalances,\n upScaledAmountsIn,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: Pick &\n Pick<\n SortedValues,\n | 'ampWithPrecision'\n | 'upScaledBalances'\n | 'upScaledAmountsIn'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n >): { expectedBPTOut: string; minBPTOut: string } => {\n const expectedBPTOut = SOR.StableMathBigInt._calcBptOutGivenExactTokensIn(\n ampWithPrecision,\n upScaledBalances,\n upScaledAmountsIn,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n const minBPTOut = subSlippage(\n BigNumber.from(expectedBPTOut),\n BigNumber.from(slippage)\n ).toString();\n\n return {\n expectedBPTOut,\n minBPTOut,\n };\n };\n\n encodeJoinPool = ({\n poolId,\n joiner,\n poolTokens,\n sortedAmountsIn,\n amountsIn,\n tokensIn,\n minBPTOut,\n }: EncodeJoinPoolParams): Pick<\n JoinPoolAttributes,\n 'value' | 'data' | 'to' | 'functionName' | 'attributes'\n > => {\n const userData = StablePoolEncoder.joinExactTokensInForBPTOut(\n sortedAmountsIn,\n minBPTOut\n );\n\n const to = balancerVault;\n const functionName = 'joinPool';\n const attributes: JoinPool = {\n poolId,\n sender: joiner,\n recipient: joiner,\n joinPoolRequest: {\n assets: poolTokens,\n maxAmountsIn: sortedAmountsIn,\n userData,\n fromInternalBalance: false,\n },\n };\n const vaultInterface = Vault__factory.createInterface();\n // encode transaction data into an ABI byte string which can be sent to the network to be executed\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ]);\n\n // If joining with a native asset value must be set in call\n const value = getEthValue(tokensIn, amountsIn);\n\n return {\n attributes,\n data,\n functionName,\n to,\n value,\n };\n };\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { parseFixed } from '@/lib/utils/math';\n\nconst SCALING_FACTOR = 18;\n\nexport class StablePoolLiquidity implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = BigNumber.from(0);\n let sumValue = BigNumber.from(0);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(token.price.usd.toString(), SCALING_FACTOR);\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n\n const value = balance.mul(price);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance.gt(0)) {\n const avgPrice = sumValue.div(sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n\n const value = balance.mul(avgPrice);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n }\n\n return formatFixed(sumValue, SCALING_FACTOR * 2).toString();\n }\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, StablePool, ZERO } from '@balancer-labs/sor';\nimport { Pool } from '@/types';\n\nexport class StablePoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const stablePool = StablePool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = stablePool.parsePoolPairData(tokenIn, tokenOut);\n return stablePool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n }\n}\n","import { StablePoolExit } from './concerns/stable/exit.concern';\nimport { StablePoolJoin } from './concerns/stable/join.concern';\nimport { StablePoolLiquidity } from './concerns/stable/liquidity.concern';\nimport { StablePoolSpotPrice } from './concerns/stable/spotPrice.concern';\nimport { StablePoolPriceImpact } from './concerns/stable/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class Stable implements PoolType {\n constructor(\n public exit: ExitConcern = new StablePoolExit(),\n public join: JoinConcern = new StablePoolJoin(),\n public liquidity: LiquidityConcern = new StablePoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new StablePoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new StablePoolPriceImpact()\n ) {}\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, PhantomStablePool, ZERO } from '@balancer-labs/sor';\nimport { Pool } from '@/types';\n\nexport class PhantomStablePoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const metaStablePool = PhantomStablePool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = metaStablePool.parsePoolPairData(tokenIn, tokenOut);\n return metaStablePool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n }\n}\n","import { StableMathBigInt } from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { balancerVault } from '@/lib/constants/config';\nimport {\n AssetHelpers,\n parsePoolInfo,\n insert,\n reorderArrays,\n getEthValue,\n} from '@/lib/utils';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { _upscaleArray } from '@/lib/utils/solidityMaths';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { Pool } from '@/types';\n\nimport { StablePoolPriceImpact } from '../stable/priceImpact.concern';\nimport {\n JoinPoolParameters,\n JoinConcern,\n JoinPoolAttributes,\n JoinPool,\n} from '../types';\nimport { AddressZero } from '@ethersproject/constants';\n\ninterface SortedValues {\n sortedAmountsIn: string[];\n scalingFactorsWithoutBpt: bigint[];\n upScaledBalancesWithoutBpt: bigint[];\n ampWithPrecision: bigint;\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n bptIndex: number;\n poolTokens: string[];\n}\n\ntype SortedInputs = SortedValues &\n Pick & {\n poolId: string;\n };\n\nexport class ComposableStablePoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n this.checkInputs(tokensIn, amountsIn, pool.tokensList);\n\n const sortedValues = this.sortValuesBasedOnPoolVersion({\n pool,\n wrappedNativeAsset,\n amountsIn,\n tokensIn,\n });\n\n const encodedData = this.buildExactTokensInForBPTOut({\n ...sortedValues,\n slippage,\n joiner,\n poolId: pool.id,\n });\n\n // If joining with a native asset value must be set in call\n const value = getEthValue(tokensIn, amountsIn);\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n sortedValues.sortedAmountsIn.map(BigInt),\n BigInt(encodedData.expectedBPTOut),\n true\n );\n\n return {\n ...encodedData,\n to: balancerVault,\n value,\n priceImpact,\n };\n };\n\n /**\n * Sorts inputs and pool value to be correct order and scale for maths and Vault interaction.\n * @param pool Pool data\n * @param wrappedNativeAsset (Used for sorting)\n * @param amountsIn Downscaled amounts in\n * @param tokensIn Addresses of token in\n * @returns Sorted values\n */\n sortValuesBasedOnPoolVersion({\n pool,\n wrappedNativeAsset,\n amountsIn,\n tokensIn,\n }: Pick<\n JoinPoolParameters,\n 'pool' | 'wrappedNativeAsset' | 'amountsIn' | 'tokensIn'\n >): SortedValues {\n /**\n * V1: Does not have proportional exits.\n * V2: Reintroduced proportional exits. Has vulnerability.\n * V3: Fixed vulnerability. Functionally the same as V2.\n * V4: Update to use new create method with new salt parameter\n * V5: Fixed vulnerability. Functionally the same as V4.\n */\n return this.sortV1(wrappedNativeAsset, tokensIn, amountsIn, pool);\n // Not release yet and needs tests to confirm\n // else if (values.pool.poolTypeVersion === 5)\n // sortedValues = this.sortV4(\n // values.tokensIn,\n // values.amountsIn,\n // values.pool\n // );\n }\n\n /**\n * Ensure tokensIn and amountsIn match pool tokens length\n * @param tokensIn\n * @param amountsIn\n * @param poolTokens\n */\n checkInputs(\n tokensIn: string[],\n amountsIn: string[],\n poolTokens: string[]\n ): void {\n if (\n tokensIn.length != amountsIn.length ||\n tokensIn.length != poolTokens.length - 1\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n }\n\n /**\n * Encodes user data with slippage applied to expected BPT out.\n * @param expectedBPTOut\n * @param slippage\n * @param amountsIn\n * @returns\n */\n encodeUserDataExactTokensInForBPTOut(\n expectedBPTOut: bigint,\n slippage: string,\n amountsIn: string[]\n ): { userData: string; minBPTOut: string } {\n const minBPTOut = subSlippage(\n BigNumber.from(expectedBPTOut),\n BigNumber.from(slippage)\n ).toString();\n\n //NEEDS TO ENCODE USER DATA WITHOUT BPT AMOUNT\n return {\n userData: ComposableStablePoolEncoder.joinExactTokensInForBPTOut(\n amountsIn, // No BPT amount\n minBPTOut\n ),\n minBPTOut,\n };\n }\n\n /**\n * Encode transaction data into an ABI byte string which can be sent to the network to be executed\n * @param poolId\n * @param sender\n * @param recipient\n * @param assetsWithBpt\n * @param encodedUserData\n * @param maxAmountsInWithBpt\n * @returns\n */\n encodeJoinPool(\n poolId: string,\n sender: string,\n recipient: string,\n assetsWithBpt: string[],\n encodedUserData: string,\n maxAmountsInWithBpt: string[]\n ): Pick {\n const functionName = 'joinPool';\n //assets AND maxAmountsIn NEEDS THE BPT VALUE IN THE ARRAY\n const attributes: JoinPool = {\n poolId,\n sender,\n recipient,\n joinPoolRequest: {\n assets: assetsWithBpt,\n maxAmountsIn: maxAmountsInWithBpt,\n userData: encodedUserData,\n fromInternalBalance: false,\n },\n };\n\n const vaultInterface = Vault__factory.createInterface();\n\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ]);\n\n return {\n functionName,\n attributes,\n data,\n };\n }\n\n /**\n * Sorts and scales values correctly for V1-V3 ComposableStable pool.\n * @param wrappedNativeAsset (Used for sorting)\n * @param tokensIn Addresses of token in\n * @param amountsIn Downscaled amounts in\n * @param pool Pool data\n * @returns Sorted values\n */\n sortV1(\n wrappedNativeAsset: string,\n tokensIn: string[],\n amountsIn: string[],\n pool: Pool\n ): SortedValues {\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts in into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, sortedAmountsIn] = assetHelpers.sortTokens(\n tokensIn,\n amountsIn\n ) as [string[], string[]];\n\n const {\n poolTokens,\n ampWithPrecision,\n swapFeeEvm,\n totalSharesEvm,\n bptIndex,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n } = parsePoolInfo(pool, wrappedNativeAsset, tokensIn.includes(AddressZero));\n return {\n sortedAmountsIn,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n bptIndex,\n poolTokens,\n };\n }\n\n buildExactTokensInForBPTOut(\n sortedValues: SortedInputs\n ): Pick<\n JoinPoolAttributes,\n 'minBPTOut' | 'functionName' | 'attributes' | 'data' | 'expectedBPTOut'\n > {\n const {\n sortedAmountsIn,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n bptIndex,\n poolTokens,\n slippage,\n poolId,\n joiner,\n } = sortedValues;\n // BPT out will be in correct scale and price rate is always 1e18 do doesn't need to be considered\n // Maths needs to have BPT values removed\n const expectedBPTOut = this.calcBptOutGivenExactTokensIn(\n sortedAmountsIn,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm\n );\n\n const userData = this.encodeUserDataExactTokensInForBPTOut(\n expectedBPTOut,\n slippage,\n sortedAmountsIn\n );\n\n const { functionName, data, attributes } = this.encodeJoinPool(\n poolId,\n joiner,\n joiner,\n poolTokens,\n userData.userData,\n insert(sortedAmountsIn, bptIndex, '0') // Adds value for BPT\n );\n\n return {\n functionName,\n data,\n attributes,\n minBPTOut: userData.minBPTOut,\n expectedBPTOut: expectedBPTOut.toString(),\n };\n }\n\n calcBptOutGivenExactTokensIn(\n amountsIn: string[],\n scalingFactorsWithoutBpt: bigint[],\n upScaledBalancesWithoutBpt: bigint[],\n ampWithPrecision: bigint,\n totalSharesEvm: bigint,\n swapFeeEvm: bigint\n ): bigint {\n /*\n Maths should use: \n - upscaled amounts, e.g. 1USDC = 1e18\n - rates (scaling factors should include these)\n */\n const upScaledAmountsIn = _upscaleArray(\n amountsIn.map(BigInt),\n scalingFactorsWithoutBpt.map(BigInt)\n );\n const expectedBPTOut = StableMathBigInt._calcBptOutGivenExactTokensIn(\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n upScaledAmountsIn, // Should not have BPT\n totalSharesEvm,\n swapFeeEvm\n );\n // BPT out will be in correct scale and price rate is always 1e18 do doesn't need to be considered\n return expectedBPTOut;\n }\n\n // This uses sorting where BPT is always at index 0.\n // Not currently released but keep for when it is.\n sortV4(tokensIn: string[], amountsIn: string[], pool: Pool): SortedValues {\n // This will keep ordering as read from Pool\n const {\n poolTokens,\n poolTokensWithoutBpt,\n ampWithPrecision,\n swapFeeEvm,\n totalSharesEvm,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n } = parsePoolInfo(pool);\n\n // Reorder amountsIn to match pool token order TODO - May have issues when adding native tokens to this mix.\n const [sortedAmountsIn] = reorderArrays(\n poolTokensWithoutBpt,\n tokensIn,\n amountsIn\n ) as [string[]];\n return {\n sortedAmountsIn,\n scalingFactorsWithoutBpt,\n upScaledBalancesWithoutBpt,\n ampWithPrecision,\n totalSharesEvm,\n swapFeeEvm,\n bptIndex: 0,\n poolTokens,\n };\n }\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\n\nimport * as SOR from '@balancer-labs/sor';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport {\n AssetHelpers,\n insert,\n isSameAddress,\n parsePoolInfo,\n} from '@/lib/utils';\nimport { addSlippage, subSlippage } from '@/lib/utils/slippageHelper';\nimport {\n _downscaleDown,\n _downscaleDownArray,\n _upscaleArray,\n} from '@/lib/utils/solidityMaths';\nimport { balancerVault } from '@/lib/constants/config';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { Pool } from '@/types';\nimport {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactBPTInParameters,\n ExitExactTokensOutAttributes,\n ExitExactTokensOutParameters,\n ExitPool,\n ExitPoolAttributes,\n} from '../types';\nimport { BasePoolEncoder } from '@/pool-base';\nimport { StablePoolPriceImpact } from '../stable/priceImpact.concern';\n\ninterface SortedValues {\n poolTokens: string[];\n ampWithPrecision: bigint;\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n bptIndex: number;\n upScaledBalancesWithoutBpt: bigint[];\n scalingFactors: bigint[];\n scalingFactorsWithoutBpt: bigint[];\n}\n\ntype ExactBPTInSortedValues = SortedValues & {\n singleTokenOutIndexWithoutBpt: number;\n};\ntype ExactTokensOutSortedValues = SortedValues & {\n upScaledAmountsOutWithoutBpt: bigint[];\n downscaledAmountsOutWithoutBpt: string[];\n downscaledAmountsOutWithBpt: string[];\n};\n\ntype CalcBptInGivenExactTokensOutParams = ExactTokensOutSortedValues &\n Pick;\n\ntype SortValuesParams = {\n pool: Pool;\n wrappedNativeAsset: string;\n shouldUnwrapNativeAsset?: boolean;\n};\n\ntype SortValuesExactBptInParams = SortValuesParams & {\n singleTokenOut?: string;\n};\n\ntype SortValuesExactTokensOutParams = SortValuesParams & {\n amountsOut: string[];\n tokensOut: string[];\n};\n\ntype EncodeExitParams = Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'toInternalBalance'\n> & {\n poolTokens: string[];\n poolId: string;\n userData: string;\n minAmountsOut: string[];\n};\n\nexport class ComposableStablePoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n });\n\n const sortedValues = this.sortValuesExitExactBptIn({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n });\n\n const { minAmountsOut, expectedAmountsOut } =\n sortedValues.singleTokenOutIndexWithoutBpt >= 0\n ? this.calcTokenOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n })\n : this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData =\n sortedValues.singleTokenOutIndexWithoutBpt >= 0\n ? ComposableStablePoolEncoder.exitExactBPTInForOneTokenOut(\n bptIn,\n sortedValues.singleTokenOutIndexWithoutBpt\n )\n : ComposableStablePoolEncoder.exitExactBPTInForAllTokensOut(bptIn);\n\n // MinAmounts needs a value for BPT for encoding\n const minAmountsOutWithBpt = insert(\n minAmountsOut,\n sortedValues.bptIndex,\n '0'\n );\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n userData,\n minAmountsOut: minAmountsOutWithBpt,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n this.checkInputsExactTokensOut(tokensOut, amountsOut, pool);\n const sortedValues = this.sortValuesExitExactTokensOut({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n });\n\n const { bptIn, maxBPTIn } = this.calcBptInGivenExactTokensOut({\n ...sortedValues,\n slippage,\n });\n\n // Have to make sure amountsOut does not have value for BPT index\n const userData = ComposableStablePoolEncoder.exitBPTInForExactTokensOut(\n sortedValues.downscaledAmountsOutWithoutBpt,\n maxBPTIn\n );\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n minAmountsOut: sortedValues.downscaledAmountsOutWithBpt,\n userData,\n exiter,\n poolId: pool.id,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n sortedValues.downscaledAmountsOutWithoutBpt.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n maxBPTIn,\n expectedBPTIn: bptIn,\n priceImpact,\n };\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n this.checkInputsRecoveryExit({\n bptIn,\n pool,\n });\n // Recovery exits don't use rates. We use them as part of scalingFactor so default to 1 incase of issues\n pool.tokens.forEach((t) => (t.priceRate = '1'));\n\n const sortedValues = parsePoolInfo(pool);\n\n const { minAmountsOut, expectedAmountsOut } =\n this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData = BasePoolEncoder.recoveryModeExit(bptIn);\n\n // MinAmounts needs a value for BPT for encoding\n const minAmountsOutWithBpt = insert(\n minAmountsOut,\n sortedValues.bptIndex,\n '0'\n );\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n userData,\n minAmountsOut: minAmountsOutWithBpt,\n toInternalBalance,\n });\n\n const priceImpactConcern = new StablePoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt amoun in EVM scale\n * @param singleTokenOut (optional) the address of the single token that will be withdrawn, if null|undefined, all tokens will be withdrawn proportionally.\n * @param pool the pool that is being exited\n * @param shouldUnwrapNativeAsset Set true if the weth should be unwrapped to Eth\n */\n checkInputsExactBPTIn = ({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n }: Pick<\n ExitExactBPTInParameters,\n 'bptIn' | 'singleTokenOut' | 'pool' | 'shouldUnwrapNativeAsset'\n >): void => {\n if (BigNumber.from(bptIn).lte(0)) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n if (!singleTokenOut && pool.poolTypeVersion < 2) {\n throw new Error('Unsupported Exit Type For Pool');\n }\n if (\n singleTokenOut &&\n singleTokenOut !== AddressZero &&\n !pool.tokens\n .map((t) => t.address)\n .some((a) => isSameAddress(a, singleTokenOut))\n ) {\n throw new BalancerError(BalancerErrorCode.TOKEN_MISMATCH);\n }\n\n if (!shouldUnwrapNativeAsset && singleTokenOut === AddressZero)\n throw new Error(\n 'shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values'\n );\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n\n /**\n * Checks if the input of buildExitExactTokensOut is valid\n */\n checkInputsExactTokensOut = (\n tokensOut: string[],\n amountsOut: string[],\n pool: Pool\n ): void => {\n // Should have a token for input for each non-BPT pool token\n // Should be an amount out for each token out\n if (\n tokensOut.length != amountsOut.length ||\n tokensOut.length != pool.tokensList.length - 1\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt amount in EVM scale\n * @param pool the pool that is being exited\n */\n checkInputsRecoveryExit = ({\n bptIn,\n pool,\n }: Pick): void => {\n if (BigNumber.from(bptIn).lte(0)) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n if (!pool.isInRecoveryMode) {\n throw new Error(\n 'Exit type not supported because pool is not in Recovery Mode'\n );\n }\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (!pool.amp) throw new BalancerError(BalancerErrorCode.MISSING_AMP);\n };\n\n /**\n * Sorts and returns the values of amounts, tokens, balances, indexes, that are necessary to do the maths and build the exit transactions\n * @param pool\n * @param singleTokenOut\n * @param wrappedNativeAsset\n * @param shouldUnwrapNativeAsset\n * @param amountsOut\n * @param tokensOut\n */\n sortValuesExitExactBptIn = ({\n pool,\n singleTokenOut,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n }: SortValuesExactBptInParams): ExactBPTInSortedValues => {\n const parsedValues = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n let singleTokenOutIndexWithoutBpt = -1;\n if (singleTokenOut) {\n singleTokenOutIndexWithoutBpt =\n parsedValues.poolTokensWithoutBpt.indexOf(singleTokenOut);\n }\n return {\n ...parsedValues,\n singleTokenOutIndexWithoutBpt,\n };\n };\n /**\n * Sorts and returns the values of amounts, tokens, balances, indexes, that are necessary to do the maths and build the exit transactions\n * @param pool\n * @param singleTokenOut\n * @param wrappedNativeAsset\n * @param amountsOut\n * @param tokensOut\n */\n sortValuesExitExactTokensOut = ({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n }: SortValuesExactTokensOutParams): ExactTokensOutSortedValues => {\n const shouldUnwrapNativeAsset = tokensOut.some((a) => a === AddressZero);\n const parsedValues = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts out into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, downscaledAmountsOutWithoutBpt] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n const downscaledAmountsOutWithBpt = insert(\n downscaledAmountsOutWithoutBpt,\n parsedValues.bptIndex,\n '0'\n );\n\n // This should not be required but there is currently a rounding issue with maths and this will ensure tx\n const downscaledAmountsOutWithBptWithRounding =\n downscaledAmountsOutWithBpt.map((a) => {\n const value = BigNumber.from(a);\n return value.isZero() ? a : value.sub(1).toString();\n });\n\n // Maths should use upscaled amounts with rates, e.g. 1USDC => 1e18 not 1e6\n const upScaledAmountsOutWithoutBpt = _upscaleArray(\n downscaledAmountsOutWithoutBpt.map((a) => BigInt(a)),\n parsedValues.scalingFactorsWithoutBpt\n );\n\n return {\n ...parsedValues,\n upScaledAmountsOutWithoutBpt,\n downscaledAmountsOutWithBpt: downscaledAmountsOutWithBptWithRounding,\n downscaledAmountsOutWithoutBpt,\n };\n };\n /**\n * Calculate the minimum and expect amountOut of the exit with exact bpt in transaction, and passes it to minAmountsOut and expectedAmountsOut arrays passed as parameters;\n * @param sortedValues\n * @param expectedAmountsOut\n * @param minAmountsOut\n * @param bptIn\n * @param slippage\n */\n calcTokenOutGivenExactBptIn = ({\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n singleTokenOutIndexWithoutBpt,\n scalingFactorsWithoutBpt,\n totalSharesEvm,\n swapFeeEvm,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n | 'ampWithPrecision'\n | 'upScaledBalancesWithoutBpt'\n | 'singleTokenOutIndexWithoutBpt'\n | 'scalingFactorsWithoutBpt'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n // Calculate amount out given BPT in\n const amountOut = SOR.StableMathBigInt._calcTokenOutGivenExactBptIn(\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n singleTokenOutIndexWithoutBpt,\n BigInt(bptIn),\n totalSharesEvm,\n swapFeeEvm\n );\n const expectedAmountsOut = Array(upScaledBalancesWithoutBpt.length).fill(\n '0'\n );\n const minAmountsOut = Array(upScaledBalancesWithoutBpt.length).fill('0');\n // Downscales to token decimals and removes priceRate\n const downscaledAmountOut = _downscaleDown(\n amountOut,\n scalingFactorsWithoutBpt[singleTokenOutIndexWithoutBpt]\n );\n\n expectedAmountsOut[singleTokenOutIndexWithoutBpt] =\n downscaledAmountOut.toString();\n // Apply slippage tolerance\n minAmountsOut[singleTokenOutIndexWithoutBpt] = subSlippage(\n BigNumber.from(downscaledAmountOut),\n BigNumber.from(slippage)\n ).toString();\n\n return { minAmountsOut, expectedAmountsOut };\n };\n\n calcTokensOutGivenExactBptIn = ({\n upScaledBalancesWithoutBpt,\n totalSharesEvm,\n scalingFactorsWithoutBpt,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n 'upScaledBalancesWithoutBpt' | 'totalSharesEvm' | 'scalingFactorsWithoutBpt'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n const amountsOut = SOR.StableMathBigInt._calcTokensOutGivenExactBptIn(\n upScaledBalancesWithoutBpt,\n BigInt(bptIn),\n totalSharesEvm\n );\n // Maths return numbers scaled to 18 decimals. Must scale down to token decimals.\n const amountsOutScaledDown = _downscaleDownArray(\n amountsOut,\n scalingFactorsWithoutBpt\n );\n\n const expectedAmountsOut = amountsOutScaledDown.map((amount) =>\n amount.toString()\n );\n // Apply slippage tolerance\n const minAmountsOut = amountsOutScaledDown.map((amount) => {\n const minAmount = subSlippage(\n BigNumber.from(amount),\n BigNumber.from(slippage)\n );\n return minAmount.toString();\n });\n return { minAmountsOut, expectedAmountsOut };\n };\n\n /**\n * Calculate the bptIn and maxBPTIn of the exit with exact tokens out transaction and returns them;\n * @param ampWithPrecision\n * @param upScaledBalancesWithoutBpt\n * @param upScaledAmountsOut\n * @param totalSharesEvm\n * @param swapFeeEvm\n * @param slippage\n */\n calcBptInGivenExactTokensOut = ({\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n upScaledAmountsOutWithoutBpt,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: CalcBptInGivenExactTokensOutParams): {\n bptIn: string;\n maxBPTIn: string;\n } => {\n const bptIn = SOR.StableMathBigInt._calcBptInGivenExactTokensOut(\n ampWithPrecision,\n upScaledBalancesWithoutBpt,\n upScaledAmountsOutWithoutBpt,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n // Apply slippage tolerance\n const maxBPTIn = addSlippage(\n BigNumber.from(bptIn),\n BigNumber.from(slippage)\n ).toString();\n\n return { bptIn, maxBPTIn };\n };\n\n /**\n * Encodes the function data and does the final building of the exit(with exact tokens out) transaction\n * @param params\n */\n encodeExitPool = (params: EncodeExitParams): ExitPoolAttributes => {\n const {\n exiter,\n poolId,\n minAmountsOut,\n userData,\n poolTokens,\n toInternalBalance,\n } = params;\n\n const to = balancerVault;\n const functionName = 'exitPool';\n const attributes: ExitPool = {\n poolId: poolId,\n sender: exiter,\n recipient: exiter,\n exitPoolRequest: {\n assets: poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n },\n };\n\n // encode transaction data into an ABI byte string which can be sent to the network to be executed\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.exitPoolRequest,\n ]);\n\n return {\n to,\n functionName,\n attributes,\n data,\n };\n };\n}\n","import { StablePoolLiquidity } from './concerns/stable/liquidity.concern';\nimport { PhantomStablePoolSpotPrice } from './concerns/stablePhantom/spotPrice.concern';\nimport { StablePoolPriceImpact } from './concerns/stable/priceImpact.concern';\nimport { ComposableStablePoolJoin } from './concerns/composableStable/join.concern';\nimport { ComposableStablePoolExit } from './concerns/composableStable/exit.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class ComposableStable implements PoolType {\n constructor(\n public exit: ExitConcern = new ComposableStablePoolExit(),\n public liquidity: LiquidityConcern = new StablePoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new PhantomStablePoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new StablePoolPriceImpact(),\n public join: JoinConcern = new ComposableStablePoolJoin()\n ) {}\n}\n","import { PriceImpactConcern } from '@/modules/pools/pool-types/concerns/types';\nimport { calcPriceImpact } from '@/modules/pricing/priceImpact';\nimport { ONE, BZERO, _upscale } from '@/lib/utils/solidityMaths';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Pool } from '@/types';\nimport { parsePoolInfo } from '@/lib/utils';\n\nexport class WeightedPoolPriceImpact implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n if (tokenAmounts.length !== pool.tokensList.length)\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n\n // totalShares, balances and weights all scaled up to 18 decimals\n const { scalingFactorsRaw, totalSharesEvm, upScaledBalances, weights } =\n parsePoolInfo(pool);\n\n let bptZeroPriceImpact = BZERO;\n for (let i = 0; i < tokenAmounts.length; i++) {\n const price = (weights[i] * totalSharesEvm) / upScaledBalances[i];\n const amountUpscaled = _upscale(tokenAmounts[i], scalingFactorsRaw[i]);\n const newTerm = (price * amountUpscaled) / ONE;\n bptZeroPriceImpact += newTerm;\n }\n return bptZeroPriceImpact;\n }\n\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n const bptZeroPriceImpact = this.bptZeroPriceImpact(pool, tokenAmounts);\n return calcPriceImpact(bptAmount, bptZeroPriceImpact, isJoin).toString();\n }\n}\n","import { BigNumber, parseFixed } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport * as SOR from '@balancer-labs/sor';\nimport {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n ExitExactBPTInParameters,\n ExitExactTokensOutParameters,\n ExitPool,\n ExitPoolAttributes,\n} from '../types';\nimport { AssetHelpers, isSameAddress, parsePoolInfo } from '@/lib/utils';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { addSlippage, subSlippage } from '@/lib/utils/slippageHelper';\nimport { balancerVault } from '@/lib/constants/config';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport {\n _downscaleDown,\n _downscaleDownArray,\n _upscaleArray,\n} from '@/lib/utils/solidityMaths';\nimport { Pool } from '@/types';\nimport { BasePoolEncoder } from '@/pool-base';\nimport { WeightedPoolPriceImpact } from '../weighted/priceImpact.concern';\n\ninterface SortedValues {\n poolTokens: string[];\n weights: bigint[];\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n}\n\ntype ExactBPTInSortedValues = SortedValues & {\n scalingFactors: bigint[];\n singleTokenOutIndex: number;\n};\n\ntype ExactTokensOutSortedValues = SortedValues & {\n upScaledAmountsOut: bigint[];\n downScaledAmountsOut: string[];\n};\ntype CalcBptInGivenExactTokensOutParams = ExactTokensOutSortedValues &\n Pick;\n\ntype SortValuesParams = {\n pool: Pool;\n wrappedNativeAsset: string;\n shouldUnwrapNativeAsset?: boolean;\n};\n\ntype SortValuesExactBptInParams = SortValuesParams & {\n singleTokenOut?: string;\n};\n\ntype SortValuesExactTokensOutParams = SortValuesParams & {\n amountsOut: string[];\n tokensOut: string[];\n};\n\ntype EncodeExitParams = Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'toInternalBalance'\n> & {\n poolTokens: string[];\n poolId: string;\n userData: string;\n minAmountsOut: string[];\n};\n\nexport class WeightedPoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n });\n const sortedValues = this.sortValuesExitExactBptIn({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n });\n const { minAmountsOut, expectedAmountsOut } =\n sortedValues.singleTokenOutIndex >= 0\n ? this.calcTokenOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n })\n : this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData =\n sortedValues.singleTokenOutIndex >= 0\n ? WeightedPoolEncoder.exitExactBPTInForOneTokenOut(\n bptIn,\n sortedValues.singleTokenOutIndex\n )\n : WeightedPoolEncoder.exitExactBPTInForTokensOut(bptIn);\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new WeightedPoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n this.checkInputsExactTokensOut(amountsOut, tokensOut, pool);\n\n const sortedValues = this.sortValuesExitExactTokensOut({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n });\n const { expectedBPTIn, maxBPTIn } = this.calcBptInGivenExactTokensOut({\n ...sortedValues,\n slippage,\n });\n\n const { downScaledAmountsOut, poolTokens } = sortedValues;\n const userData = WeightedPoolEncoder.exitBPTInForExactTokensOut(\n downScaledAmountsOut,\n maxBPTIn\n );\n const encodedData = this.encodeExitPool({\n poolId: pool.id,\n userData,\n poolTokens,\n minAmountsOut: downScaledAmountsOut,\n exiter,\n toInternalBalance,\n });\n\n const priceImpactConcern = new WeightedPoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n downScaledAmountsOut.map(BigInt),\n BigInt(expectedBPTIn),\n false\n );\n\n return {\n ...encodedData,\n expectedBPTIn,\n maxBPTIn,\n priceImpact,\n };\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut: undefined,\n pool,\n shouldUnwrapNativeAsset: false,\n });\n // Recovery exits don't use rates. We use them as part of scalingFactor so default to 1 incase of issues\n pool.tokens.forEach((t) => (t.priceRate = '1'));\n const sortedValues = parsePoolInfo(pool);\n const { minAmountsOut, expectedAmountsOut } =\n this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n singleTokenOutIndex: -1,\n });\n\n const userData = BasePoolEncoder.recoveryModeExit(bptIn);\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new WeightedPoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt inserted in the transaction\n * @param singleTokenOut (optional) the address of the single token that will be withdrawn, if null|undefined, all tokens will be withdrawn proportionally.\n * @param pool the pool that is being exited\n * @param shouldUnwrapNativeAsset Set true if the weth should be unwrapped to Eth\n */\n checkInputsExactBPTIn = ({\n bptIn,\n singleTokenOut,\n pool,\n shouldUnwrapNativeAsset,\n }: Pick<\n ExitExactBPTInParameters,\n 'bptIn' | 'singleTokenOut' | 'pool' | 'shouldUnwrapNativeAsset'\n >): void => {\n if (!bptIn.length || parseFixed(bptIn, 18).isNegative()) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n if (\n singleTokenOut &&\n singleTokenOut !== AddressZero &&\n !pool.tokens\n .map((t) => t.address)\n .some((a) => isSameAddress(a, singleTokenOut))\n ) {\n throw new BalancerError(BalancerErrorCode.TOKEN_MISMATCH);\n }\n\n if (!shouldUnwrapNativeAsset && singleTokenOut === AddressZero)\n throw new Error(\n 'shouldUnwrapNativeAsset and singleTokenOut should not have conflicting values'\n );\n\n // Check if there's any relevant weighted pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n };\n /**\n * Checks if the input of buildExitExactTokensOut is valid\n * @param amountsOut Must have an amount for each token, if the user will not withdraw any amount for a token, the value shall be '0'\n * @param tokensOut Must contain all the tokens of the pool\n * @param pool The pool that is being exited\n */\n checkInputsExactTokensOut = (\n amountsOut: string[],\n tokensOut: string[],\n pool: Pool\n ): void => {\n if (\n tokensOut.length != amountsOut.length ||\n tokensOut.length != pool.tokensList.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n // Check if there's any important weighted pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n };\n sortValuesExitExactBptIn = ({\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n }: SortValuesExactBptInParams): ExactBPTInSortedValues => {\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n // Parse pool info into EVM amounts in order to match amountsIn scalling\n const { poolTokens } = parsedPoolInfo;\n let singleTokenOutIndex = -1;\n if (singleTokenOut) {\n singleTokenOutIndex = poolTokens.indexOf(singleTokenOut.toLowerCase());\n }\n return {\n ...parsedPoolInfo,\n singleTokenOutIndex,\n };\n };\n sortValuesExitExactTokensOut = ({\n pool,\n wrappedNativeAsset,\n amountsOut,\n tokensOut,\n }: SortValuesExactTokensOutParams): ExactTokensOutSortedValues => {\n const shouldUnwrapNativeAsset = tokensOut.some((a) => a === AddressZero);\n // Parse pool info into EVM amounts in order to match amountsOut scaling\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n const { scalingFactors } = parsedPoolInfo;\n\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // Sorts amounts in into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const [, downScaledAmountsOut] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n // Maths should use upscaled amounts, e.g. 1USDC => 1e18 not 1e6\n const upScaledAmountsOut = _upscaleArray(\n downScaledAmountsOut.map((a) => BigInt(a)),\n scalingFactors.map((a) => BigInt(a))\n );\n\n return {\n ...parsedPoolInfo,\n upScaledAmountsOut,\n downScaledAmountsOut,\n };\n };\n calcTokenOutGivenExactBptIn = ({\n poolTokens,\n weights,\n upScaledBalances,\n totalSharesEvm,\n swapFeeEvm,\n singleTokenOutIndex,\n bptIn,\n slippage,\n scalingFactors,\n }: Pick<\n ExactBPTInSortedValues,\n | 'poolTokens'\n | 'weights'\n | 'upScaledBalances'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n | 'singleTokenOutIndex'\n | 'scalingFactors'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n // Calculate amount out given BPT in\n const amountOut = SOR.WeightedMaths._calcTokenOutGivenExactBptIn(\n upScaledBalances[singleTokenOutIndex],\n weights[singleTokenOutIndex],\n BigInt(bptIn),\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n const downscaledAmountOut = _downscaleDown(\n BigInt(amountOut) - BigInt(1), // The -1 is to solve rounding errors, sometimes the amount comes 1 point lower than expected\n scalingFactors[singleTokenOutIndex]\n ).toString();\n\n const expectedAmountsOut = Array(poolTokens.length).fill('0');\n const minAmountsOut = Array(poolTokens.length).fill('0');\n\n expectedAmountsOut[singleTokenOutIndex] = downscaledAmountOut;\n // Apply slippage tolerance\n minAmountsOut[singleTokenOutIndex] = subSlippage(\n BigNumber.from(downscaledAmountOut),\n BigNumber.from(slippage)\n ).toString();\n\n return { minAmountsOut, expectedAmountsOut };\n };\n\n calcTokensOutGivenExactBptIn = ({\n upScaledBalances,\n totalSharesEvm,\n scalingFactors,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n | 'upScaledBalances'\n | 'totalSharesEvm'\n | 'scalingFactors'\n | 'singleTokenOutIndex'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n // Calculate amounts out given BPT in\n const amountsOut = SOR.WeightedMaths._calcTokensOutGivenExactBptIn(\n upScaledBalances,\n BigInt(bptIn),\n totalSharesEvm\n ).map((amount) => amount.toString());\n // Maths return numbers scaled to 18 decimals. Must scale down to token decimals.\n const amountsOutScaledDown = _downscaleDownArray(\n amountsOut.map((a) => BigInt(a)),\n scalingFactors\n );\n\n const expectedAmountsOut = amountsOutScaledDown.map((amount) =>\n amount.toString()\n );\n // Apply slippage tolerance\n const minAmountsOut = amountsOutScaledDown.map((amount) => {\n const minAmount = subSlippage(\n BigNumber.from(amount),\n BigNumber.from(slippage)\n );\n return minAmount.toString();\n });\n return { minAmountsOut, expectedAmountsOut };\n };\n calcBptInGivenExactTokensOut = ({\n weights,\n upScaledBalances,\n upScaledAmountsOut,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: CalcBptInGivenExactTokensOutParams): {\n maxBPTIn: string;\n expectedBPTIn: string;\n } => {\n // Calculate expected BPT in given tokens out\n const bptIn = SOR.WeightedMaths._calcBptInGivenExactTokensOut(\n upScaledBalances,\n weights,\n upScaledAmountsOut,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n // Apply slippage tolerance\n const maxBPTIn = addSlippage(\n BigNumber.from(bptIn),\n BigNumber.from(slippage)\n ).toString();\n return { maxBPTIn, expectedBPTIn: bptIn };\n };\n\n encodeExitPool = ({\n poolId,\n exiter,\n poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n }: EncodeExitParams): ExitPoolAttributes => {\n const to = balancerVault;\n const functionName = 'exitPool';\n const attributes: ExitPool = {\n poolId,\n sender: exiter,\n recipient: exiter,\n exitPoolRequest: {\n assets: poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n },\n };\n // Encode transaction data into an ABI byte string which can be sent to the network to be executed\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.exitPoolRequest,\n ]);\n return { data, to, functionName, attributes };\n };\n}\n","import { WeightedMaths } from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { balancerVault } from '@/lib/constants/config';\nimport { AssetHelpers, getEthValue, parsePoolInfo } from '@/lib/utils';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { _upscaleArray } from '@/lib/utils/solidityMaths';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { Address, Pool } from '@/types';\nimport {\n JoinConcern,\n JoinPool,\n JoinPoolAttributes,\n JoinPoolParameters,\n} from '../types';\nimport { WeightedPoolPriceImpact } from '../weighted/priceImpact.concern';\n\ntype SortedValues = {\n poolTokens: string[];\n weights: bigint[];\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n upScaledAmountsIn: bigint[];\n sortedAmountsIn: string[];\n};\n\nexport class WeightedPoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n this.checkInputs(amountsIn, tokensIn, pool);\n\n const sortedValues = this.sortValues({\n pool,\n wrappedNativeAsset,\n tokensIn,\n amountsIn,\n });\n\n const { expectedBPTOut, minBPTOut } = this.calcBptOutGivenExactTokensIn({\n ...sortedValues,\n slippage,\n });\n\n const encodedFunctionData = this.encodeJoinPool({\n ...sortedValues,\n poolId: pool.id,\n joiner,\n minBPTOut,\n tokensIn,\n amountsIn,\n });\n\n const priceImpactConcern = new WeightedPoolPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n sortedValues.sortedAmountsIn.map(BigInt),\n BigInt(expectedBPTOut),\n true\n );\n\n return {\n ...encodedFunctionData,\n minBPTOut,\n expectedBPTOut,\n priceImpact,\n };\n };\n\n /**\n * Check if the input parameters of the buildJoin function are right\n * @param amountsIn Must have an amount for each token, if the user will not deposit any amount for a token, the value shall be '0'\n * @param tokensIn Must contain all the tokens of the pool\n * @param pool The pool that is being joined\n */\n checkInputs = (tokensIn: string[], amountsIn: string[], pool: Pool): void => {\n if (\n tokensIn.length != amountsIn.length ||\n tokensIn.length != pool.tokensList.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n\n // Check if there's any relevant weighted pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n if (pool.tokens.some((token) => !token.weight))\n throw new BalancerError(BalancerErrorCode.MISSING_WEIGHT);\n };\n\n sortValues = ({\n pool,\n tokensIn,\n amountsIn,\n wrappedNativeAsset,\n }: Pick<\n JoinPoolParameters,\n 'pool' | 'wrappedNativeAsset' | 'amountsIn' | 'tokensIn'\n >): SortedValues => {\n const shouldUnwrapNativeAsset = tokensIn.some((a) => a === AddressZero);\n // Parse pool info into EVM amounts in order to match amountsIn scalling\n const parsedPoolInfo = parsePoolInfo(\n pool,\n wrappedNativeAsset,\n shouldUnwrapNativeAsset\n );\n\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // sort inputs\n const [, sortedAmountsIn] = assetHelpers.sortTokens(\n tokensIn,\n amountsIn\n ) as [string[], string[]];\n const upScaledAmountsIn = _upscaleArray(\n sortedAmountsIn.map(BigInt),\n parsedPoolInfo.scalingFactors\n );\n // sort pool info\n return {\n ...parsedPoolInfo,\n sortedAmountsIn,\n upScaledAmountsIn,\n };\n };\n\n calcBptOutGivenExactTokensIn = ({\n upScaledBalances,\n weights,\n upScaledAmountsIn,\n totalSharesEvm,\n swapFeeEvm,\n slippage,\n }: Pick &\n Pick<\n SortedValues,\n | 'upScaledBalances'\n | 'weights'\n | 'upScaledAmountsIn'\n | 'totalSharesEvm'\n | 'swapFeeEvm'\n >): { expectedBPTOut: string; minBPTOut: string } => {\n const expectedBPTOut = WeightedMaths._calcBptOutGivenExactTokensIn(\n upScaledBalances,\n weights,\n upScaledAmountsIn,\n totalSharesEvm,\n swapFeeEvm\n ).toString();\n\n const minBPTOut = subSlippage(\n BigNumber.from(expectedBPTOut),\n BigNumber.from(slippage)\n ).toString();\n\n return {\n expectedBPTOut,\n minBPTOut,\n };\n };\n encodeJoinPool = ({\n sortedAmountsIn,\n poolTokens,\n poolId,\n joiner,\n minBPTOut,\n amountsIn,\n tokensIn,\n }: Pick &\n Pick & {\n joiner: Address;\n poolId: string;\n minBPTOut: string;\n }): Pick<\n JoinPoolAttributes,\n 'value' | 'data' | 'to' | 'functionName' | 'attributes'\n > => {\n const userData = WeightedPoolEncoder.joinExactTokensInForBPTOut(\n sortedAmountsIn,\n minBPTOut\n );\n const to = balancerVault;\n const functionName = 'joinPool';\n const attributes: JoinPool = {\n poolId,\n sender: joiner,\n recipient: joiner,\n joinPoolRequest: {\n assets: poolTokens,\n maxAmountsIn: sortedAmountsIn,\n userData,\n fromInternalBalance: false,\n },\n };\n const vaultInterface = Vault__factory.createInterface();\n // encode transaction data into an ABI byte string which can be sent to the network to be executed\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ]);\n\n const value = getEthValue(tokensIn, amountsIn);\n\n return {\n to,\n functionName,\n data,\n attributes,\n value,\n };\n };\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { parseFixed, formatFixed } from '@/lib/utils/math';\n\nconst SCALING_FACTOR = 18;\n\nexport class WeightedPoolLiquidity implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumWeight = BigNumber.from(0);\n let sumValue = BigNumber.from(0);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (!token.price?.usd) {\n continue;\n }\n\n let price: BigNumber;\n if (parseFloat(token.price.usd) < 1) {\n price = parseFixed(parseFloat(token.price.usd).toFixed(10), 10).mul(\n 1e8\n );\n } else {\n price = parseFixed(token.price.usd, SCALING_FACTOR);\n }\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n const weight = parseFixed(token.weight || '0', SCALING_FACTOR);\n\n const value = balance.mul(price);\n sumValue = sumValue.add(value);\n sumWeight = sumWeight.add(weight);\n }\n\n // Scale the known prices of x% of the pool to get value of 100% of the pool.\n const totalWeight = tokens.reduce(\n (total: BigNumber, token) =>\n total.add(parseFixed(token.weight || '0', SCALING_FACTOR)),\n BigNumber.from(0)\n );\n if (sumWeight.gt(0)) {\n const liquidity = sumValue.mul(totalWeight).div(sumWeight);\n return formatFixed(liquidity, SCALING_FACTOR * 2);\n }\n\n return '0';\n }\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, WeightedPool, ZERO } from '@balancer-labs/sor';\nimport { Pool, PoolToken } from '@/types';\n\nexport class WeightedPoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const isBPTAsToken = tokenIn === pool.address || tokenOut === pool.address;\n if (isBPTAsToken) {\n const bptAsToken: PoolToken = {\n address: pool.address,\n balance: pool.totalShares,\n decimals: 18,\n priceRate: '1',\n weight: '0',\n };\n pool.tokens.push(bptAsToken);\n pool.tokensList.push(pool.address);\n }\n const weightedPool = WeightedPool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = weightedPool.parsePoolPairData(tokenIn, tokenOut);\n const spotPrice = weightedPool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n if (isBPTAsToken) {\n pool.tokens.pop();\n pool.tokensList.pop();\n }\n return spotPrice;\n }\n}\n","import { WeightedPoolExit } from './concerns/weighted/exit.concern';\nimport { WeightedPoolJoin } from './concerns/weighted/join.concern';\nimport { WeightedPoolLiquidity } from './concerns/weighted/liquidity.concern';\nimport { WeightedPoolSpotPrice } from './concerns/weighted/spotPrice.concern';\nimport { WeightedPoolPriceImpact } from './concerns/weighted/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class Weighted implements PoolType {\n constructor(\n public exit: ExitConcern = new WeightedPoolExit(),\n public join: JoinConcern = new WeightedPoolJoin(),\n public liquidity: LiquidityConcern = new WeightedPoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new WeightedPoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new WeightedPoolPriceImpact()\n ) {}\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { formatFixed } from '@ethersproject/bignumber';\nimport { parseFixed } from '@/lib/utils/math';\nimport { Zero } from '@ethersproject/constants';\n\nconst SCALING_FACTOR = 18;\n\nexport class MetaStablePoolLiquidity implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = Zero;\n let sumValue = Zero;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(token.price.usd.toString(), SCALING_FACTOR);\n\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n\n const value = balance.mul(price);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance.gt(0)) {\n const avgPrice = sumValue.div(sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n\n const value = balance.mul(avgPrice);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n }\n\n return formatFixed(sumValue, SCALING_FACTOR * 2).toString();\n }\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, MetaStablePool, ZERO } from '@balancer-labs/sor';\nimport { Pool } from '@/types';\n\nexport class MetaStablePoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const metaStablePool = MetaStablePool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = metaStablePool.parsePoolPairData(tokenIn, tokenOut);\n return metaStablePool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n }\n}\n","import { MetaStablePoolLiquidity } from './concerns/metaStable/liquidity.concern';\nimport { MetaStablePoolSpotPrice } from './concerns/metaStable/spotPrice.concern';\nimport { StablePoolPriceImpact } from './concerns/stable/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n SpotPriceConcern,\n PriceImpactConcern,\n} from './concerns/types';\nimport { StablePoolExit } from '@/modules/pools/pool-types/concerns/stable/exit.concern';\nimport { StablePoolJoin } from '@/modules/pools/pool-types/concerns/stable/join.concern';\n\nexport class MetaStable implements PoolType {\n constructor(\n public exit: ExitConcern = new StablePoolExit(),\n public join: JoinConcern = new StablePoolJoin(),\n public liquidity: LiquidityConcern = new MetaStablePoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new MetaStablePoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new StablePoolPriceImpact()\n ) {}\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {\n ExitConcern,\n ExitExactBPTInParameters,\n ExitExactTokensOutParameters,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n} from '../types';\n\nexport class StablePhantomPoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n /**\n * Exit type only supported when pool is in paused state and pause window\n * has expired, so this type of exit will not be supported.\n */\n throw new Error('Exit type not supported');\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n throw new Error('Exit type not supported');\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n throw new Error('Exit type not supported');\n };\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { JoinPoolParameters, JoinConcern, JoinPoolAttributes } from '../types';\n\nexport class StablePhantomPoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n throw new Error('Join type not supported');\n };\n}\n","import { StablePhantomPoolExit } from './concerns/stablePhantom/exit.concern';\nimport { StablePhantomPoolJoin } from './concerns/stablePhantom/join.concern';\nimport { StablePoolLiquidity } from './concerns/stable/liquidity.concern';\nimport { PhantomStablePoolSpotPrice } from './concerns/stablePhantom/spotPrice.concern';\nimport { StablePoolPriceImpact } from './concerns/stable/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n PriceImpactConcern,\n LiquidityConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class StablePhantom implements PoolType {\n constructor(\n public exit: ExitConcern = new StablePhantomPoolExit(),\n public join: JoinConcern = new StablePhantomPoolJoin(),\n public liquidity: LiquidityConcern = new StablePoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new PhantomStablePoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new StablePoolPriceImpact()\n ) {}\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { PriceImpactConcern } from '../types';\nimport { Pool } from '@/types';\n\nexport class LinearPriceImpact implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n throw new Error('Linear Pool bptZeroPriceImpact Not Implented');\n }\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n // Linear pools don't have price impact\n return '0';\n }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport * as SOR from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts';\nimport { balancerVault } from '@/lib/constants/config';\nimport { insert, parsePoolInfo, removeItem } from '@/lib/utils';\nimport { _downscaleDownArray } from '@/lib/utils/solidityMaths';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { BasePoolEncoder } from '@/pool-base';\n\nimport {\n ExitConcern,\n ExitExactBPTInParameters,\n ExitExactTokensOutParameters,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n ExitPoolAttributes,\n ExitPool,\n} from '../types';\nimport { LinearPriceImpact } from '../linear/priceImpact.concern';\n\ninterface SortedValues {\n bptIndex: number;\n poolTokens: string[];\n totalSharesEvm: bigint;\n swapFeeEvm: bigint;\n upScaledBalances: bigint[];\n}\n\ntype ExactBPTInSortedValues = SortedValues & {\n scalingFactors: bigint[];\n};\n\ntype EncodeExitParams = Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'toInternalBalance'\n> & {\n poolTokens: string[];\n poolId: string;\n userData: string;\n minAmountsOut: string[];\n};\n\nexport class LinearPoolExit implements ExitConcern {\n buildExitExactBPTIn = ({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n }: ExitExactBPTInParameters): ExitExactBPTInAttributes => {\n throw new Error('Exit type not supported');\n };\n\n buildExitExactTokensOut = ({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes => {\n throw new Error('Exit type not supported');\n };\n\n buildRecoveryExit = ({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage' | 'toInternalBalance'\n >): ExitExactBPTInAttributes => {\n this.checkInputsExactBPTIn({\n bptIn,\n singleTokenOut: undefined,\n pool,\n shouldUnwrapNativeAsset: false,\n });\n // Recovery exits don't use rates. We use them as part of scalingFactor so default to 1 incase of issues\n pool.tokens.forEach((t) => (t.priceRate = '1'));\n const sortedValues = parsePoolInfo(pool);\n const { minAmountsOut, expectedAmountsOut } =\n this.calcTokensOutGivenExactBptIn({\n ...sortedValues,\n bptIn,\n slippage,\n });\n\n const userData = BasePoolEncoder.recoveryModeExit(bptIn);\n\n // MinAmounts needs a value for BPT for encoding\n const minAmountsOutWithBpt = insert(\n minAmountsOut,\n sortedValues.bptIndex,\n '0'\n );\n\n const encodedData = this.encodeExitPool({\n poolTokens: sortedValues.poolTokens,\n poolId: pool.id,\n exiter,\n minAmountsOut: minAmountsOutWithBpt,\n userData,\n toInternalBalance,\n });\n\n const priceImpactConcern = new LinearPriceImpact();\n const priceImpact = priceImpactConcern.calcPriceImpact(\n pool,\n expectedAmountsOut.map(BigInt),\n BigInt(bptIn),\n false\n );\n\n return {\n ...encodedData,\n expectedAmountsOut,\n minAmountsOut,\n priceImpact,\n };\n };\n\n /**\n * Checks if the input of buildExitExactBPTIn is valid\n * @param bptIn Bpt amount in EVM scale\n * @param pool the pool that is being exited\n */\n checkInputsExactBPTIn = ({\n bptIn,\n pool,\n }: Pick<\n ExitExactBPTInParameters,\n 'bptIn' | 'singleTokenOut' | 'pool' | 'shouldUnwrapNativeAsset'\n >): void => {\n if (BigNumber.from(bptIn).lte(0)) {\n throw new BalancerError(BalancerErrorCode.INPUT_OUT_OF_BOUNDS);\n }\n\n // Check if there's any relevant stable pool info missing\n if (pool.tokens.some((token) => token.decimals === undefined))\n throw new BalancerError(BalancerErrorCode.MISSING_DECIMALS);\n };\n\n calcTokensOutGivenExactBptIn = ({\n bptIndex,\n upScaledBalances,\n totalSharesEvm,\n scalingFactors,\n bptIn,\n slippage,\n }: Pick<\n ExactBPTInSortedValues,\n 'bptIndex' | 'upScaledBalances' | 'totalSharesEvm' | 'scalingFactors'\n > &\n Pick): {\n minAmountsOut: string[];\n expectedAmountsOut: string[];\n } => {\n const amountsOut = SOR.LinearMaths._calcTokensOutGivenExactBptIn(\n upScaledBalances,\n BigInt(bptIn),\n totalSharesEvm,\n bptIndex\n );\n // Maths return numbers scaled to 18 decimals. Must scale down to token decimals.\n const amountsOutScaledDown = _downscaleDownArray(\n amountsOut,\n scalingFactors\n );\n\n const expectedAmountsOut = removeItem(amountsOutScaledDown, bptIndex).map(\n (amount) => amount.toString()\n );\n // Apply slippage tolerance\n const minAmountsOut = expectedAmountsOut.map((amount) => {\n const minAmount = subSlippage(\n BigNumber.from(amount),\n BigNumber.from(slippage)\n );\n return minAmount.toString();\n });\n return { minAmountsOut, expectedAmountsOut };\n };\n\n /**\n * Encodes the function data and does the final building of the exit(with exact tokens out) transaction\n * @param params\n */\n encodeExitPool = (params: EncodeExitParams): ExitPoolAttributes => {\n const {\n exiter,\n poolId,\n minAmountsOut,\n userData,\n poolTokens,\n toInternalBalance,\n } = params;\n\n const to = balancerVault;\n const functionName = 'exitPool';\n const attributes: ExitPool = {\n poolId: poolId,\n sender: exiter,\n recipient: exiter,\n exitPoolRequest: {\n assets: poolTokens,\n minAmountsOut,\n userData,\n toInternalBalance,\n },\n };\n\n // encode transaction data into an ABI byte string which can be sent to the network to be executed\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.exitPoolRequest,\n ]);\n\n return {\n to,\n functionName,\n attributes,\n data,\n };\n };\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { JoinPoolParameters, JoinConcern, JoinPoolAttributes } from '../types';\n\nexport class LinearPoolJoin implements JoinConcern {\n buildJoin = ({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n }: JoinPoolParameters): JoinPoolAttributes => {\n throw new Error('Join type not supported');\n };\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { parseFixed, formatFixed } from '@/lib/utils/math';\nimport { Zero } from '@ethersproject/constants';\n\nconst SCALING_FACTOR = 18;\nconst ONE = parseFixed('1', SCALING_FACTOR);\n\nexport class LinearPoolLiquidity implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = Zero;\n let sumValue = Zero;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(token.price.usd.toString(), SCALING_FACTOR);\n\n const balance = parseFixed(token.balance, SCALING_FACTOR);\n const value = balance.mul(price);\n\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance.gt(0)) {\n const avgPrice = sumValue.div(sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const priceRate = parseFixed(token.priceRate || '1', SCALING_FACTOR);\n\n // Apply priceRate to scale the balance correctly\n const balance = parseFixed(token.balance, SCALING_FACTOR)\n .mul(priceRate)\n .div(ONE);\n\n const value = balance.mul(avgPrice);\n sumValue = sumValue.add(value);\n sumBalance = sumBalance.add(balance);\n }\n }\n\n return formatFixed(sumValue, SCALING_FACTOR * 2);\n }\n}\n","import { SpotPriceConcern } from '../types';\nimport { SubgraphPoolBase, LinearPool, ZERO } from '@balancer-labs/sor';\nimport { Pool } from '@/types';\n\nexport class LinearPoolSpotPrice implements SpotPriceConcern {\n calcPoolSpotPrice(tokenIn: string, tokenOut: string, pool: Pool): string {\n const linearPool = LinearPool.fromPool(pool as SubgraphPoolBase);\n const poolPairData = linearPool.parsePoolPairData(tokenIn, tokenOut);\n return linearPool\n ._spotPriceAfterSwapExactTokenInForTokenOut(poolPairData, ZERO)\n .toString();\n }\n}\n","import { LinearPoolExit } from './concerns/linear/exit.concern';\nimport { LinearPoolJoin } from './concerns/linear/join.concern';\nimport { LinearPoolLiquidity } from './concerns/linear/liquidity.concern';\nimport { LinearPoolSpotPrice } from './concerns/linear/spotPrice.concern';\nimport { LinearPriceImpact } from './concerns/linear/priceImpact.concern';\nimport { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from './concerns/types';\n\nexport class Linear implements PoolType {\n constructor(\n public exit: ExitConcern = new LinearPoolExit(),\n public join: JoinConcern = new LinearPoolJoin(),\n public liquidity: LiquidityConcern = new LinearPoolLiquidity(),\n public spotPriceCalculator: SpotPriceConcern = new LinearPoolSpotPrice(),\n public priceImpactCalculator: PriceImpactConcern = new LinearPriceImpact()\n ) {}\n}\n","import {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactTokensOutAttributes,\n} from '@/modules/pools/pool-types/concerns/types';\n\nexport class FXExitConcern implements ExitConcern {\n buildExitExactTokensOut(): ExitExactTokensOutAttributes {\n throw new Error('FXExitConcern Not implemented');\n }\n\n buildRecoveryExit(): ExitExactBPTInAttributes {\n throw new Error('FXExitConcern Not implemented');\n }\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { formatFixed } from '@ethersproject/bignumber';\nimport { parseFixed } from '@/lib/utils/math';\nimport { SolidityMaths } from '@/lib/utils/solidityMaths';\n\nconst SCALING_FACTOR = 18;\n\nexport class FXLiquidityConcern implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = BigInt(0);\n let sumValue = BigInt(0);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(\n token.price.usd.toString(),\n SCALING_FACTOR\n ).toBigInt();\n const balance = parseFixed(token.balance, SCALING_FACTOR).toBigInt();\n\n const value = SolidityMaths.mulDownFixed(balance, price);\n sumValue = SolidityMaths.add(sumValue, value);\n sumBalance = SolidityMaths.add(sumBalance, balance);\n }\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance > BigInt(0)) {\n const avgPrice = SolidityMaths.divDownFixed(sumValue, sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const balance = parseFixed(token.balance, SCALING_FACTOR).toBigInt();\n\n const value = SolidityMaths.mulDownFixed(balance, avgPrice);\n sumValue = SolidityMaths.add(sumValue, value);\n sumBalance = SolidityMaths.add(sumBalance, balance);\n }\n }\n return formatFixed(sumValue.toString(), SCALING_FACTOR).toString();\n }\n}\n","import { SpotPriceConcern } from '@/modules/pools/pool-types/concerns/types';\n\nexport class FXSpotPriceConcern implements SpotPriceConcern {\n calcPoolSpotPrice(): string {\n throw new Error('FXSpotPriceConcern Not implemented');\n }\n}\n","import { PriceImpactConcern } from '@/modules/pools/pool-types/concerns/types';\nimport { Pool } from '@/types';\n\nexport class FXPriceImpactConcern implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n console.log(pool, tokenAmounts);\n throw new Error('Not implemented');\n }\n\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n console.log(pool, tokenAmounts, bptAmount, isJoin);\n throw new Error('Not implemented');\n }\n}\n","import {\n JoinConcern,\n JoinPoolAttributes,\n} from '@/modules/pools/pool-types/concerns/types';\n\nexport class FXJoinConcern implements JoinConcern {\n buildJoin(): JoinPoolAttributes {\n throw new Error('FXJoinConcern Not implemented');\n }\n}\n","import { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from '@/modules/pools/pool-types/concerns/types';\nimport { FXExitConcern } from '@/modules/pools/pool-types/concerns/fx/exit.concern';\nimport { FXLiquidityConcern } from '@/modules/pools/pool-types/concerns/fx/liquidity.concern';\nimport { FXSpotPriceConcern } from '@/modules/pools/pool-types/concerns/fx/spotPrice.concern';\nimport { FXPriceImpactConcern } from '@/modules/pools/pool-types/concerns/fx/priceImpact.concern';\nimport { FXJoinConcern } from '@/modules/pools/pool-types/concerns/fx/join.concern';\n\nexport class FX implements PoolType {\n constructor(\n public exit: ExitConcern = new FXExitConcern(),\n public liquidity: LiquidityConcern = new FXLiquidityConcern(),\n public spotPriceCalculator: SpotPriceConcern = new FXSpotPriceConcern(),\n public priceImpactCalculator: PriceImpactConcern = new FXPriceImpactConcern(),\n public join: JoinConcern = new FXJoinConcern()\n ) {}\n}\n","import {\n ExitConcern,\n ExitExactBPTInAttributes,\n ExitExactBPTInParameters,\n ExitExactTokensOutAttributes,\n ExitExactTokensOutParameters,\n} from '@/modules/pools/pool-types/concerns/types';\n\nexport class GyroExitConcern implements ExitConcern {\n buildExitExactTokensOut({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n }: ExitExactTokensOutParameters): ExitExactTokensOutAttributes {\n console.log(\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset\n );\n throw new Error('Not implemented');\n }\n\n buildRecoveryExit({\n exiter,\n pool,\n bptIn,\n slippage,\n }: Pick<\n ExitExactBPTInParameters,\n 'exiter' | 'pool' | 'bptIn' | 'slippage'\n >): ExitExactBPTInAttributes {\n console.log(exiter, pool, bptIn, slippage);\n throw new Error('Not implemented');\n }\n}\n","import { LiquidityConcern } from '../types';\nimport { PoolToken } from '@/types';\nimport { formatFixed } from '@ethersproject/bignumber';\nimport { parseFixed } from '@/lib/utils/math';\nimport { SolidityMaths } from '@/lib/utils/solidityMaths';\n\nconst SCALING_FACTOR = 18;\n\nexport class GyroLiquidityConcern implements LiquidityConcern {\n calcTotal(tokens: PoolToken[]): string {\n let sumBalance = BigInt(0);\n let sumValue = BigInt(0);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n // if a token's price is unknown, ignore it\n // it will be computed at the next step\n if (!token.price?.usd) {\n continue;\n }\n\n const price = parseFixed(\n token.price.usd.toString(),\n SCALING_FACTOR\n ).toBigInt();\n const balance = parseFixed(token.balance, SCALING_FACTOR).toBigInt();\n\n const value = SolidityMaths.mulDownFixed(balance, price);\n sumValue = SolidityMaths.add(sumValue, value);\n sumBalance = SolidityMaths.add(sumBalance, balance);\n }\n // if at least the partial value of the pool is known\n // then compute the rest of the value of tokens with unknown prices\n if (sumBalance > BigInt(0)) {\n const avgPrice = SolidityMaths.divDownFixed(sumValue, sumBalance);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.price?.usd) {\n continue;\n }\n\n const balance = parseFixed(token.balance, SCALING_FACTOR).toBigInt();\n\n const value = SolidityMaths.mulDownFixed(balance, avgPrice);\n sumValue = SolidityMaths.add(sumValue, value);\n sumBalance = SolidityMaths.add(sumBalance, balance);\n }\n }\n return formatFixed(sumValue.toString(), SCALING_FACTOR).toString();\n }\n}\n","import { SpotPriceConcern } from '@/modules/pools/pool-types/concerns/types';\n\nexport class GyroSpotPriceConcern implements SpotPriceConcern {\n calcPoolSpotPrice(): string {\n throw new Error('GyroSpotPriceConcern Not implemented');\n }\n}\n","import { PriceImpactConcern } from '@/modules/pools/pool-types/concerns/types';\nimport { Pool } from '@/types';\n\nexport class GyroPriceImpactConcern implements PriceImpactConcern {\n bptZeroPriceImpact(pool: Pool, tokenAmounts: bigint[]): bigint {\n console.log(pool, tokenAmounts);\n throw new Error('Not implemented');\n }\n\n calcPriceImpact(\n pool: Pool,\n tokenAmounts: bigint[],\n bptAmount: bigint,\n isJoin: boolean\n ): string {\n console.log(pool, tokenAmounts, bptAmount, isJoin);\n throw new Error('Not implemented');\n }\n}\n","import {\n JoinConcern,\n JoinPoolAttributes,\n} from '@/modules/pools/pool-types/concerns/types';\n\nexport class GyroJoinConcern implements JoinConcern {\n buildJoin(): JoinPoolAttributes {\n throw new Error('GyroJoinConcern Not implemented');\n }\n}\n","import { PoolType } from './pool-type.interface';\nimport {\n ExitConcern,\n JoinConcern,\n LiquidityConcern,\n PriceImpactConcern,\n SpotPriceConcern,\n} from '@/modules/pools/pool-types/concerns/types';\nimport { GyroExitConcern } from '@/modules/pools/pool-types/concerns/gyro/exit.concern';\nimport { GyroLiquidityConcern } from '@/modules/pools/pool-types/concerns/gyro/liquidity.concern';\nimport { GyroSpotPriceConcern } from '@/modules/pools/pool-types/concerns/gyro/spotPrice.concern';\nimport { GyroPriceImpactConcern } from '@/modules/pools/pool-types/concerns/gyro/priceImpact.concern';\nimport { GyroJoinConcern } from '@/modules/pools/pool-types/concerns/gyro/join.concern';\n\nexport class Gyro implements PoolType {\n constructor(\n public exit: ExitConcern = new GyroExitConcern(),\n public liquidity: LiquidityConcern = new GyroLiquidityConcern(),\n public spotPriceCalculator: SpotPriceConcern = new GyroSpotPriceConcern(),\n public priceImpactCalculator: PriceImpactConcern = new GyroPriceImpactConcern(),\n public join: JoinConcern = new GyroJoinConcern()\n ) {}\n}\n","import { BalancerSdkConfig, PoolType } from '@/types';\nimport { Stable } from './pool-types/stable.module';\nimport { ComposableStable } from './pool-types/composableStable.module';\nimport { Weighted } from './pool-types/weighted.module';\nimport { MetaStable } from './pool-types/metaStable.module';\nimport { StablePhantom } from './pool-types/stablePhantom.module';\nimport { Linear } from './pool-types/linear.module';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { isLinearish } from '@/lib/utils';\nimport { FX } from '@/modules/pools/pool-types/fx.module';\nimport { Gyro } from '@/modules/pools/pool-types/gyro.module';\n\n/**\n * Wrapper around pool type specific methods.\n *\n * Returns a class instance of a type specific method handlers.\n */\nexport class PoolTypeConcerns {\n constructor(\n config: BalancerSdkConfig,\n public weighted = new Weighted(),\n public stable = new Stable(),\n public composableStable = new ComposableStable(),\n public metaStable = new MetaStable(),\n public stablePhantom = new StablePhantom(),\n public linear = new Linear()\n ) {}\n\n static from(\n poolType: PoolType\n ):\n | Weighted\n | Stable\n | ComposableStable\n | MetaStable\n | StablePhantom\n | Linear {\n // Calculate spot price using pool type\n switch (poolType) {\n case 'ComposableStable': {\n return new ComposableStable();\n }\n case 'FX': {\n return new FX();\n }\n case 'GyroE':\n case 'Gyro2':\n case 'Gyro3': {\n return new Gyro();\n }\n case 'MetaStable': {\n return new MetaStable();\n }\n case 'Stable': {\n return new Stable();\n }\n case 'StablePhantom': {\n return new StablePhantom();\n }\n case 'Investment':\n case 'LiquidityBootstrapping':\n case 'Weighted': {\n return new Weighted();\n }\n default: {\n // Handles all Linear pool types\n if (isLinearish(poolType)) return new Linear();\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n }\n }\n}\n","import { Findable, Pool, PoolToken, Price } from '@/types';\nimport { PoolAttribute } from '../data';\nimport { PoolTypeConcerns } from '../pools/pool-type-concerns';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { formatFixed, parseFixed } from '@/lib/utils/math';\n\nconst SCALE = 18;\n\nexport interface PoolBPTValue {\n address: string;\n liquidity: string;\n}\n\nexport class Liquidity {\n constructor(\n private pools: Findable,\n private tokenPrices: Findable\n ) {}\n\n async getLiquidity(pool: Pool): Promise {\n // Remove any tokens with same address as pool as they are pre-printed BPT\n const parsedTokens = pool.tokens.filter((token) => {\n return token.address !== pool.address;\n });\n\n // For all tokens that are pools (BPT), recurse into them and fetch their liquidity\n const subPoolLiquidity = await Promise.all(\n parsedTokens.map(async (token) => {\n const pool = await this.pools.findBy('address', token.address);\n if (!pool) return;\n\n const liquidity = parseFixed(await this.getLiquidity(pool), SCALE);\n const totalBPT = parseFixed(pool.totalShares, SCALE);\n const bptInParentPool = parseFixed(token.balance, SCALE);\n const liquidityInParentPool = totalBPT.eq(0)\n ? 0\n : liquidity.mul(bptInParentPool).div(totalBPT);\n\n return {\n address: pool.address,\n liquidity: liquidityInParentPool.toString(),\n };\n })\n );\n\n const totalSubPoolLiquidity = subPoolLiquidity.reduce(\n (totalLiquidity, subPool) => {\n return totalLiquidity.add(\n subPool ? subPool.liquidity : BigNumber.from(0)\n );\n },\n BigNumber.from(0)\n );\n\n // Filter tokens within pool that are not BPT themselves\n const nonPoolTokens = parsedTokens.filter((token) => {\n return !subPoolLiquidity.find((pool) => pool?.address === token.address);\n });\n\n // Update price using tokenPrices repository\n const nonPoolTokensWithUpdatedPrice: PoolToken[] = await Promise.all(\n nonPoolTokens.map(async (token) => {\n const tokenPrice = await this.tokenPrices.find(token.address);\n const poolToken: PoolToken = {\n address: token.address,\n decimals: token.decimals,\n priceRate: token.priceRate,\n price: (tokenPrice?.usd && tokenPrice) || {\n usd: token.token?.latestUSDPrice,\n },\n balance: token.balance,\n weight: token.weight,\n };\n return poolToken;\n })\n );\n\n // TODO: Just in case we need it soon. Otherwise remove without mercy.\n // Any of the tokens is missing the price, use subgraph totalLiquidity\n // if(nonPoolTokensWithUpdatedPrice.map((t) => t.price?.usd).indexOf(undefined) > -1) {\n // return pool.totalLiquidity\n // }\n\n const tokenLiquidity = PoolTypeConcerns.from(\n pool.poolType\n ).liquidity.calcTotal(nonPoolTokensWithUpdatedPrice);\n\n const parsedTokenLiquidity = parseFixed(tokenLiquidity, SCALE);\n\n const totalLiquidity = totalSubPoolLiquidity.add(parsedTokenLiquidity);\n\n return formatFixed(totalLiquidity, SCALE);\n }\n\n async getBptPrice(pool: Pool): Promise {\n const liquidity = await this.getLiquidity(pool);\n return (parseFloat(liquidity) / parseFloat(pool.totalShares)).toString();\n }\n}\n","import { LiquidityGauge } from '@/modules/data';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nexport interface Tokens {\n [tokenAddress: string]: BigNumber;\n}\n\nexport interface GaugeTokens {\n [gaugeAddress: string]: Tokens;\n}\n\nexport interface ReduceGaugeTokens {\n (p: GaugeTokens, address: string, index: number): GaugeTokens;\n}\n\nexport interface ReduceGaugeRewards {\n (\n rewards: GaugeTokens,\n path: { gauge: string; token: string },\n index: number\n ): GaugeTokens;\n}\n\nexport const ZERO = BigNumber.from('0');\n\nexport const filterTokens = (tokens: Tokens): Tokens => {\n if (!tokens) return {};\n return Object.keys(tokens)\n .filter((token) => tokens[token].gt(ZERO))\n .reduce((obj: Tokens, token) => {\n obj[token] = tokens[token];\n return obj;\n }, {});\n};\n\nexport const populateGauge = (\n gauge: LiquidityGauge,\n rewards: GaugeTokens,\n tokens: GaugeTokens\n): LiquidityGauge => {\n if (!rewards[gauge.address] && !tokens[gauge.address]) return gauge;\n const claimableRewards = filterTokens(rewards[gauge.address]);\n const claimableTokens = filterTokens(tokens[gauge.address]);\n gauge.claimableTokens ||= {\n ...claimableRewards,\n ...claimableTokens,\n };\n return gauge;\n};\n\nexport const populateGauges = (\n gauges: LiquidityGauge[],\n claimableRewards: GaugeTokens,\n claimableTokens: GaugeTokens\n): LiquidityGauge[] => {\n return gauges\n .map((gauge) => populateGauge(gauge, claimableRewards, claimableTokens))\n .filter(\n (it) => it.claimableTokens && Object.keys(it.claimableTokens).length\n );\n};\n\nexport const reduceClaimableRewards = (res0x: string[]): ReduceGaugeRewards => {\n return (\n rewards: GaugeTokens,\n path: { gauge: string; token: string },\n index: number\n ): GaugeTokens => {\n const value = BigNumber.from(`${res0x[index]}`);\n if (value.gt(ZERO)) {\n rewards[path.gauge] ||= {};\n rewards[path.gauge][path.token] = value;\n }\n return rewards;\n };\n};\n\nexport const reduceClaimableTokens = (\n res0x: string[],\n balAddress: string\n): ReduceGaugeTokens => {\n return (p: GaugeTokens, address: string, index: number): GaugeTokens => {\n const value = BigNumber.from(`${res0x[index]}`);\n if (value.gt(ZERO)) {\n p[address] ||= {};\n p[address][balAddress] = value;\n }\n return p;\n };\n};\n\nexport const reduceRewardTokens = (\n result: { [gaugeAddress: string]: string[] },\n gauge: LiquidityGauge\n): { [gaugeAddress: string]: string[] } => {\n if (gauge.rewardTokens) {\n for (const key of Object.keys(gauge.rewardTokens)) {\n result[gauge.id] ||= [];\n result[gauge.id].push(key);\n }\n }\n return result;\n};\n","import { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Network } from '@/lib/constants';\nimport { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { Multicall } from '@/contracts';\nimport {\n FeeDistributorRepository,\n LiquidityGauge,\n LiquidityGaugeSubgraphRPCProvider,\n} from '@/modules/data';\nimport { Interface } from '@ethersproject/abi';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport {\n GaugeTokens,\n populateGauges,\n reduceClaimableRewards,\n reduceClaimableTokens,\n reduceRewardTokens,\n ZERO,\n} from './helper';\n\nconst liquidityGaugeV5Interface = new Interface([\n 'function claim_rewards(address sender, address receiver) returns (uint256)',\n 'function claimable_tokens(address addr) view returns (uint256)',\n 'function claimable_reward(address addr, address token) view returns (uint256)',\n]);\n\nconst balancerMinterInterface = new Interface([\n 'function mintMany(address[] gauges) returns (uint256)',\n]);\n\nconst gaugeClaimHelperInterface = new Interface([\n 'function getPendingRewards(address gauge, address user, address token) view returns (uint256)',\n 'function claimRewardsFromGauges(address[] gauges, address user)',\n]);\n\nexport interface TransactionData {\n to: string;\n from: string;\n callData: string;\n tokensOut: string[];\n expectedTokensValue: BigNumber[];\n functionName: string;\n}\n\nexport interface TokenBalance {\n [token: string]: BigNumber;\n}\n\nexport interface IClaimService {\n getClaimableRewardTokens(userAddress: string): Promise;\n buildClaimRewardTokensRequest(\n gaugeAddresses: string[],\n userAddress: string\n ): Promise;\n getClaimableVeBalTokens(\n userAddress: string,\n claimableTokens: string[]\n ): Promise;\n buildClaimVeBalTokensRequest(\n userAddress: string,\n claimableTokens: string[]\n ): Promise;\n}\n\nexport class ClaimService implements IClaimService {\n private readonly liquidityGauges: LiquidityGaugeSubgraphRPCProvider;\n private readonly gaugeClaimHelperAddress?: string;\n private readonly balancerMinterAddress?: string;\n private readonly chainId: Network;\n private readonly feeDistributor: FeeDistributorRepository | undefined;\n\n constructor(\n liquidityGauges: LiquidityGaugeSubgraphRPCProvider,\n feeDistributor: FeeDistributorRepository | undefined,\n chainId: Network,\n private multicall: Multicall,\n gaugeClaimHelperAddress?: string,\n balancerMinterAddress?: string\n ) {\n this.liquidityGauges = liquidityGauges;\n this.feeDistributor = feeDistributor;\n this.chainId = chainId;\n this.gaugeClaimHelperAddress = gaugeClaimHelperAddress;\n this.balancerMinterAddress = balancerMinterAddress;\n }\n\n /**\n * Get a list of liquidity gauges populated with the claimable tokens for the user.\n *\n * @param userAddress the user's account address\n */\n async getClaimableRewardTokens(\n userAddress: string\n ): Promise {\n const gauges = await this.getGauges();\n if (!gauges.length)\n throw new BalancerError(BalancerErrorCode.GAUGES_NOT_FOUND);\n\n const gaugeAddresses = gauges.map((it) => it.address);\n const rewardTokens = this.getRewardTokens(gauges);\n\n const claimableTokens = await this.retrieveClaimableTokens(\n gaugeAddresses,\n userAddress\n );\n const claimableRewards = await this.retrieveClaimableRewards(\n rewardTokens,\n userAddress\n );\n return populateGauges(gauges, claimableRewards, claimableTokens);\n }\n\n /**\n * Returns the data to be signed to claim the tokens on a list of liquidity gauges.\n * Only the tokens with balance will be claimed.\n *\n * @param gaugeAddresses the liquidity gauges' addresses\n * @param userAddress the user's account address\n * @throws error if no claimable token is found\n */\n async buildClaimRewardTokensRequest(\n gaugeAddresses: string[],\n userAddress: string\n ): Promise {\n if (this.chainId === 1 || this.chainId === 5) {\n if (!this.balancerMinterAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED\n );\n } else {\n if (!this.gaugeClaimHelperAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED\n );\n }\n const allGauges = await this.getClaimableRewardTokens(userAddress);\n const gauges = allGauges\n .filter((it) =>\n gaugeAddresses\n .map((it) => it.toLowerCase())\n .includes(it.address.toLowerCase())\n )\n .filter(\n (it) => it.claimableTokens && Object.keys(it.claimableTokens).length\n );\n const claimableTokens = Array.from(\n new Set(\n gauges\n .map((gauge) => gauge.claimableTokens)\n .map((tokens) => Object.keys(tokens || {}))\n .flatMap((it) => it)\n )\n );\n if (!claimableTokens.length)\n throw new BalancerError(BalancerErrorCode.GAUGES_REWARD_TOKEN_EMPTY);\n const expectedValues = claimableTokens.map((tokenAddress) => {\n return gauges.reduce((value: BigNumber, gauge) => {\n if (\n gauge.claimableTokens &&\n gauge.claimableTokens[tokenAddress] &&\n gauge.claimableTokens[tokenAddress] !== ZERO\n )\n value = gauge.claimableTokens[tokenAddress].add(value);\n return value;\n }, BigNumber.from(0));\n });\n if (!expectedValues.length || expectedValues.every((it) => it.eq(ZERO)))\n throw new BalancerError(BalancerErrorCode.REWARD_TOKEN_ZERO);\n if (this.chainId === 1 || this.chainId === 5) {\n if (!this.balancerMinterAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED\n );\n const callData = balancerMinterInterface.encodeFunctionData('mintMany', [\n gaugeAddresses,\n ]);\n return {\n to: this.balancerMinterAddress,\n from: userAddress,\n callData: callData,\n tokensOut: claimableTokens,\n expectedTokensValue: expectedValues,\n functionName: 'mintMany',\n };\n } else {\n if (!this.gaugeClaimHelperAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED\n );\n const callData = gaugeClaimHelperInterface.encodeFunctionData(\n 'claimRewardsFromGauges',\n [gaugeAddresses, userAddress]\n );\n return {\n to: this.gaugeClaimHelperAddress,\n from: userAddress,\n callData: callData,\n tokensOut: claimableTokens,\n expectedTokensValue: expectedValues,\n functionName: 'claimRewardsFromGauges',\n };\n }\n }\n\n /**\n * returns all the tokens' balance for protocol revenue and veBal incentives.\n *\n * @param userAddress the user's account address\n * @param claimableTokens the list of tokens for which the balance is desired\n */\n async getClaimableVeBalTokens(\n userAddress: string,\n claimableTokens: string[]\n ): Promise {\n if (!this.feeDistributor)\n throw new BalancerError(BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED);\n return this.feeDistributor?.getClaimableBalances(\n userAddress,\n claimableTokens\n );\n }\n\n /**\n * Returns the data to be signed to claim the tokens for protocol revenue and veBal incentives.\n *\n * @param userAddress the user's account address\n * @param claimableTokens the list of tokens to be claimed\n * @throws error if no claimable token is found\n */\n async buildClaimVeBalTokensRequest(\n userAddress: string,\n claimableTokens: string[]\n ): Promise {\n if (!this.feeDistributor)\n throw new BalancerError(BalancerErrorCode.FEE_PROVIDER_NOT_PROVIDED);\n const tokenBalance = await this.feeDistributor.getClaimableBalances(\n userAddress,\n claimableTokens\n );\n const expectedTokensValue = claimableTokens.map(\n (it) => tokenBalance[it] ?? ZERO\n );\n if (expectedTokensValue.every((it) => it.eq(ZERO)))\n throw new BalancerError(BalancerErrorCode.REWARD_TOKEN_ZERO);\n const callData = this.feeDistributor.claimBalances(\n userAddress,\n claimableTokens\n );\n return {\n to: this.feeDistributor.feeDistributor.address,\n from: userAddress,\n callData: callData,\n tokensOut: claimableTokens,\n expectedTokensValue: expectedTokensValue,\n functionName: 'claimTokens',\n };\n }\n\n // Private Functions\n\n private async getGauges(): Promise {\n return await this.liquidityGauges.fetch();\n }\n\n private getRewardTokens(gauges: LiquidityGauge[]): {\n [gaugeAddress: string]: string[];\n } {\n return gauges.reduce(reduceRewardTokens, {});\n }\n\n private async retrieveClaimableRewards(\n rewardTokens: { [address: string]: string[] },\n userAddress: string\n ): Promise {\n const gaugeAddresses = Object.keys(rewardTokens);\n const { payload, paths } = this.getPayload(\n gaugeAddresses,\n rewardTokens,\n userAddress\n );\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n return paths.reduce(reduceClaimableRewards(res0x), {});\n }\n\n private getPayload(\n gaugeAddresses: string[],\n rewardTokens: { [address: string]: string[] },\n userAddress: string\n ): {\n payload: { target: string; callData: string }[];\n paths: { gauge: string; token: string }[];\n } {\n const payload = [];\n const paths: { gauge: string; token: string }[] = [];\n for (const gaugeAddress of gaugeAddresses) {\n for (const tokenAddress of rewardTokens[gaugeAddress]) {\n paths.push({ gauge: gaugeAddress, token: tokenAddress });\n payload.push(\n this.getArguments(userAddress, gaugeAddress, tokenAddress)\n );\n }\n }\n return { payload, paths };\n }\n\n private getArguments(\n userAddress: string,\n gaugeAddress: string,\n tokenAddress: string\n ): { target: string; callData: string } {\n if (this.chainId === 1 || this.chainId === 5) {\n return {\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'claimable_reward',\n [userAddress, tokenAddress]\n ),\n };\n }\n if (!this.gaugeClaimHelperAddress)\n throw new BalancerError(\n BalancerErrorCode.GAUGES_HELPER_ADDRESS_NOT_PROVIDED\n );\n return {\n target: this.gaugeClaimHelperAddress,\n callData: gaugeClaimHelperInterface.encodeFunctionData(\n 'getPendingRewards',\n [gaugeAddress, userAddress, tokenAddress]\n ),\n };\n }\n\n private async retrieveClaimableTokens(\n gaugeAddresses: string[],\n userAddress: string\n ): Promise {\n if (this.chainId === Network.MAINNET || this.chainId === Network.GOERLI) {\n const balAddress = BALANCER_NETWORK_CONFIG[this.chainId].addresses.tokens\n .bal as string;\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'claimable_tokens',\n [userAddress]\n ),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n return gaugeAddresses.reduce(\n reduceClaimableTokens(res0x, balAddress),\n {}\n );\n }\n return {};\n }\n}\n","import { BigNumberish } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport { SOR, SwapTypes, SwapInfo } from '@balancer-labs/sor';\nimport { SwapType, BatchSwapStep, FundManagement } from './types';\nimport { Vault } from '@/contracts/Vault';\n\n/*\n * queryBatchSwap simulates a call to `batchSwap`, returning an array of Vault asset deltas. Calls to `swap` cannot be\n * simulated directly, but an equivalent `batchSwap` call can and will yield the exact same result.\n *\n * Each element in the array corresponds to the asset at the same index, and indicates the number of tokens (or ETH)\n * the Vault would take from the sender (if positive) or send to the recipient (if negative). The arguments it\n * receives are the same that an equivalent `batchSwap` call would receive.\n */\nexport async function queryBatchSwap(\n vaultContract: Vault,\n swapType: SwapType,\n swaps: BatchSwapStep[],\n assets: string[]\n): Promise {\n const funds: FundManagement = {\n sender: AddressZero,\n recipient: AddressZero,\n fromInternalBalance: false,\n toInternalBalance: false,\n };\n\n try {\n const deltas = await vaultContract.callStatic.queryBatchSwap(\n swapType,\n swaps,\n assets,\n funds\n );\n return deltas.map((d: BigNumberish) => d.toString());\n } catch (err) {\n throw `queryBatchSwap call error: ${err}`;\n }\n}\n\n/*\nUse SOR to get swapInfo for tokenIn>tokenOut.\nSwapInfos.swaps has path information.\n*/\nexport async function getSorSwapInfo(\n tokenIn: string,\n tokenOut: string,\n swapType: SwapType,\n amount: string,\n sor: SOR\n): Promise {\n const swapTypeSOR: SwapTypes =\n swapType === SwapType.SwapExactIn\n ? SwapTypes.SwapExactIn\n : SwapTypes.SwapExactOut;\n const swapInfo = await sor.getSwaps(\n tokenIn.toLowerCase(),\n tokenOut.toLowerCase(),\n swapTypeSOR,\n amount\n );\n return swapInfo;\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { __assign } from \"tslib\";\nimport { parse } from 'graphql';\nvar docCache = new Map();\nvar fragmentSourceMap = new Map();\nvar printFragmentWarnings = true;\nvar experimentalFragmentVariables = false;\nfunction normalize(string) {\n return string.replace(/[\\s,]+/g, ' ').trim();\n}\nfunction cacheKeyFromLoc(loc) {\n return normalize(loc.source.body.substring(loc.start, loc.end));\n}\nfunction processFragments(ast) {\n var seenKeys = new Set();\n var definitions = [];\n ast.definitions.forEach(function (fragmentDefinition) {\n if (fragmentDefinition.kind === 'FragmentDefinition') {\n var fragmentName = fragmentDefinition.name.value;\n var sourceKey = cacheKeyFromLoc(fragmentDefinition.loc);\n var sourceKeySet = fragmentSourceMap.get(fragmentName);\n if (sourceKeySet && !sourceKeySet.has(sourceKey)) {\n if (printFragmentWarnings) {\n console.warn(\"Warning: fragment with name \" + fragmentName + \" already exists.\\n\"\n + \"graphql-tag enforces all fragment names across your application to be unique; read more about\\n\"\n + \"this in the docs: http://dev.apollodata.com/core/fragments.html#unique-names\");\n }\n }\n else if (!sourceKeySet) {\n fragmentSourceMap.set(fragmentName, sourceKeySet = new Set);\n }\n sourceKeySet.add(sourceKey);\n if (!seenKeys.has(sourceKey)) {\n seenKeys.add(sourceKey);\n definitions.push(fragmentDefinition);\n }\n }\n else {\n definitions.push(fragmentDefinition);\n }\n });\n return __assign(__assign({}, ast), { definitions: definitions });\n}\nfunction stripLoc(doc) {\n var workSet = new Set(doc.definitions);\n workSet.forEach(function (node) {\n if (node.loc)\n delete node.loc;\n Object.keys(node).forEach(function (key) {\n var value = node[key];\n if (value && typeof value === 'object') {\n workSet.add(value);\n }\n });\n });\n var loc = doc.loc;\n if (loc) {\n delete loc.startToken;\n delete loc.endToken;\n }\n return doc;\n}\nfunction parseDocument(source) {\n var cacheKey = normalize(source);\n if (!docCache.has(cacheKey)) {\n var parsed = parse(source, {\n experimentalFragmentVariables: experimentalFragmentVariables,\n allowLegacyFragmentVariables: experimentalFragmentVariables\n });\n if (!parsed || parsed.kind !== 'Document') {\n throw new Error('Not a valid GraphQL document.');\n }\n docCache.set(cacheKey, stripLoc(processFragments(parsed)));\n }\n return docCache.get(cacheKey);\n}\nexport function gql(literals) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (typeof literals === 'string') {\n literals = [literals];\n }\n var result = literals[0];\n args.forEach(function (arg, i) {\n if (arg && arg.kind === 'Document') {\n result += arg.loc.source.body;\n }\n else {\n result += arg;\n }\n result += literals[i + 1];\n });\n return parseDocument(result);\n}\nexport function resetCaches() {\n docCache.clear();\n fragmentSourceMap.clear();\n}\nexport function disableFragmentWarnings() {\n printFragmentWarnings = false;\n}\nexport function enableExperimentalFragmentVariables() {\n experimentalFragmentVariables = true;\n}\nexport function disableExperimentalFragmentVariables() {\n experimentalFragmentVariables = false;\n}\nvar extras = {\n gql: gql,\n resetCaches: resetCaches,\n disableFragmentWarnings: disableFragmentWarnings,\n enableExperimentalFragmentVariables: enableExperimentalFragmentVariables,\n disableExperimentalFragmentVariables: disableExperimentalFragmentVariables\n};\n(function (gql_1) {\n gql_1.gql = extras.gql, gql_1.resetCaches = extras.resetCaches, gql_1.disableFragmentWarnings = extras.disableFragmentWarnings, gql_1.enableExperimentalFragmentVariables = extras.enableExperimentalFragmentVariables, gql_1.disableExperimentalFragmentVariables = extras.disableExperimentalFragmentVariables;\n})(gql || (gql = {}));\ngql[\"default\"] = gql;\nexport default gql;\n//# sourceMappingURL=index.js.map","import { GraphQLClient } from 'graphql-request';\nimport * as Dom from 'graphql-request/dist/types.dom';\nimport gql from 'graphql-tag';\nexport type Maybe = T | null;\nexport type InputMaybe = Maybe;\nexport type Exact = { [K in keyof T]: T[K] };\nexport type MakeOptional = Omit & { [SubKey in K]?: Maybe };\nexport type MakeMaybe = Omit & { [SubKey in K]: Maybe };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n BigDecimal: string;\n BigInt: string;\n Bytes: string;\n Int8: any;\n};\n\nexport type AmpUpdate = {\n __typename?: 'AmpUpdate';\n endAmp: Scalars['BigInt'];\n endTimestamp: Scalars['BigInt'];\n id: Scalars['ID'];\n poolId: Pool;\n scheduledTimestamp: Scalars['Int'];\n startAmp: Scalars['BigInt'];\n startTimestamp: Scalars['BigInt'];\n};\n\nexport type AmpUpdate_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n endAmp?: InputMaybe;\n endAmp_gt?: InputMaybe;\n endAmp_gte?: InputMaybe;\n endAmp_in?: InputMaybe>;\n endAmp_lt?: InputMaybe;\n endAmp_lte?: InputMaybe;\n endAmp_not?: InputMaybe;\n endAmp_not_in?: InputMaybe>;\n endTimestamp?: InputMaybe;\n endTimestamp_gt?: InputMaybe;\n endTimestamp_gte?: InputMaybe;\n endTimestamp_in?: InputMaybe>;\n endTimestamp_lt?: InputMaybe;\n endTimestamp_lte?: InputMaybe;\n endTimestamp_not?: InputMaybe;\n endTimestamp_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n scheduledTimestamp?: InputMaybe;\n scheduledTimestamp_gt?: InputMaybe;\n scheduledTimestamp_gte?: InputMaybe;\n scheduledTimestamp_in?: InputMaybe>;\n scheduledTimestamp_lt?: InputMaybe;\n scheduledTimestamp_lte?: InputMaybe;\n scheduledTimestamp_not?: InputMaybe;\n scheduledTimestamp_not_in?: InputMaybe>;\n startAmp?: InputMaybe;\n startAmp_gt?: InputMaybe;\n startAmp_gte?: InputMaybe;\n startAmp_in?: InputMaybe>;\n startAmp_lt?: InputMaybe;\n startAmp_lte?: InputMaybe;\n startAmp_not?: InputMaybe;\n startAmp_not_in?: InputMaybe>;\n startTimestamp?: InputMaybe;\n startTimestamp_gt?: InputMaybe;\n startTimestamp_gte?: InputMaybe;\n startTimestamp_in?: InputMaybe>;\n startTimestamp_lt?: InputMaybe;\n startTimestamp_lte?: InputMaybe;\n startTimestamp_not?: InputMaybe;\n startTimestamp_not_in?: InputMaybe>;\n};\n\nexport enum AmpUpdate_OrderBy {\n EndAmp = 'endAmp',\n EndTimestamp = 'endTimestamp',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n ScheduledTimestamp = 'scheduledTimestamp',\n StartAmp = 'startAmp',\n StartTimestamp = 'startTimestamp'\n}\n\nexport type Balancer = {\n __typename?: 'Balancer';\n id: Scalars['ID'];\n poolCount: Scalars['Int'];\n pools?: Maybe>;\n protocolFeesCollector?: Maybe;\n totalLiquidity: Scalars['BigDecimal'];\n totalProtocolFee?: Maybe;\n totalSwapCount: Scalars['BigInt'];\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n};\n\n\nexport type BalancerPoolsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type BalancerSnapshot = {\n __typename?: 'BalancerSnapshot';\n id: Scalars['ID'];\n poolCount: Scalars['Int'];\n timestamp: Scalars['Int'];\n totalLiquidity: Scalars['BigDecimal'];\n totalProtocolFee?: Maybe;\n totalSwapCount: Scalars['BigInt'];\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n vault: Balancer;\n};\n\nexport type BalancerSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolCount?: InputMaybe;\n poolCount_gt?: InputMaybe;\n poolCount_gte?: InputMaybe;\n poolCount_in?: InputMaybe>;\n poolCount_lt?: InputMaybe;\n poolCount_lte?: InputMaybe;\n poolCount_not?: InputMaybe;\n poolCount_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n totalLiquidity?: InputMaybe;\n totalLiquidity_gt?: InputMaybe;\n totalLiquidity_gte?: InputMaybe;\n totalLiquidity_in?: InputMaybe>;\n totalLiquidity_lt?: InputMaybe;\n totalLiquidity_lte?: InputMaybe;\n totalLiquidity_not?: InputMaybe;\n totalLiquidity_not_in?: InputMaybe>;\n totalProtocolFee?: InputMaybe;\n totalProtocolFee_gt?: InputMaybe;\n totalProtocolFee_gte?: InputMaybe;\n totalProtocolFee_in?: InputMaybe>;\n totalProtocolFee_lt?: InputMaybe;\n totalProtocolFee_lte?: InputMaybe;\n totalProtocolFee_not?: InputMaybe;\n totalProtocolFee_not_in?: InputMaybe>;\n totalSwapCount?: InputMaybe;\n totalSwapCount_gt?: InputMaybe;\n totalSwapCount_gte?: InputMaybe;\n totalSwapCount_in?: InputMaybe>;\n totalSwapCount_lt?: InputMaybe;\n totalSwapCount_lte?: InputMaybe;\n totalSwapCount_not?: InputMaybe;\n totalSwapCount_not_in?: InputMaybe>;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n vault?: InputMaybe;\n vault_?: InputMaybe;\n vault_contains?: InputMaybe;\n vault_contains_nocase?: InputMaybe;\n vault_ends_with?: InputMaybe;\n vault_ends_with_nocase?: InputMaybe;\n vault_gt?: InputMaybe;\n vault_gte?: InputMaybe;\n vault_in?: InputMaybe>;\n vault_lt?: InputMaybe;\n vault_lte?: InputMaybe;\n vault_not?: InputMaybe;\n vault_not_contains?: InputMaybe;\n vault_not_contains_nocase?: InputMaybe;\n vault_not_ends_with?: InputMaybe;\n vault_not_ends_with_nocase?: InputMaybe;\n vault_not_in?: InputMaybe>;\n vault_not_starts_with?: InputMaybe;\n vault_not_starts_with_nocase?: InputMaybe;\n vault_starts_with?: InputMaybe;\n vault_starts_with_nocase?: InputMaybe;\n};\n\nexport enum BalancerSnapshot_OrderBy {\n Id = 'id',\n PoolCount = 'poolCount',\n Timestamp = 'timestamp',\n TotalLiquidity = 'totalLiquidity',\n TotalProtocolFee = 'totalProtocolFee',\n TotalSwapCount = 'totalSwapCount',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume',\n Vault = 'vault',\n VaultId = 'vault__id',\n VaultPoolCount = 'vault__poolCount',\n VaultProtocolFeesCollector = 'vault__protocolFeesCollector',\n VaultTotalLiquidity = 'vault__totalLiquidity',\n VaultTotalProtocolFee = 'vault__totalProtocolFee',\n VaultTotalSwapCount = 'vault__totalSwapCount',\n VaultTotalSwapFee = 'vault__totalSwapFee',\n VaultTotalSwapVolume = 'vault__totalSwapVolume'\n}\n\nexport type Balancer_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolCount?: InputMaybe;\n poolCount_gt?: InputMaybe;\n poolCount_gte?: InputMaybe;\n poolCount_in?: InputMaybe>;\n poolCount_lt?: InputMaybe;\n poolCount_lte?: InputMaybe;\n poolCount_not?: InputMaybe;\n poolCount_not_in?: InputMaybe>;\n pools_?: InputMaybe;\n protocolFeesCollector?: InputMaybe;\n protocolFeesCollector_contains?: InputMaybe;\n protocolFeesCollector_gt?: InputMaybe;\n protocolFeesCollector_gte?: InputMaybe;\n protocolFeesCollector_in?: InputMaybe>;\n protocolFeesCollector_lt?: InputMaybe;\n protocolFeesCollector_lte?: InputMaybe;\n protocolFeesCollector_not?: InputMaybe;\n protocolFeesCollector_not_contains?: InputMaybe;\n protocolFeesCollector_not_in?: InputMaybe>;\n totalLiquidity?: InputMaybe;\n totalLiquidity_gt?: InputMaybe;\n totalLiquidity_gte?: InputMaybe;\n totalLiquidity_in?: InputMaybe>;\n totalLiquidity_lt?: InputMaybe;\n totalLiquidity_lte?: InputMaybe;\n totalLiquidity_not?: InputMaybe;\n totalLiquidity_not_in?: InputMaybe>;\n totalProtocolFee?: InputMaybe;\n totalProtocolFee_gt?: InputMaybe;\n totalProtocolFee_gte?: InputMaybe;\n totalProtocolFee_in?: InputMaybe>;\n totalProtocolFee_lt?: InputMaybe;\n totalProtocolFee_lte?: InputMaybe;\n totalProtocolFee_not?: InputMaybe;\n totalProtocolFee_not_in?: InputMaybe>;\n totalSwapCount?: InputMaybe;\n totalSwapCount_gt?: InputMaybe;\n totalSwapCount_gte?: InputMaybe;\n totalSwapCount_in?: InputMaybe>;\n totalSwapCount_lt?: InputMaybe;\n totalSwapCount_lte?: InputMaybe;\n totalSwapCount_not?: InputMaybe;\n totalSwapCount_not_in?: InputMaybe>;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n};\n\nexport enum Balancer_OrderBy {\n Id = 'id',\n PoolCount = 'poolCount',\n Pools = 'pools',\n ProtocolFeesCollector = 'protocolFeesCollector',\n TotalLiquidity = 'totalLiquidity',\n TotalProtocolFee = 'totalProtocolFee',\n TotalSwapCount = 'totalSwapCount',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume'\n}\n\nexport type BlockChangedFilter = {\n number_gte: Scalars['Int'];\n};\n\nexport type Block_Height = {\n hash?: InputMaybe;\n number?: InputMaybe;\n number_gte?: InputMaybe;\n};\n\nexport type CircuitBreaker = {\n __typename?: 'CircuitBreaker';\n bptPrice: Scalars['BigDecimal'];\n id: Scalars['ID'];\n lowerBoundPercentage: Scalars['BigDecimal'];\n pool: Pool;\n token: PoolToken;\n upperBoundPercentage: Scalars['BigDecimal'];\n};\n\nexport type CircuitBreaker_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n bptPrice?: InputMaybe;\n bptPrice_gt?: InputMaybe;\n bptPrice_gte?: InputMaybe;\n bptPrice_in?: InputMaybe>;\n bptPrice_lt?: InputMaybe;\n bptPrice_lte?: InputMaybe;\n bptPrice_not?: InputMaybe;\n bptPrice_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n lowerBoundPercentage?: InputMaybe;\n lowerBoundPercentage_gt?: InputMaybe;\n lowerBoundPercentage_gte?: InputMaybe;\n lowerBoundPercentage_in?: InputMaybe>;\n lowerBoundPercentage_lt?: InputMaybe;\n lowerBoundPercentage_lte?: InputMaybe;\n lowerBoundPercentage_not?: InputMaybe;\n lowerBoundPercentage_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n token?: InputMaybe;\n token_?: InputMaybe;\n token_contains?: InputMaybe;\n token_contains_nocase?: InputMaybe;\n token_ends_with?: InputMaybe;\n token_ends_with_nocase?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_contains_nocase?: InputMaybe;\n token_not_ends_with?: InputMaybe;\n token_not_ends_with_nocase?: InputMaybe;\n token_not_in?: InputMaybe>;\n token_not_starts_with?: InputMaybe;\n token_not_starts_with_nocase?: InputMaybe;\n token_starts_with?: InputMaybe;\n token_starts_with_nocase?: InputMaybe;\n upperBoundPercentage?: InputMaybe;\n upperBoundPercentage_gt?: InputMaybe;\n upperBoundPercentage_gte?: InputMaybe;\n upperBoundPercentage_in?: InputMaybe>;\n upperBoundPercentage_lt?: InputMaybe;\n upperBoundPercentage_lte?: InputMaybe;\n upperBoundPercentage_not?: InputMaybe;\n upperBoundPercentage_not_in?: InputMaybe>;\n};\n\nexport enum CircuitBreaker_OrderBy {\n BptPrice = 'bptPrice',\n Id = 'id',\n LowerBoundPercentage = 'lowerBoundPercentage',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n Token = 'token',\n TokenAddress = 'token__address',\n TokenAssetManager = 'token__assetManager',\n TokenBalance = 'token__balance',\n TokenCashBalance = 'token__cashBalance',\n TokenDecimals = 'token__decimals',\n TokenId = 'token__id',\n TokenIndex = 'token__index',\n TokenIsExemptFromYieldProtocolFee = 'token__isExemptFromYieldProtocolFee',\n TokenManagedBalance = 'token__managedBalance',\n TokenName = 'token__name',\n TokenOldPriceRate = 'token__oldPriceRate',\n TokenPaidProtocolFees = 'token__paidProtocolFees',\n TokenPriceRate = 'token__priceRate',\n TokenSymbol = 'token__symbol',\n TokenWeight = 'token__weight',\n UpperBoundPercentage = 'upperBoundPercentage'\n}\n\nexport type GradualWeightUpdate = {\n __typename?: 'GradualWeightUpdate';\n endTimestamp: Scalars['BigInt'];\n endWeights: Array;\n id: Scalars['ID'];\n poolId: Pool;\n scheduledTimestamp: Scalars['Int'];\n startTimestamp: Scalars['BigInt'];\n startWeights: Array;\n};\n\nexport type GradualWeightUpdate_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n endTimestamp?: InputMaybe;\n endTimestamp_gt?: InputMaybe;\n endTimestamp_gte?: InputMaybe;\n endTimestamp_in?: InputMaybe>;\n endTimestamp_lt?: InputMaybe;\n endTimestamp_lte?: InputMaybe;\n endTimestamp_not?: InputMaybe;\n endTimestamp_not_in?: InputMaybe>;\n endWeights?: InputMaybe>;\n endWeights_contains?: InputMaybe>;\n endWeights_contains_nocase?: InputMaybe>;\n endWeights_not?: InputMaybe>;\n endWeights_not_contains?: InputMaybe>;\n endWeights_not_contains_nocase?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n scheduledTimestamp?: InputMaybe;\n scheduledTimestamp_gt?: InputMaybe;\n scheduledTimestamp_gte?: InputMaybe;\n scheduledTimestamp_in?: InputMaybe>;\n scheduledTimestamp_lt?: InputMaybe;\n scheduledTimestamp_lte?: InputMaybe;\n scheduledTimestamp_not?: InputMaybe;\n scheduledTimestamp_not_in?: InputMaybe>;\n startTimestamp?: InputMaybe;\n startTimestamp_gt?: InputMaybe;\n startTimestamp_gte?: InputMaybe;\n startTimestamp_in?: InputMaybe>;\n startTimestamp_lt?: InputMaybe;\n startTimestamp_lte?: InputMaybe;\n startTimestamp_not?: InputMaybe;\n startTimestamp_not_in?: InputMaybe>;\n startWeights?: InputMaybe>;\n startWeights_contains?: InputMaybe>;\n startWeights_contains_nocase?: InputMaybe>;\n startWeights_not?: InputMaybe>;\n startWeights_not_contains?: InputMaybe>;\n startWeights_not_contains_nocase?: InputMaybe>;\n};\n\nexport enum GradualWeightUpdate_OrderBy {\n EndTimestamp = 'endTimestamp',\n EndWeights = 'endWeights',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n ScheduledTimestamp = 'scheduledTimestamp',\n StartTimestamp = 'startTimestamp',\n StartWeights = 'startWeights'\n}\n\nexport enum InvestType {\n Exit = 'Exit',\n Join = 'Join'\n}\n\nexport type JoinExit = {\n __typename?: 'JoinExit';\n amounts: Array;\n id: Scalars['ID'];\n pool: Pool;\n sender: Scalars['Bytes'];\n timestamp: Scalars['Int'];\n tx: Scalars['Bytes'];\n type: InvestType;\n user: User;\n valueUSD?: Maybe;\n};\n\nexport type JoinExit_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n amounts?: InputMaybe>;\n amounts_contains?: InputMaybe>;\n amounts_contains_nocase?: InputMaybe>;\n amounts_not?: InputMaybe>;\n amounts_not_contains?: InputMaybe>;\n amounts_not_contains_nocase?: InputMaybe>;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n sender?: InputMaybe;\n sender_contains?: InputMaybe;\n sender_gt?: InputMaybe;\n sender_gte?: InputMaybe;\n sender_in?: InputMaybe>;\n sender_lt?: InputMaybe;\n sender_lte?: InputMaybe;\n sender_not?: InputMaybe;\n sender_not_contains?: InputMaybe;\n sender_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n tx?: InputMaybe;\n tx_contains?: InputMaybe;\n tx_gt?: InputMaybe;\n tx_gte?: InputMaybe;\n tx_in?: InputMaybe>;\n tx_lt?: InputMaybe;\n tx_lte?: InputMaybe;\n tx_not?: InputMaybe;\n tx_not_contains?: InputMaybe;\n tx_not_in?: InputMaybe>;\n type?: InputMaybe;\n type_in?: InputMaybe>;\n type_not?: InputMaybe;\n type_not_in?: InputMaybe>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n valueUSD?: InputMaybe;\n valueUSD_gt?: InputMaybe;\n valueUSD_gte?: InputMaybe;\n valueUSD_in?: InputMaybe>;\n valueUSD_lt?: InputMaybe;\n valueUSD_lte?: InputMaybe;\n valueUSD_not?: InputMaybe;\n valueUSD_not_in?: InputMaybe>;\n};\n\nexport enum JoinExit_OrderBy {\n Amounts = 'amounts',\n Id = 'id',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n Sender = 'sender',\n Timestamp = 'timestamp',\n Tx = 'tx',\n Type = 'type',\n User = 'user',\n UserId = 'user__id',\n ValueUsd = 'valueUSD'\n}\n\nexport type LatestPrice = {\n __typename?: 'LatestPrice';\n asset: Scalars['Bytes'];\n block: Scalars['BigInt'];\n id: Scalars['ID'];\n poolId: Pool;\n price: Scalars['BigDecimal'];\n pricingAsset: Scalars['Bytes'];\n};\n\nexport type LatestPrice_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n asset?: InputMaybe;\n asset_contains?: InputMaybe;\n asset_gt?: InputMaybe;\n asset_gte?: InputMaybe;\n asset_in?: InputMaybe>;\n asset_lt?: InputMaybe;\n asset_lte?: InputMaybe;\n asset_not?: InputMaybe;\n asset_not_contains?: InputMaybe;\n asset_not_in?: InputMaybe>;\n block?: InputMaybe;\n block_gt?: InputMaybe;\n block_gte?: InputMaybe;\n block_in?: InputMaybe>;\n block_lt?: InputMaybe;\n block_lte?: InputMaybe;\n block_not?: InputMaybe;\n block_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n price?: InputMaybe;\n price_gt?: InputMaybe;\n price_gte?: InputMaybe;\n price_in?: InputMaybe>;\n price_lt?: InputMaybe;\n price_lte?: InputMaybe;\n price_not?: InputMaybe;\n price_not_in?: InputMaybe>;\n pricingAsset?: InputMaybe;\n pricingAsset_contains?: InputMaybe;\n pricingAsset_gt?: InputMaybe;\n pricingAsset_gte?: InputMaybe;\n pricingAsset_in?: InputMaybe>;\n pricingAsset_lt?: InputMaybe;\n pricingAsset_lte?: InputMaybe;\n pricingAsset_not?: InputMaybe;\n pricingAsset_not_contains?: InputMaybe;\n pricingAsset_not_in?: InputMaybe>;\n};\n\nexport enum LatestPrice_OrderBy {\n Asset = 'asset',\n Block = 'block',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n Price = 'price',\n PricingAsset = 'pricingAsset'\n}\n\nexport type ManagementOperation = {\n __typename?: 'ManagementOperation';\n cashDelta: Scalars['BigDecimal'];\n id: Scalars['ID'];\n managedDelta: Scalars['BigDecimal'];\n poolTokenId: PoolToken;\n timestamp: Scalars['Int'];\n type: OperationType;\n};\n\nexport type ManagementOperation_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n cashDelta?: InputMaybe;\n cashDelta_gt?: InputMaybe;\n cashDelta_gte?: InputMaybe;\n cashDelta_in?: InputMaybe>;\n cashDelta_lt?: InputMaybe;\n cashDelta_lte?: InputMaybe;\n cashDelta_not?: InputMaybe;\n cashDelta_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n managedDelta?: InputMaybe;\n managedDelta_gt?: InputMaybe;\n managedDelta_gte?: InputMaybe;\n managedDelta_in?: InputMaybe>;\n managedDelta_lt?: InputMaybe;\n managedDelta_lte?: InputMaybe;\n managedDelta_not?: InputMaybe;\n managedDelta_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolTokenId?: InputMaybe;\n poolTokenId_?: InputMaybe;\n poolTokenId_contains?: InputMaybe;\n poolTokenId_contains_nocase?: InputMaybe;\n poolTokenId_ends_with?: InputMaybe;\n poolTokenId_ends_with_nocase?: InputMaybe;\n poolTokenId_gt?: InputMaybe;\n poolTokenId_gte?: InputMaybe;\n poolTokenId_in?: InputMaybe>;\n poolTokenId_lt?: InputMaybe;\n poolTokenId_lte?: InputMaybe;\n poolTokenId_not?: InputMaybe;\n poolTokenId_not_contains?: InputMaybe;\n poolTokenId_not_contains_nocase?: InputMaybe;\n poolTokenId_not_ends_with?: InputMaybe;\n poolTokenId_not_ends_with_nocase?: InputMaybe;\n poolTokenId_not_in?: InputMaybe>;\n poolTokenId_not_starts_with?: InputMaybe;\n poolTokenId_not_starts_with_nocase?: InputMaybe;\n poolTokenId_starts_with?: InputMaybe;\n poolTokenId_starts_with_nocase?: InputMaybe;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n type?: InputMaybe;\n type_in?: InputMaybe>;\n type_not?: InputMaybe;\n type_not_in?: InputMaybe>;\n};\n\nexport enum ManagementOperation_OrderBy {\n CashDelta = 'cashDelta',\n Id = 'id',\n ManagedDelta = 'managedDelta',\n PoolTokenId = 'poolTokenId',\n PoolTokenIdAddress = 'poolTokenId__address',\n PoolTokenIdAssetManager = 'poolTokenId__assetManager',\n PoolTokenIdBalance = 'poolTokenId__balance',\n PoolTokenIdCashBalance = 'poolTokenId__cashBalance',\n PoolTokenIdDecimals = 'poolTokenId__decimals',\n PoolTokenIdId = 'poolTokenId__id',\n PoolTokenIdIndex = 'poolTokenId__index',\n PoolTokenIdIsExemptFromYieldProtocolFee = 'poolTokenId__isExemptFromYieldProtocolFee',\n PoolTokenIdManagedBalance = 'poolTokenId__managedBalance',\n PoolTokenIdName = 'poolTokenId__name',\n PoolTokenIdOldPriceRate = 'poolTokenId__oldPriceRate',\n PoolTokenIdPaidProtocolFees = 'poolTokenId__paidProtocolFees',\n PoolTokenIdPriceRate = 'poolTokenId__priceRate',\n PoolTokenIdSymbol = 'poolTokenId__symbol',\n PoolTokenIdWeight = 'poolTokenId__weight',\n Timestamp = 'timestamp',\n Type = 'type'\n}\n\nexport enum OperationType {\n Deposit = 'Deposit',\n Update = 'Update',\n Withdraw = 'Withdraw'\n}\n\n/** Defines the order direction, either ascending or descending */\nexport enum OrderDirection {\n Asc = 'asc',\n Desc = 'desc'\n}\n\nexport type Pool = {\n __typename?: 'Pool';\n address: Scalars['Bytes'];\n alpha?: Maybe;\n amp?: Maybe;\n ampUpdates?: Maybe>;\n baseToken?: Maybe;\n beta?: Maybe;\n c?: Maybe;\n circuitBreakers?: Maybe>;\n createTime: Scalars['Int'];\n dSq?: Maybe;\n delta?: Maybe;\n epsilon?: Maybe;\n expiryTime?: Maybe;\n factory?: Maybe;\n historicalValues?: Maybe>;\n holdersCount: Scalars['BigInt'];\n id: Scalars['ID'];\n isInRecoveryMode?: Maybe;\n isPaused?: Maybe;\n joinExitEnabled?: Maybe;\n lambda?: Maybe;\n lastJoinExitAmp?: Maybe;\n lastPostJoinExitInvariant?: Maybe;\n latestAmpUpdate?: Maybe;\n lowerTarget?: Maybe;\n mainIndex?: Maybe;\n managementAumFee?: Maybe;\n managementFee?: Maybe;\n mustAllowlistLPs?: Maybe;\n name?: Maybe;\n oracleEnabled: Scalars['Boolean'];\n owner?: Maybe;\n poolType?: Maybe;\n poolTypeVersion?: Maybe;\n priceRateProviders?: Maybe>;\n principalToken?: Maybe;\n protocolAumFeeCache?: Maybe;\n protocolId?: Maybe;\n protocolIdData?: Maybe;\n protocolSwapFeeCache?: Maybe;\n protocolYieldFeeCache?: Maybe;\n root3Alpha?: Maybe;\n s?: Maybe;\n shares?: Maybe>;\n snapshots?: Maybe>;\n sqrtAlpha?: Maybe;\n sqrtBeta?: Maybe;\n strategyType: Scalars['Int'];\n /** Indicates if a pool can be swapped against. Combines multiple sources, including offchain curation */\n swapEnabled: Scalars['Boolean'];\n /** External indication from an offchain permissioned actor */\n swapEnabledCurationSignal?: Maybe;\n /** The native swapEnabled boolean. internal to the pool. Only applies to Gyro, LBPs and InvestmentPools */\n swapEnabledInternal?: Maybe;\n swapFee: Scalars['BigDecimal'];\n swaps?: Maybe>;\n swapsCount: Scalars['BigInt'];\n symbol?: Maybe;\n tauAlphaX?: Maybe;\n tauAlphaY?: Maybe;\n tauBetaX?: Maybe;\n tauBetaY?: Maybe;\n tokens?: Maybe>;\n tokensList: Array;\n totalAumFeeCollectedInBPT?: Maybe;\n totalLiquidity: Scalars['BigDecimal'];\n totalLiquiditySansBPT?: Maybe;\n totalProtocolFee?: Maybe;\n totalProtocolFeePaidInBPT?: Maybe;\n totalShares: Scalars['BigDecimal'];\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n totalWeight?: Maybe;\n tx?: Maybe;\n u?: Maybe;\n unitSeconds?: Maybe;\n upperTarget?: Maybe;\n v?: Maybe;\n vaultID: Balancer;\n w?: Maybe;\n weightUpdates?: Maybe>;\n wrappedIndex?: Maybe;\n z?: Maybe;\n};\n\n\nexport type PoolAmpUpdatesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolCircuitBreakersArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolHistoricalValuesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolPriceRateProvidersArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolSharesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolSnapshotsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolSwapsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolTokensArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type PoolWeightUpdatesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type PoolContract = {\n __typename?: 'PoolContract';\n id: Scalars['ID'];\n pool: Pool;\n};\n\nexport type PoolContract_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n};\n\nexport enum PoolContract_OrderBy {\n Id = 'id',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z'\n}\n\nexport type PoolHistoricalLiquidity = {\n __typename?: 'PoolHistoricalLiquidity';\n block: Scalars['BigInt'];\n id: Scalars['ID'];\n poolId: Pool;\n poolLiquidity: Scalars['BigDecimal'];\n poolShareValue: Scalars['BigDecimal'];\n poolTotalShares: Scalars['BigDecimal'];\n pricingAsset: Scalars['Bytes'];\n};\n\nexport type PoolHistoricalLiquidity_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n block?: InputMaybe;\n block_gt?: InputMaybe;\n block_gte?: InputMaybe;\n block_in?: InputMaybe>;\n block_lt?: InputMaybe;\n block_lte?: InputMaybe;\n block_not?: InputMaybe;\n block_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n poolLiquidity?: InputMaybe;\n poolLiquidity_gt?: InputMaybe;\n poolLiquidity_gte?: InputMaybe;\n poolLiquidity_in?: InputMaybe>;\n poolLiquidity_lt?: InputMaybe;\n poolLiquidity_lte?: InputMaybe;\n poolLiquidity_not?: InputMaybe;\n poolLiquidity_not_in?: InputMaybe>;\n poolShareValue?: InputMaybe;\n poolShareValue_gt?: InputMaybe;\n poolShareValue_gte?: InputMaybe;\n poolShareValue_in?: InputMaybe>;\n poolShareValue_lt?: InputMaybe;\n poolShareValue_lte?: InputMaybe;\n poolShareValue_not?: InputMaybe;\n poolShareValue_not_in?: InputMaybe>;\n poolTotalShares?: InputMaybe;\n poolTotalShares_gt?: InputMaybe;\n poolTotalShares_gte?: InputMaybe;\n poolTotalShares_in?: InputMaybe>;\n poolTotalShares_lt?: InputMaybe;\n poolTotalShares_lte?: InputMaybe;\n poolTotalShares_not?: InputMaybe;\n poolTotalShares_not_in?: InputMaybe>;\n pricingAsset?: InputMaybe;\n pricingAsset_contains?: InputMaybe;\n pricingAsset_gt?: InputMaybe;\n pricingAsset_gte?: InputMaybe;\n pricingAsset_in?: InputMaybe>;\n pricingAsset_lt?: InputMaybe;\n pricingAsset_lte?: InputMaybe;\n pricingAsset_not?: InputMaybe;\n pricingAsset_not_contains?: InputMaybe;\n pricingAsset_not_in?: InputMaybe>;\n};\n\nexport enum PoolHistoricalLiquidity_OrderBy {\n Block = 'block',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n PoolLiquidity = 'poolLiquidity',\n PoolShareValue = 'poolShareValue',\n PoolTotalShares = 'poolTotalShares',\n PricingAsset = 'pricingAsset'\n}\n\nexport type PoolShare = {\n __typename?: 'PoolShare';\n balance: Scalars['BigDecimal'];\n id: Scalars['ID'];\n poolId: Pool;\n userAddress: User;\n};\n\nexport type PoolShare_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n balance?: InputMaybe;\n balance_gt?: InputMaybe;\n balance_gte?: InputMaybe;\n balance_in?: InputMaybe>;\n balance_lt?: InputMaybe;\n balance_lte?: InputMaybe;\n balance_not?: InputMaybe;\n balance_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n userAddress?: InputMaybe;\n userAddress_?: InputMaybe;\n userAddress_contains?: InputMaybe;\n userAddress_contains_nocase?: InputMaybe;\n userAddress_ends_with?: InputMaybe;\n userAddress_ends_with_nocase?: InputMaybe;\n userAddress_gt?: InputMaybe;\n userAddress_gte?: InputMaybe;\n userAddress_in?: InputMaybe>;\n userAddress_lt?: InputMaybe;\n userAddress_lte?: InputMaybe;\n userAddress_not?: InputMaybe;\n userAddress_not_contains?: InputMaybe;\n userAddress_not_contains_nocase?: InputMaybe;\n userAddress_not_ends_with?: InputMaybe;\n userAddress_not_ends_with_nocase?: InputMaybe;\n userAddress_not_in?: InputMaybe>;\n userAddress_not_starts_with?: InputMaybe;\n userAddress_not_starts_with_nocase?: InputMaybe;\n userAddress_starts_with?: InputMaybe;\n userAddress_starts_with_nocase?: InputMaybe;\n};\n\nexport enum PoolShare_OrderBy {\n Balance = 'balance',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n UserAddress = 'userAddress',\n UserAddressId = 'userAddress__id'\n}\n\nexport type PoolSnapshot = {\n __typename?: 'PoolSnapshot';\n amounts: Array;\n holdersCount: Scalars['BigInt'];\n id: Scalars['ID'];\n liquidity: Scalars['BigDecimal'];\n pool: Pool;\n protocolFee?: Maybe;\n swapFees: Scalars['BigDecimal'];\n swapVolume: Scalars['BigDecimal'];\n swapsCount: Scalars['BigInt'];\n timestamp: Scalars['Int'];\n totalShares: Scalars['BigDecimal'];\n};\n\nexport type PoolSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n amounts?: InputMaybe>;\n amounts_contains?: InputMaybe>;\n amounts_contains_nocase?: InputMaybe>;\n amounts_not?: InputMaybe>;\n amounts_not_contains?: InputMaybe>;\n amounts_not_contains_nocase?: InputMaybe>;\n and?: InputMaybe>>;\n holdersCount?: InputMaybe;\n holdersCount_gt?: InputMaybe;\n holdersCount_gte?: InputMaybe;\n holdersCount_in?: InputMaybe>;\n holdersCount_lt?: InputMaybe;\n holdersCount_lte?: InputMaybe;\n holdersCount_not?: InputMaybe;\n holdersCount_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n liquidity?: InputMaybe;\n liquidity_gt?: InputMaybe;\n liquidity_gte?: InputMaybe;\n liquidity_in?: InputMaybe>;\n liquidity_lt?: InputMaybe;\n liquidity_lte?: InputMaybe;\n liquidity_not?: InputMaybe;\n liquidity_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n protocolFee?: InputMaybe;\n protocolFee_gt?: InputMaybe;\n protocolFee_gte?: InputMaybe;\n protocolFee_in?: InputMaybe>;\n protocolFee_lt?: InputMaybe;\n protocolFee_lte?: InputMaybe;\n protocolFee_not?: InputMaybe;\n protocolFee_not_in?: InputMaybe>;\n swapFees?: InputMaybe;\n swapFees_gt?: InputMaybe;\n swapFees_gte?: InputMaybe;\n swapFees_in?: InputMaybe>;\n swapFees_lt?: InputMaybe;\n swapFees_lte?: InputMaybe;\n swapFees_not?: InputMaybe;\n swapFees_not_in?: InputMaybe>;\n swapVolume?: InputMaybe;\n swapVolume_gt?: InputMaybe;\n swapVolume_gte?: InputMaybe;\n swapVolume_in?: InputMaybe>;\n swapVolume_lt?: InputMaybe;\n swapVolume_lte?: InputMaybe;\n swapVolume_not?: InputMaybe;\n swapVolume_not_in?: InputMaybe>;\n swapsCount?: InputMaybe;\n swapsCount_gt?: InputMaybe;\n swapsCount_gte?: InputMaybe;\n swapsCount_in?: InputMaybe>;\n swapsCount_lt?: InputMaybe;\n swapsCount_lte?: InputMaybe;\n swapsCount_not?: InputMaybe;\n swapsCount_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n totalShares?: InputMaybe;\n totalShares_gt?: InputMaybe;\n totalShares_gte?: InputMaybe;\n totalShares_in?: InputMaybe>;\n totalShares_lt?: InputMaybe;\n totalShares_lte?: InputMaybe;\n totalShares_not?: InputMaybe;\n totalShares_not_in?: InputMaybe>;\n};\n\nexport enum PoolSnapshot_OrderBy {\n Amounts = 'amounts',\n HoldersCount = 'holdersCount',\n Id = 'id',\n Liquidity = 'liquidity',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n ProtocolFee = 'protocolFee',\n SwapFees = 'swapFees',\n SwapVolume = 'swapVolume',\n SwapsCount = 'swapsCount',\n Timestamp = 'timestamp',\n TotalShares = 'totalShares'\n}\n\nexport type PoolToken = {\n __typename?: 'PoolToken';\n address: Scalars['String'];\n assetManager: Scalars['Bytes'];\n balance: Scalars['BigDecimal'];\n cashBalance: Scalars['BigDecimal'];\n circuitBreaker?: Maybe;\n decimals: Scalars['Int'];\n id: Scalars['ID'];\n index?: Maybe;\n isExemptFromYieldProtocolFee?: Maybe;\n managedBalance: Scalars['BigDecimal'];\n managements?: Maybe>;\n name: Scalars['String'];\n oldPriceRate?: Maybe;\n paidProtocolFees?: Maybe;\n poolId?: Maybe;\n priceRate: Scalars['BigDecimal'];\n symbol: Scalars['String'];\n token: Token;\n weight?: Maybe;\n};\n\n\nexport type PoolTokenManagementsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type PoolToken_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_contains_nocase?: InputMaybe;\n address_ends_with?: InputMaybe;\n address_ends_with_nocase?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_contains_nocase?: InputMaybe;\n address_not_ends_with?: InputMaybe;\n address_not_ends_with_nocase?: InputMaybe;\n address_not_in?: InputMaybe>;\n address_not_starts_with?: InputMaybe;\n address_not_starts_with_nocase?: InputMaybe;\n address_starts_with?: InputMaybe;\n address_starts_with_nocase?: InputMaybe;\n and?: InputMaybe>>;\n assetManager?: InputMaybe;\n assetManager_contains?: InputMaybe;\n assetManager_gt?: InputMaybe;\n assetManager_gte?: InputMaybe;\n assetManager_in?: InputMaybe>;\n assetManager_lt?: InputMaybe;\n assetManager_lte?: InputMaybe;\n assetManager_not?: InputMaybe;\n assetManager_not_contains?: InputMaybe;\n assetManager_not_in?: InputMaybe>;\n balance?: InputMaybe;\n balance_gt?: InputMaybe;\n balance_gte?: InputMaybe;\n balance_in?: InputMaybe>;\n balance_lt?: InputMaybe;\n balance_lte?: InputMaybe;\n balance_not?: InputMaybe;\n balance_not_in?: InputMaybe>;\n cashBalance?: InputMaybe;\n cashBalance_gt?: InputMaybe;\n cashBalance_gte?: InputMaybe;\n cashBalance_in?: InputMaybe>;\n cashBalance_lt?: InputMaybe;\n cashBalance_lte?: InputMaybe;\n cashBalance_not?: InputMaybe;\n cashBalance_not_in?: InputMaybe>;\n circuitBreaker?: InputMaybe;\n circuitBreaker_?: InputMaybe;\n circuitBreaker_contains?: InputMaybe;\n circuitBreaker_contains_nocase?: InputMaybe;\n circuitBreaker_ends_with?: InputMaybe;\n circuitBreaker_ends_with_nocase?: InputMaybe;\n circuitBreaker_gt?: InputMaybe;\n circuitBreaker_gte?: InputMaybe;\n circuitBreaker_in?: InputMaybe>;\n circuitBreaker_lt?: InputMaybe;\n circuitBreaker_lte?: InputMaybe;\n circuitBreaker_not?: InputMaybe;\n circuitBreaker_not_contains?: InputMaybe;\n circuitBreaker_not_contains_nocase?: InputMaybe;\n circuitBreaker_not_ends_with?: InputMaybe;\n circuitBreaker_not_ends_with_nocase?: InputMaybe;\n circuitBreaker_not_in?: InputMaybe>;\n circuitBreaker_not_starts_with?: InputMaybe;\n circuitBreaker_not_starts_with_nocase?: InputMaybe;\n circuitBreaker_starts_with?: InputMaybe;\n circuitBreaker_starts_with_nocase?: InputMaybe;\n decimals?: InputMaybe;\n decimals_gt?: InputMaybe;\n decimals_gte?: InputMaybe;\n decimals_in?: InputMaybe>;\n decimals_lt?: InputMaybe;\n decimals_lte?: InputMaybe;\n decimals_not?: InputMaybe;\n decimals_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n index?: InputMaybe;\n index_gt?: InputMaybe;\n index_gte?: InputMaybe;\n index_in?: InputMaybe>;\n index_lt?: InputMaybe;\n index_lte?: InputMaybe;\n index_not?: InputMaybe;\n index_not_in?: InputMaybe>;\n isExemptFromYieldProtocolFee?: InputMaybe;\n isExemptFromYieldProtocolFee_in?: InputMaybe>;\n isExemptFromYieldProtocolFee_not?: InputMaybe;\n isExemptFromYieldProtocolFee_not_in?: InputMaybe>;\n managedBalance?: InputMaybe;\n managedBalance_gt?: InputMaybe;\n managedBalance_gte?: InputMaybe;\n managedBalance_in?: InputMaybe>;\n managedBalance_lt?: InputMaybe;\n managedBalance_lte?: InputMaybe;\n managedBalance_not?: InputMaybe;\n managedBalance_not_in?: InputMaybe>;\n managements_?: InputMaybe;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n oldPriceRate?: InputMaybe;\n oldPriceRate_gt?: InputMaybe;\n oldPriceRate_gte?: InputMaybe;\n oldPriceRate_in?: InputMaybe>;\n oldPriceRate_lt?: InputMaybe;\n oldPriceRate_lte?: InputMaybe;\n oldPriceRate_not?: InputMaybe;\n oldPriceRate_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n paidProtocolFees?: InputMaybe;\n paidProtocolFees_gt?: InputMaybe;\n paidProtocolFees_gte?: InputMaybe;\n paidProtocolFees_in?: InputMaybe>;\n paidProtocolFees_lt?: InputMaybe;\n paidProtocolFees_lte?: InputMaybe;\n paidProtocolFees_not?: InputMaybe;\n paidProtocolFees_not_in?: InputMaybe>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n priceRate?: InputMaybe;\n priceRate_gt?: InputMaybe;\n priceRate_gte?: InputMaybe;\n priceRate_in?: InputMaybe>;\n priceRate_lt?: InputMaybe;\n priceRate_lte?: InputMaybe;\n priceRate_not?: InputMaybe;\n priceRate_not_in?: InputMaybe>;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n token?: InputMaybe;\n token_?: InputMaybe;\n token_contains?: InputMaybe;\n token_contains_nocase?: InputMaybe;\n token_ends_with?: InputMaybe;\n token_ends_with_nocase?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_contains_nocase?: InputMaybe;\n token_not_ends_with?: InputMaybe;\n token_not_ends_with_nocase?: InputMaybe;\n token_not_in?: InputMaybe>;\n token_not_starts_with?: InputMaybe;\n token_not_starts_with_nocase?: InputMaybe;\n token_starts_with?: InputMaybe;\n token_starts_with_nocase?: InputMaybe;\n weight?: InputMaybe;\n weight_gt?: InputMaybe;\n weight_gte?: InputMaybe;\n weight_in?: InputMaybe>;\n weight_lt?: InputMaybe;\n weight_lte?: InputMaybe;\n weight_not?: InputMaybe;\n weight_not_in?: InputMaybe>;\n};\n\nexport enum PoolToken_OrderBy {\n Address = 'address',\n AssetManager = 'assetManager',\n Balance = 'balance',\n CashBalance = 'cashBalance',\n CircuitBreaker = 'circuitBreaker',\n CircuitBreakerBptPrice = 'circuitBreaker__bptPrice',\n CircuitBreakerId = 'circuitBreaker__id',\n CircuitBreakerLowerBoundPercentage = 'circuitBreaker__lowerBoundPercentage',\n CircuitBreakerUpperBoundPercentage = 'circuitBreaker__upperBoundPercentage',\n Decimals = 'decimals',\n Id = 'id',\n Index = 'index',\n IsExemptFromYieldProtocolFee = 'isExemptFromYieldProtocolFee',\n ManagedBalance = 'managedBalance',\n Managements = 'managements',\n Name = 'name',\n OldPriceRate = 'oldPriceRate',\n PaidProtocolFees = 'paidProtocolFees',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n PriceRate = 'priceRate',\n Symbol = 'symbol',\n Token = 'token',\n TokenAddress = 'token__address',\n TokenDecimals = 'token__decimals',\n TokenFxOracleDecimals = 'token__fxOracleDecimals',\n TokenId = 'token__id',\n TokenLatestFxPrice = 'token__latestFXPrice',\n TokenLatestUsdPrice = 'token__latestUSDPrice',\n TokenLatestUsdPriceTimestamp = 'token__latestUSDPriceTimestamp',\n TokenName = 'token__name',\n TokenSymbol = 'token__symbol',\n TokenTotalBalanceNotional = 'token__totalBalanceNotional',\n TokenTotalBalanceUsd = 'token__totalBalanceUSD',\n TokenTotalSwapCount = 'token__totalSwapCount',\n TokenTotalVolumeNotional = 'token__totalVolumeNotional',\n TokenTotalVolumeUsd = 'token__totalVolumeUSD',\n Weight = 'weight'\n}\n\nexport type Pool_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_in?: InputMaybe>;\n alpha?: InputMaybe;\n alpha_gt?: InputMaybe;\n alpha_gte?: InputMaybe;\n alpha_in?: InputMaybe>;\n alpha_lt?: InputMaybe;\n alpha_lte?: InputMaybe;\n alpha_not?: InputMaybe;\n alpha_not_in?: InputMaybe>;\n amp?: InputMaybe;\n ampUpdates_?: InputMaybe;\n amp_gt?: InputMaybe;\n amp_gte?: InputMaybe;\n amp_in?: InputMaybe>;\n amp_lt?: InputMaybe;\n amp_lte?: InputMaybe;\n amp_not?: InputMaybe;\n amp_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n baseToken?: InputMaybe;\n baseToken_contains?: InputMaybe;\n baseToken_gt?: InputMaybe;\n baseToken_gte?: InputMaybe;\n baseToken_in?: InputMaybe>;\n baseToken_lt?: InputMaybe;\n baseToken_lte?: InputMaybe;\n baseToken_not?: InputMaybe;\n baseToken_not_contains?: InputMaybe;\n baseToken_not_in?: InputMaybe>;\n beta?: InputMaybe;\n beta_gt?: InputMaybe;\n beta_gte?: InputMaybe;\n beta_in?: InputMaybe>;\n beta_lt?: InputMaybe;\n beta_lte?: InputMaybe;\n beta_not?: InputMaybe;\n beta_not_in?: InputMaybe>;\n c?: InputMaybe;\n c_gt?: InputMaybe;\n c_gte?: InputMaybe;\n c_in?: InputMaybe>;\n c_lt?: InputMaybe;\n c_lte?: InputMaybe;\n c_not?: InputMaybe;\n c_not_in?: InputMaybe>;\n circuitBreakers_?: InputMaybe;\n createTime?: InputMaybe;\n createTime_gt?: InputMaybe;\n createTime_gte?: InputMaybe;\n createTime_in?: InputMaybe>;\n createTime_lt?: InputMaybe;\n createTime_lte?: InputMaybe;\n createTime_not?: InputMaybe;\n createTime_not_in?: InputMaybe>;\n dSq?: InputMaybe;\n dSq_gt?: InputMaybe;\n dSq_gte?: InputMaybe;\n dSq_in?: InputMaybe>;\n dSq_lt?: InputMaybe;\n dSq_lte?: InputMaybe;\n dSq_not?: InputMaybe;\n dSq_not_in?: InputMaybe>;\n delta?: InputMaybe;\n delta_gt?: InputMaybe;\n delta_gte?: InputMaybe;\n delta_in?: InputMaybe>;\n delta_lt?: InputMaybe;\n delta_lte?: InputMaybe;\n delta_not?: InputMaybe;\n delta_not_in?: InputMaybe>;\n epsilon?: InputMaybe;\n epsilon_gt?: InputMaybe;\n epsilon_gte?: InputMaybe;\n epsilon_in?: InputMaybe>;\n epsilon_lt?: InputMaybe;\n epsilon_lte?: InputMaybe;\n epsilon_not?: InputMaybe;\n epsilon_not_in?: InputMaybe>;\n expiryTime?: InputMaybe;\n expiryTime_gt?: InputMaybe;\n expiryTime_gte?: InputMaybe;\n expiryTime_in?: InputMaybe>;\n expiryTime_lt?: InputMaybe;\n expiryTime_lte?: InputMaybe;\n expiryTime_not?: InputMaybe;\n expiryTime_not_in?: InputMaybe>;\n factory?: InputMaybe;\n factory_contains?: InputMaybe;\n factory_gt?: InputMaybe;\n factory_gte?: InputMaybe;\n factory_in?: InputMaybe>;\n factory_lt?: InputMaybe;\n factory_lte?: InputMaybe;\n factory_not?: InputMaybe;\n factory_not_contains?: InputMaybe;\n factory_not_in?: InputMaybe>;\n historicalValues_?: InputMaybe;\n holdersCount?: InputMaybe;\n holdersCount_gt?: InputMaybe;\n holdersCount_gte?: InputMaybe;\n holdersCount_in?: InputMaybe>;\n holdersCount_lt?: InputMaybe;\n holdersCount_lte?: InputMaybe;\n holdersCount_not?: InputMaybe;\n holdersCount_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n isInRecoveryMode?: InputMaybe;\n isInRecoveryMode_in?: InputMaybe>;\n isInRecoveryMode_not?: InputMaybe;\n isInRecoveryMode_not_in?: InputMaybe>;\n isPaused?: InputMaybe;\n isPaused_in?: InputMaybe>;\n isPaused_not?: InputMaybe;\n isPaused_not_in?: InputMaybe>;\n joinExitEnabled?: InputMaybe;\n joinExitEnabled_in?: InputMaybe>;\n joinExitEnabled_not?: InputMaybe;\n joinExitEnabled_not_in?: InputMaybe>;\n lambda?: InputMaybe;\n lambda_gt?: InputMaybe;\n lambda_gte?: InputMaybe;\n lambda_in?: InputMaybe>;\n lambda_lt?: InputMaybe;\n lambda_lte?: InputMaybe;\n lambda_not?: InputMaybe;\n lambda_not_in?: InputMaybe>;\n lastJoinExitAmp?: InputMaybe;\n lastJoinExitAmp_gt?: InputMaybe;\n lastJoinExitAmp_gte?: InputMaybe;\n lastJoinExitAmp_in?: InputMaybe>;\n lastJoinExitAmp_lt?: InputMaybe;\n lastJoinExitAmp_lte?: InputMaybe;\n lastJoinExitAmp_not?: InputMaybe;\n lastJoinExitAmp_not_in?: InputMaybe>;\n lastPostJoinExitInvariant?: InputMaybe;\n lastPostJoinExitInvariant_gt?: InputMaybe;\n lastPostJoinExitInvariant_gte?: InputMaybe;\n lastPostJoinExitInvariant_in?: InputMaybe>;\n lastPostJoinExitInvariant_lt?: InputMaybe;\n lastPostJoinExitInvariant_lte?: InputMaybe;\n lastPostJoinExitInvariant_not?: InputMaybe;\n lastPostJoinExitInvariant_not_in?: InputMaybe>;\n latestAmpUpdate?: InputMaybe;\n latestAmpUpdate_?: InputMaybe;\n latestAmpUpdate_contains?: InputMaybe;\n latestAmpUpdate_contains_nocase?: InputMaybe;\n latestAmpUpdate_ends_with?: InputMaybe;\n latestAmpUpdate_ends_with_nocase?: InputMaybe;\n latestAmpUpdate_gt?: InputMaybe;\n latestAmpUpdate_gte?: InputMaybe;\n latestAmpUpdate_in?: InputMaybe>;\n latestAmpUpdate_lt?: InputMaybe;\n latestAmpUpdate_lte?: InputMaybe;\n latestAmpUpdate_not?: InputMaybe;\n latestAmpUpdate_not_contains?: InputMaybe;\n latestAmpUpdate_not_contains_nocase?: InputMaybe;\n latestAmpUpdate_not_ends_with?: InputMaybe;\n latestAmpUpdate_not_ends_with_nocase?: InputMaybe;\n latestAmpUpdate_not_in?: InputMaybe>;\n latestAmpUpdate_not_starts_with?: InputMaybe;\n latestAmpUpdate_not_starts_with_nocase?: InputMaybe;\n latestAmpUpdate_starts_with?: InputMaybe;\n latestAmpUpdate_starts_with_nocase?: InputMaybe;\n lowerTarget?: InputMaybe;\n lowerTarget_gt?: InputMaybe;\n lowerTarget_gte?: InputMaybe;\n lowerTarget_in?: InputMaybe>;\n lowerTarget_lt?: InputMaybe;\n lowerTarget_lte?: InputMaybe;\n lowerTarget_not?: InputMaybe;\n lowerTarget_not_in?: InputMaybe>;\n mainIndex?: InputMaybe;\n mainIndex_gt?: InputMaybe;\n mainIndex_gte?: InputMaybe;\n mainIndex_in?: InputMaybe>;\n mainIndex_lt?: InputMaybe;\n mainIndex_lte?: InputMaybe;\n mainIndex_not?: InputMaybe;\n mainIndex_not_in?: InputMaybe>;\n managementAumFee?: InputMaybe;\n managementAumFee_gt?: InputMaybe;\n managementAumFee_gte?: InputMaybe;\n managementAumFee_in?: InputMaybe>;\n managementAumFee_lt?: InputMaybe;\n managementAumFee_lte?: InputMaybe;\n managementAumFee_not?: InputMaybe;\n managementAumFee_not_in?: InputMaybe>;\n managementFee?: InputMaybe;\n managementFee_gt?: InputMaybe;\n managementFee_gte?: InputMaybe;\n managementFee_in?: InputMaybe>;\n managementFee_lt?: InputMaybe;\n managementFee_lte?: InputMaybe;\n managementFee_not?: InputMaybe;\n managementFee_not_in?: InputMaybe>;\n mustAllowlistLPs?: InputMaybe;\n mustAllowlistLPs_in?: InputMaybe>;\n mustAllowlistLPs_not?: InputMaybe;\n mustAllowlistLPs_not_in?: InputMaybe>;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n oracleEnabled?: InputMaybe;\n oracleEnabled_in?: InputMaybe>;\n oracleEnabled_not?: InputMaybe;\n oracleEnabled_not_in?: InputMaybe>;\n owner?: InputMaybe;\n owner_contains?: InputMaybe;\n owner_gt?: InputMaybe;\n owner_gte?: InputMaybe;\n owner_in?: InputMaybe>;\n owner_lt?: InputMaybe;\n owner_lte?: InputMaybe;\n owner_not?: InputMaybe;\n owner_not_contains?: InputMaybe;\n owner_not_in?: InputMaybe>;\n poolType?: InputMaybe;\n poolTypeVersion?: InputMaybe;\n poolTypeVersion_gt?: InputMaybe;\n poolTypeVersion_gte?: InputMaybe;\n poolTypeVersion_in?: InputMaybe>;\n poolTypeVersion_lt?: InputMaybe;\n poolTypeVersion_lte?: InputMaybe;\n poolTypeVersion_not?: InputMaybe;\n poolTypeVersion_not_in?: InputMaybe>;\n poolType_contains?: InputMaybe;\n poolType_contains_nocase?: InputMaybe;\n poolType_ends_with?: InputMaybe;\n poolType_ends_with_nocase?: InputMaybe;\n poolType_gt?: InputMaybe;\n poolType_gte?: InputMaybe;\n poolType_in?: InputMaybe>;\n poolType_lt?: InputMaybe;\n poolType_lte?: InputMaybe;\n poolType_not?: InputMaybe;\n poolType_not_contains?: InputMaybe;\n poolType_not_contains_nocase?: InputMaybe;\n poolType_not_ends_with?: InputMaybe;\n poolType_not_ends_with_nocase?: InputMaybe;\n poolType_not_in?: InputMaybe>;\n poolType_not_starts_with?: InputMaybe;\n poolType_not_starts_with_nocase?: InputMaybe;\n poolType_starts_with?: InputMaybe;\n poolType_starts_with_nocase?: InputMaybe;\n priceRateProviders_?: InputMaybe;\n principalToken?: InputMaybe;\n principalToken_contains?: InputMaybe;\n principalToken_gt?: InputMaybe;\n principalToken_gte?: InputMaybe;\n principalToken_in?: InputMaybe>;\n principalToken_lt?: InputMaybe;\n principalToken_lte?: InputMaybe;\n principalToken_not?: InputMaybe;\n principalToken_not_contains?: InputMaybe;\n principalToken_not_in?: InputMaybe>;\n protocolAumFeeCache?: InputMaybe;\n protocolAumFeeCache_gt?: InputMaybe;\n protocolAumFeeCache_gte?: InputMaybe;\n protocolAumFeeCache_in?: InputMaybe>;\n protocolAumFeeCache_lt?: InputMaybe;\n protocolAumFeeCache_lte?: InputMaybe;\n protocolAumFeeCache_not?: InputMaybe;\n protocolAumFeeCache_not_in?: InputMaybe>;\n protocolId?: InputMaybe;\n protocolIdData?: InputMaybe;\n protocolIdData_?: InputMaybe;\n protocolIdData_contains?: InputMaybe;\n protocolIdData_contains_nocase?: InputMaybe;\n protocolIdData_ends_with?: InputMaybe;\n protocolIdData_ends_with_nocase?: InputMaybe;\n protocolIdData_gt?: InputMaybe;\n protocolIdData_gte?: InputMaybe;\n protocolIdData_in?: InputMaybe>;\n protocolIdData_lt?: InputMaybe;\n protocolIdData_lte?: InputMaybe;\n protocolIdData_not?: InputMaybe;\n protocolIdData_not_contains?: InputMaybe;\n protocolIdData_not_contains_nocase?: InputMaybe;\n protocolIdData_not_ends_with?: InputMaybe;\n protocolIdData_not_ends_with_nocase?: InputMaybe;\n protocolIdData_not_in?: InputMaybe>;\n protocolIdData_not_starts_with?: InputMaybe;\n protocolIdData_not_starts_with_nocase?: InputMaybe;\n protocolIdData_starts_with?: InputMaybe;\n protocolIdData_starts_with_nocase?: InputMaybe;\n protocolId_gt?: InputMaybe;\n protocolId_gte?: InputMaybe;\n protocolId_in?: InputMaybe>;\n protocolId_lt?: InputMaybe;\n protocolId_lte?: InputMaybe;\n protocolId_not?: InputMaybe;\n protocolId_not_in?: InputMaybe>;\n protocolSwapFeeCache?: InputMaybe;\n protocolSwapFeeCache_gt?: InputMaybe;\n protocolSwapFeeCache_gte?: InputMaybe;\n protocolSwapFeeCache_in?: InputMaybe>;\n protocolSwapFeeCache_lt?: InputMaybe;\n protocolSwapFeeCache_lte?: InputMaybe;\n protocolSwapFeeCache_not?: InputMaybe;\n protocolSwapFeeCache_not_in?: InputMaybe>;\n protocolYieldFeeCache?: InputMaybe;\n protocolYieldFeeCache_gt?: InputMaybe;\n protocolYieldFeeCache_gte?: InputMaybe;\n protocolYieldFeeCache_in?: InputMaybe>;\n protocolYieldFeeCache_lt?: InputMaybe;\n protocolYieldFeeCache_lte?: InputMaybe;\n protocolYieldFeeCache_not?: InputMaybe;\n protocolYieldFeeCache_not_in?: InputMaybe>;\n root3Alpha?: InputMaybe;\n root3Alpha_gt?: InputMaybe;\n root3Alpha_gte?: InputMaybe;\n root3Alpha_in?: InputMaybe>;\n root3Alpha_lt?: InputMaybe;\n root3Alpha_lte?: InputMaybe;\n root3Alpha_not?: InputMaybe;\n root3Alpha_not_in?: InputMaybe>;\n s?: InputMaybe;\n s_gt?: InputMaybe;\n s_gte?: InputMaybe;\n s_in?: InputMaybe>;\n s_lt?: InputMaybe;\n s_lte?: InputMaybe;\n s_not?: InputMaybe;\n s_not_in?: InputMaybe>;\n shares_?: InputMaybe;\n snapshots_?: InputMaybe;\n sqrtAlpha?: InputMaybe;\n sqrtAlpha_gt?: InputMaybe;\n sqrtAlpha_gte?: InputMaybe;\n sqrtAlpha_in?: InputMaybe>;\n sqrtAlpha_lt?: InputMaybe;\n sqrtAlpha_lte?: InputMaybe;\n sqrtAlpha_not?: InputMaybe;\n sqrtAlpha_not_in?: InputMaybe>;\n sqrtBeta?: InputMaybe;\n sqrtBeta_gt?: InputMaybe;\n sqrtBeta_gte?: InputMaybe;\n sqrtBeta_in?: InputMaybe>;\n sqrtBeta_lt?: InputMaybe;\n sqrtBeta_lte?: InputMaybe;\n sqrtBeta_not?: InputMaybe;\n sqrtBeta_not_in?: InputMaybe>;\n strategyType?: InputMaybe;\n strategyType_gt?: InputMaybe;\n strategyType_gte?: InputMaybe;\n strategyType_in?: InputMaybe>;\n strategyType_lt?: InputMaybe;\n strategyType_lte?: InputMaybe;\n strategyType_not?: InputMaybe;\n strategyType_not_in?: InputMaybe>;\n swapEnabled?: InputMaybe;\n swapEnabledCurationSignal?: InputMaybe;\n swapEnabledCurationSignal_in?: InputMaybe>;\n swapEnabledCurationSignal_not?: InputMaybe;\n swapEnabledCurationSignal_not_in?: InputMaybe>;\n swapEnabledInternal?: InputMaybe;\n swapEnabledInternal_in?: InputMaybe>;\n swapEnabledInternal_not?: InputMaybe;\n swapEnabledInternal_not_in?: InputMaybe>;\n swapEnabled_in?: InputMaybe>;\n swapEnabled_not?: InputMaybe;\n swapEnabled_not_in?: InputMaybe>;\n swapFee?: InputMaybe;\n swapFee_gt?: InputMaybe;\n swapFee_gte?: InputMaybe;\n swapFee_in?: InputMaybe>;\n swapFee_lt?: InputMaybe;\n swapFee_lte?: InputMaybe;\n swapFee_not?: InputMaybe;\n swapFee_not_in?: InputMaybe>;\n swapsCount?: InputMaybe;\n swapsCount_gt?: InputMaybe;\n swapsCount_gte?: InputMaybe;\n swapsCount_in?: InputMaybe>;\n swapsCount_lt?: InputMaybe;\n swapsCount_lte?: InputMaybe;\n swapsCount_not?: InputMaybe;\n swapsCount_not_in?: InputMaybe>;\n swaps_?: InputMaybe;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n tauAlphaX?: InputMaybe;\n tauAlphaX_gt?: InputMaybe;\n tauAlphaX_gte?: InputMaybe;\n tauAlphaX_in?: InputMaybe>;\n tauAlphaX_lt?: InputMaybe;\n tauAlphaX_lte?: InputMaybe;\n tauAlphaX_not?: InputMaybe;\n tauAlphaX_not_in?: InputMaybe>;\n tauAlphaY?: InputMaybe;\n tauAlphaY_gt?: InputMaybe;\n tauAlphaY_gte?: InputMaybe;\n tauAlphaY_in?: InputMaybe>;\n tauAlphaY_lt?: InputMaybe;\n tauAlphaY_lte?: InputMaybe;\n tauAlphaY_not?: InputMaybe;\n tauAlphaY_not_in?: InputMaybe>;\n tauBetaX?: InputMaybe;\n tauBetaX_gt?: InputMaybe;\n tauBetaX_gte?: InputMaybe;\n tauBetaX_in?: InputMaybe>;\n tauBetaX_lt?: InputMaybe;\n tauBetaX_lte?: InputMaybe;\n tauBetaX_not?: InputMaybe;\n tauBetaX_not_in?: InputMaybe>;\n tauBetaY?: InputMaybe;\n tauBetaY_gt?: InputMaybe;\n tauBetaY_gte?: InputMaybe;\n tauBetaY_in?: InputMaybe>;\n tauBetaY_lt?: InputMaybe;\n tauBetaY_lte?: InputMaybe;\n tauBetaY_not?: InputMaybe;\n tauBetaY_not_in?: InputMaybe>;\n tokensList?: InputMaybe>;\n tokensList_contains?: InputMaybe>;\n tokensList_contains_nocase?: InputMaybe>;\n tokensList_not?: InputMaybe>;\n tokensList_not_contains?: InputMaybe>;\n tokensList_not_contains_nocase?: InputMaybe>;\n tokens_?: InputMaybe;\n totalAumFeeCollectedInBPT?: InputMaybe;\n totalAumFeeCollectedInBPT_gt?: InputMaybe;\n totalAumFeeCollectedInBPT_gte?: InputMaybe;\n totalAumFeeCollectedInBPT_in?: InputMaybe>;\n totalAumFeeCollectedInBPT_lt?: InputMaybe;\n totalAumFeeCollectedInBPT_lte?: InputMaybe;\n totalAumFeeCollectedInBPT_not?: InputMaybe;\n totalAumFeeCollectedInBPT_not_in?: InputMaybe>;\n totalLiquidity?: InputMaybe;\n totalLiquiditySansBPT?: InputMaybe;\n totalLiquiditySansBPT_gt?: InputMaybe;\n totalLiquiditySansBPT_gte?: InputMaybe;\n totalLiquiditySansBPT_in?: InputMaybe>;\n totalLiquiditySansBPT_lt?: InputMaybe;\n totalLiquiditySansBPT_lte?: InputMaybe;\n totalLiquiditySansBPT_not?: InputMaybe;\n totalLiquiditySansBPT_not_in?: InputMaybe>;\n totalLiquidity_gt?: InputMaybe;\n totalLiquidity_gte?: InputMaybe;\n totalLiquidity_in?: InputMaybe>;\n totalLiquidity_lt?: InputMaybe;\n totalLiquidity_lte?: InputMaybe;\n totalLiquidity_not?: InputMaybe;\n totalLiquidity_not_in?: InputMaybe>;\n totalProtocolFee?: InputMaybe;\n totalProtocolFeePaidInBPT?: InputMaybe;\n totalProtocolFeePaidInBPT_gt?: InputMaybe;\n totalProtocolFeePaidInBPT_gte?: InputMaybe;\n totalProtocolFeePaidInBPT_in?: InputMaybe>;\n totalProtocolFeePaidInBPT_lt?: InputMaybe;\n totalProtocolFeePaidInBPT_lte?: InputMaybe;\n totalProtocolFeePaidInBPT_not?: InputMaybe;\n totalProtocolFeePaidInBPT_not_in?: InputMaybe>;\n totalProtocolFee_gt?: InputMaybe;\n totalProtocolFee_gte?: InputMaybe;\n totalProtocolFee_in?: InputMaybe>;\n totalProtocolFee_lt?: InputMaybe;\n totalProtocolFee_lte?: InputMaybe;\n totalProtocolFee_not?: InputMaybe;\n totalProtocolFee_not_in?: InputMaybe>;\n totalShares?: InputMaybe;\n totalShares_gt?: InputMaybe;\n totalShares_gte?: InputMaybe;\n totalShares_in?: InputMaybe>;\n totalShares_lt?: InputMaybe;\n totalShares_lte?: InputMaybe;\n totalShares_not?: InputMaybe;\n totalShares_not_in?: InputMaybe>;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n totalWeight?: InputMaybe;\n totalWeight_gt?: InputMaybe;\n totalWeight_gte?: InputMaybe;\n totalWeight_in?: InputMaybe>;\n totalWeight_lt?: InputMaybe;\n totalWeight_lte?: InputMaybe;\n totalWeight_not?: InputMaybe;\n totalWeight_not_in?: InputMaybe>;\n tx?: InputMaybe;\n tx_contains?: InputMaybe;\n tx_gt?: InputMaybe;\n tx_gte?: InputMaybe;\n tx_in?: InputMaybe>;\n tx_lt?: InputMaybe;\n tx_lte?: InputMaybe;\n tx_not?: InputMaybe;\n tx_not_contains?: InputMaybe;\n tx_not_in?: InputMaybe>;\n u?: InputMaybe;\n u_gt?: InputMaybe;\n u_gte?: InputMaybe;\n u_in?: InputMaybe>;\n u_lt?: InputMaybe;\n u_lte?: InputMaybe;\n u_not?: InputMaybe;\n u_not_in?: InputMaybe>;\n unitSeconds?: InputMaybe;\n unitSeconds_gt?: InputMaybe;\n unitSeconds_gte?: InputMaybe;\n unitSeconds_in?: InputMaybe>;\n unitSeconds_lt?: InputMaybe;\n unitSeconds_lte?: InputMaybe;\n unitSeconds_not?: InputMaybe;\n unitSeconds_not_in?: InputMaybe>;\n upperTarget?: InputMaybe;\n upperTarget_gt?: InputMaybe;\n upperTarget_gte?: InputMaybe;\n upperTarget_in?: InputMaybe>;\n upperTarget_lt?: InputMaybe;\n upperTarget_lte?: InputMaybe;\n upperTarget_not?: InputMaybe;\n upperTarget_not_in?: InputMaybe>;\n v?: InputMaybe;\n v_gt?: InputMaybe;\n v_gte?: InputMaybe;\n v_in?: InputMaybe>;\n v_lt?: InputMaybe;\n v_lte?: InputMaybe;\n v_not?: InputMaybe;\n v_not_in?: InputMaybe>;\n vaultID?: InputMaybe;\n vaultID_?: InputMaybe;\n vaultID_contains?: InputMaybe;\n vaultID_contains_nocase?: InputMaybe;\n vaultID_ends_with?: InputMaybe;\n vaultID_ends_with_nocase?: InputMaybe;\n vaultID_gt?: InputMaybe;\n vaultID_gte?: InputMaybe;\n vaultID_in?: InputMaybe>;\n vaultID_lt?: InputMaybe;\n vaultID_lte?: InputMaybe;\n vaultID_not?: InputMaybe;\n vaultID_not_contains?: InputMaybe;\n vaultID_not_contains_nocase?: InputMaybe;\n vaultID_not_ends_with?: InputMaybe;\n vaultID_not_ends_with_nocase?: InputMaybe;\n vaultID_not_in?: InputMaybe>;\n vaultID_not_starts_with?: InputMaybe;\n vaultID_not_starts_with_nocase?: InputMaybe;\n vaultID_starts_with?: InputMaybe;\n vaultID_starts_with_nocase?: InputMaybe;\n w?: InputMaybe;\n w_gt?: InputMaybe;\n w_gte?: InputMaybe;\n w_in?: InputMaybe>;\n w_lt?: InputMaybe;\n w_lte?: InputMaybe;\n w_not?: InputMaybe;\n w_not_in?: InputMaybe>;\n weightUpdates_?: InputMaybe;\n wrappedIndex?: InputMaybe;\n wrappedIndex_gt?: InputMaybe;\n wrappedIndex_gte?: InputMaybe;\n wrappedIndex_in?: InputMaybe>;\n wrappedIndex_lt?: InputMaybe;\n wrappedIndex_lte?: InputMaybe;\n wrappedIndex_not?: InputMaybe;\n wrappedIndex_not_in?: InputMaybe>;\n z?: InputMaybe;\n z_gt?: InputMaybe;\n z_gte?: InputMaybe;\n z_in?: InputMaybe>;\n z_lt?: InputMaybe;\n z_lte?: InputMaybe;\n z_not?: InputMaybe;\n z_not_in?: InputMaybe>;\n};\n\nexport enum Pool_OrderBy {\n Address = 'address',\n Alpha = 'alpha',\n Amp = 'amp',\n AmpUpdates = 'ampUpdates',\n BaseToken = 'baseToken',\n Beta = 'beta',\n C = 'c',\n CircuitBreakers = 'circuitBreakers',\n CreateTime = 'createTime',\n DSq = 'dSq',\n Delta = 'delta',\n Epsilon = 'epsilon',\n ExpiryTime = 'expiryTime',\n Factory = 'factory',\n HistoricalValues = 'historicalValues',\n HoldersCount = 'holdersCount',\n Id = 'id',\n IsInRecoveryMode = 'isInRecoveryMode',\n IsPaused = 'isPaused',\n JoinExitEnabled = 'joinExitEnabled',\n Lambda = 'lambda',\n LastJoinExitAmp = 'lastJoinExitAmp',\n LastPostJoinExitInvariant = 'lastPostJoinExitInvariant',\n LatestAmpUpdate = 'latestAmpUpdate',\n LatestAmpUpdateEndAmp = 'latestAmpUpdate__endAmp',\n LatestAmpUpdateEndTimestamp = 'latestAmpUpdate__endTimestamp',\n LatestAmpUpdateId = 'latestAmpUpdate__id',\n LatestAmpUpdateScheduledTimestamp = 'latestAmpUpdate__scheduledTimestamp',\n LatestAmpUpdateStartAmp = 'latestAmpUpdate__startAmp',\n LatestAmpUpdateStartTimestamp = 'latestAmpUpdate__startTimestamp',\n LowerTarget = 'lowerTarget',\n MainIndex = 'mainIndex',\n ManagementAumFee = 'managementAumFee',\n ManagementFee = 'managementFee',\n MustAllowlistLPs = 'mustAllowlistLPs',\n Name = 'name',\n OracleEnabled = 'oracleEnabled',\n Owner = 'owner',\n PoolType = 'poolType',\n PoolTypeVersion = 'poolTypeVersion',\n PriceRateProviders = 'priceRateProviders',\n PrincipalToken = 'principalToken',\n ProtocolAumFeeCache = 'protocolAumFeeCache',\n ProtocolId = 'protocolId',\n ProtocolIdData = 'protocolIdData',\n ProtocolIdDataId = 'protocolIdData__id',\n ProtocolIdDataName = 'protocolIdData__name',\n ProtocolSwapFeeCache = 'protocolSwapFeeCache',\n ProtocolYieldFeeCache = 'protocolYieldFeeCache',\n Root3Alpha = 'root3Alpha',\n S = 's',\n Shares = 'shares',\n Snapshots = 'snapshots',\n SqrtAlpha = 'sqrtAlpha',\n SqrtBeta = 'sqrtBeta',\n StrategyType = 'strategyType',\n SwapEnabled = 'swapEnabled',\n SwapEnabledCurationSignal = 'swapEnabledCurationSignal',\n SwapEnabledInternal = 'swapEnabledInternal',\n SwapFee = 'swapFee',\n Swaps = 'swaps',\n SwapsCount = 'swapsCount',\n Symbol = 'symbol',\n TauAlphaX = 'tauAlphaX',\n TauAlphaY = 'tauAlphaY',\n TauBetaX = 'tauBetaX',\n TauBetaY = 'tauBetaY',\n Tokens = 'tokens',\n TokensList = 'tokensList',\n TotalAumFeeCollectedInBpt = 'totalAumFeeCollectedInBPT',\n TotalLiquidity = 'totalLiquidity',\n TotalLiquiditySansBpt = 'totalLiquiditySansBPT',\n TotalProtocolFee = 'totalProtocolFee',\n TotalProtocolFeePaidInBpt = 'totalProtocolFeePaidInBPT',\n TotalShares = 'totalShares',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume',\n TotalWeight = 'totalWeight',\n Tx = 'tx',\n U = 'u',\n UnitSeconds = 'unitSeconds',\n UpperTarget = 'upperTarget',\n V = 'v',\n VaultId = 'vaultID',\n VaultIdId = 'vaultID__id',\n VaultIdPoolCount = 'vaultID__poolCount',\n VaultIdProtocolFeesCollector = 'vaultID__protocolFeesCollector',\n VaultIdTotalLiquidity = 'vaultID__totalLiquidity',\n VaultIdTotalProtocolFee = 'vaultID__totalProtocolFee',\n VaultIdTotalSwapCount = 'vaultID__totalSwapCount',\n VaultIdTotalSwapFee = 'vaultID__totalSwapFee',\n VaultIdTotalSwapVolume = 'vaultID__totalSwapVolume',\n W = 'w',\n WeightUpdates = 'weightUpdates',\n WrappedIndex = 'wrappedIndex',\n Z = 'z'\n}\n\nexport type PriceRateProvider = {\n __typename?: 'PriceRateProvider';\n address: Scalars['Bytes'];\n cacheDuration?: Maybe;\n cacheExpiry?: Maybe;\n id: Scalars['ID'];\n lastCached?: Maybe;\n poolId: Pool;\n rate?: Maybe;\n token: PoolToken;\n};\n\nexport type PriceRateProvider_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n cacheDuration?: InputMaybe;\n cacheDuration_gt?: InputMaybe;\n cacheDuration_gte?: InputMaybe;\n cacheDuration_in?: InputMaybe>;\n cacheDuration_lt?: InputMaybe;\n cacheDuration_lte?: InputMaybe;\n cacheDuration_not?: InputMaybe;\n cacheDuration_not_in?: InputMaybe>;\n cacheExpiry?: InputMaybe;\n cacheExpiry_gt?: InputMaybe;\n cacheExpiry_gte?: InputMaybe;\n cacheExpiry_in?: InputMaybe>;\n cacheExpiry_lt?: InputMaybe;\n cacheExpiry_lte?: InputMaybe;\n cacheExpiry_not?: InputMaybe;\n cacheExpiry_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n lastCached?: InputMaybe;\n lastCached_gt?: InputMaybe;\n lastCached_gte?: InputMaybe;\n lastCached_in?: InputMaybe>;\n lastCached_lt?: InputMaybe;\n lastCached_lte?: InputMaybe;\n lastCached_not?: InputMaybe;\n lastCached_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n rate?: InputMaybe;\n rate_gt?: InputMaybe;\n rate_gte?: InputMaybe;\n rate_in?: InputMaybe>;\n rate_lt?: InputMaybe;\n rate_lte?: InputMaybe;\n rate_not?: InputMaybe;\n rate_not_in?: InputMaybe>;\n token?: InputMaybe;\n token_?: InputMaybe;\n token_contains?: InputMaybe;\n token_contains_nocase?: InputMaybe;\n token_ends_with?: InputMaybe;\n token_ends_with_nocase?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_contains_nocase?: InputMaybe;\n token_not_ends_with?: InputMaybe;\n token_not_ends_with_nocase?: InputMaybe;\n token_not_in?: InputMaybe>;\n token_not_starts_with?: InputMaybe;\n token_not_starts_with_nocase?: InputMaybe;\n token_starts_with?: InputMaybe;\n token_starts_with_nocase?: InputMaybe;\n};\n\nexport enum PriceRateProvider_OrderBy {\n Address = 'address',\n CacheDuration = 'cacheDuration',\n CacheExpiry = 'cacheExpiry',\n Id = 'id',\n LastCached = 'lastCached',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n Rate = 'rate',\n Token = 'token',\n TokenAddress = 'token__address',\n TokenAssetManager = 'token__assetManager',\n TokenBalance = 'token__balance',\n TokenCashBalance = 'token__cashBalance',\n TokenDecimals = 'token__decimals',\n TokenId = 'token__id',\n TokenIndex = 'token__index',\n TokenIsExemptFromYieldProtocolFee = 'token__isExemptFromYieldProtocolFee',\n TokenManagedBalance = 'token__managedBalance',\n TokenName = 'token__name',\n TokenOldPriceRate = 'token__oldPriceRate',\n TokenPaidProtocolFees = 'token__paidProtocolFees',\n TokenPriceRate = 'token__priceRate',\n TokenSymbol = 'token__symbol',\n TokenWeight = 'token__weight'\n}\n\nexport type ProtocolIdData = {\n __typename?: 'ProtocolIdData';\n id: Scalars['ID'];\n name: Scalars['String'];\n};\n\nexport type ProtocolIdData_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n};\n\nexport enum ProtocolIdData_OrderBy {\n Id = 'id',\n Name = 'name'\n}\n\nexport type Query = {\n __typename?: 'Query';\n /** Access to subgraph metadata */\n _meta?: Maybe<_Meta_>;\n ampUpdate?: Maybe;\n ampUpdates: Array;\n balancer?: Maybe;\n balancerSnapshot?: Maybe;\n balancerSnapshots: Array;\n balancers: Array;\n circuitBreaker?: Maybe;\n circuitBreakers: Array;\n gradualWeightUpdate?: Maybe;\n gradualWeightUpdates: Array;\n joinExit?: Maybe;\n joinExits: Array;\n latestPrice?: Maybe;\n latestPrices: Array;\n managementOperation?: Maybe;\n managementOperations: Array;\n pool?: Maybe;\n poolContract?: Maybe;\n poolContracts: Array;\n poolHistoricalLiquidities: Array;\n poolHistoricalLiquidity?: Maybe;\n poolShare?: Maybe;\n poolShares: Array;\n poolSnapshot?: Maybe;\n poolSnapshots: Array;\n poolToken?: Maybe;\n poolTokens: Array;\n pools: Array;\n priceRateProvider?: Maybe;\n priceRateProviders: Array;\n protocolIdData?: Maybe;\n protocolIdDatas: Array;\n swap?: Maybe;\n swapFeeUpdate?: Maybe;\n swapFeeUpdates: Array;\n swaps: Array;\n token?: Maybe;\n tokenPrice?: Maybe;\n tokenPrices: Array;\n tokenSnapshot?: Maybe;\n tokenSnapshots: Array;\n tokens: Array;\n tradePair?: Maybe;\n tradePairSnapshot?: Maybe;\n tradePairSnapshots: Array;\n tradePairs: Array;\n user?: Maybe;\n userInternalBalance?: Maybe;\n userInternalBalances: Array;\n users: Array;\n};\n\n\nexport type Query_MetaArgs = {\n block?: InputMaybe;\n};\n\n\nexport type QueryAmpUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryAmpUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryBalancerArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryBalancerSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryBalancerSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryBalancersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryCircuitBreakerArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryCircuitBreakersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGradualWeightUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGradualWeightUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryJoinExitArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryJoinExitsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryLatestPriceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryLatestPricesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryManagementOperationArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryManagementOperationsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolContractArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolContractsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolHistoricalLiquiditiesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolHistoricalLiquidityArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolShareArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolSharesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPriceRateProviderArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPriceRateProvidersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryProtocolIdDataArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryProtocolIdDatasArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QuerySwapArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QuerySwapFeeUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QuerySwapFeeUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QuerySwapsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenPriceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenPricesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTokenSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTokenSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTradePairArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTradePairSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryTradePairSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryTradePairsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryUserArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUserInternalBalanceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUserInternalBalancesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryUsersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\nexport type Subscription = {\n __typename?: 'Subscription';\n /** Access to subgraph metadata */\n _meta?: Maybe<_Meta_>;\n ampUpdate?: Maybe;\n ampUpdates: Array;\n balancer?: Maybe;\n balancerSnapshot?: Maybe;\n balancerSnapshots: Array;\n balancers: Array;\n circuitBreaker?: Maybe;\n circuitBreakers: Array;\n gradualWeightUpdate?: Maybe;\n gradualWeightUpdates: Array;\n joinExit?: Maybe;\n joinExits: Array;\n latestPrice?: Maybe;\n latestPrices: Array;\n managementOperation?: Maybe;\n managementOperations: Array;\n pool?: Maybe;\n poolContract?: Maybe;\n poolContracts: Array;\n poolHistoricalLiquidities: Array;\n poolHistoricalLiquidity?: Maybe;\n poolShare?: Maybe;\n poolShares: Array;\n poolSnapshot?: Maybe;\n poolSnapshots: Array;\n poolToken?: Maybe;\n poolTokens: Array;\n pools: Array;\n priceRateProvider?: Maybe;\n priceRateProviders: Array;\n protocolIdData?: Maybe;\n protocolIdDatas: Array;\n swap?: Maybe;\n swapFeeUpdate?: Maybe;\n swapFeeUpdates: Array;\n swaps: Array;\n token?: Maybe;\n tokenPrice?: Maybe;\n tokenPrices: Array;\n tokenSnapshot?: Maybe;\n tokenSnapshots: Array;\n tokens: Array;\n tradePair?: Maybe;\n tradePairSnapshot?: Maybe;\n tradePairSnapshots: Array;\n tradePairs: Array;\n user?: Maybe;\n userInternalBalance?: Maybe;\n userInternalBalances: Array;\n users: Array;\n};\n\n\nexport type Subscription_MetaArgs = {\n block?: InputMaybe;\n};\n\n\nexport type SubscriptionAmpUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionAmpUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionBalancerArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionBalancerSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionBalancerSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionBalancersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionCircuitBreakerArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionCircuitBreakersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGradualWeightUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGradualWeightUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionJoinExitArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionJoinExitsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionLatestPriceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionLatestPricesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionManagementOperationArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionManagementOperationsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolContractArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolContractsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolHistoricalLiquiditiesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolHistoricalLiquidityArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolShareArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolSharesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPriceRateProviderArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPriceRateProvidersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionProtocolIdDataArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionProtocolIdDatasArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionSwapArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionSwapFeeUpdateArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionSwapFeeUpdatesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionSwapsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenPriceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenPricesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTokenSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTokenSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTradePairArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTradePairSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionTradePairSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionTradePairsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionUserArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUserInternalBalanceArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUserInternalBalancesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionUsersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\nexport type Swap = {\n __typename?: 'Swap';\n caller: Scalars['Bytes'];\n id: Scalars['ID'];\n poolId: Pool;\n timestamp: Scalars['Int'];\n tokenAmountIn: Scalars['BigDecimal'];\n tokenAmountOut: Scalars['BigDecimal'];\n tokenIn: Scalars['Bytes'];\n tokenInSym: Scalars['String'];\n tokenOut: Scalars['Bytes'];\n tokenOutSym: Scalars['String'];\n tx: Scalars['Bytes'];\n userAddress: User;\n valueUSD: Scalars['BigDecimal'];\n};\n\nexport type SwapFeeUpdate = {\n __typename?: 'SwapFeeUpdate';\n endSwapFeePercentage: Scalars['BigDecimal'];\n endTimestamp: Scalars['BigInt'];\n id: Scalars['ID'];\n pool: Pool;\n scheduledTimestamp: Scalars['Int'];\n startSwapFeePercentage: Scalars['BigDecimal'];\n startTimestamp: Scalars['BigInt'];\n};\n\nexport type SwapFeeUpdate_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n endSwapFeePercentage?: InputMaybe;\n endSwapFeePercentage_gt?: InputMaybe;\n endSwapFeePercentage_gte?: InputMaybe;\n endSwapFeePercentage_in?: InputMaybe>;\n endSwapFeePercentage_lt?: InputMaybe;\n endSwapFeePercentage_lte?: InputMaybe;\n endSwapFeePercentage_not?: InputMaybe;\n endSwapFeePercentage_not_in?: InputMaybe>;\n endTimestamp?: InputMaybe;\n endTimestamp_gt?: InputMaybe;\n endTimestamp_gte?: InputMaybe;\n endTimestamp_in?: InputMaybe>;\n endTimestamp_lt?: InputMaybe;\n endTimestamp_lte?: InputMaybe;\n endTimestamp_not?: InputMaybe;\n endTimestamp_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n scheduledTimestamp?: InputMaybe;\n scheduledTimestamp_gt?: InputMaybe;\n scheduledTimestamp_gte?: InputMaybe;\n scheduledTimestamp_in?: InputMaybe>;\n scheduledTimestamp_lt?: InputMaybe;\n scheduledTimestamp_lte?: InputMaybe;\n scheduledTimestamp_not?: InputMaybe;\n scheduledTimestamp_not_in?: InputMaybe>;\n startSwapFeePercentage?: InputMaybe;\n startSwapFeePercentage_gt?: InputMaybe;\n startSwapFeePercentage_gte?: InputMaybe;\n startSwapFeePercentage_in?: InputMaybe>;\n startSwapFeePercentage_lt?: InputMaybe;\n startSwapFeePercentage_lte?: InputMaybe;\n startSwapFeePercentage_not?: InputMaybe;\n startSwapFeePercentage_not_in?: InputMaybe>;\n startTimestamp?: InputMaybe;\n startTimestamp_gt?: InputMaybe;\n startTimestamp_gte?: InputMaybe;\n startTimestamp_in?: InputMaybe>;\n startTimestamp_lt?: InputMaybe;\n startTimestamp_lte?: InputMaybe;\n startTimestamp_not?: InputMaybe;\n startTimestamp_not_in?: InputMaybe>;\n};\n\nexport enum SwapFeeUpdate_OrderBy {\n EndSwapFeePercentage = 'endSwapFeePercentage',\n EndTimestamp = 'endTimestamp',\n Id = 'id',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n ScheduledTimestamp = 'scheduledTimestamp',\n StartSwapFeePercentage = 'startSwapFeePercentage',\n StartTimestamp = 'startTimestamp'\n}\n\nexport type Swap_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n caller?: InputMaybe;\n caller_contains?: InputMaybe;\n caller_gt?: InputMaybe;\n caller_gte?: InputMaybe;\n caller_in?: InputMaybe>;\n caller_lt?: InputMaybe;\n caller_lte?: InputMaybe;\n caller_not?: InputMaybe;\n caller_not_contains?: InputMaybe;\n caller_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n tokenAmountIn?: InputMaybe;\n tokenAmountIn_gt?: InputMaybe;\n tokenAmountIn_gte?: InputMaybe;\n tokenAmountIn_in?: InputMaybe>;\n tokenAmountIn_lt?: InputMaybe;\n tokenAmountIn_lte?: InputMaybe;\n tokenAmountIn_not?: InputMaybe;\n tokenAmountIn_not_in?: InputMaybe>;\n tokenAmountOut?: InputMaybe;\n tokenAmountOut_gt?: InputMaybe;\n tokenAmountOut_gte?: InputMaybe;\n tokenAmountOut_in?: InputMaybe>;\n tokenAmountOut_lt?: InputMaybe;\n tokenAmountOut_lte?: InputMaybe;\n tokenAmountOut_not?: InputMaybe;\n tokenAmountOut_not_in?: InputMaybe>;\n tokenIn?: InputMaybe;\n tokenInSym?: InputMaybe;\n tokenInSym_contains?: InputMaybe;\n tokenInSym_contains_nocase?: InputMaybe;\n tokenInSym_ends_with?: InputMaybe;\n tokenInSym_ends_with_nocase?: InputMaybe;\n tokenInSym_gt?: InputMaybe;\n tokenInSym_gte?: InputMaybe;\n tokenInSym_in?: InputMaybe>;\n tokenInSym_lt?: InputMaybe;\n tokenInSym_lte?: InputMaybe;\n tokenInSym_not?: InputMaybe;\n tokenInSym_not_contains?: InputMaybe;\n tokenInSym_not_contains_nocase?: InputMaybe;\n tokenInSym_not_ends_with?: InputMaybe;\n tokenInSym_not_ends_with_nocase?: InputMaybe;\n tokenInSym_not_in?: InputMaybe>;\n tokenInSym_not_starts_with?: InputMaybe;\n tokenInSym_not_starts_with_nocase?: InputMaybe;\n tokenInSym_starts_with?: InputMaybe;\n tokenInSym_starts_with_nocase?: InputMaybe;\n tokenIn_contains?: InputMaybe;\n tokenIn_gt?: InputMaybe;\n tokenIn_gte?: InputMaybe;\n tokenIn_in?: InputMaybe>;\n tokenIn_lt?: InputMaybe;\n tokenIn_lte?: InputMaybe;\n tokenIn_not?: InputMaybe;\n tokenIn_not_contains?: InputMaybe;\n tokenIn_not_in?: InputMaybe>;\n tokenOut?: InputMaybe;\n tokenOutSym?: InputMaybe;\n tokenOutSym_contains?: InputMaybe;\n tokenOutSym_contains_nocase?: InputMaybe;\n tokenOutSym_ends_with?: InputMaybe;\n tokenOutSym_ends_with_nocase?: InputMaybe;\n tokenOutSym_gt?: InputMaybe;\n tokenOutSym_gte?: InputMaybe;\n tokenOutSym_in?: InputMaybe>;\n tokenOutSym_lt?: InputMaybe;\n tokenOutSym_lte?: InputMaybe;\n tokenOutSym_not?: InputMaybe;\n tokenOutSym_not_contains?: InputMaybe;\n tokenOutSym_not_contains_nocase?: InputMaybe;\n tokenOutSym_not_ends_with?: InputMaybe;\n tokenOutSym_not_ends_with_nocase?: InputMaybe;\n tokenOutSym_not_in?: InputMaybe>;\n tokenOutSym_not_starts_with?: InputMaybe;\n tokenOutSym_not_starts_with_nocase?: InputMaybe;\n tokenOutSym_starts_with?: InputMaybe;\n tokenOutSym_starts_with_nocase?: InputMaybe;\n tokenOut_contains?: InputMaybe;\n tokenOut_gt?: InputMaybe;\n tokenOut_gte?: InputMaybe;\n tokenOut_in?: InputMaybe>;\n tokenOut_lt?: InputMaybe;\n tokenOut_lte?: InputMaybe;\n tokenOut_not?: InputMaybe;\n tokenOut_not_contains?: InputMaybe;\n tokenOut_not_in?: InputMaybe>;\n tx?: InputMaybe;\n tx_contains?: InputMaybe;\n tx_gt?: InputMaybe;\n tx_gte?: InputMaybe;\n tx_in?: InputMaybe>;\n tx_lt?: InputMaybe;\n tx_lte?: InputMaybe;\n tx_not?: InputMaybe;\n tx_not_contains?: InputMaybe;\n tx_not_in?: InputMaybe>;\n userAddress?: InputMaybe;\n userAddress_?: InputMaybe;\n userAddress_contains?: InputMaybe;\n userAddress_contains_nocase?: InputMaybe;\n userAddress_ends_with?: InputMaybe;\n userAddress_ends_with_nocase?: InputMaybe;\n userAddress_gt?: InputMaybe;\n userAddress_gte?: InputMaybe;\n userAddress_in?: InputMaybe>;\n userAddress_lt?: InputMaybe;\n userAddress_lte?: InputMaybe;\n userAddress_not?: InputMaybe;\n userAddress_not_contains?: InputMaybe;\n userAddress_not_contains_nocase?: InputMaybe;\n userAddress_not_ends_with?: InputMaybe;\n userAddress_not_ends_with_nocase?: InputMaybe;\n userAddress_not_in?: InputMaybe>;\n userAddress_not_starts_with?: InputMaybe;\n userAddress_not_starts_with_nocase?: InputMaybe;\n userAddress_starts_with?: InputMaybe;\n userAddress_starts_with_nocase?: InputMaybe;\n valueUSD?: InputMaybe;\n valueUSD_gt?: InputMaybe;\n valueUSD_gte?: InputMaybe;\n valueUSD_in?: InputMaybe>;\n valueUSD_lt?: InputMaybe;\n valueUSD_lte?: InputMaybe;\n valueUSD_not?: InputMaybe;\n valueUSD_not_in?: InputMaybe>;\n};\n\nexport enum Swap_OrderBy {\n Caller = 'caller',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n Timestamp = 'timestamp',\n TokenAmountIn = 'tokenAmountIn',\n TokenAmountOut = 'tokenAmountOut',\n TokenIn = 'tokenIn',\n TokenInSym = 'tokenInSym',\n TokenOut = 'tokenOut',\n TokenOutSym = 'tokenOutSym',\n Tx = 'tx',\n UserAddress = 'userAddress',\n UserAddressId = 'userAddress__id',\n ValueUsd = 'valueUSD'\n}\n\nexport type Token = {\n __typename?: 'Token';\n address: Scalars['String'];\n decimals: Scalars['Int'];\n fxOracleDecimals?: Maybe;\n id: Scalars['ID'];\n latestFXPrice?: Maybe;\n latestPrice?: Maybe;\n latestUSDPrice?: Maybe;\n latestUSDPriceTimestamp?: Maybe;\n name?: Maybe;\n pool?: Maybe;\n symbol?: Maybe;\n totalBalanceNotional: Scalars['BigDecimal'];\n totalBalanceUSD: Scalars['BigDecimal'];\n totalSwapCount: Scalars['BigInt'];\n totalVolumeNotional: Scalars['BigDecimal'];\n totalVolumeUSD: Scalars['BigDecimal'];\n};\n\nexport type TokenPrice = {\n __typename?: 'TokenPrice';\n amount: Scalars['BigDecimal'];\n asset: Scalars['Bytes'];\n block: Scalars['BigInt'];\n id: Scalars['ID'];\n poolId: Pool;\n price: Scalars['BigDecimal'];\n pricingAsset: Scalars['Bytes'];\n timestamp: Scalars['Int'];\n};\n\nexport type TokenPrice_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n amount?: InputMaybe;\n amount_gt?: InputMaybe;\n amount_gte?: InputMaybe;\n amount_in?: InputMaybe>;\n amount_lt?: InputMaybe;\n amount_lte?: InputMaybe;\n amount_not?: InputMaybe;\n amount_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n asset?: InputMaybe;\n asset_contains?: InputMaybe;\n asset_gt?: InputMaybe;\n asset_gte?: InputMaybe;\n asset_in?: InputMaybe>;\n asset_lt?: InputMaybe;\n asset_lte?: InputMaybe;\n asset_not?: InputMaybe;\n asset_not_contains?: InputMaybe;\n asset_not_in?: InputMaybe>;\n block?: InputMaybe;\n block_gt?: InputMaybe;\n block_gte?: InputMaybe;\n block_in?: InputMaybe>;\n block_lt?: InputMaybe;\n block_lte?: InputMaybe;\n block_not?: InputMaybe;\n block_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_contains_nocase?: InputMaybe;\n poolId_ends_with?: InputMaybe;\n poolId_ends_with_nocase?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_contains_nocase?: InputMaybe;\n poolId_not_ends_with?: InputMaybe;\n poolId_not_ends_with_nocase?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n poolId_not_starts_with?: InputMaybe;\n poolId_not_starts_with_nocase?: InputMaybe;\n poolId_starts_with?: InputMaybe;\n poolId_starts_with_nocase?: InputMaybe;\n price?: InputMaybe;\n price_gt?: InputMaybe;\n price_gte?: InputMaybe;\n price_in?: InputMaybe>;\n price_lt?: InputMaybe;\n price_lte?: InputMaybe;\n price_not?: InputMaybe;\n price_not_in?: InputMaybe>;\n pricingAsset?: InputMaybe;\n pricingAsset_contains?: InputMaybe;\n pricingAsset_gt?: InputMaybe;\n pricingAsset_gte?: InputMaybe;\n pricingAsset_in?: InputMaybe>;\n pricingAsset_lt?: InputMaybe;\n pricingAsset_lte?: InputMaybe;\n pricingAsset_not?: InputMaybe;\n pricingAsset_not_contains?: InputMaybe;\n pricingAsset_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n};\n\nexport enum TokenPrice_OrderBy {\n Amount = 'amount',\n Asset = 'asset',\n Block = 'block',\n Id = 'id',\n PoolId = 'poolId',\n PoolIdAddress = 'poolId__address',\n PoolIdAlpha = 'poolId__alpha',\n PoolIdAmp = 'poolId__amp',\n PoolIdBaseToken = 'poolId__baseToken',\n PoolIdBeta = 'poolId__beta',\n PoolIdC = 'poolId__c',\n PoolIdCreateTime = 'poolId__createTime',\n PoolIdDSq = 'poolId__dSq',\n PoolIdDelta = 'poolId__delta',\n PoolIdEpsilon = 'poolId__epsilon',\n PoolIdExpiryTime = 'poolId__expiryTime',\n PoolIdFactory = 'poolId__factory',\n PoolIdHoldersCount = 'poolId__holdersCount',\n PoolIdId = 'poolId__id',\n PoolIdIsInRecoveryMode = 'poolId__isInRecoveryMode',\n PoolIdIsPaused = 'poolId__isPaused',\n PoolIdJoinExitEnabled = 'poolId__joinExitEnabled',\n PoolIdLambda = 'poolId__lambda',\n PoolIdLastJoinExitAmp = 'poolId__lastJoinExitAmp',\n PoolIdLastPostJoinExitInvariant = 'poolId__lastPostJoinExitInvariant',\n PoolIdLowerTarget = 'poolId__lowerTarget',\n PoolIdMainIndex = 'poolId__mainIndex',\n PoolIdManagementAumFee = 'poolId__managementAumFee',\n PoolIdManagementFee = 'poolId__managementFee',\n PoolIdMustAllowlistLPs = 'poolId__mustAllowlistLPs',\n PoolIdName = 'poolId__name',\n PoolIdOracleEnabled = 'poolId__oracleEnabled',\n PoolIdOwner = 'poolId__owner',\n PoolIdPoolType = 'poolId__poolType',\n PoolIdPoolTypeVersion = 'poolId__poolTypeVersion',\n PoolIdPrincipalToken = 'poolId__principalToken',\n PoolIdProtocolAumFeeCache = 'poolId__protocolAumFeeCache',\n PoolIdProtocolId = 'poolId__protocolId',\n PoolIdProtocolSwapFeeCache = 'poolId__protocolSwapFeeCache',\n PoolIdProtocolYieldFeeCache = 'poolId__protocolYieldFeeCache',\n PoolIdRoot3Alpha = 'poolId__root3Alpha',\n PoolIdS = 'poolId__s',\n PoolIdSqrtAlpha = 'poolId__sqrtAlpha',\n PoolIdSqrtBeta = 'poolId__sqrtBeta',\n PoolIdStrategyType = 'poolId__strategyType',\n PoolIdSwapEnabled = 'poolId__swapEnabled',\n PoolIdSwapEnabledCurationSignal = 'poolId__swapEnabledCurationSignal',\n PoolIdSwapEnabledInternal = 'poolId__swapEnabledInternal',\n PoolIdSwapFee = 'poolId__swapFee',\n PoolIdSwapsCount = 'poolId__swapsCount',\n PoolIdSymbol = 'poolId__symbol',\n PoolIdTauAlphaX = 'poolId__tauAlphaX',\n PoolIdTauAlphaY = 'poolId__tauAlphaY',\n PoolIdTauBetaX = 'poolId__tauBetaX',\n PoolIdTauBetaY = 'poolId__tauBetaY',\n PoolIdTotalAumFeeCollectedInBpt = 'poolId__totalAumFeeCollectedInBPT',\n PoolIdTotalLiquidity = 'poolId__totalLiquidity',\n PoolIdTotalLiquiditySansBpt = 'poolId__totalLiquiditySansBPT',\n PoolIdTotalProtocolFee = 'poolId__totalProtocolFee',\n PoolIdTotalProtocolFeePaidInBpt = 'poolId__totalProtocolFeePaidInBPT',\n PoolIdTotalShares = 'poolId__totalShares',\n PoolIdTotalSwapFee = 'poolId__totalSwapFee',\n PoolIdTotalSwapVolume = 'poolId__totalSwapVolume',\n PoolIdTotalWeight = 'poolId__totalWeight',\n PoolIdTx = 'poolId__tx',\n PoolIdU = 'poolId__u',\n PoolIdUnitSeconds = 'poolId__unitSeconds',\n PoolIdUpperTarget = 'poolId__upperTarget',\n PoolIdV = 'poolId__v',\n PoolIdW = 'poolId__w',\n PoolIdWrappedIndex = 'poolId__wrappedIndex',\n PoolIdZ = 'poolId__z',\n Price = 'price',\n PricingAsset = 'pricingAsset',\n Timestamp = 'timestamp'\n}\n\nexport type TokenSnapshot = {\n __typename?: 'TokenSnapshot';\n id: Scalars['ID'];\n timestamp: Scalars['Int'];\n token: Token;\n totalBalanceNotional: Scalars['BigDecimal'];\n totalBalanceUSD: Scalars['BigDecimal'];\n totalSwapCount: Scalars['BigInt'];\n totalVolumeNotional: Scalars['BigDecimal'];\n totalVolumeUSD: Scalars['BigDecimal'];\n};\n\nexport type TokenSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n token?: InputMaybe;\n token_?: InputMaybe;\n token_contains?: InputMaybe;\n token_contains_nocase?: InputMaybe;\n token_ends_with?: InputMaybe;\n token_ends_with_nocase?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_contains_nocase?: InputMaybe;\n token_not_ends_with?: InputMaybe;\n token_not_ends_with_nocase?: InputMaybe;\n token_not_in?: InputMaybe>;\n token_not_starts_with?: InputMaybe;\n token_not_starts_with_nocase?: InputMaybe;\n token_starts_with?: InputMaybe;\n token_starts_with_nocase?: InputMaybe;\n totalBalanceNotional?: InputMaybe;\n totalBalanceNotional_gt?: InputMaybe;\n totalBalanceNotional_gte?: InputMaybe;\n totalBalanceNotional_in?: InputMaybe>;\n totalBalanceNotional_lt?: InputMaybe;\n totalBalanceNotional_lte?: InputMaybe;\n totalBalanceNotional_not?: InputMaybe;\n totalBalanceNotional_not_in?: InputMaybe>;\n totalBalanceUSD?: InputMaybe;\n totalBalanceUSD_gt?: InputMaybe;\n totalBalanceUSD_gte?: InputMaybe;\n totalBalanceUSD_in?: InputMaybe>;\n totalBalanceUSD_lt?: InputMaybe;\n totalBalanceUSD_lte?: InputMaybe;\n totalBalanceUSD_not?: InputMaybe;\n totalBalanceUSD_not_in?: InputMaybe>;\n totalSwapCount?: InputMaybe;\n totalSwapCount_gt?: InputMaybe;\n totalSwapCount_gte?: InputMaybe;\n totalSwapCount_in?: InputMaybe>;\n totalSwapCount_lt?: InputMaybe;\n totalSwapCount_lte?: InputMaybe;\n totalSwapCount_not?: InputMaybe;\n totalSwapCount_not_in?: InputMaybe>;\n totalVolumeNotional?: InputMaybe;\n totalVolumeNotional_gt?: InputMaybe;\n totalVolumeNotional_gte?: InputMaybe;\n totalVolumeNotional_in?: InputMaybe>;\n totalVolumeNotional_lt?: InputMaybe;\n totalVolumeNotional_lte?: InputMaybe;\n totalVolumeNotional_not?: InputMaybe;\n totalVolumeNotional_not_in?: InputMaybe>;\n totalVolumeUSD?: InputMaybe;\n totalVolumeUSD_gt?: InputMaybe;\n totalVolumeUSD_gte?: InputMaybe;\n totalVolumeUSD_in?: InputMaybe>;\n totalVolumeUSD_lt?: InputMaybe;\n totalVolumeUSD_lte?: InputMaybe;\n totalVolumeUSD_not?: InputMaybe;\n totalVolumeUSD_not_in?: InputMaybe>;\n};\n\nexport enum TokenSnapshot_OrderBy {\n Id = 'id',\n Timestamp = 'timestamp',\n Token = 'token',\n TokenAddress = 'token__address',\n TokenDecimals = 'token__decimals',\n TokenFxOracleDecimals = 'token__fxOracleDecimals',\n TokenId = 'token__id',\n TokenLatestFxPrice = 'token__latestFXPrice',\n TokenLatestUsdPrice = 'token__latestUSDPrice',\n TokenLatestUsdPriceTimestamp = 'token__latestUSDPriceTimestamp',\n TokenName = 'token__name',\n TokenSymbol = 'token__symbol',\n TokenTotalBalanceNotional = 'token__totalBalanceNotional',\n TokenTotalBalanceUsd = 'token__totalBalanceUSD',\n TokenTotalSwapCount = 'token__totalSwapCount',\n TokenTotalVolumeNotional = 'token__totalVolumeNotional',\n TokenTotalVolumeUsd = 'token__totalVolumeUSD',\n TotalBalanceNotional = 'totalBalanceNotional',\n TotalBalanceUsd = 'totalBalanceUSD',\n TotalSwapCount = 'totalSwapCount',\n TotalVolumeNotional = 'totalVolumeNotional',\n TotalVolumeUsd = 'totalVolumeUSD'\n}\n\nexport type Token_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_contains_nocase?: InputMaybe;\n address_ends_with?: InputMaybe;\n address_ends_with_nocase?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_contains_nocase?: InputMaybe;\n address_not_ends_with?: InputMaybe;\n address_not_ends_with_nocase?: InputMaybe;\n address_not_in?: InputMaybe>;\n address_not_starts_with?: InputMaybe;\n address_not_starts_with_nocase?: InputMaybe;\n address_starts_with?: InputMaybe;\n address_starts_with_nocase?: InputMaybe;\n and?: InputMaybe>>;\n decimals?: InputMaybe;\n decimals_gt?: InputMaybe;\n decimals_gte?: InputMaybe;\n decimals_in?: InputMaybe>;\n decimals_lt?: InputMaybe;\n decimals_lte?: InputMaybe;\n decimals_not?: InputMaybe;\n decimals_not_in?: InputMaybe>;\n fxOracleDecimals?: InputMaybe;\n fxOracleDecimals_gt?: InputMaybe;\n fxOracleDecimals_gte?: InputMaybe;\n fxOracleDecimals_in?: InputMaybe>;\n fxOracleDecimals_lt?: InputMaybe;\n fxOracleDecimals_lte?: InputMaybe;\n fxOracleDecimals_not?: InputMaybe;\n fxOracleDecimals_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n latestFXPrice?: InputMaybe;\n latestFXPrice_gt?: InputMaybe;\n latestFXPrice_gte?: InputMaybe;\n latestFXPrice_in?: InputMaybe>;\n latestFXPrice_lt?: InputMaybe;\n latestFXPrice_lte?: InputMaybe;\n latestFXPrice_not?: InputMaybe;\n latestFXPrice_not_in?: InputMaybe>;\n latestPrice?: InputMaybe;\n latestPrice_?: InputMaybe;\n latestPrice_contains?: InputMaybe;\n latestPrice_contains_nocase?: InputMaybe;\n latestPrice_ends_with?: InputMaybe;\n latestPrice_ends_with_nocase?: InputMaybe;\n latestPrice_gt?: InputMaybe;\n latestPrice_gte?: InputMaybe;\n latestPrice_in?: InputMaybe>;\n latestPrice_lt?: InputMaybe;\n latestPrice_lte?: InputMaybe;\n latestPrice_not?: InputMaybe;\n latestPrice_not_contains?: InputMaybe;\n latestPrice_not_contains_nocase?: InputMaybe;\n latestPrice_not_ends_with?: InputMaybe;\n latestPrice_not_ends_with_nocase?: InputMaybe;\n latestPrice_not_in?: InputMaybe>;\n latestPrice_not_starts_with?: InputMaybe;\n latestPrice_not_starts_with_nocase?: InputMaybe;\n latestPrice_starts_with?: InputMaybe;\n latestPrice_starts_with_nocase?: InputMaybe;\n latestUSDPrice?: InputMaybe;\n latestUSDPriceTimestamp?: InputMaybe;\n latestUSDPriceTimestamp_gt?: InputMaybe;\n latestUSDPriceTimestamp_gte?: InputMaybe;\n latestUSDPriceTimestamp_in?: InputMaybe>;\n latestUSDPriceTimestamp_lt?: InputMaybe;\n latestUSDPriceTimestamp_lte?: InputMaybe;\n latestUSDPriceTimestamp_not?: InputMaybe;\n latestUSDPriceTimestamp_not_in?: InputMaybe>;\n latestUSDPrice_gt?: InputMaybe;\n latestUSDPrice_gte?: InputMaybe;\n latestUSDPrice_in?: InputMaybe>;\n latestUSDPrice_lt?: InputMaybe;\n latestUSDPrice_lte?: InputMaybe;\n latestUSDPrice_not?: InputMaybe;\n latestUSDPrice_not_in?: InputMaybe>;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n totalBalanceNotional?: InputMaybe;\n totalBalanceNotional_gt?: InputMaybe;\n totalBalanceNotional_gte?: InputMaybe;\n totalBalanceNotional_in?: InputMaybe>;\n totalBalanceNotional_lt?: InputMaybe;\n totalBalanceNotional_lte?: InputMaybe;\n totalBalanceNotional_not?: InputMaybe;\n totalBalanceNotional_not_in?: InputMaybe>;\n totalBalanceUSD?: InputMaybe;\n totalBalanceUSD_gt?: InputMaybe;\n totalBalanceUSD_gte?: InputMaybe;\n totalBalanceUSD_in?: InputMaybe>;\n totalBalanceUSD_lt?: InputMaybe;\n totalBalanceUSD_lte?: InputMaybe;\n totalBalanceUSD_not?: InputMaybe;\n totalBalanceUSD_not_in?: InputMaybe>;\n totalSwapCount?: InputMaybe;\n totalSwapCount_gt?: InputMaybe;\n totalSwapCount_gte?: InputMaybe;\n totalSwapCount_in?: InputMaybe>;\n totalSwapCount_lt?: InputMaybe;\n totalSwapCount_lte?: InputMaybe;\n totalSwapCount_not?: InputMaybe;\n totalSwapCount_not_in?: InputMaybe>;\n totalVolumeNotional?: InputMaybe;\n totalVolumeNotional_gt?: InputMaybe;\n totalVolumeNotional_gte?: InputMaybe;\n totalVolumeNotional_in?: InputMaybe>;\n totalVolumeNotional_lt?: InputMaybe;\n totalVolumeNotional_lte?: InputMaybe;\n totalVolumeNotional_not?: InputMaybe;\n totalVolumeNotional_not_in?: InputMaybe>;\n totalVolumeUSD?: InputMaybe;\n totalVolumeUSD_gt?: InputMaybe;\n totalVolumeUSD_gte?: InputMaybe;\n totalVolumeUSD_in?: InputMaybe>;\n totalVolumeUSD_lt?: InputMaybe;\n totalVolumeUSD_lte?: InputMaybe;\n totalVolumeUSD_not?: InputMaybe;\n totalVolumeUSD_not_in?: InputMaybe>;\n};\n\nexport enum Token_OrderBy {\n Address = 'address',\n Decimals = 'decimals',\n FxOracleDecimals = 'fxOracleDecimals',\n Id = 'id',\n LatestFxPrice = 'latestFXPrice',\n LatestPrice = 'latestPrice',\n LatestPriceAsset = 'latestPrice__asset',\n LatestPriceBlock = 'latestPrice__block',\n LatestPriceId = 'latestPrice__id',\n LatestPricePrice = 'latestPrice__price',\n LatestPricePricingAsset = 'latestPrice__pricingAsset',\n LatestUsdPrice = 'latestUSDPrice',\n LatestUsdPriceTimestamp = 'latestUSDPriceTimestamp',\n Name = 'name',\n Pool = 'pool',\n PoolAddress = 'pool__address',\n PoolAlpha = 'pool__alpha',\n PoolAmp = 'pool__amp',\n PoolBaseToken = 'pool__baseToken',\n PoolBeta = 'pool__beta',\n PoolC = 'pool__c',\n PoolCreateTime = 'pool__createTime',\n PoolDSq = 'pool__dSq',\n PoolDelta = 'pool__delta',\n PoolEpsilon = 'pool__epsilon',\n PoolExpiryTime = 'pool__expiryTime',\n PoolFactory = 'pool__factory',\n PoolHoldersCount = 'pool__holdersCount',\n PoolId = 'pool__id',\n PoolIsInRecoveryMode = 'pool__isInRecoveryMode',\n PoolIsPaused = 'pool__isPaused',\n PoolJoinExitEnabled = 'pool__joinExitEnabled',\n PoolLambda = 'pool__lambda',\n PoolLastJoinExitAmp = 'pool__lastJoinExitAmp',\n PoolLastPostJoinExitInvariant = 'pool__lastPostJoinExitInvariant',\n PoolLowerTarget = 'pool__lowerTarget',\n PoolMainIndex = 'pool__mainIndex',\n PoolManagementAumFee = 'pool__managementAumFee',\n PoolManagementFee = 'pool__managementFee',\n PoolMustAllowlistLPs = 'pool__mustAllowlistLPs',\n PoolName = 'pool__name',\n PoolOracleEnabled = 'pool__oracleEnabled',\n PoolOwner = 'pool__owner',\n PoolPoolType = 'pool__poolType',\n PoolPoolTypeVersion = 'pool__poolTypeVersion',\n PoolPrincipalToken = 'pool__principalToken',\n PoolProtocolAumFeeCache = 'pool__protocolAumFeeCache',\n PoolProtocolId = 'pool__protocolId',\n PoolProtocolSwapFeeCache = 'pool__protocolSwapFeeCache',\n PoolProtocolYieldFeeCache = 'pool__protocolYieldFeeCache',\n PoolRoot3Alpha = 'pool__root3Alpha',\n PoolS = 'pool__s',\n PoolSqrtAlpha = 'pool__sqrtAlpha',\n PoolSqrtBeta = 'pool__sqrtBeta',\n PoolStrategyType = 'pool__strategyType',\n PoolSwapEnabled = 'pool__swapEnabled',\n PoolSwapEnabledCurationSignal = 'pool__swapEnabledCurationSignal',\n PoolSwapEnabledInternal = 'pool__swapEnabledInternal',\n PoolSwapFee = 'pool__swapFee',\n PoolSwapsCount = 'pool__swapsCount',\n PoolSymbol = 'pool__symbol',\n PoolTauAlphaX = 'pool__tauAlphaX',\n PoolTauAlphaY = 'pool__tauAlphaY',\n PoolTauBetaX = 'pool__tauBetaX',\n PoolTauBetaY = 'pool__tauBetaY',\n PoolTotalAumFeeCollectedInBpt = 'pool__totalAumFeeCollectedInBPT',\n PoolTotalLiquidity = 'pool__totalLiquidity',\n PoolTotalLiquiditySansBpt = 'pool__totalLiquiditySansBPT',\n PoolTotalProtocolFee = 'pool__totalProtocolFee',\n PoolTotalProtocolFeePaidInBpt = 'pool__totalProtocolFeePaidInBPT',\n PoolTotalShares = 'pool__totalShares',\n PoolTotalSwapFee = 'pool__totalSwapFee',\n PoolTotalSwapVolume = 'pool__totalSwapVolume',\n PoolTotalWeight = 'pool__totalWeight',\n PoolTx = 'pool__tx',\n PoolU = 'pool__u',\n PoolUnitSeconds = 'pool__unitSeconds',\n PoolUpperTarget = 'pool__upperTarget',\n PoolV = 'pool__v',\n PoolW = 'pool__w',\n PoolWrappedIndex = 'pool__wrappedIndex',\n PoolZ = 'pool__z',\n Symbol = 'symbol',\n TotalBalanceNotional = 'totalBalanceNotional',\n TotalBalanceUsd = 'totalBalanceUSD',\n TotalSwapCount = 'totalSwapCount',\n TotalVolumeNotional = 'totalVolumeNotional',\n TotalVolumeUsd = 'totalVolumeUSD'\n}\n\nexport type TradePair = {\n __typename?: 'TradePair';\n /** Token Address - Token Address */\n id: Scalars['ID'];\n token0: Token;\n token1: Token;\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n};\n\nexport type TradePairSnapshot = {\n __typename?: 'TradePairSnapshot';\n id: Scalars['ID'];\n pair: TradePair;\n timestamp: Scalars['Int'];\n totalSwapFee: Scalars['BigDecimal'];\n totalSwapVolume: Scalars['BigDecimal'];\n};\n\nexport type TradePairSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pair?: InputMaybe;\n pair_?: InputMaybe;\n pair_contains?: InputMaybe;\n pair_contains_nocase?: InputMaybe;\n pair_ends_with?: InputMaybe;\n pair_ends_with_nocase?: InputMaybe;\n pair_gt?: InputMaybe;\n pair_gte?: InputMaybe;\n pair_in?: InputMaybe>;\n pair_lt?: InputMaybe;\n pair_lte?: InputMaybe;\n pair_not?: InputMaybe;\n pair_not_contains?: InputMaybe;\n pair_not_contains_nocase?: InputMaybe;\n pair_not_ends_with?: InputMaybe;\n pair_not_ends_with_nocase?: InputMaybe;\n pair_not_in?: InputMaybe>;\n pair_not_starts_with?: InputMaybe;\n pair_not_starts_with_nocase?: InputMaybe;\n pair_starts_with?: InputMaybe;\n pair_starts_with_nocase?: InputMaybe;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n};\n\nexport enum TradePairSnapshot_OrderBy {\n Id = 'id',\n Pair = 'pair',\n PairId = 'pair__id',\n PairTotalSwapFee = 'pair__totalSwapFee',\n PairTotalSwapVolume = 'pair__totalSwapVolume',\n Timestamp = 'timestamp',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume'\n}\n\nexport type TradePair_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n token0?: InputMaybe;\n token0_?: InputMaybe;\n token0_contains?: InputMaybe;\n token0_contains_nocase?: InputMaybe;\n token0_ends_with?: InputMaybe;\n token0_ends_with_nocase?: InputMaybe;\n token0_gt?: InputMaybe;\n token0_gte?: InputMaybe;\n token0_in?: InputMaybe>;\n token0_lt?: InputMaybe;\n token0_lte?: InputMaybe;\n token0_not?: InputMaybe;\n token0_not_contains?: InputMaybe;\n token0_not_contains_nocase?: InputMaybe;\n token0_not_ends_with?: InputMaybe;\n token0_not_ends_with_nocase?: InputMaybe;\n token0_not_in?: InputMaybe>;\n token0_not_starts_with?: InputMaybe;\n token0_not_starts_with_nocase?: InputMaybe;\n token0_starts_with?: InputMaybe;\n token0_starts_with_nocase?: InputMaybe;\n token1?: InputMaybe;\n token1_?: InputMaybe;\n token1_contains?: InputMaybe;\n token1_contains_nocase?: InputMaybe;\n token1_ends_with?: InputMaybe;\n token1_ends_with_nocase?: InputMaybe;\n token1_gt?: InputMaybe;\n token1_gte?: InputMaybe;\n token1_in?: InputMaybe>;\n token1_lt?: InputMaybe;\n token1_lte?: InputMaybe;\n token1_not?: InputMaybe;\n token1_not_contains?: InputMaybe;\n token1_not_contains_nocase?: InputMaybe;\n token1_not_ends_with?: InputMaybe;\n token1_not_ends_with_nocase?: InputMaybe;\n token1_not_in?: InputMaybe>;\n token1_not_starts_with?: InputMaybe;\n token1_not_starts_with_nocase?: InputMaybe;\n token1_starts_with?: InputMaybe;\n token1_starts_with_nocase?: InputMaybe;\n totalSwapFee?: InputMaybe;\n totalSwapFee_gt?: InputMaybe;\n totalSwapFee_gte?: InputMaybe;\n totalSwapFee_in?: InputMaybe>;\n totalSwapFee_lt?: InputMaybe;\n totalSwapFee_lte?: InputMaybe;\n totalSwapFee_not?: InputMaybe;\n totalSwapFee_not_in?: InputMaybe>;\n totalSwapVolume?: InputMaybe;\n totalSwapVolume_gt?: InputMaybe;\n totalSwapVolume_gte?: InputMaybe;\n totalSwapVolume_in?: InputMaybe>;\n totalSwapVolume_lt?: InputMaybe;\n totalSwapVolume_lte?: InputMaybe;\n totalSwapVolume_not?: InputMaybe;\n totalSwapVolume_not_in?: InputMaybe>;\n};\n\nexport enum TradePair_OrderBy {\n Id = 'id',\n Token0 = 'token0',\n Token0Address = 'token0__address',\n Token0Decimals = 'token0__decimals',\n Token0FxOracleDecimals = 'token0__fxOracleDecimals',\n Token0Id = 'token0__id',\n Token0LatestFxPrice = 'token0__latestFXPrice',\n Token0LatestUsdPrice = 'token0__latestUSDPrice',\n Token0LatestUsdPriceTimestamp = 'token0__latestUSDPriceTimestamp',\n Token0Name = 'token0__name',\n Token0Symbol = 'token0__symbol',\n Token0TotalBalanceNotional = 'token0__totalBalanceNotional',\n Token0TotalBalanceUsd = 'token0__totalBalanceUSD',\n Token0TotalSwapCount = 'token0__totalSwapCount',\n Token0TotalVolumeNotional = 'token0__totalVolumeNotional',\n Token0TotalVolumeUsd = 'token0__totalVolumeUSD',\n Token1 = 'token1',\n Token1Address = 'token1__address',\n Token1Decimals = 'token1__decimals',\n Token1FxOracleDecimals = 'token1__fxOracleDecimals',\n Token1Id = 'token1__id',\n Token1LatestFxPrice = 'token1__latestFXPrice',\n Token1LatestUsdPrice = 'token1__latestUSDPrice',\n Token1LatestUsdPriceTimestamp = 'token1__latestUSDPriceTimestamp',\n Token1Name = 'token1__name',\n Token1Symbol = 'token1__symbol',\n Token1TotalBalanceNotional = 'token1__totalBalanceNotional',\n Token1TotalBalanceUsd = 'token1__totalBalanceUSD',\n Token1TotalSwapCount = 'token1__totalSwapCount',\n Token1TotalVolumeNotional = 'token1__totalVolumeNotional',\n Token1TotalVolumeUsd = 'token1__totalVolumeUSD',\n TotalSwapFee = 'totalSwapFee',\n TotalSwapVolume = 'totalSwapVolume'\n}\n\nexport type User = {\n __typename?: 'User';\n id: Scalars['ID'];\n sharesOwned?: Maybe>;\n swaps?: Maybe>;\n userInternalBalances?: Maybe>;\n};\n\n\nexport type UserSharesOwnedArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserSwapsArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserUserInternalBalancesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type UserInternalBalance = {\n __typename?: 'UserInternalBalance';\n balance: Scalars['BigDecimal'];\n id: Scalars['ID'];\n token: Scalars['Bytes'];\n tokenInfo?: Maybe;\n userAddress?: Maybe;\n};\n\nexport type UserInternalBalance_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n balance?: InputMaybe;\n balance_gt?: InputMaybe;\n balance_gte?: InputMaybe;\n balance_in?: InputMaybe>;\n balance_lt?: InputMaybe;\n balance_lte?: InputMaybe;\n balance_not?: InputMaybe;\n balance_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n token?: InputMaybe;\n tokenInfo?: InputMaybe;\n tokenInfo_?: InputMaybe;\n tokenInfo_contains?: InputMaybe;\n tokenInfo_contains_nocase?: InputMaybe;\n tokenInfo_ends_with?: InputMaybe;\n tokenInfo_ends_with_nocase?: InputMaybe;\n tokenInfo_gt?: InputMaybe;\n tokenInfo_gte?: InputMaybe;\n tokenInfo_in?: InputMaybe>;\n tokenInfo_lt?: InputMaybe;\n tokenInfo_lte?: InputMaybe;\n tokenInfo_not?: InputMaybe;\n tokenInfo_not_contains?: InputMaybe;\n tokenInfo_not_contains_nocase?: InputMaybe;\n tokenInfo_not_ends_with?: InputMaybe;\n tokenInfo_not_ends_with_nocase?: InputMaybe;\n tokenInfo_not_in?: InputMaybe>;\n tokenInfo_not_starts_with?: InputMaybe;\n tokenInfo_not_starts_with_nocase?: InputMaybe;\n tokenInfo_starts_with?: InputMaybe;\n tokenInfo_starts_with_nocase?: InputMaybe;\n token_contains?: InputMaybe;\n token_gt?: InputMaybe;\n token_gte?: InputMaybe;\n token_in?: InputMaybe>;\n token_lt?: InputMaybe;\n token_lte?: InputMaybe;\n token_not?: InputMaybe;\n token_not_contains?: InputMaybe;\n token_not_in?: InputMaybe>;\n userAddress?: InputMaybe;\n userAddress_?: InputMaybe;\n userAddress_contains?: InputMaybe;\n userAddress_contains_nocase?: InputMaybe;\n userAddress_ends_with?: InputMaybe;\n userAddress_ends_with_nocase?: InputMaybe;\n userAddress_gt?: InputMaybe;\n userAddress_gte?: InputMaybe;\n userAddress_in?: InputMaybe>;\n userAddress_lt?: InputMaybe;\n userAddress_lte?: InputMaybe;\n userAddress_not?: InputMaybe;\n userAddress_not_contains?: InputMaybe;\n userAddress_not_contains_nocase?: InputMaybe;\n userAddress_not_ends_with?: InputMaybe;\n userAddress_not_ends_with_nocase?: InputMaybe;\n userAddress_not_in?: InputMaybe>;\n userAddress_not_starts_with?: InputMaybe;\n userAddress_not_starts_with_nocase?: InputMaybe;\n userAddress_starts_with?: InputMaybe;\n userAddress_starts_with_nocase?: InputMaybe;\n};\n\nexport enum UserInternalBalance_OrderBy {\n Balance = 'balance',\n Id = 'id',\n Token = 'token',\n TokenInfo = 'tokenInfo',\n TokenInfoAddress = 'tokenInfo__address',\n TokenInfoDecimals = 'tokenInfo__decimals',\n TokenInfoFxOracleDecimals = 'tokenInfo__fxOracleDecimals',\n TokenInfoId = 'tokenInfo__id',\n TokenInfoLatestFxPrice = 'tokenInfo__latestFXPrice',\n TokenInfoLatestUsdPrice = 'tokenInfo__latestUSDPrice',\n TokenInfoLatestUsdPriceTimestamp = 'tokenInfo__latestUSDPriceTimestamp',\n TokenInfoName = 'tokenInfo__name',\n TokenInfoSymbol = 'tokenInfo__symbol',\n TokenInfoTotalBalanceNotional = 'tokenInfo__totalBalanceNotional',\n TokenInfoTotalBalanceUsd = 'tokenInfo__totalBalanceUSD',\n TokenInfoTotalSwapCount = 'tokenInfo__totalSwapCount',\n TokenInfoTotalVolumeNotional = 'tokenInfo__totalVolumeNotional',\n TokenInfoTotalVolumeUsd = 'tokenInfo__totalVolumeUSD',\n UserAddress = 'userAddress',\n UserAddressId = 'userAddress__id'\n}\n\nexport type User_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n sharesOwned_?: InputMaybe;\n swaps_?: InputMaybe;\n userInternalBalances_?: InputMaybe;\n};\n\nexport enum User_OrderBy {\n Id = 'id',\n SharesOwned = 'sharesOwned',\n Swaps = 'swaps',\n UserInternalBalances = 'userInternalBalances'\n}\n\nexport type _Block_ = {\n __typename?: '_Block_';\n /** The hash of the block */\n hash?: Maybe;\n /** The block number */\n number: Scalars['Int'];\n /** Integer representation of the timestamp stored in blocks for the chain */\n timestamp?: Maybe;\n};\n\n/** The type for the top-level _meta field */\nexport type _Meta_ = {\n __typename?: '_Meta_';\n /**\n * Information about a specific subgraph block. The hash of the block\n * will be null if the _meta field has a block constraint that asks for\n * a block number. It will be filled if the _meta field has no block constraint\n * and therefore asks for the latest block\n *\n */\n block: _Block_;\n /** The deployment ID */\n deployment: Scalars['String'];\n /** If `true`, the subgraph encountered indexing errors at some past block */\n hasIndexingErrors: Scalars['Boolean'];\n};\n\nexport enum _SubgraphErrorPolicy_ {\n /** Data will be returned even if the subgraph has indexing errors */\n Allow = 'allow',\n /** If the subgraph has indexing errors, data will be omitted. The default. */\n Deny = 'deny'\n}\n\nexport type PoolShareQueryVariables = Exact<{\n id: Scalars['ID'];\n block?: InputMaybe;\n}>;\n\n\nexport type PoolShareQuery = { __typename?: 'Query', poolShare?: { __typename?: 'PoolShare', id: string, balance: string, userAddress: { __typename?: 'User', id: string }, poolId: { __typename?: 'Pool', id: string, address: string } } | null };\n\nexport type PoolSharesQueryVariables = Exact<{\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolSharesQuery = { __typename?: 'Query', poolShares: Array<{ __typename?: 'PoolShare', id: string, balance: string, userAddress: { __typename?: 'User', id: string }, poolId: { __typename?: 'Pool', id: string, address: string } }> };\n\nexport type SubgraphPoolShareFragment = { __typename?: 'PoolShare', id: string, balance: string, userAddress: { __typename?: 'User', id: string }, poolId: { __typename?: 'Pool', id: string, address: string } };\n\nexport type PoolsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolsQuery = { __typename?: 'Query', pools: Array<{ __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null }> };\n\nexport type AllPoolsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type AllPoolsQuery = { __typename?: 'Query', pool0: Array<{ __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null }>, pool1000: Array<{ __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null }>, pool2000: Array<{ __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null }> };\n\nexport type PoolQueryVariables = Exact<{\n id: Scalars['ID'];\n block?: InputMaybe;\n}>;\n\n\nexport type PoolQuery = { __typename?: 'Query', pool?: { __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null } | null };\n\nexport type SubgraphPoolFragment = { __typename?: 'Pool', id: string, address: string, poolType?: string | null, poolTypeVersion?: number | null, factory?: string | null, strategyType: number, symbol?: string | null, name?: string | null, swapEnabled: boolean, swapFee: string, protocolYieldFeeCache?: string | null, protocolSwapFeeCache?: string | null, owner?: string | null, totalWeight?: string | null, totalSwapVolume: string, totalSwapFee: string, totalLiquidity: string, totalShares: string, swapsCount: string, holdersCount: string, tokensList: Array, amp?: string | null, expiryTime?: string | null, unitSeconds?: string | null, createTime: number, principalToken?: string | null, baseToken?: string | null, wrappedIndex?: number | null, mainIndex?: number | null, lowerTarget?: string | null, upperTarget?: string | null, sqrtAlpha?: string | null, sqrtBeta?: string | null, root3Alpha?: string | null, isInRecoveryMode?: boolean | null, isPaused?: boolean | null, alpha?: string | null, beta?: string | null, c?: string | null, s?: string | null, lambda?: string | null, tauAlphaX?: string | null, tauAlphaY?: string | null, tauBetaX?: string | null, tauBetaY?: string | null, u?: string | null, v?: string | null, w?: string | null, z?: string | null, dSq?: string | null, delta?: string | null, epsilon?: string | null, tokens?: Array<{ __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } }> | null, priceRateProviders?: Array<{ __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } }> | null };\n\nexport type SubgraphPoolTokenFragment = { __typename?: 'PoolToken', id: string, symbol: string, name: string, decimals: number, address: string, balance: string, managedBalance: string, weight?: string | null, priceRate: string, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null } };\n\nexport type SubgraphSubPoolTokenFragment = { __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null };\n\nexport type TokenAttrsFragment = { __typename?: 'Token', address: string, symbol?: string | null, decimals: number };\n\nexport type SubgraphSubPoolFragment = { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null };\n\nexport type TokenTreeFragment = { __typename?: 'Token', latestUSDPrice?: string | null, latestFXPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null, tokens?: Array<{ __typename?: 'PoolToken', address: string, balance: string, weight?: string | null, priceRate: string, symbol: string, decimals: number, isExemptFromYieldProtocolFee?: boolean | null, token: { __typename?: 'Token', latestUSDPrice?: string | null, pool?: { __typename?: 'Pool', id: string, totalShares: string, address: string, poolType?: string | null, mainIndex?: number | null } | null } }> | null } | null } }> | null } | null };\n\nexport type SubgraphPriceRateProviderFragment = { __typename?: 'PriceRateProvider', address: string, token: { __typename?: 'PoolToken', address: string } };\n\nexport type PoolHistoricalLiquiditiesQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolHistoricalLiquiditiesQuery = { __typename?: 'Query', poolHistoricalLiquidities: Array<{ __typename?: 'PoolHistoricalLiquidity', id: string, poolTotalShares: string, poolLiquidity: string, poolShareValue: string, pricingAsset: string, block: string, poolId: { __typename?: 'Pool', id: string } }> };\n\nexport type PoolSnapshotsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolSnapshotsQuery = { __typename?: 'Query', poolSnapshots: Array<{ __typename?: 'PoolSnapshot', id: string, totalShares: string, swapVolume: string, swapFees: string, timestamp: number, pool: { __typename?: 'Pool', id: string } }> };\n\nexport type SubgraphPoolSnapshotFragment = { __typename?: 'PoolSnapshot', id: string, totalShares: string, swapVolume: string, swapFees: string, timestamp: number, pool: { __typename?: 'Pool', id: string } };\n\nexport type JoinExitsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type JoinExitsQuery = { __typename?: 'Query', joinExits: Array<{ __typename?: 'JoinExit', amounts: Array, id: string, sender: string, timestamp: number, tx: string, type: InvestType, user: { __typename?: 'User', id: string }, pool: { __typename?: 'Pool', id: string, tokensList: Array } }> };\n\nexport type SubgraphJoinExitFragment = { __typename?: 'JoinExit', amounts: Array, id: string, sender: string, timestamp: number, tx: string, type: InvestType, user: { __typename?: 'User', id: string }, pool: { __typename?: 'Pool', id: string, tokensList: Array } };\n\nexport type BalancersQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type BalancersQuery = { __typename?: 'Query', balancers: Array<{ __typename?: 'Balancer', id: string, totalLiquidity: string, totalSwapVolume: string, totalSwapFee: string, totalSwapCount: string, poolCount: number }> };\n\nexport type SubgraphBalancerFragment = { __typename?: 'Balancer', id: string, totalLiquidity: string, totalSwapVolume: string, totalSwapFee: string, totalSwapCount: string, poolCount: number };\n\nexport type TokenPricesQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type TokenPricesQuery = { __typename?: 'Query', tokenPrices: Array<{ __typename?: 'TokenPrice', id: string, asset: string, amount: string, pricingAsset: string, price: string, block: string, timestamp: number, poolId: { __typename?: 'Pool', id: string } }> };\n\nexport type SubgraphTokenPriceFragment = { __typename?: 'TokenPrice', id: string, asset: string, amount: string, pricingAsset: string, price: string, block: string, timestamp: number, poolId: { __typename?: 'Pool', id: string } };\n\nexport type TokenLatestPricesQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type TokenLatestPricesQuery = { __typename?: 'Query', latestPrices: Array<{ __typename?: 'LatestPrice', id: string, asset: string, price: string, pricingAsset: string, poolId: { __typename?: 'Pool', id: string } }> };\n\nexport type TokenLatestPriceQueryVariables = Exact<{\n id: Scalars['ID'];\n}>;\n\n\nexport type TokenLatestPriceQuery = { __typename?: 'Query', latestPrice?: { __typename?: 'LatestPrice', id: string, asset: string, price: string, pricingAsset: string, poolId: { __typename?: 'Pool', id: string } } | null };\n\nexport type SubgraphTokenLatestPriceFragment = { __typename?: 'LatestPrice', id: string, asset: string, price: string, pricingAsset: string, poolId: { __typename?: 'Pool', id: string } };\n\nexport type UserQueryVariables = Exact<{\n id: Scalars['ID'];\n block?: InputMaybe;\n}>;\n\n\nexport type UserQuery = { __typename?: 'Query', user?: { __typename?: 'User', id: string, sharesOwned?: Array<{ __typename?: 'PoolShare', balance: string, poolId: { __typename?: 'Pool', id: string } }> | null } | null };\n\nexport type UsersQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type UsersQuery = { __typename?: 'Query', users: Array<{ __typename?: 'User', id: string, sharesOwned?: Array<{ __typename?: 'PoolShare', balance: string, poolId: { __typename?: 'Pool', id: string } }> | null }> };\n\nexport type SubgraphUserFragment = { __typename?: 'User', id: string, sharesOwned?: Array<{ __typename?: 'PoolShare', balance: string, poolId: { __typename?: 'Pool', id: string } }> | null };\n\nexport const SubgraphPoolShareFragmentDoc = gql`\n fragment SubgraphPoolShare on PoolShare {\n id\n balance\n userAddress {\n id\n }\n poolId {\n id\n address\n }\n}\n `;\nexport const SubgraphSubPoolFragmentDoc = gql`\n fragment SubgraphSubPool on Pool {\n id\n totalShares\n address\n poolType\n mainIndex\n}\n `;\nexport const SubgraphSubPoolTokenFragmentDoc = gql`\n fragment SubgraphSubPoolToken on PoolToken {\n address\n balance\n weight\n priceRate\n symbol\n decimals\n isExemptFromYieldProtocolFee\n}\n `;\nexport const TokenTreeFragmentDoc = gql`\n fragment TokenTree on Token {\n latestUSDPrice\n latestFXPrice\n pool {\n ...SubgraphSubPool\n tokens(first: 100, orderBy: index) {\n ...SubgraphSubPoolToken\n token {\n latestUSDPrice\n pool {\n ...SubgraphSubPool\n tokens(first: 100, orderBy: index) {\n ...SubgraphSubPoolToken\n token {\n latestUSDPrice\n pool {\n ...SubgraphSubPool\n }\n }\n }\n }\n }\n }\n }\n}\n ${SubgraphSubPoolFragmentDoc}\n${SubgraphSubPoolTokenFragmentDoc}`;\nexport const SubgraphPoolTokenFragmentDoc = gql`\n fragment SubgraphPoolToken on PoolToken {\n id\n symbol\n name\n decimals\n address\n balance\n managedBalance\n weight\n priceRate\n isExemptFromYieldProtocolFee\n token {\n ...TokenTree\n }\n}\n ${TokenTreeFragmentDoc}`;\nexport const SubgraphPriceRateProviderFragmentDoc = gql`\n fragment SubgraphPriceRateProvider on PriceRateProvider {\n address\n token {\n address\n }\n}\n `;\nexport const SubgraphPoolFragmentDoc = gql`\n fragment SubgraphPool on Pool {\n id\n address\n poolType\n poolTypeVersion\n factory\n strategyType\n symbol\n name\n swapEnabled\n swapFee\n protocolYieldFeeCache\n protocolSwapFeeCache\n owner\n totalWeight\n totalSwapVolume\n totalSwapFee\n totalLiquidity\n totalShares\n tokens(first: 100, orderBy: index) {\n ...SubgraphPoolToken\n }\n swapsCount\n holdersCount\n tokensList\n amp\n priceRateProviders(first: 100) {\n ...SubgraphPriceRateProvider\n }\n expiryTime\n unitSeconds\n createTime\n principalToken\n baseToken\n wrappedIndex\n mainIndex\n lowerTarget\n upperTarget\n sqrtAlpha\n sqrtBeta\n root3Alpha\n isInRecoveryMode\n isPaused\n alpha\n beta\n c\n s\n lambda\n tauAlphaX\n tauAlphaY\n tauBetaX\n tauBetaY\n u\n v\n w\n z\n dSq\n delta\n epsilon\n}\n ${SubgraphPoolTokenFragmentDoc}\n${SubgraphPriceRateProviderFragmentDoc}`;\nexport const TokenAttrsFragmentDoc = gql`\n fragment TokenAttrs on Token {\n address\n symbol\n decimals\n}\n `;\nexport const SubgraphPoolSnapshotFragmentDoc = gql`\n fragment SubgraphPoolSnapshot on PoolSnapshot {\n id\n pool {\n id\n }\n totalShares\n swapVolume\n swapFees\n timestamp\n}\n `;\nexport const SubgraphJoinExitFragmentDoc = gql`\n fragment SubgraphJoinExit on JoinExit {\n amounts\n id\n sender\n timestamp\n tx\n type\n user {\n id\n }\n pool {\n id\n tokensList\n }\n}\n `;\nexport const SubgraphBalancerFragmentDoc = gql`\n fragment SubgraphBalancer on Balancer {\n id\n totalLiquidity\n totalSwapVolume\n totalSwapFee\n totalSwapCount\n poolCount\n}\n `;\nexport const SubgraphTokenPriceFragmentDoc = gql`\n fragment SubgraphTokenPrice on TokenPrice {\n id\n poolId {\n id\n }\n asset\n amount\n pricingAsset\n price\n block\n timestamp\n}\n `;\nexport const SubgraphTokenLatestPriceFragmentDoc = gql`\n fragment SubgraphTokenLatestPrice on LatestPrice {\n id\n asset\n price\n poolId {\n id\n }\n pricingAsset\n}\n `;\nexport const SubgraphUserFragmentDoc = gql`\n fragment SubgraphUser on User {\n id\n sharesOwned(first: 1000) {\n balance\n poolId {\n id\n }\n }\n}\n `;\nexport const PoolShareDocument = gql`\n query PoolShare($id: ID!, $block: Block_height) {\n poolShare(id: $id, block: $block) {\n ...SubgraphPoolShare\n }\n}\n ${SubgraphPoolShareFragmentDoc}`;\nexport const PoolSharesDocument = gql`\n query PoolShares($first: Int, $orderBy: PoolShare_orderBy, $orderDirection: OrderDirection, $skip: Int, $where: PoolShare_filter, $block: Block_height) {\n poolShares(\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n skip: $skip\n where: $where\n block: $block\n ) {\n ...SubgraphPoolShare\n }\n}\n ${SubgraphPoolShareFragmentDoc}`;\nexport const PoolsDocument = gql`\n query Pools($skip: Int, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $where: Pool_filter, $block: Block_height) {\n pools(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPool\n }\n}\n ${SubgraphPoolFragmentDoc}`;\nexport const AllPoolsDocument = gql`\n query AllPools($skip: Int, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $where: Pool_filter, $block: Block_height) {\n pool0: pools(\n first: 1000\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPool\n }\n pool1000: pools(\n first: 1000\n skip: 1000\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPool\n }\n pool2000: pools(\n first: 1000\n skip: 2000\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPool\n }\n}\n ${SubgraphPoolFragmentDoc}`;\nexport const PoolDocument = gql`\n query Pool($id: ID!, $block: Block_height) {\n pool(id: $id, block: $block) {\n ...SubgraphPool\n }\n}\n ${SubgraphPoolFragmentDoc}`;\nexport const PoolHistoricalLiquiditiesDocument = gql`\n query PoolHistoricalLiquidities($skip: Int, $first: Int, $orderBy: PoolHistoricalLiquidity_orderBy, $orderDirection: OrderDirection, $where: PoolHistoricalLiquidity_filter, $block: Block_height) {\n poolHistoricalLiquidities(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n id\n poolId {\n id\n }\n poolTotalShares\n poolLiquidity\n poolShareValue\n pricingAsset\n block\n }\n}\n `;\nexport const PoolSnapshotsDocument = gql`\n query PoolSnapshots($skip: Int, $first: Int, $orderBy: PoolSnapshot_orderBy, $orderDirection: OrderDirection, $where: PoolSnapshot_filter, $block: Block_height) {\n poolSnapshots(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPoolSnapshot\n }\n}\n ${SubgraphPoolSnapshotFragmentDoc}`;\nexport const JoinExitsDocument = gql`\n query JoinExits($skip: Int, $first: Int, $orderBy: JoinExit_orderBy, $orderDirection: OrderDirection, $where: JoinExit_filter, $block: Block_height) {\n joinExits(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphJoinExit\n }\n}\n ${SubgraphJoinExitFragmentDoc}`;\nexport const BalancersDocument = gql`\n query Balancers($skip: Int, $first: Int, $orderBy: Balancer_orderBy, $orderDirection: OrderDirection, $where: Balancer_filter, $block: Block_height) {\n balancers(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphBalancer\n }\n}\n ${SubgraphBalancerFragmentDoc}`;\nexport const TokenPricesDocument = gql`\n query TokenPrices($skip: Int, $first: Int, $orderBy: TokenPrice_orderBy, $orderDirection: OrderDirection, $where: TokenPrice_filter, $block: Block_height) {\n tokenPrices(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphTokenPrice\n }\n}\n ${SubgraphTokenPriceFragmentDoc}`;\nexport const TokenLatestPricesDocument = gql`\n query TokenLatestPrices($skip: Int, $first: Int, $orderBy: LatestPrice_orderBy, $orderDirection: OrderDirection, $where: LatestPrice_filter, $block: Block_height) {\n latestPrices(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphTokenLatestPrice\n }\n}\n ${SubgraphTokenLatestPriceFragmentDoc}`;\nexport const TokenLatestPriceDocument = gql`\n query TokenLatestPrice($id: ID!) {\n latestPrice(id: $id) {\n ...SubgraphTokenLatestPrice\n }\n}\n ${SubgraphTokenLatestPriceFragmentDoc}`;\nexport const UserDocument = gql`\n query User($id: ID!, $block: Block_height) {\n user(id: $id, block: $block) {\n ...SubgraphUser\n }\n}\n ${SubgraphUserFragmentDoc}`;\nexport const UsersDocument = gql`\n query Users($skip: Int, $first: Int, $orderBy: User_orderBy, $orderDirection: OrderDirection, $where: User_filter, $block: Block_height) {\n users(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphUser\n }\n}\n ${SubgraphUserFragmentDoc}`;\n\nexport type SdkFunctionWrapper = (action: (requestHeaders?:Record) => Promise, operationName: string, operationType?: string) => Promise;\n\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType) => action();\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n PoolShare(variables: PoolShareQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolShareDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolShare', 'query');\n },\n PoolShares(variables?: PoolSharesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolSharesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolShares', 'query');\n },\n Pools(variables?: PoolsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Pools', 'query');\n },\n AllPools(variables?: AllPoolsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(AllPoolsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'AllPools', 'query');\n },\n Pool(variables: PoolQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Pool', 'query');\n },\n PoolHistoricalLiquidities(variables?: PoolHistoricalLiquiditiesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolHistoricalLiquiditiesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolHistoricalLiquidities', 'query');\n },\n PoolSnapshots(variables?: PoolSnapshotsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolSnapshotsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolSnapshots', 'query');\n },\n JoinExits(variables?: JoinExitsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(JoinExitsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'JoinExits', 'query');\n },\n Balancers(variables?: BalancersQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(BalancersDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Balancers', 'query');\n },\n TokenPrices(variables?: TokenPricesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(TokenPricesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'TokenPrices', 'query');\n },\n TokenLatestPrices(variables?: TokenLatestPricesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(TokenLatestPricesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'TokenLatestPrices', 'query');\n },\n TokenLatestPrice(variables: TokenLatestPriceQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(TokenLatestPriceDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'TokenLatestPrice', 'query');\n },\n User(variables: UserQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(UserDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'User', 'query');\n },\n Users(variables?: UsersQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(UsersDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Users', 'query');\n }\n };\n}\nexport type Sdk = ReturnType;","import { GraphQLClient } from 'graphql-request';\nimport * as Dom from 'graphql-request/dist/types.dom';\nimport gql from 'graphql-tag';\nexport type Maybe = T | null;\nexport type InputMaybe = Maybe;\nexport type Exact = { [K in keyof T]: T[K] };\nexport type MakeOptional = Omit & { [SubKey in K]?: Maybe };\nexport type MakeMaybe = Omit & { [SubKey in K]: Maybe };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n BigDecimal: string;\n BigInt: string;\n Bytes: string;\n Int8: any;\n};\n\nexport type BlockChangedFilter = {\n number_gte: Scalars['Int'];\n};\n\nexport type Block_Height = {\n hash?: InputMaybe;\n number?: InputMaybe;\n number_gte?: InputMaybe;\n};\n\nexport enum Chain {\n Arbitrum = 'Arbitrum',\n Avalanche = 'Avalanche',\n Base = 'Base',\n Gnosis = 'Gnosis',\n Optimism = 'Optimism',\n Polygon = 'Polygon',\n PolygonZkEvm = 'PolygonZkEvm'\n}\n\nexport type Gauge = {\n __typename?: 'Gauge';\n /** Timestamp at which Balancer DAO added the gauge to GaugeController [seconds] */\n addedTimestamp: Scalars['Int'];\n /** Address of the gauge */\n address: Scalars['Bytes'];\n /** Equal to: - */\n id: Scalars['ID'];\n /** Reference to LiquidityGauge */\n liquidityGauge?: Maybe;\n /** Reference to RootGauge */\n rootGauge?: Maybe;\n /** Type of the gauge */\n type: GaugeType;\n};\n\nexport type GaugeFactory = {\n __typename?: 'GaugeFactory';\n /** List of gauges created through the factory */\n gauges?: Maybe>;\n /** Factory contract address */\n id: Scalars['ID'];\n /** Number of gauges created through the factory */\n numGauges: Scalars['Int'];\n};\n\n\nexport type GaugeFactoryGaugesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type GaugeFactory_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n gauges_?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n numGauges?: InputMaybe;\n numGauges_gt?: InputMaybe;\n numGauges_gte?: InputMaybe;\n numGauges_in?: InputMaybe>;\n numGauges_lt?: InputMaybe;\n numGauges_lte?: InputMaybe;\n numGauges_not?: InputMaybe;\n numGauges_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n};\n\nexport enum GaugeFactory_OrderBy {\n gauges = 'gauges',\n id = 'id',\n numGauges = 'numGauges'\n}\n\nexport type GaugeShare = {\n __typename?: 'GaugeShare';\n /** User's balance of gauge deposit tokens */\n balance: Scalars['BigDecimal'];\n /** Reference to LiquidityGauge entity */\n gauge: LiquidityGauge;\n /** Equal to: - */\n id: Scalars['ID'];\n /** Reference to User entity */\n user: User;\n};\n\nexport type GaugeShare_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n balance?: InputMaybe;\n balance_gt?: InputMaybe;\n balance_gte?: InputMaybe;\n balance_in?: InputMaybe>;\n balance_lt?: InputMaybe;\n balance_lte?: InputMaybe;\n balance_not?: InputMaybe;\n balance_not_in?: InputMaybe>;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n};\n\nexport enum GaugeShare_OrderBy {\n balance = 'balance',\n gauge = 'gauge',\n gauge__id = 'gauge__id',\n gauge__isKilled = 'gauge__isKilled',\n gauge__isPreferentialGauge = 'gauge__isPreferentialGauge',\n gauge__poolAddress = 'gauge__poolAddress',\n gauge__poolId = 'gauge__poolId',\n gauge__relativeWeightCap = 'gauge__relativeWeightCap',\n gauge__streamer = 'gauge__streamer',\n gauge__symbol = 'gauge__symbol',\n gauge__totalSupply = 'gauge__totalSupply',\n id = 'id',\n user = 'user',\n user__id = 'user__id'\n}\n\nexport type GaugeType = {\n __typename?: 'GaugeType';\n /** Type ID */\n id: Scalars['ID'];\n /** Name of the type - empty string if call reverts */\n name: Scalars['String'];\n};\n\nexport type GaugeType_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n name?: InputMaybe;\n name_contains?: InputMaybe;\n name_contains_nocase?: InputMaybe;\n name_ends_with?: InputMaybe;\n name_ends_with_nocase?: InputMaybe;\n name_gt?: InputMaybe;\n name_gte?: InputMaybe;\n name_in?: InputMaybe>;\n name_lt?: InputMaybe;\n name_lte?: InputMaybe;\n name_not?: InputMaybe;\n name_not_contains?: InputMaybe;\n name_not_contains_nocase?: InputMaybe;\n name_not_ends_with?: InputMaybe;\n name_not_ends_with_nocase?: InputMaybe;\n name_not_in?: InputMaybe>;\n name_not_starts_with?: InputMaybe;\n name_not_starts_with_nocase?: InputMaybe;\n name_starts_with?: InputMaybe;\n name_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n};\n\nexport enum GaugeType_OrderBy {\n id = 'id',\n name = 'name'\n}\n\nexport type GaugeVote = {\n __typename?: 'GaugeVote';\n /** Reference to Gauge entity */\n gauge: Gauge;\n /** Equal to: - */\n id: Scalars['ID'];\n /** Timestamp at which user voted [seconds] */\n timestamp?: Maybe;\n /** Reference to User entity */\n user: User;\n /** Weight of veBAL power user has used to vote */\n weight?: Maybe;\n};\n\nexport type GaugeVote_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n weight?: InputMaybe;\n weight_gt?: InputMaybe;\n weight_gte?: InputMaybe;\n weight_in?: InputMaybe>;\n weight_lt?: InputMaybe;\n weight_lte?: InputMaybe;\n weight_not?: InputMaybe;\n weight_not_in?: InputMaybe>;\n};\n\nexport enum GaugeVote_OrderBy {\n gauge = 'gauge',\n gauge__addedTimestamp = 'gauge__addedTimestamp',\n gauge__address = 'gauge__address',\n gauge__id = 'gauge__id',\n id = 'id',\n timestamp = 'timestamp',\n user = 'user',\n user__id = 'user__id',\n weight = 'weight'\n}\n\nexport type Gauge_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n addedTimestamp?: InputMaybe;\n addedTimestamp_gt?: InputMaybe;\n addedTimestamp_gte?: InputMaybe;\n addedTimestamp_in?: InputMaybe>;\n addedTimestamp_lt?: InputMaybe;\n addedTimestamp_lte?: InputMaybe;\n addedTimestamp_not?: InputMaybe;\n addedTimestamp_not_in?: InputMaybe>;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n liquidityGauge?: InputMaybe;\n liquidityGauge_?: InputMaybe;\n liquidityGauge_contains?: InputMaybe;\n liquidityGauge_contains_nocase?: InputMaybe;\n liquidityGauge_ends_with?: InputMaybe;\n liquidityGauge_ends_with_nocase?: InputMaybe;\n liquidityGauge_gt?: InputMaybe;\n liquidityGauge_gte?: InputMaybe;\n liquidityGauge_in?: InputMaybe>;\n liquidityGauge_lt?: InputMaybe;\n liquidityGauge_lte?: InputMaybe;\n liquidityGauge_not?: InputMaybe;\n liquidityGauge_not_contains?: InputMaybe;\n liquidityGauge_not_contains_nocase?: InputMaybe;\n liquidityGauge_not_ends_with?: InputMaybe;\n liquidityGauge_not_ends_with_nocase?: InputMaybe;\n liquidityGauge_not_in?: InputMaybe>;\n liquidityGauge_not_starts_with?: InputMaybe;\n liquidityGauge_not_starts_with_nocase?: InputMaybe;\n liquidityGauge_starts_with?: InputMaybe;\n liquidityGauge_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n rootGauge?: InputMaybe;\n rootGauge_?: InputMaybe;\n rootGauge_contains?: InputMaybe;\n rootGauge_contains_nocase?: InputMaybe;\n rootGauge_ends_with?: InputMaybe;\n rootGauge_ends_with_nocase?: InputMaybe;\n rootGauge_gt?: InputMaybe;\n rootGauge_gte?: InputMaybe;\n rootGauge_in?: InputMaybe>;\n rootGauge_lt?: InputMaybe;\n rootGauge_lte?: InputMaybe;\n rootGauge_not?: InputMaybe;\n rootGauge_not_contains?: InputMaybe;\n rootGauge_not_contains_nocase?: InputMaybe;\n rootGauge_not_ends_with?: InputMaybe;\n rootGauge_not_ends_with_nocase?: InputMaybe;\n rootGauge_not_in?: InputMaybe>;\n rootGauge_not_starts_with?: InputMaybe;\n rootGauge_not_starts_with_nocase?: InputMaybe;\n rootGauge_starts_with?: InputMaybe;\n rootGauge_starts_with_nocase?: InputMaybe;\n type?: InputMaybe;\n type_?: InputMaybe;\n type_contains?: InputMaybe;\n type_contains_nocase?: InputMaybe;\n type_ends_with?: InputMaybe;\n type_ends_with_nocase?: InputMaybe;\n type_gt?: InputMaybe;\n type_gte?: InputMaybe;\n type_in?: InputMaybe>;\n type_lt?: InputMaybe;\n type_lte?: InputMaybe;\n type_not?: InputMaybe;\n type_not_contains?: InputMaybe;\n type_not_contains_nocase?: InputMaybe;\n type_not_ends_with?: InputMaybe;\n type_not_ends_with_nocase?: InputMaybe;\n type_not_in?: InputMaybe>;\n type_not_starts_with?: InputMaybe;\n type_not_starts_with_nocase?: InputMaybe;\n type_starts_with?: InputMaybe;\n type_starts_with_nocase?: InputMaybe;\n};\n\nexport enum Gauge_OrderBy {\n addedTimestamp = 'addedTimestamp',\n address = 'address',\n id = 'id',\n liquidityGauge = 'liquidityGauge',\n liquidityGauge__id = 'liquidityGauge__id',\n liquidityGauge__isKilled = 'liquidityGauge__isKilled',\n liquidityGauge__isPreferentialGauge = 'liquidityGauge__isPreferentialGauge',\n liquidityGauge__poolAddress = 'liquidityGauge__poolAddress',\n liquidityGauge__poolId = 'liquidityGauge__poolId',\n liquidityGauge__relativeWeightCap = 'liquidityGauge__relativeWeightCap',\n liquidityGauge__streamer = 'liquidityGauge__streamer',\n liquidityGauge__symbol = 'liquidityGauge__symbol',\n liquidityGauge__totalSupply = 'liquidityGauge__totalSupply',\n rootGauge = 'rootGauge',\n rootGauge__chain = 'rootGauge__chain',\n rootGauge__id = 'rootGauge__id',\n rootGauge__isKilled = 'rootGauge__isKilled',\n rootGauge__recipient = 'rootGauge__recipient',\n rootGauge__relativeWeightCap = 'rootGauge__relativeWeightCap',\n type = 'type',\n type__id = 'type__id',\n type__name = 'type__name'\n}\n\nexport type LiquidityGauge = {\n __typename?: 'LiquidityGauge';\n /** Factory contract address */\n factory: GaugeFactory;\n /** Reference to Gauge entity - created when LiquidityGauge is added to GaugeController */\n gauge?: Maybe;\n /** LiquidityGauge contract address */\n id: Scalars['ID'];\n /** Whether Balancer DAO killed the gauge */\n isKilled: Scalars['Boolean'];\n /** Whether the LiquidityGauge is the most recent added to GaugeController */\n isPreferentialGauge: Scalars['Boolean'];\n /** Reference to Pool entity */\n pool?: Maybe;\n /** Address of the pool (lp_token of the gauge) */\n poolAddress: Scalars['Bytes'];\n /** Pool ID if lp_token is a Balancer pool; null otherwise */\n poolId?: Maybe;\n /** Relative weight cap of the gauge (0.01 = 1%) - V2 factories only */\n relativeWeightCap?: Maybe;\n /** List of reward tokens depositted in the gauge - ChildChainLiquidityGauge only */\n rewardTokensList?: Maybe>;\n /** List of user shares */\n shares?: Maybe>;\n /** Address of the contract that streams reward tokens to the gauge - ChildChainLiquidityGauge only */\n streamer?: Maybe;\n /** ERC20 token symbol */\n symbol: Scalars['String'];\n /** List of reward tokens depositted in the gauge */\n tokens?: Maybe>;\n /** Total of BPTs users have staked in the LiquidityGauge */\n totalSupply: Scalars['BigDecimal'];\n};\n\n\nexport type LiquidityGaugeSharesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type LiquidityGaugeTokensArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type LiquidityGauge_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n factory?: InputMaybe;\n factory_?: InputMaybe;\n factory_contains?: InputMaybe;\n factory_contains_nocase?: InputMaybe;\n factory_ends_with?: InputMaybe;\n factory_ends_with_nocase?: InputMaybe;\n factory_gt?: InputMaybe;\n factory_gte?: InputMaybe;\n factory_in?: InputMaybe>;\n factory_lt?: InputMaybe;\n factory_lte?: InputMaybe;\n factory_not?: InputMaybe;\n factory_not_contains?: InputMaybe;\n factory_not_contains_nocase?: InputMaybe;\n factory_not_ends_with?: InputMaybe;\n factory_not_ends_with_nocase?: InputMaybe;\n factory_not_in?: InputMaybe>;\n factory_not_starts_with?: InputMaybe;\n factory_not_starts_with_nocase?: InputMaybe;\n factory_starts_with?: InputMaybe;\n factory_starts_with_nocase?: InputMaybe;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n isKilled?: InputMaybe;\n isKilled_in?: InputMaybe>;\n isKilled_not?: InputMaybe;\n isKilled_not_in?: InputMaybe>;\n isPreferentialGauge?: InputMaybe;\n isPreferentialGauge_in?: InputMaybe>;\n isPreferentialGauge_not?: InputMaybe;\n isPreferentialGauge_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n pool?: InputMaybe;\n poolAddress?: InputMaybe;\n poolAddress_contains?: InputMaybe;\n poolAddress_gt?: InputMaybe;\n poolAddress_gte?: InputMaybe;\n poolAddress_in?: InputMaybe>;\n poolAddress_lt?: InputMaybe;\n poolAddress_lte?: InputMaybe;\n poolAddress_not?: InputMaybe;\n poolAddress_not_contains?: InputMaybe;\n poolAddress_not_in?: InputMaybe>;\n poolId?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n pool_?: InputMaybe;\n pool_contains?: InputMaybe;\n pool_contains_nocase?: InputMaybe;\n pool_ends_with?: InputMaybe;\n pool_ends_with_nocase?: InputMaybe;\n pool_gt?: InputMaybe;\n pool_gte?: InputMaybe;\n pool_in?: InputMaybe>;\n pool_lt?: InputMaybe;\n pool_lte?: InputMaybe;\n pool_not?: InputMaybe;\n pool_not_contains?: InputMaybe;\n pool_not_contains_nocase?: InputMaybe;\n pool_not_ends_with?: InputMaybe;\n pool_not_ends_with_nocase?: InputMaybe;\n pool_not_in?: InputMaybe>;\n pool_not_starts_with?: InputMaybe;\n pool_not_starts_with_nocase?: InputMaybe;\n pool_starts_with?: InputMaybe;\n pool_starts_with_nocase?: InputMaybe;\n relativeWeightCap?: InputMaybe;\n relativeWeightCap_gt?: InputMaybe;\n relativeWeightCap_gte?: InputMaybe;\n relativeWeightCap_in?: InputMaybe>;\n relativeWeightCap_lt?: InputMaybe;\n relativeWeightCap_lte?: InputMaybe;\n relativeWeightCap_not?: InputMaybe;\n relativeWeightCap_not_in?: InputMaybe>;\n rewardTokensList?: InputMaybe>;\n rewardTokensList_contains?: InputMaybe>;\n rewardTokensList_contains_nocase?: InputMaybe>;\n rewardTokensList_not?: InputMaybe>;\n rewardTokensList_not_contains?: InputMaybe>;\n rewardTokensList_not_contains_nocase?: InputMaybe>;\n shares_?: InputMaybe;\n streamer?: InputMaybe;\n streamer_contains?: InputMaybe;\n streamer_gt?: InputMaybe;\n streamer_gte?: InputMaybe;\n streamer_in?: InputMaybe>;\n streamer_lt?: InputMaybe;\n streamer_lte?: InputMaybe;\n streamer_not?: InputMaybe;\n streamer_not_contains?: InputMaybe;\n streamer_not_in?: InputMaybe>;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n tokens_?: InputMaybe;\n totalSupply?: InputMaybe;\n totalSupply_gt?: InputMaybe;\n totalSupply_gte?: InputMaybe;\n totalSupply_in?: InputMaybe>;\n totalSupply_lt?: InputMaybe;\n totalSupply_lte?: InputMaybe;\n totalSupply_not?: InputMaybe;\n totalSupply_not_in?: InputMaybe>;\n};\n\nexport enum LiquidityGauge_OrderBy {\n factory = 'factory',\n factory__id = 'factory__id',\n factory__numGauges = 'factory__numGauges',\n gauge = 'gauge',\n gauge__addedTimestamp = 'gauge__addedTimestamp',\n gauge__address = 'gauge__address',\n gauge__id = 'gauge__id',\n id = 'id',\n isKilled = 'isKilled',\n isPreferentialGauge = 'isPreferentialGauge',\n pool = 'pool',\n poolAddress = 'poolAddress',\n poolId = 'poolId',\n pool__address = 'pool__address',\n pool__id = 'pool__id',\n pool__poolId = 'pool__poolId',\n relativeWeightCap = 'relativeWeightCap',\n rewardTokensList = 'rewardTokensList',\n shares = 'shares',\n streamer = 'streamer',\n symbol = 'symbol',\n tokens = 'tokens',\n totalSupply = 'totalSupply'\n}\n\nexport type LockSnapshot = {\n __typename?: 'LockSnapshot';\n /** veBAL balance at the moment user locks */\n bias: Scalars['BigDecimal'];\n /** Equal to - */\n id: Scalars['ID'];\n /** veBAL decay rate (per second) */\n slope: Scalars['BigDecimal'];\n /** Timestamp at which the snapshot was taken [seconds] */\n timestamp: Scalars['Int'];\n /** Reference to User entity */\n user: User;\n};\n\nexport type LockSnapshot_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n bias?: InputMaybe;\n bias_gt?: InputMaybe;\n bias_gte?: InputMaybe;\n bias_in?: InputMaybe>;\n bias_lt?: InputMaybe;\n bias_lte?: InputMaybe;\n bias_not?: InputMaybe;\n bias_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n slope?: InputMaybe;\n slope_gt?: InputMaybe;\n slope_gte?: InputMaybe;\n slope_in?: InputMaybe>;\n slope_lt?: InputMaybe;\n slope_lte?: InputMaybe;\n slope_not?: InputMaybe;\n slope_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n};\n\nexport enum LockSnapshot_OrderBy {\n bias = 'bias',\n id = 'id',\n slope = 'slope',\n timestamp = 'timestamp',\n user = 'user',\n user__id = 'user__id'\n}\n\nexport type OmniVotingEscrowLock = {\n __typename?: 'OmniVotingEscrowLock';\n /** veBAL balance at the moment user locks */\n bias: Scalars['BigDecimal'];\n /** Chain where the lock was bridged to */\n dstChainId: Scalars['Int'];\n /** Equal to: - */\n id: Scalars['ID'];\n /** User on the local chain (reference to User entity) */\n localUser: User;\n /** User address on the remote chain */\n remoteUser: Scalars['Bytes'];\n /** veBAL decay rate (per second) */\n slope: Scalars['BigDecimal'];\n /** Timestamp the lock was created [seconds] */\n timestamp: Scalars['Int'];\n /** Reference to VotingEscrow entity */\n votingEscrowID: VotingEscrow;\n};\n\nexport type OmniVotingEscrowLock_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n bias?: InputMaybe;\n bias_gt?: InputMaybe;\n bias_gte?: InputMaybe;\n bias_in?: InputMaybe>;\n bias_lt?: InputMaybe;\n bias_lte?: InputMaybe;\n bias_not?: InputMaybe;\n bias_not_in?: InputMaybe>;\n dstChainId?: InputMaybe;\n dstChainId_gt?: InputMaybe;\n dstChainId_gte?: InputMaybe;\n dstChainId_in?: InputMaybe>;\n dstChainId_lt?: InputMaybe;\n dstChainId_lte?: InputMaybe;\n dstChainId_not?: InputMaybe;\n dstChainId_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n localUser?: InputMaybe;\n localUser_?: InputMaybe;\n localUser_contains?: InputMaybe;\n localUser_contains_nocase?: InputMaybe;\n localUser_ends_with?: InputMaybe;\n localUser_ends_with_nocase?: InputMaybe;\n localUser_gt?: InputMaybe;\n localUser_gte?: InputMaybe;\n localUser_in?: InputMaybe>;\n localUser_lt?: InputMaybe;\n localUser_lte?: InputMaybe;\n localUser_not?: InputMaybe;\n localUser_not_contains?: InputMaybe;\n localUser_not_contains_nocase?: InputMaybe;\n localUser_not_ends_with?: InputMaybe;\n localUser_not_ends_with_nocase?: InputMaybe;\n localUser_not_in?: InputMaybe>;\n localUser_not_starts_with?: InputMaybe;\n localUser_not_starts_with_nocase?: InputMaybe;\n localUser_starts_with?: InputMaybe;\n localUser_starts_with_nocase?: InputMaybe;\n or?: InputMaybe>>;\n remoteUser?: InputMaybe;\n remoteUser_contains?: InputMaybe;\n remoteUser_gt?: InputMaybe;\n remoteUser_gte?: InputMaybe;\n remoteUser_in?: InputMaybe>;\n remoteUser_lt?: InputMaybe;\n remoteUser_lte?: InputMaybe;\n remoteUser_not?: InputMaybe;\n remoteUser_not_contains?: InputMaybe;\n remoteUser_not_in?: InputMaybe>;\n slope?: InputMaybe;\n slope_gt?: InputMaybe;\n slope_gte?: InputMaybe;\n slope_in?: InputMaybe>;\n slope_lt?: InputMaybe;\n slope_lte?: InputMaybe;\n slope_not?: InputMaybe;\n slope_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n votingEscrowID?: InputMaybe;\n votingEscrowID_?: InputMaybe;\n votingEscrowID_contains?: InputMaybe;\n votingEscrowID_contains_nocase?: InputMaybe;\n votingEscrowID_ends_with?: InputMaybe;\n votingEscrowID_ends_with_nocase?: InputMaybe;\n votingEscrowID_gt?: InputMaybe;\n votingEscrowID_gte?: InputMaybe;\n votingEscrowID_in?: InputMaybe>;\n votingEscrowID_lt?: InputMaybe;\n votingEscrowID_lte?: InputMaybe;\n votingEscrowID_not?: InputMaybe;\n votingEscrowID_not_contains?: InputMaybe;\n votingEscrowID_not_contains_nocase?: InputMaybe;\n votingEscrowID_not_ends_with?: InputMaybe;\n votingEscrowID_not_ends_with_nocase?: InputMaybe;\n votingEscrowID_not_in?: InputMaybe>;\n votingEscrowID_not_starts_with?: InputMaybe;\n votingEscrowID_not_starts_with_nocase?: InputMaybe;\n votingEscrowID_starts_with?: InputMaybe;\n votingEscrowID_starts_with_nocase?: InputMaybe;\n};\n\nexport enum OmniVotingEscrowLock_OrderBy {\n bias = 'bias',\n dstChainId = 'dstChainId',\n id = 'id',\n localUser = 'localUser',\n localUser__id = 'localUser__id',\n remoteUser = 'remoteUser',\n slope = 'slope',\n timestamp = 'timestamp',\n votingEscrowID = 'votingEscrowID',\n votingEscrowID__id = 'votingEscrowID__id',\n votingEscrowID__stakedSupply = 'votingEscrowID__stakedSupply'\n}\n\n/** Defines the order direction, either ascending or descending */\nexport enum OrderDirection {\n asc = 'asc',\n desc = 'desc'\n}\n\nexport type Pool = {\n __typename?: 'Pool';\n /** Address of the pool (lp_token of the gauge) */\n address: Scalars['Bytes'];\n /** List of gauges created for the pool */\n gauges?: Maybe>;\n /** List of the pool's gauges addresses */\n gaugesList: Array;\n /** Address of the pool (lp_token of the gauge) */\n id: Scalars['ID'];\n /** Pool ID if lp_token is a Balancer pool; null otherwise */\n poolId?: Maybe;\n /** Most recent, unkilled gauge in the GaugeController */\n preferentialGauge?: Maybe;\n};\n\n\nexport type PoolGaugesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type Pool_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n address?: InputMaybe;\n address_contains?: InputMaybe;\n address_gt?: InputMaybe;\n address_gte?: InputMaybe;\n address_in?: InputMaybe>;\n address_lt?: InputMaybe;\n address_lte?: InputMaybe;\n address_not?: InputMaybe;\n address_not_contains?: InputMaybe;\n address_not_in?: InputMaybe>;\n and?: InputMaybe>>;\n gaugesList?: InputMaybe>;\n gaugesList_contains?: InputMaybe>;\n gaugesList_contains_nocase?: InputMaybe>;\n gaugesList_not?: InputMaybe>;\n gaugesList_not_contains?: InputMaybe>;\n gaugesList_not_contains_nocase?: InputMaybe>;\n gauges_?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n poolId?: InputMaybe;\n poolId_contains?: InputMaybe;\n poolId_gt?: InputMaybe;\n poolId_gte?: InputMaybe;\n poolId_in?: InputMaybe>;\n poolId_lt?: InputMaybe;\n poolId_lte?: InputMaybe;\n poolId_not?: InputMaybe;\n poolId_not_contains?: InputMaybe;\n poolId_not_in?: InputMaybe>;\n preferentialGauge?: InputMaybe;\n preferentialGauge_?: InputMaybe;\n preferentialGauge_contains?: InputMaybe;\n preferentialGauge_contains_nocase?: InputMaybe;\n preferentialGauge_ends_with?: InputMaybe;\n preferentialGauge_ends_with_nocase?: InputMaybe;\n preferentialGauge_gt?: InputMaybe;\n preferentialGauge_gte?: InputMaybe;\n preferentialGauge_in?: InputMaybe>;\n preferentialGauge_lt?: InputMaybe;\n preferentialGauge_lte?: InputMaybe;\n preferentialGauge_not?: InputMaybe;\n preferentialGauge_not_contains?: InputMaybe;\n preferentialGauge_not_contains_nocase?: InputMaybe;\n preferentialGauge_not_ends_with?: InputMaybe;\n preferentialGauge_not_ends_with_nocase?: InputMaybe;\n preferentialGauge_not_in?: InputMaybe>;\n preferentialGauge_not_starts_with?: InputMaybe;\n preferentialGauge_not_starts_with_nocase?: InputMaybe;\n preferentialGauge_starts_with?: InputMaybe;\n preferentialGauge_starts_with_nocase?: InputMaybe;\n};\n\nexport enum Pool_OrderBy {\n address = 'address',\n gauges = 'gauges',\n gaugesList = 'gaugesList',\n id = 'id',\n poolId = 'poolId',\n preferentialGauge = 'preferentialGauge',\n preferentialGauge__id = 'preferentialGauge__id',\n preferentialGauge__isKilled = 'preferentialGauge__isKilled',\n preferentialGauge__isPreferentialGauge = 'preferentialGauge__isPreferentialGauge',\n preferentialGauge__poolAddress = 'preferentialGauge__poolAddress',\n preferentialGauge__poolId = 'preferentialGauge__poolId',\n preferentialGauge__relativeWeightCap = 'preferentialGauge__relativeWeightCap',\n preferentialGauge__streamer = 'preferentialGauge__streamer',\n preferentialGauge__symbol = 'preferentialGauge__symbol',\n preferentialGauge__totalSupply = 'preferentialGauge__totalSupply'\n}\n\nexport type Query = {\n __typename?: 'Query';\n /** Access to subgraph metadata */\n _meta?: Maybe<_Meta_>;\n gauge?: Maybe;\n gaugeFactories: Array;\n gaugeFactory?: Maybe;\n gaugeShare?: Maybe;\n gaugeShares: Array;\n gaugeType?: Maybe;\n gaugeTypes: Array;\n gaugeVote?: Maybe;\n gaugeVotes: Array;\n gauges: Array;\n liquidityGauge?: Maybe;\n liquidityGauges: Array;\n lockSnapshot?: Maybe;\n lockSnapshots: Array;\n omniVotingEscrowLock?: Maybe;\n omniVotingEscrowLocks: Array;\n pool?: Maybe;\n pools: Array;\n rewardToken?: Maybe;\n rewardTokens: Array;\n rootGauge?: Maybe;\n rootGauges: Array;\n singleRecipientGauge?: Maybe;\n singleRecipientGauges: Array;\n user?: Maybe;\n users: Array;\n votingEscrow?: Maybe;\n votingEscrowLock?: Maybe;\n votingEscrowLocks: Array;\n votingEscrows: Array;\n};\n\n\nexport type Query_MetaArgs = {\n block?: InputMaybe;\n};\n\n\nexport type QueryGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeFactoriesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGaugeFactoryArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeShareArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeSharesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGaugeTypeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeTypesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGaugeVoteArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryGaugeVotesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryLiquidityGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryLiquidityGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryLockSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryLockSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryOmniVotingEscrowLockArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryOmniVotingEscrowLocksArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryPoolArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryPoolsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryRewardTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryRewardTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryRootGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryRootGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QuerySingleRecipientGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QuerySingleRecipientGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryUserArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryUsersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryVotingEscrowArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryVotingEscrowLockArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type QueryVotingEscrowLocksArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type QueryVotingEscrowsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\nexport type RewardToken = {\n __typename?: 'RewardToken';\n /** ERC20 token decimals - zero if call to decimals() reverts */\n decimals: Scalars['Int'];\n /** Reference to LiquidityGauge entity */\n gauge: LiquidityGauge;\n /** Equal to: - */\n id: Scalars['ID'];\n /** Timestamp at which finishes the period of rewards */\n periodFinish?: Maybe;\n /** Rate of reward tokens streamed per second */\n rate?: Maybe;\n /** ERC20 token symbol - empty string if call to symbol() reverts */\n symbol: Scalars['String'];\n /** Amount of reward tokens that has been deposited into the gauge */\n totalDeposited: Scalars['BigDecimal'];\n};\n\nexport type RewardToken_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n decimals?: InputMaybe;\n decimals_gt?: InputMaybe;\n decimals_gte?: InputMaybe;\n decimals_in?: InputMaybe>;\n decimals_lt?: InputMaybe;\n decimals_lte?: InputMaybe;\n decimals_not?: InputMaybe;\n decimals_not_in?: InputMaybe>;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n periodFinish?: InputMaybe;\n periodFinish_gt?: InputMaybe;\n periodFinish_gte?: InputMaybe;\n periodFinish_in?: InputMaybe>;\n periodFinish_lt?: InputMaybe;\n periodFinish_lte?: InputMaybe;\n periodFinish_not?: InputMaybe;\n periodFinish_not_in?: InputMaybe>;\n rate?: InputMaybe;\n rate_gt?: InputMaybe;\n rate_gte?: InputMaybe;\n rate_in?: InputMaybe>;\n rate_lt?: InputMaybe;\n rate_lte?: InputMaybe;\n rate_not?: InputMaybe;\n rate_not_in?: InputMaybe>;\n symbol?: InputMaybe;\n symbol_contains?: InputMaybe;\n symbol_contains_nocase?: InputMaybe;\n symbol_ends_with?: InputMaybe;\n symbol_ends_with_nocase?: InputMaybe;\n symbol_gt?: InputMaybe;\n symbol_gte?: InputMaybe;\n symbol_in?: InputMaybe>;\n symbol_lt?: InputMaybe;\n symbol_lte?: InputMaybe;\n symbol_not?: InputMaybe;\n symbol_not_contains?: InputMaybe;\n symbol_not_contains_nocase?: InputMaybe;\n symbol_not_ends_with?: InputMaybe;\n symbol_not_ends_with_nocase?: InputMaybe;\n symbol_not_in?: InputMaybe>;\n symbol_not_starts_with?: InputMaybe;\n symbol_not_starts_with_nocase?: InputMaybe;\n symbol_starts_with?: InputMaybe;\n symbol_starts_with_nocase?: InputMaybe;\n totalDeposited?: InputMaybe;\n totalDeposited_gt?: InputMaybe;\n totalDeposited_gte?: InputMaybe;\n totalDeposited_in?: InputMaybe>;\n totalDeposited_lt?: InputMaybe;\n totalDeposited_lte?: InputMaybe;\n totalDeposited_not?: InputMaybe;\n totalDeposited_not_in?: InputMaybe>;\n};\n\nexport enum RewardToken_OrderBy {\n decimals = 'decimals',\n gauge = 'gauge',\n gauge__id = 'gauge__id',\n gauge__isKilled = 'gauge__isKilled',\n gauge__isPreferentialGauge = 'gauge__isPreferentialGauge',\n gauge__poolAddress = 'gauge__poolAddress',\n gauge__poolId = 'gauge__poolId',\n gauge__relativeWeightCap = 'gauge__relativeWeightCap',\n gauge__streamer = 'gauge__streamer',\n gauge__symbol = 'gauge__symbol',\n gauge__totalSupply = 'gauge__totalSupply',\n id = 'id',\n periodFinish = 'periodFinish',\n rate = 'rate',\n symbol = 'symbol',\n totalDeposited = 'totalDeposited'\n}\n\nexport type RootGauge = {\n __typename?: 'RootGauge';\n /** Chain where emissions by this gauge will be bridged to */\n chain: Chain;\n /** Factory contract address */\n factory: GaugeFactory;\n /** Reference to Gauge entity - created when LiquidityGauge is added to GaugeController */\n gauge?: Maybe;\n /** RootGauge contract address */\n id: Scalars['ID'];\n /** Whether Balancer DAO killed the gauge */\n isKilled: Scalars['Boolean'];\n /** Address where emissions by this gauge will be bridged to */\n recipient: Scalars['Bytes'];\n /** Relative weight cap of the gauge (0.01 = 1%) - V2 factories only */\n relativeWeightCap?: Maybe;\n};\n\nexport type RootGauge_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n chain?: InputMaybe;\n chain_in?: InputMaybe>;\n chain_not?: InputMaybe;\n chain_not_in?: InputMaybe>;\n factory?: InputMaybe;\n factory_?: InputMaybe;\n factory_contains?: InputMaybe;\n factory_contains_nocase?: InputMaybe;\n factory_ends_with?: InputMaybe;\n factory_ends_with_nocase?: InputMaybe;\n factory_gt?: InputMaybe;\n factory_gte?: InputMaybe;\n factory_in?: InputMaybe>;\n factory_lt?: InputMaybe;\n factory_lte?: InputMaybe;\n factory_not?: InputMaybe;\n factory_not_contains?: InputMaybe;\n factory_not_contains_nocase?: InputMaybe;\n factory_not_ends_with?: InputMaybe;\n factory_not_ends_with_nocase?: InputMaybe;\n factory_not_in?: InputMaybe>;\n factory_not_starts_with?: InputMaybe;\n factory_not_starts_with_nocase?: InputMaybe;\n factory_starts_with?: InputMaybe;\n factory_starts_with_nocase?: InputMaybe;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n isKilled?: InputMaybe;\n isKilled_in?: InputMaybe>;\n isKilled_not?: InputMaybe;\n isKilled_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n recipient?: InputMaybe;\n recipient_contains?: InputMaybe;\n recipient_gt?: InputMaybe;\n recipient_gte?: InputMaybe;\n recipient_in?: InputMaybe>;\n recipient_lt?: InputMaybe;\n recipient_lte?: InputMaybe;\n recipient_not?: InputMaybe;\n recipient_not_contains?: InputMaybe;\n recipient_not_in?: InputMaybe>;\n relativeWeightCap?: InputMaybe;\n relativeWeightCap_gt?: InputMaybe;\n relativeWeightCap_gte?: InputMaybe;\n relativeWeightCap_in?: InputMaybe>;\n relativeWeightCap_lt?: InputMaybe;\n relativeWeightCap_lte?: InputMaybe;\n relativeWeightCap_not?: InputMaybe;\n relativeWeightCap_not_in?: InputMaybe>;\n};\n\nexport enum RootGauge_OrderBy {\n chain = 'chain',\n factory = 'factory',\n factory__id = 'factory__id',\n factory__numGauges = 'factory__numGauges',\n gauge = 'gauge',\n gauge__addedTimestamp = 'gauge__addedTimestamp',\n gauge__address = 'gauge__address',\n gauge__id = 'gauge__id',\n id = 'id',\n isKilled = 'isKilled',\n recipient = 'recipient',\n relativeWeightCap = 'relativeWeightCap'\n}\n\nexport type SingleRecipientGauge = {\n __typename?: 'SingleRecipientGauge';\n /** Factory contract address */\n factory: GaugeFactory;\n /** Reference to Gauge entity - created when SingleRecipientGauge is added to GaugeController */\n gauge?: Maybe;\n /** SingleRecipientGauge contract address */\n id: Scalars['ID'];\n /** Whether Balancer DAO killed the gauge */\n isKilled: Scalars['Boolean'];\n /** Address where emissions for this gauge will be sent to */\n recipient: Scalars['Bytes'];\n /** Relative weight cap of the gauge (0.01 = 1%) - V2 factories only */\n relativeWeightCap?: Maybe;\n};\n\nexport type SingleRecipientGauge_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n factory?: InputMaybe;\n factory_?: InputMaybe;\n factory_contains?: InputMaybe;\n factory_contains_nocase?: InputMaybe;\n factory_ends_with?: InputMaybe;\n factory_ends_with_nocase?: InputMaybe;\n factory_gt?: InputMaybe;\n factory_gte?: InputMaybe;\n factory_in?: InputMaybe>;\n factory_lt?: InputMaybe;\n factory_lte?: InputMaybe;\n factory_not?: InputMaybe;\n factory_not_contains?: InputMaybe;\n factory_not_contains_nocase?: InputMaybe;\n factory_not_ends_with?: InputMaybe;\n factory_not_ends_with_nocase?: InputMaybe;\n factory_not_in?: InputMaybe>;\n factory_not_starts_with?: InputMaybe;\n factory_not_starts_with_nocase?: InputMaybe;\n factory_starts_with?: InputMaybe;\n factory_starts_with_nocase?: InputMaybe;\n gauge?: InputMaybe;\n gauge_?: InputMaybe;\n gauge_contains?: InputMaybe;\n gauge_contains_nocase?: InputMaybe;\n gauge_ends_with?: InputMaybe;\n gauge_ends_with_nocase?: InputMaybe;\n gauge_gt?: InputMaybe;\n gauge_gte?: InputMaybe;\n gauge_in?: InputMaybe>;\n gauge_lt?: InputMaybe;\n gauge_lte?: InputMaybe;\n gauge_not?: InputMaybe;\n gauge_not_contains?: InputMaybe;\n gauge_not_contains_nocase?: InputMaybe;\n gauge_not_ends_with?: InputMaybe;\n gauge_not_ends_with_nocase?: InputMaybe;\n gauge_not_in?: InputMaybe>;\n gauge_not_starts_with?: InputMaybe;\n gauge_not_starts_with_nocase?: InputMaybe;\n gauge_starts_with?: InputMaybe;\n gauge_starts_with_nocase?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n isKilled?: InputMaybe;\n isKilled_in?: InputMaybe>;\n isKilled_not?: InputMaybe;\n isKilled_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n recipient?: InputMaybe;\n recipient_contains?: InputMaybe;\n recipient_gt?: InputMaybe;\n recipient_gte?: InputMaybe;\n recipient_in?: InputMaybe>;\n recipient_lt?: InputMaybe;\n recipient_lte?: InputMaybe;\n recipient_not?: InputMaybe;\n recipient_not_contains?: InputMaybe;\n recipient_not_in?: InputMaybe>;\n relativeWeightCap?: InputMaybe;\n relativeWeightCap_gt?: InputMaybe;\n relativeWeightCap_gte?: InputMaybe;\n relativeWeightCap_in?: InputMaybe>;\n relativeWeightCap_lt?: InputMaybe;\n relativeWeightCap_lte?: InputMaybe;\n relativeWeightCap_not?: InputMaybe;\n relativeWeightCap_not_in?: InputMaybe>;\n};\n\nexport enum SingleRecipientGauge_OrderBy {\n factory = 'factory',\n factory__id = 'factory__id',\n factory__numGauges = 'factory__numGauges',\n gauge = 'gauge',\n gauge__addedTimestamp = 'gauge__addedTimestamp',\n gauge__address = 'gauge__address',\n gauge__id = 'gauge__id',\n id = 'id',\n isKilled = 'isKilled',\n recipient = 'recipient',\n relativeWeightCap = 'relativeWeightCap'\n}\n\nexport type Subscription = {\n __typename?: 'Subscription';\n /** Access to subgraph metadata */\n _meta?: Maybe<_Meta_>;\n gauge?: Maybe;\n gaugeFactories: Array;\n gaugeFactory?: Maybe;\n gaugeShare?: Maybe;\n gaugeShares: Array;\n gaugeType?: Maybe;\n gaugeTypes: Array;\n gaugeVote?: Maybe;\n gaugeVotes: Array;\n gauges: Array;\n liquidityGauge?: Maybe;\n liquidityGauges: Array;\n lockSnapshot?: Maybe;\n lockSnapshots: Array;\n omniVotingEscrowLock?: Maybe;\n omniVotingEscrowLocks: Array;\n pool?: Maybe;\n pools: Array;\n rewardToken?: Maybe;\n rewardTokens: Array;\n rootGauge?: Maybe;\n rootGauges: Array;\n singleRecipientGauge?: Maybe;\n singleRecipientGauges: Array;\n user?: Maybe;\n users: Array;\n votingEscrow?: Maybe;\n votingEscrowLock?: Maybe;\n votingEscrowLocks: Array;\n votingEscrows: Array;\n};\n\n\nexport type Subscription_MetaArgs = {\n block?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeFactoriesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugeFactoryArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeShareArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeSharesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugeTypeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeTypesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugeVoteArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionGaugeVotesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionLiquidityGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionLiquidityGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionLockSnapshotArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionLockSnapshotsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionOmniVotingEscrowLockArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionOmniVotingEscrowLocksArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionPoolArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionPoolsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionRewardTokenArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionRewardTokensArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionRootGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionRootGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionSingleRecipientGaugeArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionSingleRecipientGaugesArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionUserArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionUsersArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionVotingEscrowArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionVotingEscrowLockArgs = {\n block?: InputMaybe;\n id: Scalars['ID'];\n subgraphError?: _SubgraphErrorPolicy_;\n};\n\n\nexport type SubscriptionVotingEscrowLocksArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\n\nexport type SubscriptionVotingEscrowsArgs = {\n block?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n subgraphError?: _SubgraphErrorPolicy_;\n where?: InputMaybe;\n};\n\nexport type User = {\n __typename?: 'User';\n /** List of gauge the user has shares */\n gaugeShares?: Maybe>;\n /** List of votes on gauges */\n gaugeVotes?: Maybe>;\n /** User address */\n id: Scalars['ID'];\n /** List of omni locks the user created */\n omniVotingLocks?: Maybe>;\n /** List of locks the user created */\n votingLocks?: Maybe>;\n};\n\n\nexport type UserGaugeSharesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserGaugeVotesArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserOmniVotingLocksArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type UserVotingLocksArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type User_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n gaugeShares_?: InputMaybe;\n gaugeVotes_?: InputMaybe;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n omniVotingLocks_?: InputMaybe;\n or?: InputMaybe>>;\n votingLocks_?: InputMaybe;\n};\n\nexport enum User_OrderBy {\n gaugeShares = 'gaugeShares',\n gaugeVotes = 'gaugeVotes',\n id = 'id',\n omniVotingLocks = 'omniVotingLocks',\n votingLocks = 'votingLocks'\n}\n\nexport type VotingEscrow = {\n __typename?: 'VotingEscrow';\n /** VotingEscrow contract address */\n id: Scalars['ID'];\n /** List of veBAL locks created */\n locks?: Maybe>;\n /** List of veBAL locks created */\n omniLocks?: Maybe>;\n /** Amount of B-80BAL-20WETH BPT locked, only applies on mainnet */\n stakedSupply?: Maybe;\n};\n\n\nexport type VotingEscrowLocksArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\n\nexport type VotingEscrowOmniLocksArgs = {\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n};\n\nexport type VotingEscrowLock = {\n __typename?: 'VotingEscrowLock';\n /** veBAL balance at the moment user locks */\n bias: Scalars['BigDecimal'];\n /** Equal to: - */\n id: Scalars['ID'];\n /** Amount of B-80BAL-20WETH BPT the user has locked */\n lockedBalance: Scalars['BigDecimal'];\n /** veBAL decay rate (per second) */\n slope: Scalars['BigDecimal'];\n /** Timestamp at which the lock was created [seconds] */\n timestamp: Scalars['Int'];\n /** Timestamp at which B-80BAL-20WETH BPT can be unlocked by user [seconds] */\n unlockTime: Scalars['BigInt'];\n /** Timestamp at which the lcok was created [seconds]. Same as timestamp */\n updatedAt: Scalars['Int'];\n /** Reference to User entity */\n user: User;\n /** Reference to VotingEscrow entity */\n votingEscrowID: VotingEscrow;\n};\n\nexport type VotingEscrowLock_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n bias?: InputMaybe;\n bias_gt?: InputMaybe;\n bias_gte?: InputMaybe;\n bias_in?: InputMaybe>;\n bias_lt?: InputMaybe;\n bias_lte?: InputMaybe;\n bias_not?: InputMaybe;\n bias_not_in?: InputMaybe>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n lockedBalance?: InputMaybe;\n lockedBalance_gt?: InputMaybe;\n lockedBalance_gte?: InputMaybe;\n lockedBalance_in?: InputMaybe>;\n lockedBalance_lt?: InputMaybe;\n lockedBalance_lte?: InputMaybe;\n lockedBalance_not?: InputMaybe;\n lockedBalance_not_in?: InputMaybe>;\n or?: InputMaybe>>;\n slope?: InputMaybe;\n slope_gt?: InputMaybe;\n slope_gte?: InputMaybe;\n slope_in?: InputMaybe>;\n slope_lt?: InputMaybe;\n slope_lte?: InputMaybe;\n slope_not?: InputMaybe;\n slope_not_in?: InputMaybe>;\n timestamp?: InputMaybe;\n timestamp_gt?: InputMaybe;\n timestamp_gte?: InputMaybe;\n timestamp_in?: InputMaybe>;\n timestamp_lt?: InputMaybe;\n timestamp_lte?: InputMaybe;\n timestamp_not?: InputMaybe;\n timestamp_not_in?: InputMaybe>;\n unlockTime?: InputMaybe;\n unlockTime_gt?: InputMaybe;\n unlockTime_gte?: InputMaybe;\n unlockTime_in?: InputMaybe>;\n unlockTime_lt?: InputMaybe;\n unlockTime_lte?: InputMaybe;\n unlockTime_not?: InputMaybe;\n unlockTime_not_in?: InputMaybe>;\n updatedAt?: InputMaybe;\n updatedAt_gt?: InputMaybe;\n updatedAt_gte?: InputMaybe;\n updatedAt_in?: InputMaybe>;\n updatedAt_lt?: InputMaybe;\n updatedAt_lte?: InputMaybe;\n updatedAt_not?: InputMaybe;\n updatedAt_not_in?: InputMaybe>;\n user?: InputMaybe;\n user_?: InputMaybe;\n user_contains?: InputMaybe;\n user_contains_nocase?: InputMaybe;\n user_ends_with?: InputMaybe;\n user_ends_with_nocase?: InputMaybe;\n user_gt?: InputMaybe;\n user_gte?: InputMaybe;\n user_in?: InputMaybe>;\n user_lt?: InputMaybe;\n user_lte?: InputMaybe;\n user_not?: InputMaybe;\n user_not_contains?: InputMaybe;\n user_not_contains_nocase?: InputMaybe;\n user_not_ends_with?: InputMaybe;\n user_not_ends_with_nocase?: InputMaybe;\n user_not_in?: InputMaybe>;\n user_not_starts_with?: InputMaybe;\n user_not_starts_with_nocase?: InputMaybe;\n user_starts_with?: InputMaybe;\n user_starts_with_nocase?: InputMaybe;\n votingEscrowID?: InputMaybe;\n votingEscrowID_?: InputMaybe;\n votingEscrowID_contains?: InputMaybe;\n votingEscrowID_contains_nocase?: InputMaybe;\n votingEscrowID_ends_with?: InputMaybe;\n votingEscrowID_ends_with_nocase?: InputMaybe;\n votingEscrowID_gt?: InputMaybe;\n votingEscrowID_gte?: InputMaybe;\n votingEscrowID_in?: InputMaybe>;\n votingEscrowID_lt?: InputMaybe;\n votingEscrowID_lte?: InputMaybe;\n votingEscrowID_not?: InputMaybe;\n votingEscrowID_not_contains?: InputMaybe;\n votingEscrowID_not_contains_nocase?: InputMaybe;\n votingEscrowID_not_ends_with?: InputMaybe;\n votingEscrowID_not_ends_with_nocase?: InputMaybe;\n votingEscrowID_not_in?: InputMaybe>;\n votingEscrowID_not_starts_with?: InputMaybe;\n votingEscrowID_not_starts_with_nocase?: InputMaybe;\n votingEscrowID_starts_with?: InputMaybe;\n votingEscrowID_starts_with_nocase?: InputMaybe;\n};\n\nexport enum VotingEscrowLock_OrderBy {\n bias = 'bias',\n id = 'id',\n lockedBalance = 'lockedBalance',\n slope = 'slope',\n timestamp = 'timestamp',\n unlockTime = 'unlockTime',\n updatedAt = 'updatedAt',\n user = 'user',\n user__id = 'user__id',\n votingEscrowID = 'votingEscrowID',\n votingEscrowID__id = 'votingEscrowID__id',\n votingEscrowID__stakedSupply = 'votingEscrowID__stakedSupply'\n}\n\nexport type VotingEscrow_Filter = {\n /** Filter for the block changed event. */\n _change_block?: InputMaybe;\n and?: InputMaybe>>;\n id?: InputMaybe;\n id_gt?: InputMaybe;\n id_gte?: InputMaybe;\n id_in?: InputMaybe>;\n id_lt?: InputMaybe;\n id_lte?: InputMaybe;\n id_not?: InputMaybe;\n id_not_in?: InputMaybe>;\n locks_?: InputMaybe;\n omniLocks_?: InputMaybe;\n or?: InputMaybe>>;\n stakedSupply?: InputMaybe;\n stakedSupply_gt?: InputMaybe;\n stakedSupply_gte?: InputMaybe;\n stakedSupply_in?: InputMaybe>;\n stakedSupply_lt?: InputMaybe;\n stakedSupply_lte?: InputMaybe;\n stakedSupply_not?: InputMaybe;\n stakedSupply_not_in?: InputMaybe>;\n};\n\nexport enum VotingEscrow_OrderBy {\n id = 'id',\n locks = 'locks',\n omniLocks = 'omniLocks',\n stakedSupply = 'stakedSupply'\n}\n\nexport type _Block_ = {\n __typename?: '_Block_';\n /** The hash of the block */\n hash?: Maybe;\n /** The block number */\n number: Scalars['Int'];\n /** Integer representation of the timestamp stored in blocks for the chain */\n timestamp?: Maybe;\n};\n\n/** The type for the top-level _meta field */\nexport type _Meta_ = {\n __typename?: '_Meta_';\n /**\n * Information about a specific subgraph block. The hash of the block\n * will be null if the _meta field has a block constraint that asks for\n * a block number. It will be filled if the _meta field has no block constraint\n * and therefore asks for the latest block\n *\n */\n block: _Block_;\n /** The deployment ID */\n deployment: Scalars['String'];\n /** If `true`, the subgraph encountered indexing errors at some past block */\n hasIndexingErrors: Scalars['Boolean'];\n};\n\nexport enum _SubgraphErrorPolicy_ {\n /** Data will be returned even if the subgraph has indexing errors */\n allow = 'allow',\n /** If the subgraph has indexing errors, data will be omitted. The default. */\n deny = 'deny'\n}\n\nexport type GaugeShareQueryVariables = Exact<{\n id: Scalars['ID'];\n block?: InputMaybe;\n}>;\n\n\nexport type GaugeShareQuery = { __typename?: 'Query', gaugeShare?: { __typename?: 'GaugeShare', id: string, balance: string, user: { __typename?: 'User', id: string }, gauge: { __typename?: 'LiquidityGauge', id: string, isKilled: boolean, poolId?: string | null, poolAddress: string, totalSupply: string } } | null };\n\nexport type GaugeSharesQueryVariables = Exact<{\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type GaugeSharesQuery = { __typename?: 'Query', gaugeShares: Array<{ __typename?: 'GaugeShare', id: string, balance: string, user: { __typename?: 'User', id: string }, gauge: { __typename?: 'LiquidityGauge', id: string, isKilled: boolean, poolId?: string | null, poolAddress: string, totalSupply: string } }> };\n\nexport type SubgraphGaugeShareFragment = { __typename?: 'GaugeShare', id: string, balance: string, user: { __typename?: 'User', id: string }, gauge: { __typename?: 'LiquidityGauge', id: string, isKilled: boolean, poolId?: string | null, poolAddress: string, totalSupply: string } };\n\nexport type LiquidityGaugesQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type LiquidityGaugesQuery = { __typename?: 'Query', liquidityGauges: Array<{ __typename?: 'LiquidityGauge', id: string, symbol: string, poolAddress: string, poolId?: string | null, streamer?: string | null, totalSupply: string, factory: { __typename?: 'GaugeFactory', id: string, numGauges: number }, tokens?: Array<{ __typename?: 'RewardToken', id: string, symbol: string, decimals: number, totalDeposited: string, rate?: string | null, periodFinish?: string | null }> | null }> };\n\nexport type SubgraphLiquidityGaugeFragment = { __typename?: 'LiquidityGauge', id: string, symbol: string, poolAddress: string, poolId?: string | null, streamer?: string | null, totalSupply: string, factory: { __typename?: 'GaugeFactory', id: string, numGauges: number }, tokens?: Array<{ __typename?: 'RewardToken', id: string, symbol: string, decimals: number, totalDeposited: string, rate?: string | null, periodFinish?: string | null }> | null };\n\nexport type PoolsQueryVariables = Exact<{\n skip?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n where?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolsQuery = { __typename?: 'Query', pools: Array<{ __typename?: 'Pool', id: string, poolId?: string | null, preferentialGauge?: { __typename?: 'LiquidityGauge', id: string, symbol: string, poolAddress: string, poolId?: string | null, streamer?: string | null, totalSupply: string, factory: { __typename?: 'GaugeFactory', id: string, numGauges: number }, tokens?: Array<{ __typename?: 'RewardToken', id: string, symbol: string, decimals: number, totalDeposited: string, rate?: string | null, periodFinish?: string | null }> | null } | null }> };\n\nexport type SubgraphPoolWithPreferentialGaugeFragment = { __typename?: 'Pool', id: string, poolId?: string | null, preferentialGauge?: { __typename?: 'LiquidityGauge', id: string, symbol: string, poolAddress: string, poolId?: string | null, streamer?: string | null, totalSupply: string, factory: { __typename?: 'GaugeFactory', id: string, numGauges: number }, tokens?: Array<{ __typename?: 'RewardToken', id: string, symbol: string, decimals: number, totalDeposited: string, rate?: string | null, periodFinish?: string | null }> | null } | null };\n\nexport type PoolGaugesQueryVariables = Exact<{\n where?: InputMaybe;\n first?: InputMaybe;\n orderBy?: InputMaybe;\n orderDirection?: InputMaybe;\n skip?: InputMaybe;\n block?: InputMaybe;\n}>;\n\n\nexport type PoolGaugesQuery = { __typename?: 'Query', pools: Array<{ __typename?: 'Pool', gauges?: Array<{ __typename?: 'LiquidityGauge', id: string, relativeWeightCap?: string | null }> | null, preferentialGauge?: { __typename?: 'LiquidityGauge', id: string } | null }> };\n\nexport const SubgraphGaugeShareFragmentDoc = gql`\n fragment SubgraphGaugeShare on GaugeShare {\n id\n balance\n user {\n id\n }\n gauge {\n id\n isKilled\n poolId\n poolAddress\n totalSupply\n }\n}\n `;\nexport const SubgraphLiquidityGaugeFragmentDoc = gql`\n fragment SubgraphLiquidityGauge on LiquidityGauge {\n id\n symbol\n poolAddress\n poolId\n streamer\n factory {\n id\n numGauges\n }\n totalSupply\n tokens {\n id\n symbol\n decimals\n totalDeposited\n rate\n periodFinish\n }\n}\n `;\nexport const SubgraphPoolWithPreferentialGaugeFragmentDoc = gql`\n fragment SubgraphPoolWithPreferentialGauge on Pool {\n id\n poolId\n preferentialGauge {\n ...SubgraphLiquidityGauge\n }\n}\n ${SubgraphLiquidityGaugeFragmentDoc}`;\nexport const GaugeShareDocument = gql`\n query GaugeShare($id: ID!, $block: Block_height) {\n gaugeShare(id: $id, block: $block) {\n ...SubgraphGaugeShare\n }\n}\n ${SubgraphGaugeShareFragmentDoc}`;\nexport const GaugeSharesDocument = gql`\n query GaugeShares($first: Int, $orderBy: GaugeShare_orderBy, $orderDirection: OrderDirection, $skip: Int, $where: GaugeShare_filter, $block: Block_height) {\n gaugeShares(\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n skip: $skip\n where: $where\n block: $block\n ) {\n ...SubgraphGaugeShare\n }\n}\n ${SubgraphGaugeShareFragmentDoc}`;\nexport const LiquidityGaugesDocument = gql`\n query LiquidityGauges($skip: Int, $first: Int, $orderBy: LiquidityGauge_orderBy, $orderDirection: OrderDirection, $where: LiquidityGauge_filter, $block: Block_height) {\n liquidityGauges(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphLiquidityGauge\n }\n}\n ${SubgraphLiquidityGaugeFragmentDoc}`;\nexport const PoolsDocument = gql`\n query Pools($skip: Int, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $where: Pool_filter, $block: Block_height) {\n pools(\n skip: $skip\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n where: $where\n block: $block\n ) {\n ...SubgraphPoolWithPreferentialGauge\n }\n}\n ${SubgraphPoolWithPreferentialGaugeFragmentDoc}`;\nexport const PoolGaugesDocument = gql`\n query PoolGauges($where: Pool_filter, $first: Int, $orderBy: Pool_orderBy, $orderDirection: OrderDirection, $skip: Int, $block: Block_height) {\n pools(\n where: $where\n first: $first\n orderBy: $orderBy\n orderDirection: $orderDirection\n skip: $skip\n block: $block\n ) {\n gauges {\n id\n relativeWeightCap\n }\n preferentialGauge {\n id\n }\n }\n}\n `;\n\nexport type SdkFunctionWrapper = (action: (requestHeaders?:Record) => Promise, operationName: string, operationType?: string) => Promise;\n\n\nconst defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType) => action();\n\nexport function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {\n return {\n GaugeShare(variables: GaugeShareQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(GaugeShareDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'GaugeShare', 'query');\n },\n GaugeShares(variables?: GaugeSharesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(GaugeSharesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'GaugeShares', 'query');\n },\n LiquidityGauges(variables?: LiquidityGaugesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(LiquidityGaugesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'LiquidityGauges', 'query');\n },\n Pools(variables?: PoolsQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'Pools', 'query');\n },\n PoolGauges(variables?: PoolGaugesQueryVariables, requestHeaders?: Dom.RequestInit[\"headers\"]): Promise {\n return withWrapper((wrappedRequestHeaders) => client.request(PoolGaugesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'PoolGauges', 'query');\n }\n };\n}\nexport type Sdk = ReturnType;","import { GraphQLClient } from 'graphql-request';\nimport { getSdk, Sdk } from './generated/balancer-subgraph-types';\nimport * as Gauges from './generated/balancer-gauges';\nimport * as V2 from './generated/balancer-subgraph-types';\n\nexport * from './generated/balancer-subgraph-types';\n\nexport type SubgraphClient = Sdk;\nexport type GaugesClient = Gauges.Sdk;\nexport type SubgraphLiquidityGauge = Gauges.LiquidityGauge;\nexport type SubgraphPool = V2.SubgraphPoolFragment;\n\nexport function createSubgraphClient(subgraphUrl: string): SubgraphClient {\n const client = new GraphQLClient(subgraphUrl);\n\n return getSdk(client);\n}\n\nexport function createGaugesClient(url: string): GaugesClient {\n const client = new GraphQLClient(url);\n\n return Gauges.getSdk(client);\n}\n","import { set } from 'lodash';\nimport { Fragment, JsonFragment, Interface, Result } from '@ethersproject/abi';\nimport { CallOverrides } from '@ethersproject/contracts';\nimport { Multicall3, Multicall3__factory } from '@/contracts';\nimport { Provider } from '@ethersproject/providers';\n\nexport class Multicaller3 {\n private interface: Interface;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private calls: [string, string, any][] = [];\n private paths: string[] = [];\n address = '0xcA11bde05977b3631167028862bE2a173976CA11';\n multicall: Multicall3;\n\n constructor(\n abi: string | Array,\n provider: Provider,\n private options: CallOverrides = {}\n ) {\n this.interface = new Interface(abi);\n this.multicall = Multicall3__factory.connect(this.address, provider);\n }\n\n call(\n path: string,\n address: string,\n functionName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n params?: any[]\n ): Multicaller3 {\n this.calls.push([address, functionName, params]);\n this.paths.push(path);\n return this;\n }\n\n async execute(\n from: Record = {},\n batchSize = 1024 // Define the number of function calls in each batch\n ): Promise> {\n const obj = from;\n const results = await this.executeMulticall(batchSize);\n results.forEach((result, i) =>\n set(obj, this.paths[i], result.length > 1 ? result : result[0])\n );\n this.calls = [];\n this.paths = [];\n return obj;\n }\n\n private async executeMulticall(batchSize: number): Promise {\n const numBatches = Math.ceil(this.calls.length / batchSize);\n const results: Result[] = [];\n\n const batchPromises = [];\n\n for (let batchIndex = 0; batchIndex < numBatches; batchIndex++) {\n const batchCalls = this.calls.slice(\n batchIndex * batchSize,\n (batchIndex + 1) * batchSize\n );\n\n const batchRequests = batchCalls.map(\n ([address, functionName, params]) => ({\n target: address,\n allowFailure: true,\n callData: this.interface.encodeFunctionData(functionName, params),\n })\n );\n\n batchPromises.push(\n this.multicall.callStatic.aggregate3(batchRequests, this.options)\n );\n }\n\n const batchResults = await Promise.all(batchPromises);\n\n batchResults.forEach((res, batchIndex) => {\n const offset = batchIndex * batchSize;\n\n for (let i = 0; i < res.length; i++) {\n const callIndex = offset + i;\n const { success, returnData } = res[i];\n\n if (success) {\n try {\n const result = this.interface.decodeFunctionResult(\n this.calls[callIndex][1],\n returnData\n );\n results[callIndex] = result;\n } catch (e) {\n console.error('Multicall error', this.paths[callIndex]);\n results[callIndex] = [];\n }\n } else {\n console.error('Failed request in multicall', this.paths[callIndex]);\n results[callIndex] = [];\n }\n }\n });\n\n return results;\n }\n}\n","import { Multicaller3 } from '@/lib/utils/multiCaller3';\nimport { SubgraphPoolBase } from '@/.';\nimport { Provider } from '@ethersproject/providers';\nimport { formatFixed } from '@ethersproject/bignumber';\nimport { SubgraphToken } from '@balancer-labs/sor';\nimport { PoolToken, Pool } from '@/types';\n\nconst abi = [\n 'function getSwapFeePercentage() view returns (uint256)',\n 'function percentFee() view returns (uint256)',\n 'function protocolPercentFee() view returns (uint256)',\n 'function getNormalizedWeights() view returns (uint256[])',\n 'function totalSupply() view returns (uint256)',\n 'function getVirtualSupply() view returns (uint256)',\n 'function getActualSupply() view returns (uint256)',\n 'function getTargets() view returns (uint256 lowerTarget, uint256 upperTarget)',\n 'function getTokenRates() view returns (uint256, uint256)',\n 'function getWrappedTokenRate() view returns (uint256)',\n 'function getAmplificationParameter() view returns (uint256 value, bool isUpdating, uint256 precision)',\n 'function getPausedState() view returns (bool)',\n 'function inRecoveryMode() view returns (bool)',\n 'function getRate() view returns (uint256)',\n 'function getScalingFactors() view returns (uint256[] memory)', // do we need this here?\n 'function getPoolTokens(bytes32) view returns (address[], uint256[])',\n];\n\nconst getTotalSupplyFn = (poolType: string) => {\n if (poolType.includes('Linear') || ['StablePhantom'].includes(poolType)) {\n return 'getVirtualSupply';\n } else if (poolType === 'ComposableStable') {\n return 'getActualSupply';\n } else {\n return 'totalSupply';\n }\n};\n\nconst getSwapFeeFn = (poolType: string) => {\n if (poolType === 'Element') {\n return 'percentFee';\n } else if (poolType === 'FX') {\n return 'protocolPercentFee';\n } else {\n return 'getSwapFeePercentage';\n }\n};\n\ntype GenericToken = SubgraphToken | PoolToken;\ntype GenericPool = Omit & {\n tokens: GenericToken[];\n};\n\ninterface OnchainData {\n poolTokens: [string[], string[]];\n totalShares: string;\n swapFee: string;\n isPaused?: boolean;\n inRecoveryMode?: boolean;\n rate?: string;\n scalingFactors?: string[];\n weights?: string[];\n targets?: [string, string];\n wrappedTokenRate?: string;\n amp?: [string, boolean, string];\n tokenRates?: [string, string];\n}\n\nconst defaultCalls = (\n id: string,\n address: string,\n vaultAddress: string,\n poolType: string,\n multicaller: Multicaller3\n) => {\n multicaller.call(`${id}.poolTokens`, vaultAddress, 'getPoolTokens', [id]);\n multicaller.call(`${id}.totalShares`, address, getTotalSupplyFn(poolType));\n multicaller.call(`${id}.swapFee`, address, getSwapFeeFn(poolType));\n // Following where added to the pools query contract, however legacy onchain data didn't have them.\n // multicaller.call(`${id}.isPaused`, address, 'getPausedState');\n // multicaller.call(`${id}.inRecoveryMode`, address, 'inRecoveryMode');\n // multicaller.call(`${id}.rate`, address, 'getRate');\n // multicaller.call(`${id}.scalingFactors`, address, 'getScalingFactors');\n};\n\nconst weightedCalls = (\n id: string,\n address: string,\n multicaller: Multicaller3\n) => {\n multicaller.call(`${id}.weights`, address, 'getNormalizedWeights');\n};\n\nconst linearCalls = (\n id: string,\n address: string,\n multicaller: Multicaller3\n) => {\n multicaller.call(`${id}.targets`, address, 'getTargets');\n multicaller.call(`${id}.wrappedTokenRate`, address, 'getWrappedTokenRate');\n};\n\nconst stableCalls = (\n id: string,\n address: string,\n multicaller: Multicaller3\n) => {\n multicaller.call(`${id}.amp`, address, 'getAmplificationParameter');\n};\n\nconst gyroECalls = (id: string, address: string, multicaller: Multicaller3) => {\n multicaller.call(`${id}.tokenRates`, address, 'getTokenRates');\n};\n\nconst poolTypeCalls = (poolType: string, poolTypeVersion = 1) => {\n const do_nothing = () => ({});\n switch (poolType) {\n case 'Weighted':\n case 'LiquidityBootstrapping':\n case 'Investment':\n return weightedCalls;\n case 'Stable':\n case 'StablePhantom':\n case 'MetaStable':\n case 'ComposableStable':\n return stableCalls;\n case 'GyroE':\n if (poolTypeVersion === 2) {\n return gyroECalls;\n } else {\n return do_nothing;\n }\n case 'Gyro2':\n if (poolTypeVersion === 2) {\n // Gyro2 V2 has tokenRates same as GyroE V2\n return gyroECalls;\n } else {\n return do_nothing;\n }\n case 'AaveLinear':\n if (poolTypeVersion === 1) {\n return linearCalls;\n } else {\n return do_nothing;\n }\n default:\n return do_nothing;\n }\n};\n\nconst merge = (pool: T, result: OnchainData) => ({\n ...pool,\n tokens: result.poolTokens\n ? pool.tokens.map((token) => {\n const idx = result.poolTokens[0]\n .map((t) => t.toLowerCase())\n .indexOf(token.address);\n const wrappedToken =\n pool.wrappedIndex && pool.tokensList[pool.wrappedIndex];\n const tokenDecimals =\n token.decimals === undefined ? 18 : token.decimals;\n return {\n ...token,\n balance: formatFixed(result.poolTokens[1][idx], tokenDecimals),\n weight:\n (result.weights && formatFixed(result.weights[idx], 18)) ||\n token.weight,\n priceRate:\n (result.wrappedTokenRate &&\n wrappedToken &&\n wrappedToken.toLowerCase() === token.address.toLowerCase() &&\n formatFixed(result.wrappedTokenRate, 18)) ||\n token.priceRate,\n } as SubgraphToken;\n })\n : pool.tokens,\n totalShares: result.totalShares\n ? formatFixed(result.totalShares, 18)\n : pool.totalShares,\n swapFee: result.swapFee ? formatFixed(result.swapFee, 18) : pool.swapFee,\n amp:\n (result.amp &&\n result.amp[0] &&\n formatFixed(result.amp[0], String(result.amp[2]).length - 1)) ||\n pool.amp,\n lowerTarget:\n (result.targets && formatFixed(result.targets[0], 18)) || pool.lowerTarget,\n upperTarget:\n (result.targets && formatFixed(result.targets[1], 18)) || pool.upperTarget,\n tokenRates:\n (result.tokenRates &&\n result.tokenRates.map((rate) => formatFixed(rate, 18))) ||\n pool.tokenRates,\n // rate: result.rate,\n // isPaused: result.isPaused,\n // inRecoveryMode: result.inRecoveryMode,\n // scalingFactors: result.scalingFactors,\n});\n\nexport const fetchOnChainPoolData = async (\n pools: {\n id: string;\n address: string;\n poolType: string;\n poolTypeVersion?: number;\n }[],\n vaultAddress: string,\n provider: Provider,\n batchSize = 1024\n): Promise<{ [id: string]: OnchainData }> => {\n if (pools.length === 0) {\n return {};\n }\n\n const multicaller = new Multicaller3(abi, provider);\n\n pools.forEach(({ id, address, poolType, poolTypeVersion }) => {\n defaultCalls(id, address, vaultAddress, poolType, multicaller);\n poolTypeCalls(poolType, poolTypeVersion)(id, address, multicaller);\n });\n\n const results = (await multicaller.execute({}, batchSize)) as {\n [id: string]: OnchainData;\n };\n\n return results;\n};\n\nexport async function getOnChainBalances(\n subgraphPoolsOriginal: T[],\n _multiAddress: string,\n vaultAddress: string,\n provider: Provider,\n batchSize = 1024\n): Promise {\n if (subgraphPoolsOriginal.length === 0) return subgraphPoolsOriginal;\n\n const poolsWithOnchainData: T[] = [];\n\n const onchainData = (await fetchOnChainPoolData(\n subgraphPoolsOriginal,\n vaultAddress,\n provider,\n batchSize\n )) as { [id: string]: OnchainData };\n\n subgraphPoolsOriginal.forEach((pool) => {\n const data = onchainData[pool.id];\n poolsWithOnchainData.push(merge(pool, data));\n });\n\n return poolsWithOnchainData;\n}\n","import { PoolDataService, SubgraphPoolBase } from '@balancer-labs/sor';\nimport {\n OrderDirection,\n Pool_OrderBy,\n PoolsQueryVariables,\n SubgraphClient,\n} from '@/modules/subgraph/subgraph';\nimport { parseInt } from 'lodash';\nimport { getOnChainBalances } from './onChainData3';\nimport { Provider } from '@ethersproject/providers';\nimport {\n BalancerNetworkConfig,\n BalancerSdkSorConfig,\n GraphQLQuery,\n} from '@/types';\nimport { GraphQLArgs } from '@/lib/graphql/types';\nimport {\n GraphQLArgsBuilder,\n SubgraphArgsFormatter,\n} from '@/lib/graphql/args-builder';\n\nimport { Logger } from '@/lib/utils/logger';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function mapPools(pools: any[]): SubgraphPoolBase[] {\n return pools.map((pool) => ({\n ...pool,\n poolType: pool.poolType || '',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n tokens: (pool.tokens || []).map((token: any) => ({\n ...token,\n weight: token.weight || null,\n })),\n totalWeight: pool.totalWeight || undefined,\n amp: pool.amp || undefined,\n expiryTime: pool.expiryTime ? parseInt(pool.expiryTime) : undefined,\n unitSeconds: pool.unitSeconds ? parseInt(pool.unitSeconds) : undefined,\n principalToken: pool.principalToken || undefined,\n baseToken: pool.baseToken || undefined,\n }));\n}\n\nexport class SubgraphPoolDataService implements PoolDataService {\n private readonly defaultArgs: GraphQLArgs;\n constructor(\n private readonly client: SubgraphClient,\n private readonly provider: Provider,\n private readonly network: BalancerNetworkConfig,\n private readonly sorConfig?: BalancerSdkSorConfig,\n query?: GraphQLQuery\n ) {\n // Default args can be overwritten by passing in a queryArgs object to .getPools\n this.defaultArgs = query?.args || {\n orderBy: Pool_OrderBy.TotalLiquidity,\n orderDirection: OrderDirection.Desc,\n where: {\n swapEnabled: {\n eq: true,\n },\n totalShares: {\n gt: 0.000000000001,\n },\n },\n };\n }\n\n /**\n * Returns pools from the subgraph filtered by queryArgs with on-chain balances\n *\n * @param queryArgs\n * @returns SubgraphPoolBase[]\n */\n async getPools(queryArgs?: GraphQLArgs): Promise {\n const pools = await this.getSubgraphPools(queryArgs);\n\n const filteredPools = pools.filter((p) => {\n if (!this.network.poolsToIgnore) return true;\n const index = this.network.poolsToIgnore.findIndex(\n (id) => id.toLowerCase() === p.id.toLowerCase()\n );\n return index === -1;\n });\n\n const mapped = mapPools(filteredPools);\n\n if (this.sorConfig && this.sorConfig.fetchOnChainBalances === false) {\n return mapped;\n }\n\n const logger = Logger.getInstance();\n logger.time(`fetching on-chain balances for ${mapped.length} pools`);\n\n const onChainBalances = await getOnChainBalances(\n mapped,\n this.network.addresses.contracts.multicall,\n this.network.addresses.contracts.vault,\n this.provider,\n this.network.multicallBatchSize\n );\n\n logger.timeEnd(`fetching on-chain balances for ${mapped.length} pools`);\n\n return onChainBalances;\n }\n\n private async getSubgraphPools(queryArgs?: GraphQLArgs) {\n const formattedQuery = new GraphQLArgsBuilder(\n queryArgs || this.defaultArgs\n ).format(new SubgraphArgsFormatter()) as PoolsQueryVariables;\n\n if (formattedQuery.first) {\n const { pools } = await this.client.Pools(formattedQuery);\n return pools;\n }\n\n const { pool0, pool1000, pool2000 } = await this.client.AllPools(\n formattedQuery\n );\n\n const pools = [...pool0, ...pool1000, ...pool2000];\n\n return pools;\n }\n}\n","import { TokenPriceService } from '@balancer-labs/sor';\nimport { SubgraphClient } from '@/modules/subgraph/subgraph';\nimport { keyBy } from 'lodash';\n\nexport class SubgraphTokenPriceService implements TokenPriceService {\n private readonly weth: string;\n\n constructor(private readonly client: SubgraphClient, weth: string) {\n //the subgraph addresses are all toLowerCase\n this.weth = weth.toLowerCase();\n }\n\n public async getNativeAssetPriceInToken(\n tokenAddress: string\n ): Promise {\n const ethPerToken = await this.getLatestPriceInEthFromSubgraph(\n tokenAddress\n );\n\n if (!ethPerToken) {\n throw Error('No price found in the subgraph');\n }\n\n // We want the price of 1 ETH in terms of the token base units\n return `${1 / ethPerToken}`;\n }\n\n public async getLatestPriceInEthFromSubgraph(\n tokenAddress: string\n ): Promise {\n tokenAddress = tokenAddress.toLowerCase();\n\n const { latestPrices } = await this.client.TokenLatestPrices({\n where: { asset_in: [tokenAddress, this.weth] },\n });\n const pricesKeyedOnId = keyBy(latestPrices, 'id');\n\n //the ids are set as ${asset}-${pricingAsset}\n //first try to find an exact match\n if (pricesKeyedOnId[`${tokenAddress}-${this.weth}`]) {\n return parseFloat(pricesKeyedOnId[`${tokenAddress}-${this.weth}`].price);\n }\n\n //no exact match, try to traverse the path\n const matchingLatestPrices = latestPrices.filter(\n (price) => price.asset === tokenAddress\n );\n\n //pick the first one we match on.\n //There is no timestamp on latestPrice, should get introduced to allow for sorting by latest\n for (const tokenPrice of matchingLatestPrices) {\n const pricingAssetPricedInEth =\n pricesKeyedOnId[`${tokenPrice.pricingAsset}-${this.weth}`];\n\n //1 BAL = 20 USDC, 1 USDC = 0.00025 ETH, 1 BAL = 20 * 0.00025\n if (pricingAssetPricedInEth) {\n return (\n parseFloat(tokenPrice.price) *\n parseFloat(pricingAssetPricedInEth.price)\n );\n }\n }\n\n return null;\n }\n}\n","import { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { BalancerNetworkConfig, BalancerSdkConfig } from '@/types';\nexport function getNetworkConfig(\n config: BalancerSdkConfig\n): BalancerNetworkConfig {\n if (typeof config.network === 'number') {\n const networkConfig = BALANCER_NETWORK_CONFIG[config.network];\n\n return {\n ...networkConfig,\n urls: {\n ...networkConfig.urls,\n subgraph: config.customSubgraphUrl ?? networkConfig.urls.subgraph,\n },\n tenderly: config.tenderly,\n };\n }\n\n return {\n ...config.network,\n urls: {\n ...config.network.urls,\n subgraph: config.customSubgraphUrl ?? config.network.urls.subgraph,\n },\n tenderly: config.network.tenderly,\n };\n}\n","export const POOLS_TO_IGNORE = [\n '0x00c2a4be503869fa751c2dbcb7156cc970b5a8da000000000000000000000477',\n '0x02d928e68d8f10c0358566152677db51e1e2dc8c00000000000000000000051e',\n '0x04248aabca09e9a1a3d5129a7ba05b7f17de768400000000000000000000050e',\n '0x05513ca725b6ce035ca2641075474eb469f05f4c00020000000000000000041f',\n '0x0a0fb4ff697de5ac5b6770cd8ee1b72af80b57cf000000000000000000000496',\n '0x0afbd58beca09545e4fb67772faf3858e610bcd00000000000000000000004b9',\n '0x0d05aac44ac7dd3c7ba5d50be93eb884a057d23400000000000000000000051c',\n '0x11839d635e2f0270da37e8ef4324d4d5d54329570002000000000000000004d8',\n '0x126e7643235ec0ab9c103c507642dc3f4ca23c66000000000000000000000468',\n '0x133d241f225750d2c92948e464a5a80111920331000000000000000000000476',\n '0x159cb00338fb63f263fd6f621df619cef71da9540000000000000000000004d5',\n '0x173063a30e095313eee39411f07e95a8a806014e0002000000000000000003ab',\n '0x1bd2f176a812e312077bca87e37c08432bb09f3e0000000000000000000005a1',\n '0x20b156776114e8a801e9767d90c6ccccc8adf398000000000000000000000499',\n '0x246ffb4d928e394a02e45761fecdba6c2e79b8eb000000000000000000000541',\n '0x25accb7943fd73dda5e23ba6329085a3c24bfb6a000200000000000000000387',\n '0x26c2b83fc8535deead276f5cc3ad9c1a2192e02700020000000000000000056b',\n '0x2b218683178d029bab6c9789b1073aa6c96e517600000000000000000000058c',\n '0x2ba7aa2213fa2c909cd9e46fed5a0059542b36b00000000000000000000003a3',\n '0x2bbf681cc4eb09218bee85ea2a5d3d13fa40fc0c0000000000000000000000fd',\n '0x2e52c64fd319e380cdbcfc4577ea1fda558a32e40002000000000000000005ba',\n '0x2f4eb100552ef93840d5adc30560e5513dfffacb000000000000000000000334',\n '0x2ff1a9dbdacd55297452cfd8a4d94724bc22a5f7000000000000000000000484',\n '0x3035917be42af437cbdd774be26b9ec90a2bd677000200000000000000000543',\n '0x331d50e0b00fc1c32742f151e56b9b616227e23e00000000000000000000047c',\n '0x334c96d792e4b26b841d28f53235281cec1be1f200020000000000000000038a',\n '0x335d1709d4da9aca59d16328db5cd4ea66bfe06b0000000000000000000004d6',\n '0x395d8a1d9ad82b5abe558f8abbfe183b27138af40000000000000000000004e5',\n '0x3bb22fc9033b802f2ac47c18885f63476f158afc000000000000000000000483',\n '0x3c640f0d3036ad85afa2d5a9e32be651657b874f00000000000000000000046b',\n '0x3cdae4f12a67ba563499e102f309c73213cb241c000000000000000000000335',\n '0x3dbb8d974b82e82ce79c20c0f5995f4f1f533ede000000000000000000000470',\n '0x3f7a7fd7f214be45ec26820fd01ac3be4fc75aa70002000000000000000004c5',\n '0x3fcb7085b8f2f473f80bf6d879cae99ea4de934400000000000000000000056d',\n '0x41503c9d499ddbd1dcdf818a1b05e9774203bf46000000000000000000000594',\n '0x4228290ee9cab692938ff0b4ba303fbcdb68e9f200020000000000000000057d',\n '0x454ed96955d04d2f5cdd05e0fd1c77975bfe5307000000000000000000000410',\n '0x481c5fc05d63a58aa2f0f2aa417c021b5d419cb200000000000000000000056a',\n '0x483006684f422a9448023b2382615c57c5ecf18f000000000000000000000488',\n '0x4a82b580365cff9b146281ab72500957a849abdc000000000000000000000494',\n '0x4c81255cc9ed7062180ea99962fe05ac0d57350b0000000000000000000005a3',\n '0x4c8d2e60863e8d7e1033eda2b3d84e92a641802000000000000000000000040f',\n '0x4cbde5c4b4b53ebe4af4adb85404725985406163000000000000000000000595',\n '0x4ce0bd7debf13434d3ae127430e9bd4291bfb61f00020000000000000000038b',\n '0x4ce277df0feb5b4d07a0ca2adcf5326e4005239d000000000000000000000518',\n '0x4fd4687ec38220f805b6363c3c1e52d0df3b5023000200000000000000000473',\n '0x4fd63966879300cafafbb35d157dc5229278ed230000000000000000000000e9',\n '0x50cf90b954958480b8df7958a9e965752f62712400000000000000000000046f',\n '0x53bc3cba3832ebecbfa002c12023f8ab1aa3a3a0000000000000000000000411',\n '0x5a6a8cffb4347ff7fc484bf5f0f8a2e234d34255000200000000000000000275',\n '0x5b3240b6be3e7487d61cd1afdfc7fe4fa1d81e6400000000000000000000037b',\n '0x60683b05e9a39e3509d8fdb9c959f23170f8a0fa000000000000000000000489',\n '0x60d604890feaa0b5460b28a424407c24fe89374a0000000000000000000004fc',\n '0x639883476960a23b38579acfd7d71561a0f408cf000200000000000000000505',\n '0x652d486b80c461c397b0d95612a404da936f3db30000000000000000000000e7',\n '0x6667c6fa9f2b3fc1cc8d85320b62703d938e43850000000000000000000004fb',\n '0x6a1eb2e9b45e772f55bd9a34659a04b6f75da68700000000000000000000040d',\n '0x6c56e72c551b5ac4bf54a620a76077ca768c8fe40002000000000000000004da',\n '0x70b7d3b3209a59fb0400e17f67f3ee8c37363f4900020000000000000000018f',\n '0x7337224d59cb16c2dc6938cd45a7b2c60c865d6a0000000000000000000004d4',\n '0x74cbfaf94a3577c539a9dcee9870a6349a33b34f000000000000000000000534',\n '0x779d01f939d78a918a3de18cc236ee89221dfd4e0000000000000000000004c7',\n '0x7b50775383d3d6f0215a8f290f2c9e2eebbeceb20000000000000000000000fe',\n '0x804cdb9116a10bb78768d3252355a1b18067bf8f0000000000000000000000fb',\n '0x813e3fe1761f714c502d1d2d3a7cceb33f37f59d00000000000000000000040c',\n '0x82698aecc9e28e9bb27608bd52cf57f704bd1b83000000000000000000000336',\n '0x8a6b25e33b12d1bb6929a8793961076bd1f9d3eb0002000000000000000003e8',\n '0x8e6ec57a822c2f527f2df7c7d7d361df3e7530a1000000000000000000000498',\n '0x8f4063446f5011bc1c9f79a819efe87776f23704000000000000000000000197',\n '0x9001cbbd96f54a658ff4e6e65ab564ded76a543100000000000000000000050a',\n '0x9210f1204b5a24742eba12f710636d76240df3d00000000000000000000000fc',\n '0x9516a2d25958edb8da246a320f2c7d94a0dbe25d000000000000000000000519',\n '0x959216bb492b2efa72b15b7aacea5b5c984c3cca000200000000000000000472',\n '0x968024662b9566b42d78af23a0f441bc8723fa83000200000000000000000418',\n '0x99c88ad7dc566616548adde8ed3effa730eb6c3400000000000000000000049a',\n '0x9b1c8407a360443a9e5eca004713e4088fab8ac0000000000000000000000497',\n '0x9b692f571b256140a39a34676bffa30634c586e100000000000000000000059d',\n '0x9d7f992c900fbea0ec314bdd71b7cc1becf76a33000200000000000000000573',\n '0x9fb771d530b0ceba5160f7bfe2dd1e8b8aa1340300000000000000000000040e',\n '0xa13a9247ea42d743238089903570127dda72fe4400000000000000000000035d',\n '0xa1697f9af0875b63ddc472d6eebada8c1fab85680000000000000000000004f9',\n '0xa3823e50f20982656557a4a6a9c06ba5467ae9080000000000000000000000e6',\n '0xa718042e5622099e5f0ace4e7122058ab39e1bbe000200000000000000000475',\n '0xa8b103a10a94f4f2d7ed2fdcd5545e807557330700000000000000000000048e',\n '0xac5b4ef7ede2f2843a704e96dcaa637f4ba3dc3f00000000000000000000051d',\n '0xac976bb42cb0c85635644e8c7c74d0e0286aa61c0000000000000000000003cb',\n '0xae37d54ae477268b9997d4161b96b8200755935c000000000000000000000337',\n '0xae8535c23afedda9304b03c68a3563b75fc8f92b0000000000000000000005a0',\n '0xb0f75e97a114a4eb4a425edc48990e6760726709000000000000000000000198',\n '0xb5e3de837f869b0248825e0175da73d4e8c3db6b000200000000000000000474',\n '0xb841b062ea8ccf5c4cb78032e91de4ae875560420002000000000000000005b7',\n '0xb9bd68a77ccf8314c0dfe51bc291c77590c4e9e6000200000000000000000385',\n '0xbb6881874825e60e1160416d6c426eae65f2459e000000000000000000000592',\n '0xbc0f2372008005471874e426e86ccfae7b4de79d000000000000000000000485',\n '0xbf2ef8bdc2fc0f3203b3a01778e3ec5009aeef3300000000000000000000058d',\n '0xbfa413a2ff0f20456d57b643746133f54bfe0cd20000000000000000000004c3',\n '0xc2b021133d1b0cf07dba696fd5dd89338428225b000000000000000000000598',\n '0xc443c15033fcb6cf72cc24f1bda0db070ddd9786000000000000000000000593',\n '0xc50d4347209f285247bda8a09fc1c12ce42031c3000000000000000000000590',\n '0xc5dc1316ab670a2eed5716d7f19ced321191f38200000000000000000000056e',\n '0xc8c79fcd0e859e7ec81118e91ce8e4379a481ee6000000000000000000000196',\n '0xcaa052584b462198a5a9356c28bce0634d65f65c0000000000000000000004db',\n '0xcbfa4532d8b2ade2c261d3dd5ef2a2284f7926920000000000000000000004fa',\n '0xcfae6e251369467f465f13836ac8135bd42f8a56000000000000000000000591',\n '0xd4e7c1f3da1144c9e2cfd1b015eda7652b4a439900000000000000000000046a',\n '0xd6e355036f41dc261b3f1ed3bbc6003e87aadb4f000000000000000000000495',\n '0xd7edb56f63b2a0191742aea32df1f98ca81ed9c600000000000000000000058e',\n '0xd997f35c9b1281b82c8928039d14cddab5e13c2000000000000000000000019c',\n '0xdba274b4d04097b90a72b62467d828cefd708037000000000000000000000486',\n '0xdc063deafce952160ec112fa382ac206305657e60000000000000000000004c4',\n '0xdec02e6642e2c999af429f5ce944653cad15e093000000000000000000000469',\n '0xe03af00fabe8401560c1ff7d242d622a5b601573000000000000000000000493',\n '0xe0fcbf4d98f0ad982db260f86cf28b49845403c5000000000000000000000504',\n '0xe2d16b0a39f3fbb4389a0e8f1efcbecfb3d1e6e10000000000000000000005a7',\n '0xe4dc3c1998ac693d68f4c77476d7c815694c3e94000200000000000000000416',\n '0xe6bcc79f328eec93d4ec8f7ed35534d9ab549faa0000000000000000000000e8',\n '0xe8c56405bc405840154d9b572927f4197d110de10000000000000000000005a4',\n '0xeb486af868aeb3b6e53066abc9623b1041b42bc000000000000000000000046c',\n '0xeb567dde03f3da7fe185bdacd5ab495ab220769d000000000000000000000548',\n '0xec3626fee40ef95e7c0cbb1d495c8b67b34d398300000000000000000000053d',\n '0xf22ff21e17157340575158ad7394e068048dd98b0000000000000000000004b8',\n '0xf57c794f42da72b38c8f610ff3b5e8502e48cbde00000000000000000000055c',\n '0xf71d0774b214c4cf51e33eb3d30ef98132e4dbaa00000000000000000000046e',\n '0xfa24a90a3f2bbe5feea92b95cd0d14ce709649f900000000000000000000058f',\n '0xfd11ccdbdb7ab91cb9427a6d6bf570c95876d1950000000000000000000004c2',\n '0xfebb0bbf162e64fb9d0dfe186e517d84c395f016000000000000000000000502',\n '0xfef969638c52899f91781f1be594af6f40b99bad00000000000000000000047b',\n '0x02e139d53ebf4033bf78ab66c6a1e7f1f204487f0002000000000000000009f9',\n '0x03090a9811181a2afe830a3a0b467698ccf3a8b1000000000000000000000bf5',\n '0x0320c1c5b6df19a194d48882aaec1c72940081d9000000000000000000000a7d',\n '0x04b54ea92d73de2d62d651db7d9778f0c49157d8000200000000000000000ba2',\n '0x0503dd6b2d3dd463c9bef67fb5156870af63393e00000000000000000000042e',\n '0x0889b240a5876aae745ac19f1771853671dc5d36000000000000000000000b3f',\n '0x0bc54e914f53f98d16035f4f0d948f3e09c2fac0000200000000000000000bac',\n '0x0c06e87c7b88d998f645b91c1f53b51294b12bca000100000000000000000bb9',\n '0x10b040038f87219d9b42e025e3bd9b8095c87dd9000000000000000000000b11',\n '0x117a3d474976274b37b7b94af5dcade5c90c6e85000000000000000000000aca',\n '0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000a5f',\n '0x1379b816b9be611431d693290289c204720ca56d000100000000000000000b6f',\n '0x150e7b885bdfce974f2abe88a72fdbd692175c6f0002000000000000000009fd',\n '0x178e029173417b1f9c8bc16dcec6f697bc323746000000000000000000000758',\n '0x1aafc31091d93c3ff003cff5d2d8f7ba2e7284250000000000000000000003b3',\n '0x216690738aac4aa0c4770253ca26a28f0115c595000000000000000000000b2c',\n '0x216d6db0c28204014618482c369d7fbf0a8f3232000100000000000000000b60',\n '0x230ecdb2a7cee56d6889965a023aa0473d6da507000000000000000000000bf3',\n '0x252ff6a3a6fd7b5e8e999de8e3f5c3b306ed1401000200000000000000000bec',\n '0x25e57f4612912614e6c99616bd2abb9b5ae71e99000000000000000000000bf0',\n '0x2645b13fd2c5295296e94a76280b968bdcbbdfed000000000000000000000c11',\n '0x284eb68520c8fa83361c1a3a5910aec7f873c18b000000000000000000000ac9',\n '0x2c8dbe8eb86135d9f2f26d196748c088d47f73e7000200000000000000000a29',\n '0x31bccf9e28b94e5dacebaa67fe8bc1603cecd904000000000000000000000a01',\n '0x341068a547c3cde3c09e338714010dd01b32f93f000200000000000000000a34',\n '0x3db543faf7a92052de7860c5c9debabee59ed5bd000000000000000000000a62',\n '0x3dd0843a028c86e0b760b1a76929d1c5ef93a2dd00000000000000000000070d',\n '0x3efb91c4f9b103ee45885695c67794591916f34e000200000000000000000b43',\n '0x402cfdb7781fa85d52f425352661128250b79e12000000000000000000000be3',\n '0x43894de14462b421372bcfe445fa51b1b4a0ff3d000000000000000000000b36',\n '0x4739e50b59b552d490d3fdc60d200977a38510c0000000000000000000000b10',\n '0x48e6b98ef6329f8f0a30ebb8c7c960330d64808500000000000000000000075b',\n '0x4a0b73f0d13ff6d43e304a174697e3d5cfd310a400020000000000000000091c',\n '0x4a77ef015ddcd972fd9ba2c7d5d658689d090f1a000000000000000000000b38',\n '0x4ae3661afa119892f0cc8c43edaf6a94989ac171000000000000000000000c06',\n '0x4ccb966d8246240afb7a1a24628efb930870b1c40002000000000000000009fc',\n '0x52cc8389c6b93d740325729cc7c958066cee4262000000000000000000000b0f',\n '0x5b77107fcdf2b41903bab2bc555d4fc14cf7667d000000000000000000000b32',\n '0x5bae72b75caab1f260d21bc028c630140607d6e8000000000000000000000ac6',\n '0x600bd01b6526611079e12e1ff93aba7a3e34226f0000000000000000000009e4',\n '0x63ce19ccd39930725b8a3d2733627804718ab83d000000000000000000000bf2',\n '0x64efad69f099813021b41f4cac6e749fd55e188f000000000000000000000b39',\n '0x6933ec1ca55c06a894107860c92acdfd2dd8512f000000000000000000000428',\n '0x6abe4e7a497b8293c258389c1b00d177e4f257ed00010000000000000000080d',\n '0x6c8c7fc50247a47038015eb1fd5dc105d05dafba000200000000000000000ba0',\n '0x7079a25dec33be61bbd81b2fb69b468e80d3e72c0000000000000000000009ff',\n '0x71bd10c2a590b5858f5576550c163976a48af906000000000000000000000b27',\n '0x7c82a23b4c48d796dee36a9ca215b641c6a8709d000000000000000000000acd',\n '0x7f4f4942f2a14b6ab7b08b10ada1aacede4ee8d4000200000000000000000b44',\n '0x86aef31951e0a3a54333bd9e72f9a95587d058c5000200000000000000000912',\n '0x882c7a84231484b3e9f3fd45ac04b1eb5d35b076000200000000000000000a91',\n '0x894c82800526e0391e709c0983a5aea3718b7f6d000000000000000000000ac5',\n '0x89b28a9494589b09dbccb69911c189f74fdadc5a000000000000000000000b33',\n '0x89bb15076c9f2d86aa98ec6cffc1a71e31c38953000000000000000000000bf1',\n '0x89f1146fee52b5d9166e9c83cc388b6d8f69f1380001000000000000000009e7',\n '0x8a819a4cabd6efcb4e5504fe8679a1abd831dd8f00000000000000000000042d',\n '0x8b58a1e7fff52001c22386c2918d45938a6a9be30001000000000000000008d9',\n '0x8b8225bfedebaf1708c55743acb4ad43fd4d0f21000200000000000000000918',\n '0x8fbd0f8e490735cfc3abf4f29cbddd5c3289b9a7000000000000000000000b5b',\n '0x8fd39252d683fdb60bddd4df4b53c9380b496d59000200000000000000000b45',\n '0x9321e2250767d79bab5aa06daa8606a2b3b7b4c5000000000000000000000bf4',\n '0x949a12b95ec5b80c375b98963a5d6b33b0d0efff0002000000000000000009fe',\n '0x9a020bdc2faff5bd24c6acc2020d01ff9f2c627a000000000000000000000ae2',\n '0x9cf9358300e34bf9373d30129a1e718d8d058b54000200000000000000000913',\n '0x9e34631547adcf2f8cefa0f5f223955c7b137571000000000000000000000ad5',\n '0xa5a935833f6a5312715f182733eab088452335d7000100000000000000000bee',\n '0xa5fe91dde37d8bf2dacacc0168b115d28ed03f84000000000000000000000b35',\n '0xa8bf1c584519be0184311c48adbdc4c15cb2e8c1000000000000000000000bf6',\n '0xab269164a10fab22bc87c39946da06c870b172d6000000000000000000000bfc',\n '0xac2cae8d2f78a4a8f92f20dbe74042cd0a8d5af3000000000000000000000be2',\n '0xae646817e458c0be890b81e8d880206710e3c44e000000000000000000000acb',\n '0xaef2c171dbe64b0c18977e16e70bfd29d4ee0256000000000000000000000ac8',\n '0xb0c830dceb4ef55a60192472c20c8bf19df03488000000000000000000000be1',\n '0xb266ac3b7c98d7bcb28731dac0ef42dba1b276be000000000000000000000be4',\n '0xb371aa09f5a110ab69b39a84b5469d29f9b22b76000000000000000000000b37',\n '0xb3d658d5b95bf04e2932370dd1ff976fe18dd66a000000000000000000000ace',\n '0xb54b2125b711cd183edd3dd09433439d5396165200000000000000000000075e',\n '0xb59be8f3c85a9dd6e2899103b6fbf6ea405b99a4000000000000000000000b34',\n '0xb878ecce26838fbba4f78cb5b791a0e09152c067000000000000000000000427',\n '0xb973ca96a3f0d61045f53255e319aedb6ed4924000000000000000000000042f',\n '0xbd4e35784c832d0f9049b54cb3609e5907c5b495000100000000000000000b14',\n '0xc55ec796a4debe625d95436a3531f4950b11bdcf000000000000000000000b3e',\n '0xc7e6389e364f4275eb442ef215ed21877028e2af000000000000000000000ac7',\n '0xc83b55bbd005f1f84906545fcdb145dee53523e0000200000000000000000b30',\n '0xcb21a9e647c95127ed784626485b3104cb28d0e7000000000000000000000425',\n '0xd00f9ca46ce0e4a63067c4657986f0167b0de1e5000000000000000000000b42',\n '0xd2f3b9e67c69762dd1c88f1d3dadd1649a190761000200000000000000000bf7',\n '0xd4accb350f9cf59fe3cf7a5ee6ed9ace6a568ea9000200000000000000000b75',\n '0xda1cd1711743e57dd57102e9e61b75f3587703da000000000000000000000acc',\n '0xdae301690004946424e41051ace1791083be42a1000000000000000000000b40',\n '0xde0a77ab6689b980c30306b10f9131a007e1af81000200000000000000000ba1',\n '0xe051605a83deae38d26a7346b100ef1ac2ef8a0b0000000000000000000003ce',\n '0xe1fb90d0d3b47e551d494d7ebe8f209753526b01000000000000000000000ac4',\n '0xe2272cddb2cc408e79e02a73d1db9acc24a843d5000200000000000000000ba7',\n '0xe2dc0e0f2c358d6e31836dee69a558ab8d1390e70000000000000000000009fa',\n '0xe4885ed2818cc9e840a25f94f9b2a28169d1aea7000000000000000000000b29',\n '0xe6909c2f18a29d97217a6146f045e1780606991f000100000000000000000bfe',\n '0xe78b25c06db117fdf8f98583cdaaa6c92b79e917000000000000000000000b2b',\n '0xea11645ac7d8f2def94c9d8d86bd766296c9b6b6000000000000000000000b3a',\n '0xeb480dbbdd921cd6c359e4cc4c65ddea6395e2a1000200000000000000000946',\n '0xed35f28f837e96f81240ebb82e0e3f518c7e8a2f000100000000000000000bb5',\n '0xf0211cceebe6fcc45052b4e57ee95d233f5669d2000100000000000000000c01',\n '0xf22a66046b5307842f21b311ecb4c462c24c0635000000000000000000000b15',\n '0xf28f17be00f8ca3c9b7f66a4aad5513757fb3341000200000000000000000b5a',\n '0xf42ed61450458ee4620f5ef4f29adb25a6ef0fb6000000000000000000000bf8',\n '0xf48f01dcb2cbb3ee1f6aab0e742c2d3941039d56000000000000000000000445',\n '0xf93579002dbe8046c43fefe86ec78b1112247bb8000000000000000000000759',\n '0xf984eb2b8a7ef780245a797a2fccd82f346409ca000000000000000000000a59',\n '0xfa2c0bd8327c99db5bde4c9e9e5cbf30946351bb000000000000000000000948',\n '0xff4ce5aaab5a627bf82f4a571ab1ce94aa365ea600000000000000000000075a',\n '0x1ac55c31dac78ca943cb8ebfca5945ce09e036e2000000000000000000000024',\n '0x225e0047671939a8d78e08ebd692788abe63f15c000000000000000000000009',\n '0x41211bba6d37f5a74b22e667533f080c7c7f3f1300000000000000000000000b',\n '0x4de21b365d6543661d0e105e579a34b963862497000200000000000000000045',\n '0x581ec1f5e7ced12b186deae32256adb53bdd5b08000000000000000000000001',\n '0x66f33ae36dd80327744207a48122f874634b3ada000100000000000000000013',\n '0xa3ed6f78edc29f69df8a0d16b1d1ccf9871f918c000000000000000000000032',\n '0xa611a551b95b205ccd9490657acf7899daee5db700000000000000000000002e',\n '0xb95829adbacd8af89e291dee78bc09e24de51d6b000000000000000000000043',\n '0xb973ca96a3f0d61045f53255e319aedb6ed49240000200000000000000000011',\n '0xba1a5b19d09a79dada039b1f974015c5a989d5fd000100000000000000000046',\n '0xbb9cd48d33033f5effbedec9dd700c7d7e1dcf5000000000000000000000000e',\n '0xd16f72b02da5f51231fde542a8b9e2777a478c8800000000000000000000000f',\n '0xd4015683b8153666190e0b2bec352580ebc4caca00000000000000000000000d',\n '0xe15cac1df3621e001f76210ab12a7f1a1691481f000000000000000000000044',\n '0xe7f88d7d4ef2eb18fcf9dd7216ba7da1c46f3dd600000000000000000000000a',\n '0xf48f01dcb2cbb3ee1f6aab0e742c2d3941039d56000200000000000000000012',\n '0xfedb19ec000d38d92af4b21436870f115db22725000000000000000000000010',\n '0xffff76a3280e95dc855696111c2562da09db2ac000000000000000000000000c',\n '0x00fcd3d55085e998e291a0005cedecf58ac14c4000020000000000000000047f',\n '0x077794c30afeccdf5ad2abc0588e8cee7197b71a000000000000000000000352',\n '0x117a3d474976274b37b7b94af5dcade5c90c6e85000000000000000000000381',\n '0x11884da90fb4221b3aa288a7741c51ec4fc43b2f000000000000000000000353',\n '0x19b1c92631405a0a9495ccba0becf4f2e8e908bd000000000000000000000410',\n '0x1e550b7764da9638fdd32c8a701364de31f45ee800000000000000000000047c',\n '0x1fa7f727934226aedab636d62a084931b97d366b000000000000000000000411',\n '0x23ca0306b21ea71552b148cf3c4db4fc85ae19290000000000000000000000c9',\n '0x284eb68520c8fa83361c1a3a5910aec7f873c18b000000000000000000000380',\n '0x2a96254ca32020b20ed3506f8f75318da24709f9000200000000000000000456',\n '0x36942963e3b6f37ecc45a4e72349558514233f0000000000000000000000048a',\n '0x3f53a862919ccfa023cb6ace91378a79fb0f6bf500000000000000000000040f',\n '0x40af308e3d07ec769d85eb80afb116525ff4ac99000000000000000000000485',\n '0x418de00ae109e6f874d872658767866d680eaa1900000000000000000000047d',\n '0x45c4d1376943ab28802b995acffc04903eb5223f000000000000000000000470',\n '0x4689122d360c4725d244c5cfea22861333d862e6000100000000000000000468',\n '0x4739e50b59b552d490d3fdc60d200977a38510c0000000000000000000000409',\n '0x49a0e3334496442a9706e481617724e7e37eaa080000000000000000000003ff',\n '0x519cce718fcd11ac09194cff4517f12d263be067000000000000000000000382',\n '0x52cc8389c6b93d740325729cc7c958066cee4262000000000000000000000408',\n '0x567ecfcb22205d279bb8eed3e066989902bf03d5000000000000000000000452',\n '0x585d95df0231fa08aeee35ff0c16b92fd0ecdc3300020000000000000000045f',\n '0x5a7f39435fd9c381e4932fa2047c9a5136a5e3e7000000000000000000000400',\n '0x5bae72b75caab1f260d21bc028c630140607d6e8000000000000000000000350',\n '0x6cb787a419c3e6ee2e9ff365856c29cd10659113000000000000000000000474',\n '0x7c82a23b4c48d796dee36a9ca215b641c6a8709d000000000000000000000406',\n '0x81fc12c60ee5b753cf5fd0adc342dfb5f3817e3200000000000000000000035d',\n '0x894c82800526e0391e709c0983a5aea3718b7f6d00000000000000000000034f',\n '0x970712708a08e8fb152be4d81b2dc586923f5369000200000000000000000479',\n '0x9bf7c3b63c77b4b4f2717776f15a4bec1b532a280000000000000000000000c8',\n '0x9cebf13bb702f253abf1579294694a1edad00eaa000000000000000000000486',\n '0x9e34631547adcf2f8cefa0f5f223955c7b137571000000000000000000000407',\n '0x9fb7d6dcac7b6aa20108bad226c35b85a9e31b63000200000000000000000412',\n '0xa1ea76c42b2938cfa9abea12357881006c52851300000000000000000000048f',\n '0xa50f89e9f439fde2a6fe05883721a00475da3c4500000000000000000000048b',\n '0xa612b6aed2e7ca1a3a4f23fbca9128461bbb7718000000000000000000000274',\n '0xa8af146d79ac0bb981e4e0d8b788ec5711b1d5d000000000000000000000047b',\n '0xad28940024117b442a9efb6d0f25c8b59e1c950b00000000000000000000046f',\n '0xae646817e458c0be890b81e8d880206710e3c44e00000000000000000000039d',\n '0xaef2c171dbe64b0c18977e16e70bfd29d4ee0256000000000000000000000351',\n '0xbbf9d705b75f408cfcaee91da32966124d2c6f7d00000000000000000000047e',\n '0xbd724eb087d4cc0f61a5fed1fffaf937937e14de000000000000000000000473',\n '0xbe0f30217be1e981add883848d0773a86d2d2cd4000000000000000000000471',\n '0xc46be4b8bb6b5a3d3120660efae9c5416318ed40000000000000000000000472',\n '0xc69771058481551261709d8db44977e9afde645000010000000000000000042a',\n '0xc6eee8cb7643ec2f05f46d569e9ec8ef8b41b389000000000000000000000475',\n '0xcba9ff45cfb9ce238afde32b0148eb82cbe635620000000000000000000003fd',\n '0xcf8b555b7754556cf2ac2165e77ee23ed8517d7900020000000000000000045e',\n '0xd0dc20e6342db2de82692b8dc842301ff9121805000200000000000000000454',\n '0xd3d5d45f4edf82ba0dfaf061d230766032a10e07000200000000000000000413',\n '0xd6d20527c7b0669989ee082b9d3a1c63af742290000000000000000000000483',\n '0xda1cd1711743e57dd57102e9e61b75f3587703da0000000000000000000003fc',\n '0xe1fb90d0d3b47e551d494d7ebe8f209753526b0100000000000000000000034e',\n '0xee02583596aee94cccb7e8ccd3921d955f17982a00000000000000000000040a',\n '0xf984eb2b8a7ef780245a797a2fccd82f346409ca00000000000000000000034d',\n '0xff8f84e8c87532af96aef5582ee451572233678b000200000000000000000478',\n '0x054e7b0c73e1ee5aed6864fa511658fc2b54bcaa000000000000000000000015',\n '0x3f1a2c4a3a751f6626bd90ef16e104f0772d4d6b00020000000000000000001b',\n '0x7275c131b1f67e8b53b4691f92b0e35a4c1c6e22000000000000000000000010',\n '0xa154009870e9b6431305f19b09f9cfd7284d4e7a000000000000000000000013',\n '0xa1d14d922a575232066520eda11e27760946c991000000000000000000000012',\n '0xa826a114b0c7db4d1ff4a4be845a78998c64564c000000000000000000000008',\n '0xea67626e1f0b59e0d172a04f5702ef90bcdf440c00000000000000000000000f',\n '0xeb496161099d45b3ea4892408ef745c6182eb56e00000000000000000000000e',\n '0xece571847897fd61e764d455dc15cf1cd9de8d6f000000000000000000000014',\n '0xed3e2f496cbcd8e212192fb8d1499842f04a0d19000000000000000000000009',\n '0x02c9dcb975262719a61f9b40bdf0987ead9add3a000000000000000000000006',\n '0x16c9a4d841e88e52b51936106010f27085a529ec00000000000000000000000c',\n '0x32be2d0ddeaf3333501b24a28668ce373ba8e763000200000000000000000014',\n '0x32f03464fdf909fdf3798f87ff3712b10c59bd86000000000000000000000005',\n '0x4b718e0e2fea1da68b763cd50c446fba03ceb2ea00000000000000000000000b',\n '0x68a69c596b3839023c0e08d09682314f582314e5000200000000000000000011',\n '0x6f34a44fce1506352a171232163e7716dd073ade000200000000000000000015',\n '0x9e2d87f904862671eb49cb358e74284762cc9f42000200000000000000000013',\n '0xac4b72c01072a52b73ca71105504f1372efcce0d000000000000000000000003',\n '0xbfd65c6160cfd638a85c645e6e6d8acac5dac935000000000000000000000004',\n '0xe274c9deb6ed34cfe4130f8d0a8a948dea5bb28600000000000000000000000d',\n];\n","import { TokenPriceService } from '@balancer-labs/sor';\nimport { gql, request } from 'graphql-request';\nimport { Network } from '@/types';\n\nexport class ApiTokenPriceService implements TokenPriceService {\n private chainKey: string;\n\n private balancerApiUrl = 'https://api-v3.balancer.fi/';\n\n private tokenPriceQuery = gql`\n query queryTokenPrices($chainKey: GqlChain!) {\n tokenGetCurrentPrices(chains: [$chainKey]) {\n address\n price\n }\n }\n `;\n\n constructor(private readonly chainId: number) {\n this.chainKey = Network[chainId];\n }\n async getNativeAssetPriceInToken(tokenAddress: string): Promise {\n const { tokenGetCurrentPrices: tokenPrices } = await request(\n this.balancerApiUrl,\n this.tokenPriceQuery,\n {\n chainKey: this.chainKey,\n }\n );\n const tokenPriceUsd = (\n tokenPrices as { address: string; price: number }[]\n ).find(\n ({ address }) => address.toLowerCase() === tokenAddress.toLowerCase()\n );\n if (!tokenPriceUsd) {\n throw new Error('Token Price not found in the API');\n }\n const nativeAssetPriceUsd = (\n tokenPrices as { address: string; price: number }[]\n ).find(\n ({ address }) =>\n address.toLowerCase() ===\n NativeAssetAddress[this.chainKey as keyof typeof NativeAssetAddress]\n );\n if (!nativeAssetPriceUsd) {\n throw new Error('Native Token Price not found in the API');\n }\n const tokenPriceInNativeAsset =\n tokenPriceUsd.price / nativeAssetPriceUsd.price;\n return String(tokenPriceInNativeAsset);\n }\n}\n\nenum NativeAssetAddress {\n MAINNET = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n POLYGON = '0x0000000000000000000000000000000000001010',\n ARBITRUM = '0x912ce59144191c1204e64559fe8253a0e49e6548',\n AVALANCHE = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n BASE = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n FANTOM = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n GNOSIS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n OPTIMISM = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n ZKEVM = '0xa2036f0538221a77a3937f1379699f44945018d0',\n}\n","export function getCoingeckoApiBaseUrl(isDemoApi = true): string {\n if (isDemoApi) {\n return 'https://api.coingecko.com/api/v3/';\n }\n return 'https://pro-api.coingecko.com/api/v3/';\n}\n\nexport function getCoingeckoApiKeyHeaderName(isDemoApi = true): string {\n if (isDemoApi) {\n return 'x-cg-demo-api-key';\n }\n return 'x-cg-pro-api-key';\n}\n","import { TokenPriceService } from '@balancer-labs/sor';\nimport axios from 'axios';\nimport { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { Network, BalancerNetworkConfig, CoingeckoConfig } from '@/types';\nimport {\n getCoingeckoApiBaseUrl,\n getCoingeckoApiKeyHeaderName,\n} from '@/lib/utils/coingecko-api';\n\nexport class CoingeckoTokenPriceService implements TokenPriceService {\n private readonly urlBase: string;\n private readonly apiKey: string;\n private readonly coingeckoApiKeyHeaderName: string;\n constructor(private readonly chainId: number, coingecko: CoingeckoConfig) {\n this.urlBase = `${getCoingeckoApiBaseUrl(\n coingecko?.isDemoApiKey\n )}simple/token_price/${this.platformId}?vs_currencies=${\n this.nativeAssetId\n }`;\n this.coingeckoApiKeyHeaderName = getCoingeckoApiKeyHeaderName(\n coingecko?.isDemoApiKey\n );\n this.apiKey = coingecko.coingeckoApiKey;\n }\n\n public async getNativeAssetPriceInToken(\n tokenAddress: string\n ): Promise {\n const ethPerToken = await this.getTokenPriceInNativeAsset(tokenAddress);\n\n // We get the price of token in terms of ETH\n // We want the price of 1 ETH in terms of the token base units\n return `${1 / parseFloat(ethPerToken)}`;\n }\n\n /**\n * @dev Assumes that the native asset has 18 decimals\n * @param tokenAddress - the address of the token contract\n * @returns the price of 1 ETH in terms of the token base units\n */\n async getTokenPriceInNativeAsset(tokenAddress: string): Promise {\n const endpoint = `${this.urlBase}&contract_addresses=${tokenAddress}`;\n\n const { data } = await axios.get(endpoint, {\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '',\n },\n });\n\n if (\n data[tokenAddress.toLowerCase()] === undefined ||\n data[tokenAddress.toLowerCase()][this.nativeAssetId] === undefined\n ) {\n throw Error('No price returned from Coingecko');\n }\n\n return data[tokenAddress.toLowerCase()][this.nativeAssetId];\n }\n\n private get platformId(): string {\n const networkConfig: BalancerNetworkConfig =\n BALANCER_NETWORK_CONFIG[this.chainId as Network];\n return networkConfig.thirdParty.coingecko.platformId || '2';\n }\n\n private get nativeAssetId(): string {\n const networkConfig: BalancerNetworkConfig =\n BALANCER_NETWORK_CONFIG[this.chainId as Network];\n return networkConfig.thirdParty.coingecko.nativeAssetId || '';\n }\n}\n","import { SOR, SorConfig, TokenPriceService } from '@balancer-labs/sor';\nimport { Provider, JsonRpcProvider } from '@ethersproject/providers';\nimport { SubgraphPoolDataService } from './pool-data/subgraphPoolDataService';\nimport {\n SubgraphClient,\n createSubgraphClient,\n} from '@/modules/subgraph/subgraph';\nimport {\n BalancerNetworkConfig,\n BalancerSdkConfig,\n BalancerSdkSorConfig,\n CoingeckoConfig,\n} from '@/types';\nimport { SubgraphTokenPriceService } from './token-price/subgraphTokenPriceService';\nimport { getNetworkConfig } from '@/modules/sdk.helpers';\nimport { POOLS_TO_IGNORE } from '@/lib/constants/poolsToIgnore';\nimport { ApiTokenPriceService } from '@/modules/sor/token-price/apiTokenPriceService';\nimport { CoingeckoTokenPriceService } from '@/modules/sor/token-price/coingeckoTokenPriceService';\n\nexport class Sor extends SOR {\n constructor(sdkConfig: BalancerSdkConfig) {\n const network = getNetworkConfig(sdkConfig);\n const sorConfig = Sor.getSorConfig(sdkConfig);\n const sorNetworkConfig = Sor.getSorNetworkConfig(network);\n const provider = new JsonRpcProvider(\n sdkConfig.rpcUrl,\n sdkConfig.network as number\n );\n const subgraphClient = createSubgraphClient(network.urls.subgraph);\n\n const poolDataService = Sor.getPoolDataService(\n network,\n sorConfig,\n provider,\n subgraphClient\n );\n\n const tokenPriceService = Sor.getTokenPriceService(\n network,\n sorConfig,\n subgraphClient,\n sdkConfig.coingecko\n );\n\n super(provider, sorNetworkConfig, poolDataService, tokenPriceService);\n }\n\n private static getSorConfig(config: BalancerSdkConfig): BalancerSdkSorConfig {\n return {\n tokenPriceService: 'api',\n poolDataService: 'subgraph',\n fetchOnChainBalances: true,\n ...config.sor,\n };\n }\n\n private static getSorNetworkConfig(\n network: BalancerNetworkConfig\n ): SorConfig {\n return {\n ...network,\n vault: network.addresses.contracts.vault,\n weth: network.addresses.tokens.wrappedNativeAsset,\n lbpRaisingTokens: network.addresses.tokens?.lbpRaisingTokens,\n wETHwstETH: network.pools.wETHwstETH,\n connectingTokens: network.sorConnectingTokens,\n triPathMidPoolIds: network.sorTriPathMidPoolIds,\n };\n }\n\n private static getPoolDataService(\n network: BalancerNetworkConfig,\n sorConfig: BalancerSdkSorConfig,\n provider: Provider,\n subgraphClient: SubgraphClient\n ) {\n // For SOR we want to ignore all configured pools (for Vault/Simulation we don't)\n const allPoolsToIgnore = [\n ...(network.poolsToIgnore ?? []),\n ...POOLS_TO_IGNORE,\n ];\n return typeof sorConfig.poolDataService === 'object'\n ? sorConfig.poolDataService\n : new SubgraphPoolDataService(\n subgraphClient,\n provider,\n { ...network, poolsToIgnore: allPoolsToIgnore },\n sorConfig\n );\n }\n\n private static getTokenPriceService(\n network: BalancerNetworkConfig,\n sorConfig: BalancerSdkSorConfig,\n subgraphClient: SubgraphClient,\n coingeckoConfig?: CoingeckoConfig\n ): TokenPriceService {\n if (sorConfig.tokenPriceService === 'coingecko' && coingeckoConfig) {\n return new CoingeckoTokenPriceService(network.chainId, coingeckoConfig);\n }\n if (typeof sorConfig.tokenPriceService === 'object') {\n return sorConfig.tokenPriceService;\n } else if (sorConfig.tokenPriceService === 'subgraph') {\n return new SubgraphTokenPriceService(\n subgraphClient,\n network.addresses.tokens.wrappedNativeAsset\n );\n }\n return new ApiTokenPriceService(network.chainId);\n }\n}\n","import {\n QuerySimpleFlashSwapParameters,\n QuerySimpleFlashSwapResponse,\n SimpleFlashSwapParameters,\n SwapType,\n} from '../types';\nimport { queryBatchSwap } from '../queryBatchSwap';\nimport { BatchSwap } from '../types';\nimport { sum } from 'lodash';\n\nfunction checkSimpleFlashSwapParams(params: {\n poolIds: string[];\n assets: string[];\n}) {\n if (params.poolIds.length > 2) {\n throw new Error('Simple flash swap only supports a maximum of two pools');\n }\n\n if (params.assets.length > 2) {\n throw new Error(\n 'Simple flash swap only supports a maximum of to two assets (tokens)'\n );\n }\n}\n\nfunction createSwaps(\n poolIds: SimpleFlashSwapParameters['poolIds'],\n amount: string\n): BatchSwap['swaps'] {\n return [\n {\n poolId: poolIds[0],\n assetInIndex: 0,\n assetOutIndex: 1,\n amount,\n userData: '0x',\n },\n {\n poolId: poolIds[1],\n assetInIndex: 1,\n assetOutIndex: 0,\n amount: '0',\n userData: '0x',\n },\n ];\n}\n\nexport function convertSimpleFlashSwapToBatchSwapParameters({\n poolIds,\n assets,\n flashLoanAmount,\n walletAddress,\n}: SimpleFlashSwapParameters & {\n walletAddress: string;\n}): BatchSwap {\n checkSimpleFlashSwapParams({ poolIds, assets });\n\n const swaps = createSwaps(poolIds, flashLoanAmount);\n\n const funds = {\n sender: walletAddress,\n fromInternalBalance: false,\n recipient: walletAddress,\n toInternalBalance: false,\n };\n\n const limits = ['0', '0'];\n\n const deadline = '999999999999999999';\n\n return {\n kind: SwapType.SwapExactIn,\n swaps,\n assets,\n funds,\n limits,\n deadline,\n };\n}\n\nfunction deltaToExpectedProfit(delta: string) {\n return Number(delta) * -1;\n}\n\nfunction calcProfit(profits: string[]) {\n return sum(profits);\n}\n\n/**\n * Simple interface to test if a simple flash swap is valid and see potential profits.\n *\n * A \"simple\" flash swap is an arbitrage executed with only two tokens and two pools,\n * swapping in the first pool and then back in the second pool for a profit. For more\n * complex flash swaps, you will have to use the batch swap method.\n *\n * Learn more: A [Flash Swap](https://dev.balancer.fi/resources/swaps/flash-swaps).\n *\n * _NB: This method doesn't execute a flashSwap\n *\n * @param {SimpleFlashSwapParameters} params - BatchSwap information used for query.\n * @param {Contract} params.vaultContract - the ethersjs contract for the Balancer Vault.\n * @param {string} params.flashLoanAmount - initial input amount for the flash loan (first asset)\n * @param {string[]} params.poolIds - array of Balancer pool ids\n * @param {string[]} params.assets - array of token addresses\n * @returns {Promise} Returns an ethersjs transaction response\n */\nexport async function querySimpleFlashSwap(\n params: QuerySimpleFlashSwapParameters\n): Promise {\n checkSimpleFlashSwapParams(params);\n\n const [tokenAddress0, tokenAddress1] = params.assets;\n\n try {\n const deltas = await queryBatchSwap(\n params.vaultContract,\n SwapType.SwapExactIn,\n createSwaps(params.poolIds, params.flashLoanAmount),\n params.assets\n );\n\n const profits = {\n [tokenAddress0]: deltaToExpectedProfit(deltas[0]).toString(),\n [tokenAddress1]: deltaToExpectedProfit(deltas[1]).toString(),\n };\n\n return {\n profits,\n isProfitable:\n calcProfit([profits[tokenAddress0], profits[tokenAddress1]]) > 0,\n };\n } catch (err) {\n throw `Failed to querySimpleFlashSwap: ${err}`;\n }\n}\n","import { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { JsonFragment } from '@ethersproject/abi';\nimport { networkAddresses } from '@/lib/constants/config';\nimport { BatchRelayerLibrary__factory } from '@/contracts';\n\n/**\n * Maps SOR data to get the tokenIn used in swaps.\n * Logic related to a relayer wrapping and unwrapping tokens.\n * SOR returns list of already wrapped tokenAddresses used in the swap.\n * However tokenIn defined as an input is the unwrapped token.\n * Note: tokenAddresses are transformed in SOR lib wrapInfo.setWrappedInfo\n * TODO: Once PR is merged, this table can be removed.\n */\ntype WrappedList = {\n [key: string]: string;\n};\n\nconst underlyingToWrappedMap: WrappedList = {\n // stETH => wstETH\n '0xae7ab96520de3a18e5e111b5eaab095312d7fe84':\n '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',\n\n // AMPL => WAMPL\n '0xd46ba6d942050d489dbd938a2c909a5d5039a161':\n '0xedb171c18ce90b633db442f2a6f72874093b49ef',\n\n // aAMPL -> ubAAMPL\n '0x1e6bb68acec8fefbd87d192be09bb274170a0548':\n '0xF03387d8d0FF326ab586A58E0ab4121d106147DF',\n};\n\n/**\n * Vault swaps are operating on wrapped tokens. When user is sending an unwrapped token, it's wrapped in a relayer.\n * SOR is returning an array of tokens already wrapped.\n * Converts tokenIn to match tokenIn used in a swap.\n *\n * TODO: add tokenIn and tokenOut addressed used for swap in the SOR results as tokenInForSwap, tokenOutForSwap\n *\n * @param token token address\n * @returns wrapped token address\n */\nfunction tokenForSwaps(token: string): string {\n let wrapped = token;\n // eslint-disable-next-line no-prototype-builtins\n if (underlyingToWrappedMap.hasOwnProperty(token)) {\n wrapped = underlyingToWrappedMap[token as keyof WrappedList];\n }\n return wrapped;\n}\n\nexport enum Relayers {\n vault = 1,\n lido = 2,\n}\n\nexport interface SwapRelayer {\n id: Relayers;\n address: string;\n}\n\n/**\n * Resolves a contract address for sending swap transaction to.\n * Balancer is using relayers to automatically wrap / unwrap tokens not compatibile with ERC20.\n */\nfunction relayerResolver(\n assetIn: string,\n assetOut: string,\n chainId: number\n): SwapRelayer {\n const { tokens, contracts } = networkAddresses(chainId);\n\n let to = {\n id: Relayers.vault,\n address: contracts.vault,\n };\n\n if (tokens.stETH && contracts.lidoRelayer)\n if ([assetIn, assetOut].includes(tokens.stETH))\n to = {\n id: Relayers.lido,\n address: contracts.lidoRelayer,\n };\n\n return to;\n}\n\nfunction swapFragment(relayer: SwapRelayer): JsonFragment[] {\n if (relayer.id === Relayers.lido)\n return BatchRelayerLibrary__factory.abi.filter(\n (f) =>\n f.type === 'function' &&\n f.name &&\n ['swap', 'batchSwap'].includes(f.name)\n );\n else\n return Vault__factory.abi.filter(\n (f) =>\n f.type === 'function' &&\n f.name &&\n ['swap', 'batchSwap'].includes(f.name)\n );\n}\n\nfunction batchSwapFragment(\n assetIn: string,\n assetOut: string,\n chainId: number\n): JsonFragment[] {\n const { tokens, contracts } = networkAddresses(chainId);\n if (tokens.stETH && contracts.lidoRelayer) {\n if ([assetIn, assetOut].includes(tokens.stETH)) {\n const relayerSignaturesForSwaps = BatchRelayerLibrary__factory.abi.filter(\n (f) => f.type === 'function' && f.name === 'batchSwap'\n );\n return relayerSignaturesForSwaps;\n }\n }\n const vaultSignaturesForSwaps = Vault__factory.abi.filter(\n (f) => f.type === 'function' && f.name === 'batchSwap'\n );\n return vaultSignaturesForSwaps;\n}\n\nexport { tokenForSwaps, relayerResolver, swapFragment, batchSwapFragment };\n","import { SwapInfo } from '@balancer-labs/sor';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { tokenForSwaps } from './swap_utils';\nimport { SwapType } from '../types';\n\ninterface AmountForLimit {\n amount: BigNumber;\n max: (slippage: number) => BigNumber;\n min: (slippage: number) => BigNumber;\n}\n\ninterface SDKSwapInfo extends SwapInfo {\n /** Name mapping to improve readability. */\n amountIn: BigNumber;\n amountOut: BigNumber;\n /** Name mapping for amounts used specifically for limits calculations. */\n amountInForLimits: AmountForLimit;\n amountOutForLimits: AmountForLimit;\n /** Wrapped token addresses used in the swap. */\n tokenInForSwaps: string;\n tokenOutFromSwaps: string;\n}\n\n/** Applies slippage to a number */\nfunction amountForLimit(amount: BigNumber): AmountForLimit {\n return {\n amount,\n max: (maxSlippage: number): BigNumber => {\n return amount.mul(1e4 + maxSlippage).div(1e4);\n },\n min: (maxSlippage: number): BigNumber => {\n return amount.mul(1e4 - maxSlippage).div(1e4);\n },\n };\n}\n\nfunction decorateSorSwapInfo(\n swapInfo: SwapInfo,\n swapType: SwapType\n): SDKSwapInfo {\n const amountIn =\n swapType === SwapType.SwapExactIn\n ? swapInfo.swapAmount\n : swapInfo.returnAmount;\n const amountOut =\n swapType === SwapType.SwapExactIn\n ? swapInfo.returnAmount\n : swapInfo.swapAmount;\n const amountInForLimits =\n swapType === SwapType.SwapExactIn\n ? swapInfo.swapAmountForSwaps || swapInfo.swapAmount\n : swapInfo.returnAmountFromSwaps || swapInfo.returnAmount;\n const amountOutForLimits =\n swapType === SwapType.SwapExactIn\n ? swapInfo.returnAmountFromSwaps || swapInfo.returnAmount\n : swapInfo.swapAmountForSwaps || swapInfo.swapAmount;\n const tokenInForSwaps = tokenForSwaps(swapInfo.tokenIn);\n const tokenOutFromSwaps = tokenForSwaps(swapInfo.tokenOut);\n\n return {\n ...swapInfo,\n amountIn,\n amountOut,\n amountInForLimits: amountForLimit(amountInForLimits),\n amountOutForLimits: amountForLimit(amountOutForLimits),\n tokenInForSwaps,\n tokenOutFromSwaps,\n };\n}\n\nexport { SDKSwapInfo, tokenForSwaps, decorateSorSwapInfo };\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { FundManagement, SingleSwap, Swap, SwapType } from '../types';\nimport { Interface, JsonFragment } from '@ethersproject/abi';\nimport { SwapInfo } from '@balancer-labs/sor';\nimport { SDKSwapInfo, decorateSorSwapInfo } from './swap_info_decorator';\nimport { AddressZero } from '@ethersproject/constants';\nimport { swapFragment, relayerResolver, SwapRelayer } from './swap_utils';\n\nclass SingleSwapBuilder {\n private swapInfo: SDKSwapInfo;\n funds?: FundManagement;\n limit?: BigNumberish;\n deadline?: string;\n relayer: SwapRelayer;\n readonly functionName = 'swap';\n\n /**\n * Building swap transaction data\n *\n * @param swapInfo SOR result\n * @param kind\n * @param chainId used to resolve relayer addresses\n */\n constructor(\n swapInfo: SwapInfo,\n private readonly kind: SwapType,\n private readonly chainId: number\n ) {\n this.swapInfo = decorateSorSwapInfo(swapInfo, kind);\n this.relayer = relayerResolver(\n this.swapInfo.tokenIn,\n this.swapInfo.tokenOut,\n this.chainId\n );\n }\n\n setFunds(sender: string, recipient?: string): void {\n this.funds = {\n sender,\n recipient: recipient || sender,\n fromInternalBalance: false,\n toInternalBalance: false,\n };\n }\n\n /**\n * @param deadline block timestamp\n */\n setDeadline(deadline: string): void {\n this.deadline = deadline;\n }\n\n get amount(): BigNumber {\n return this.kind === SwapType.SwapExactOut\n ? this.swapInfo.amountOutForLimits.amount\n : this.swapInfo.amountInForLimits.amount;\n }\n\n /**\n * Calculates the limit for token amount.\n * https://dev.balancer.fi/guides/swaps/single-swaps\n * https://dev.balancer.fi/resources/swaps/single-swap\n *\n * For swap:\n * The meaning of limit depends on the value of kind\n * GIVEN_IN: The minimum amount of tokens we would accept to receive from the swap.\n * GIVEN_OUT: The maximum amount of tokens we would be sending to swap.\n *\n * @param maxSlippage [bps], eg: 1 === 0.01%, 100 === 1%\n */\n setLimits(maxSlippage: number): void {\n this.limit =\n this.kind === SwapType.SwapExactIn\n ? this.swapInfo.amountOutForLimits.min(maxSlippage).toString()\n : this.swapInfo.amountInForLimits.max(maxSlippage).toString();\n }\n\n get singleSwap(): SingleSwap {\n const poolId = this.swapInfo.swaps[0].poolId;\n const kind = this.kind;\n const assetIn = this.swapInfo.tokenInForSwaps;\n const assetOut = this.swapInfo.tokenOutFromSwaps;\n const amount = this.amount.toString();\n const userData = '0x';\n\n return {\n poolId,\n kind,\n assetIn,\n assetOut,\n amount,\n userData,\n };\n }\n\n attributes(): Swap {\n if (!this.funds || !this.limit || !this.deadline) {\n throw new Error('Uninitialized arguments');\n }\n\n // TODO: Raise errors when some parameters are missing\n let attrs: Swap = {\n request: this.singleSwap,\n funds: this.funds,\n limit: this.limit,\n deadline: this.deadline,\n };\n\n // TODO: Call this logic from a relayer module maybe? Do we actually need to do that?\n // additional parameters on a contract:\n // https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/standalone-utils/contracts/relayer/VaultActions.sol#L44\n const fragment = this.fragment();\n if (fragment[0].inputs && fragment[0].inputs?.length > 4) {\n attrs = {\n ...attrs,\n value: '0',\n outputReference: '0',\n };\n }\n\n return attrs;\n }\n\n data(): string {\n const contractInterface = new Interface(this.fragment());\n\n return contractInterface.encodeFunctionData(\n 'swap',\n Object.values(this.attributes())\n );\n }\n\n value(maxSlippage: number): BigNumber {\n let amount = BigNumber.from(0);\n if (this.swapInfo.tokenIn === AddressZero)\n amount =\n this.kind === SwapType.SwapExactIn\n ? this.swapInfo.amountIn\n : this.swapInfo.amountInForLimits.max(maxSlippage);\n return amount;\n }\n\n to(): string {\n return this.relayer.address;\n }\n\n private fragment(): JsonFragment[] {\n return swapFragment(this.relayer).filter(\n (f) => f.name === this.functionName\n );\n }\n}\n\nexport { SingleSwapBuilder };\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { BatchSwap, FundManagement, SwapType } from '../types';\nimport { Interface, JsonFragment } from '@ethersproject/abi';\nimport { SwapInfo } from '@balancer-labs/sor';\nimport { SDKSwapInfo, decorateSorSwapInfo } from './swap_info_decorator';\nimport { AddressZero } from '@ethersproject/constants';\nimport { swapFragment, relayerResolver, SwapRelayer } from './swap_utils';\n\nclass BatchSwapBuilder {\n private swapInfo: SDKSwapInfo;\n funds?: FundManagement;\n limits?: BigNumberish[];\n deadline?: string;\n relayer: SwapRelayer;\n readonly functionName = 'batchSwap';\n\n /**\n * Building swap transaction data\n *\n * @param swapInfo SOR result\n * @param kind\n */\n constructor(\n swapInfo: SwapInfo,\n private readonly kind: SwapType,\n private readonly chainId: number\n ) {\n this.swapInfo = decorateSorSwapInfo(swapInfo, kind);\n this.relayer = relayerResolver(\n this.swapInfo.tokenIn,\n this.swapInfo.tokenOut,\n this.chainId\n );\n }\n\n setFunds(sender: string, recipient?: string): void {\n this.funds = {\n sender,\n recipient: recipient || sender,\n fromInternalBalance: false,\n toInternalBalance: false,\n };\n }\n\n /**\n * @param deadline block timestamp\n */\n setDeadline(deadline: string): void {\n this.deadline = deadline;\n }\n\n /**\n * Given IN it's the minimum amount we are willing to accept.\n * Given OUT it's the fixed amount defined as output.\n */\n minAmountOut(maxSlippage: number): BigNumber {\n return this.kind === SwapType.SwapExactIn\n ? this.swapInfo.amountOutForLimits.min(maxSlippage)\n : this.swapInfo.amountOutForLimits.amount;\n }\n\n /**\n * Given IN it's the fixed amount we define as input.\n * Given OUT it's the maximum amount we are willing to pay for the request.\n */\n maxAmountIn(maxSlippage: number): BigNumber {\n return this.kind === SwapType.SwapExactOut\n ? this.swapInfo.amountInForLimits.max(maxSlippage)\n : this.swapInfo.amountInForLimits.amount;\n }\n\n /**\n * Calculates limits for token amount.\n * Maximum number of tokens to send is a positive number\n * Minimum amount of tokens to receive is a negative number\n * https://dev.balancer.fi/guides/swaps/batch-swaps\n * https://dev.balancer.fi/resources/swaps/batch-swaps#multi-hop-examples\n *\n * For batchSwap:\n * An array of of the maximum net amounts of each asset which can be taken to perform the swap.\n * Should the total trade require more than limits[i] tokens to be taken from sender for any i\n * then the transaction shall fail.\n *\n * @param maxSlippage [bps], eg: 1 === 0.01%, 100 === 1%\n */\n setLimits(maxSlippage: number): void {\n // TODO: This implementation handles only a single input. We might want to extend it for multiple token inputs\n this.limits = this.swapInfo.tokenAddresses\n .map((token) => {\n let amount = BigNumber.from(0);\n if (token === this.swapInfo.tokenInForSwaps) {\n amount = this.maxAmountIn(maxSlippage);\n }\n if (token === this.swapInfo.tokenOutFromSwaps) {\n amount = this.minAmountOut(maxSlippage).mul(-1);\n }\n return amount;\n })\n .map((limit) => limit.toString().split('.')[0]);\n }\n\n attributes(): BatchSwap {\n // TODO: Raise errors when some parameters are missing\n if (!this.funds || !this.limits || !this.deadline) {\n throw new Error('Uninitialized arguments');\n }\n\n let attrs: BatchSwap = {\n kind: this.kind,\n swaps: this.swapInfo.swaps,\n assets: this.swapInfo.tokenAddresses,\n funds: this.funds,\n limits: this.limits,\n deadline: this.deadline,\n };\n\n const fragment = this.fragment();\n\n // TODO: Call this logic from a relayer module maybe? Do we actually need to do that?\n // additional parameters on a contract:\n // https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/standalone-utils/contracts/relayer/VaultActions.sol#L67\n if (fragment[0].inputs && fragment[0].inputs?.length > 6) {\n attrs = {\n ...attrs,\n value: '0',\n outputReferences: [],\n };\n }\n\n return attrs;\n }\n\n data(): string {\n const contractInterface = new Interface(this.fragment());\n\n return contractInterface.encodeFunctionData(\n 'batchSwap',\n Object.values(this.attributes())\n );\n }\n\n value(maxSlippage: number): BigNumber {\n let amount = BigNumber.from(0);\n if (this.swapInfo.tokenIn === AddressZero)\n amount = this.maxAmountIn(maxSlippage);\n return amount;\n }\n\n to(): string {\n return this.relayer.address;\n }\n\n private fragment(): JsonFragment[] {\n return swapFragment(this.relayer).filter(\n (f) => f.name === this.functionName\n );\n }\n}\n\nexport { BatchSwapBuilder };\n","import { SOR, SubgraphPoolBase, SwapInfo, SwapTypes } from '@balancer-labs/sor';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { Vault } from '@/contracts/Vault';\nimport {\n BatchSwap,\n QuerySimpleFlashSwapParameters,\n QuerySimpleFlashSwapResponse,\n SimpleFlashSwapParameters,\n FindRouteParameters,\n BuildTransactionParameters,\n SwapAttributes,\n SwapType,\n TokenAmounts,\n SwapsOptions,\n} from './types';\nimport { queryBatchSwap, getSorSwapInfo } from './queryBatchSwap';\nimport { balancerVault } from '@/lib/constants/config';\nimport { getLimitsForSlippage } from './helpers';\nimport { BalancerSdkConfig } from '@/types';\nimport { SwapInput } from './types';\nimport { Sor } from '@/modules/sor/sor.module';\nimport {\n convertSimpleFlashSwapToBatchSwapParameters,\n querySimpleFlashSwap,\n} from './flashSwap';\nimport {\n SingleSwapBuilder,\n BatchSwapBuilder,\n} from '@/modules/swaps/swap_builder';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport { GraphQLArgs } from '@/lib/graphql';\n\nconst buildRouteDefaultOptions = {\n maxPools: 4,\n gasPrice: '1',\n deadline: '999999999999999999',\n maxSlippage: 10, // in bspt, eg: 10 = 0.1%\n};\n\nexport class Swaps {\n readonly sor: SOR;\n chainId: number;\n vaultContract: Vault;\n\n // TODO: sorOrConfig - let's make it more predictable and always pass configuration explicitly\n constructor(sorOrConfig: SOR | BalancerSdkConfig) {\n if (sorOrConfig instanceof SOR) {\n this.sor = sorOrConfig;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.chainId = (this.sor.provider)['_network']['chainId'];\n } else {\n this.sor = new Sor(sorOrConfig);\n if (typeof sorOrConfig.network === 'number')\n this.chainId = sorOrConfig.network as number;\n else this.chainId = sorOrConfig.network.chainId;\n }\n\n this.vaultContract = Vault__factory.connect(\n balancerVault,\n this.sor.provider\n );\n }\n\n static getLimitsForSlippage(\n tokensIn: string[],\n tokensOut: string[],\n swapType: SwapType,\n deltas: string[],\n assets: string[],\n slippage: string\n ): string[] {\n // TO DO - Check best way to do this?\n const limits = getLimitsForSlippage(\n tokensIn,\n tokensOut,\n swapType,\n deltas,\n assets,\n slippage\n );\n\n return limits.map((l) => l.toString());\n }\n\n /**\n * Uses SOR to find optimal route for a trading pair and amount\n *\n * @param FindRouteParameters\n * @param FindRouteParameters.tokenIn Address\n * @param FindRouteParameters.tokenOut Address\n * @param FindRouteParameters.amount BigNumber with a trade amount\n * @param FindRouteParameters.gasPrice BigNumber current gas price\n * @param FindRouteParameters.maxPools number of pool included in path, default 4\n * @returns Best trade route information\n */\n async findRouteGivenIn({\n tokenIn,\n tokenOut,\n amount,\n gasPrice,\n maxPools = 4,\n }: FindRouteParameters): Promise {\n return this.sor.getSwaps(tokenIn, tokenOut, SwapTypes.SwapExactIn, amount, {\n gasPrice,\n maxPools,\n });\n }\n\n /**\n * Uses SOR to find optimal route for a trading pair and amount\n *\n * @param FindRouteParameters\n * @param FindRouteParameters.tokenIn Address\n * @param FindRouteParameters.tokenOut Address\n * @param FindRouteParameters.amount BigNumber with a trade amount\n * @param FindRouteParameters.gasPrice BigNumber current gas price\n * @param FindRouteParameters.maxPools number of pool included in path, default 4\n * @returns Best trade route information\n */\n async findRouteGivenOut({\n tokenIn,\n tokenOut,\n amount,\n gasPrice,\n maxPools = 4,\n }: FindRouteParameters): Promise {\n return this.sor.getSwaps(\n tokenIn,\n tokenOut,\n SwapTypes.SwapExactOut,\n amount,\n {\n gasPrice,\n maxPools,\n }\n );\n }\n\n /**\n * Uses SOR to find optimal route for a trading pair and amount\n *\n * @param BuildTransactionParameters\n * @param BuildTransactionParameters.userAddress Address\n * @param BuildTransactionParameters.swapInfo result of route finding\n * @param BuildTransactionParameters.kind 0 - givenIn, 1 - givenOut\n * @param BuildTransactionParameters.deadline block linux timestamp as string\n * @param BuildTransactionParameters.maxSlippage [bps], eg: 1 === 0.01%, 100 === 1%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n buildSwap({\n userAddress,\n recipient,\n swapInfo,\n kind,\n deadline,\n maxSlippage,\n }: BuildTransactionParameters): SwapAttributes {\n if (!this.chainId) throw 'Missing network configuration';\n\n // one vs batch (gas cost optimisation when using single swap)\n const builder =\n swapInfo.swaps.length > 1\n ? new BatchSwapBuilder(swapInfo, kind, this.chainId)\n : new SingleSwapBuilder(swapInfo, kind, this.chainId);\n builder.setFunds(userAddress, recipient);\n builder.setDeadline(deadline);\n builder.setLimits(maxSlippage);\n\n const to = builder.to();\n const { functionName } = builder;\n const attributes = builder.attributes();\n const data = builder.data();\n const value = builder.value(maxSlippage);\n\n return { to, functionName, attributes, data, value };\n }\n\n /**\n * Uses SOR to find optimal route for a trading pair and amount\n * and builds a transaction request\n *\n * @param sender Sender of the swap\n * @param recipient Reciever of the swap\n * @param tokenIn Address of tokenIn\n * @param tokenOut Address of tokenOut\n * @param amount Amount of tokenIn to swap as a string with 18 decimals precision\n * @param options\n * @param options.maxPools number of pool included in path\n * @param options.gasPrice BigNumber current gas price\n * @param options.deadline BigNumber block timestamp\n * @param options.maxSlippage [bps], eg: 1 === 0.01%, 100 === 1%\n * @returns transaction request ready to send with signer.sendTransaction\n */\n async buildRouteExactIn(\n sender: string,\n recipient: string,\n tokenIn: string,\n tokenOut: string,\n amount: string,\n options: SwapsOptions = buildRouteDefaultOptions\n ): Promise {\n const opts = {\n ...buildRouteDefaultOptions,\n ...options,\n };\n\n const swapInfo = await this.findRouteGivenIn({\n tokenIn,\n tokenOut,\n amount: BigNumber.from(amount),\n gasPrice: BigNumber.from(opts.gasPrice),\n maxPools: opts.maxPools,\n });\n\n const tx = this.buildSwap({\n userAddress: sender, // sender account\n recipient, // recipient account\n swapInfo, // result from the previous step\n kind: SwapType.SwapExactIn, // or SwapExactOut\n deadline: opts.deadline, // BigNumber block timestamp\n maxSlippage: opts.maxSlippage, // [bps], eg: 1 == 0.01%, 100 == 1%\n });\n\n // TODO: add query support\n // query will be a function that returns the deltas for the swap in { [address: string]: string } format\n // const query = this.queryBatchSwap(tx);\n\n return tx;\n }\n\n /**\n * Encode batchSwap in an ABI byte string\n *\n * [See method for a batchSwap](https://dev.balancer.fi/references/contracts/apis/the-vault#batch-swaps).\n *\n * _NB: This method doesn't execute a batchSwap -- it returns an [ABI byte string](https://docs.soliditylang.org/en/latest/abi-spec.html)\n * containing the data of the function call on a contract, which can then be sent to the network to be executed.\n * (ex. [sendTransaction](https://web3js.readthedocs.io/en/v1.2.11/web3-eth.html#sendtransaction)).\n *\n * @param {BatchSwap} batchSwap - BatchSwap information used for query.\n * @param {SwapType} batchSwap.kind - either exactIn or exactOut\n * @param {BatchSwapSteps[]} batchSwap.swaps - sequence of swaps\n * @param {string[]} batchSwap.assets - array contains the addresses of all assets involved in the swaps\n * @param {FundManagement} batchSwap.funds - object containing information about where funds should be taken/sent\n * @param {number[]} batchSwap.limits - limits for each token involved in the swap, where either the maximum number of tokens to send (by passing a positive value) or the minimum amount of tokens to receive (by passing a negative value) is specified\n * @param {string} batchSwap.deadline - time (in Unix timestamp) after which it will no longer attempt to make a trade\n * @returns {string} encodedBatchSwapData - Returns an ABI byte string containing the data of the function call on a contract\n */\n static encodeBatchSwap(batchSwap: BatchSwap): string {\n const vaultInterface = Vault__factory.createInterface();\n\n return vaultInterface.encodeFunctionData('batchSwap', [\n batchSwap.kind,\n batchSwap.swaps,\n batchSwap.assets,\n batchSwap.funds,\n batchSwap.limits,\n batchSwap.deadline,\n ]);\n }\n\n /**\n * Encode simple flash swap into a ABI byte string\n *\n * A \"simple\" flash swap is an arbitrage executed with only two tokens and two pools,\n * swapping in the first pool and then back in the second pool for a profit. For more\n * complex flash swaps, you will have to use the batch swap method.\n *\n * Learn more: A [Flash Swap](https://dev.balancer.fi/resources/swaps/flash-swaps).\n *\n * @param {SimpleFlashSwapParameters} params - BatchSwap information used for query.\n * @param {string} params.flashLoanAmount - initial input amount for the flash loan (first asset)\n * @param {string[]} params.poolIds - array of Balancer pool ids\n * @param {string[]} params.assets - array of token addresses\n * @param {string} params.walletAddress - array of token addresses\n * @returns {string} encodedBatchSwapData - Returns an ABI byte string containing the data of the function call on a contract\n */\n static encodeSimpleFlashSwap(params: SimpleFlashSwapParameters): string {\n return this.encodeBatchSwap(\n convertSimpleFlashSwapToBatchSwapParameters(params)\n );\n }\n\n /**\n * fetchPools saves updated pools data to SOR internal onChainBalanceCache.\n *\n * @returns Boolean indicating whether pools data was fetched correctly (true) or not (false).\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async fetchPools(queryArgs?: GraphQLArgs): Promise {\n return this.sor.fetchPools(queryArgs);\n }\n\n public getPools(): SubgraphPoolBase[] {\n return this.sor.getPools();\n }\n\n /**\n * queryBatchSwap simulates a call to `batchSwap`, returning an array of Vault asset deltas.\n * @param batchSwap - BatchSwap information used for query.\n * @param {SwapType} batchSwap.kind - either exactIn or exactOut.\n * @param {BatchSwapStep[]} batchSwap.swaps - sequence of swaps.\n * @param {string[]} batchSwap.assets - array contains the addresses of all assets involved in the swaps.\n * @returns {Promise} Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the\n * Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at\n * the same index in the `assets` array.\n */\n async queryBatchSwap(\n batchSwap: Pick\n ): Promise {\n return await queryBatchSwap(\n this.vaultContract,\n batchSwap.kind,\n batchSwap.swaps,\n batchSwap.assets\n );\n }\n\n /**\n * Simple interface to test if a simple flash swap is valid and see potential profits.\n *\n * A \"simple\" flash swap is an arbitrage executed with only two tokens and two pools,\n * swapping in the first pool and then back in the second pool for a profit. For more\n * complex flash swaps, you will have to use the batch swap method.\n *\n * Learn more: A [Flash Swap](https://dev.balancer.fi/resources/swaps/flash-swaps).\n *\n * _NB: This method doesn't execute a flashSwap\n *\n * @param {SimpleFlashSwapParameters} params - BatchSwap information used for query.\n * @param {string} params.flashLoanAmount - initial input amount for the flash loan (first asset)\n * @param {string[]} params.poolIds - array of Balancer pool ids\n * @param {string[]} params.assets - array of token addresses\n * @returns {Promise<{profits: Record, isProfitable: boolean}>} Returns an ethersjs transaction response\n */\n async querySimpleFlashSwap(\n params: Omit\n ): Promise {\n return await querySimpleFlashSwap({\n ...params,\n vaultContract: this.vaultContract,\n });\n }\n\n /**\n * Use SOR to get swapInfo for tokenIn<>tokenOut.\n * @param {SwapInput} swapInput - Swap information used for querying using SOR.\n * @param {string} swapInput.tokenIn - Addresse of asset in.\n * @param {string} swapInput.tokenOut - Addresse of asset out.\n * @param {SwapType} swapInput.swapType - Type of Swap, ExactIn/Out.\n * @param {string} swapInput.amount - Amount used in swap.\n * @returns {Promise} SOR swap info.\n */\n async getSorSwap(swapInput: SwapInput): Promise {\n return await getSorSwapInfo(\n swapInput.tokenIn,\n swapInput.tokenOut,\n swapInput.swapType,\n swapInput.amount,\n this.sor\n );\n }\n\n async queryExactIn(swap: SwapInfo): Promise {\n const deltas = await this.query(swap, SwapType.SwapExactIn);\n return this.assetDeltas(deltas.map(String), swap.tokenAddresses);\n }\n\n async queryExactOut(swap: SwapInfo): Promise {\n const deltas = await this.query(swap, SwapType.SwapExactOut);\n return this.assetDeltas(deltas.map(String), swap.tokenAddresses);\n }\n\n private query(swap: SwapInfo, kind: SwapType): Promise {\n const { swaps, tokenAddresses: assets } = swap;\n\n const funds = {\n sender: AddressZero,\n recipient: AddressZero,\n fromInternalBalance: false,\n toInternalBalance: false,\n };\n\n return this.vaultContract.callStatic.queryBatchSwap(\n kind,\n swaps,\n assets,\n funds\n );\n }\n\n private assetDeltas(deltas: string[], assets: string[]): TokenAmounts {\n return Object.fromEntries(deltas.map((delta, idx) => [assets[idx], delta]));\n }\n}\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\n\nimport { ExitPoolRequest, JoinPoolRequest } from '@/types';\nimport { SwapType, BatchSwapStep, FundManagement } from '@/modules/swaps/types';\n\nexport enum PoolKind {\n WEIGHTED = 0,\n LEGACY_STABLE,\n COMPOSABLE_STABLE,\n COMPOSABLE_STABLE_V2,\n}\n\nexport type OutputReference = {\n index: number;\n key: BigNumber;\n};\n\nexport interface EncodeBatchSwapInput {\n swapType: SwapType;\n swaps: BatchSwapStep[];\n assets: string[];\n funds: FundManagement;\n limits: string[];\n deadline: BigNumberish;\n value: BigNumberish;\n outputReferences: OutputReference[];\n}\n\nexport interface EncodeExitPoolInput {\n poolId: string;\n poolKind: number;\n sender: string;\n recipient: string;\n outputReferences: OutputReference[];\n exitPoolRequest: ExitPoolRequest;\n}\n\nexport interface EncodeJoinPoolInput {\n poolId: string;\n kind: number;\n sender: string;\n recipient: string;\n joinPoolRequest: JoinPoolRequest;\n value: BigNumberish;\n outputReference: string;\n}\n\nexport interface EncodeWrapAaveDynamicTokenInput {\n staticToken: string;\n sender: string;\n recipient: string;\n amount: BigNumberish;\n fromUnderlying: boolean;\n outputReference: BigNumberish;\n}\n\nexport interface EncodeUnwrapAaveStaticTokenInput {\n staticToken: string;\n sender: string;\n recipient: string;\n amount: BigNumberish;\n toUnderlying: boolean;\n outputReference: BigNumberish;\n}\n\nexport interface EncodeUnwrapInput {\n wrappedToken: string;\n sender: string;\n recipient: string;\n amount: BigNumberish;\n outputReference: BigNumberish;\n}\n\nexport interface EncodeUnwrapWstETHInput {\n sender: string;\n recipient: string;\n amount: BigNumberish;\n outputReference: BigNumberish;\n}\n\nexport type ExitPoolData = ExitPoolRequest & EncodeExitPoolInput;\nexport type JoinPoolData = JoinPoolRequest & EncodeJoinPoolInput;\n","import { JsonRpcSigner } from '@ethersproject/providers';\nimport { BigNumberish, BigNumber } from '@ethersproject/bignumber';\nimport { MaxUint256 } from '@ethersproject/constants';\nimport { BatchRelayerLibrary__factory } from '@/contracts';\nimport { IVault, Vault } from '@/contracts/Vault';\nimport {\n EncodeBatchSwapInput,\n EncodeExitPoolInput,\n EncodeJoinPoolInput,\n EncodeUnwrapAaveStaticTokenInput,\n EncodeUnwrapInput,\n EncodeUnwrapWstETHInput,\n EncodeWrapAaveDynamicTokenInput,\n ExitPoolData,\n JoinPoolData,\n} from './types';\nimport { ExitPoolRequest, JoinPoolRequest } from '@/types';\nimport { Swap } from '../swaps/types';\nimport { RelayerAuthorization } from '@/lib/utils';\nimport FundManagementStruct = IVault.FundManagementStruct;\nimport SingleSwapStruct = IVault.SingleSwapStruct;\n\nexport * from './types';\n\nconst relayerLibrary = BatchRelayerLibrary__factory.createInterface();\n\nexport class Relayer {\n static CHAINED_REFERENCE_TEMP_PREFIX = 'ba10'; // Temporary reference: it is deleted after a read.\n static CHAINED_REFERENCE_READONLY_PREFIX = 'ba11'; // Read-only reference: it is not deleted after a read.\n\n static encodeApproveVault(tokenAddress: string, maxAmount: string): string {\n return relayerLibrary.encodeFunctionData('approveVault', [\n tokenAddress,\n maxAmount,\n ]);\n }\n\n static encodeSetRelayerApproval(\n relayerAdress: string,\n approved: boolean,\n authorisation: string\n ): string {\n return relayerLibrary.encodeFunctionData('setRelayerApproval', [\n relayerAdress,\n approved,\n authorisation,\n ]);\n }\n\n static encodeGaugeWithdraw(\n gaugeAddress: string,\n sender: string,\n recipient: string,\n amount: string\n ): string {\n return relayerLibrary.encodeFunctionData('gaugeWithdraw', [\n gaugeAddress,\n sender,\n recipient,\n amount,\n ]);\n }\n\n static encodeGaugeDeposit(\n gaugeAddress: string,\n sender: string,\n recipient: string,\n amount: string\n ): string {\n return relayerLibrary.encodeFunctionData('gaugeDeposit', [\n gaugeAddress,\n sender,\n recipient,\n amount,\n ]);\n }\n\n static encodeSwap(params: Swap): string {\n return relayerLibrary.encodeFunctionData('swap', [\n params.request as SingleSwapStruct,\n params.funds as FundManagementStruct,\n params.limit,\n params.deadline as BigNumberish,\n params.value as BigNumberish,\n params.outputReference as BigNumberish,\n ]);\n }\n\n static encodeBatchSwap(params: EncodeBatchSwapInput): string {\n return relayerLibrary.encodeFunctionData('batchSwap', [\n params.swapType,\n params.swaps,\n params.assets,\n params.funds,\n params.limits,\n params.deadline,\n params.value,\n params.outputReferences,\n ]);\n }\n\n static encodeExitPool(params: EncodeExitPoolInput): string {\n return relayerLibrary.encodeFunctionData('exitPool', [\n params.poolId,\n params.poolKind,\n params.sender,\n params.recipient,\n params.exitPoolRequest,\n params.outputReferences,\n ]);\n }\n\n static encodeJoinPool(params: EncodeJoinPoolInput): string {\n return relayerLibrary.encodeFunctionData('joinPool', [\n params.poolId,\n params.kind,\n params.sender,\n params.recipient,\n params.joinPoolRequest,\n params.value,\n params.outputReference,\n ]);\n }\n\n static encodeWrapAaveDynamicToken(\n params: EncodeWrapAaveDynamicTokenInput\n ): string {\n return relayerLibrary.encodeFunctionData('wrapAaveDynamicToken', [\n params.staticToken,\n params.sender,\n params.recipient,\n params.amount,\n params.fromUnderlying,\n params.outputReference,\n ]);\n }\n\n static encodeUnwrapAaveStaticToken(\n params: EncodeUnwrapAaveStaticTokenInput\n ): string {\n return relayerLibrary.encodeFunctionData('unwrapAaveStaticToken', [\n params.staticToken,\n params.sender,\n params.recipient,\n params.amount,\n params.toUnderlying,\n params.outputReference,\n ]);\n }\n\n static encodeUnwrapWstETH(params: EncodeUnwrapWstETHInput): string {\n return relayerLibrary.encodeFunctionData('unwrapWstETH', [\n params.sender,\n params.recipient,\n params.amount,\n params.outputReference,\n ]);\n }\n\n static encodeUnwrap(\n params: EncodeUnwrapInput,\n linearPoolType: string\n ): string {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let unwrapType: any;\n\n /**\n * Other unwrap types available on BatchRelayerLibrary that does not seem to\n * have a respective Linear pool type in the SDK:\n * - unwrapUnbuttonToken\n * - unwrapWstETH\n */\n\n switch (linearPoolType) {\n case 'AaveLinear':\n return this.encodeUnwrapAaveStaticToken({\n staticToken: params.wrappedToken,\n sender: params.sender,\n recipient: params.recipient,\n amount: params.amount,\n toUnderlying: true,\n outputReference: params.outputReference,\n });\n case 'BeefyLinear':\n case 'ERC4626Linear':\n unwrapType = 'unwrapERC4626';\n break;\n case 'EulerLinear':\n unwrapType = 'unwrapEuler';\n break;\n case 'GearboxLinear':\n unwrapType = 'unwrapGearbox';\n break;\n case 'ReaperLinear':\n unwrapType = 'unwrapReaperVaultToken';\n break;\n case 'TetuLinear':\n unwrapType = 'unwrapTetu';\n break;\n case 'YearnLinear':\n unwrapType = 'unwrapYearn';\n break;\n case 'MidasLinear':\n unwrapType = 'unwrapCompoundV2';\n break;\n case 'SiloLinear':\n unwrapType = 'unwrapShareToken';\n break;\n default:\n throw new Error(\n 'Unwrapping not supported for this pool type: ' + linearPoolType\n );\n }\n\n return relayerLibrary.encodeFunctionData(unwrapType, [\n params.wrappedToken,\n params.sender,\n params.recipient,\n params.amount,\n params.outputReference,\n ]);\n }\n\n static encodePeekChainedReferenceValue(reference: BigNumberish): string {\n return relayerLibrary.encodeFunctionData('peekChainedReferenceValue', [\n reference,\n ]);\n }\n\n static toChainedReference(key: BigNumberish, isTemporary = true): BigNumber {\n const prefix = isTemporary\n ? Relayer.CHAINED_REFERENCE_TEMP_PREFIX\n : Relayer.CHAINED_REFERENCE_READONLY_PREFIX;\n // The full padded prefix is 66 characters long, with 64 hex characters and the 0x prefix.\n const paddedPrefix = `0x${prefix}${'0'.repeat(64 - prefix.length)}`;\n return BigNumber.from(paddedPrefix).add(key);\n }\n\n static fromChainedReference(ref: string, isTemporary = true): BigNumber {\n const prefix = isTemporary\n ? Relayer.CHAINED_REFERENCE_TEMP_PREFIX\n : Relayer.CHAINED_REFERENCE_READONLY_PREFIX;\n // The full padded prefix is 66 characters long, with 64 hex characters and the 0x prefix.\n const paddedPrefix = `0x${prefix}${'0'.repeat(64 - prefix.length)}`;\n return BigNumber.from(ref).sub(BigNumber.from(paddedPrefix));\n }\n\n /**\n * Returns true if `amount` is not actually an amount, but rather a chained reference.\n */\n static isChainedReference(amount: string): boolean {\n const amountBn = BigNumber.from(amount);\n const mask = BigNumber.from(\n '0xfff0000000000000000000000000000000000000000000000000000000000000'\n );\n const readonly =\n '0xba10000000000000000000000000000000000000000000000000000000000000';\n const check = amountBn.toBigInt() & mask.toBigInt();\n return readonly === BigNumber.from(check)._hex.toString();\n }\n\n static formatExitPoolInput(params: ExitPoolData): EncodeExitPoolInput {\n const {\n assets,\n minAmountsOut,\n userData,\n toInternalBalance,\n poolId,\n poolKind,\n sender,\n recipient,\n outputReferences,\n } = params;\n\n const exitPoolRequest: ExitPoolRequest = {\n assets,\n minAmountsOut,\n userData,\n toInternalBalance,\n };\n\n const exitPoolInput: EncodeExitPoolInput = {\n poolId,\n poolKind,\n sender,\n recipient,\n outputReferences,\n exitPoolRequest,\n };\n return exitPoolInput;\n }\n\n static formatJoinPoolInput(params: JoinPoolData): EncodeJoinPoolInput {\n const {\n assets,\n maxAmountsIn,\n userData,\n fromInternalBalance,\n poolId,\n kind,\n sender,\n recipient,\n value,\n outputReference,\n } = params;\n\n const joinPoolRequest: JoinPoolRequest = {\n assets,\n maxAmountsIn,\n userData,\n fromInternalBalance,\n };\n\n const joinPoolInput: EncodeJoinPoolInput = {\n poolId,\n kind,\n sender,\n recipient,\n value,\n outputReference,\n joinPoolRequest,\n };\n\n return joinPoolInput;\n }\n\n static signRelayerApproval = async (\n relayerAddress: string,\n signerAddress: string,\n signer: JsonRpcSigner,\n vault: Vault\n ): Promise => {\n const approval = vault.interface.encodeFunctionData('setRelayerApproval', [\n signerAddress,\n relayerAddress,\n true,\n ]);\n\n const signature =\n await RelayerAuthorization.signSetRelayerApprovalAuthorization(\n vault,\n signer,\n relayerAddress,\n approval\n );\n\n const calldata = RelayerAuthorization.encodeCalldataAuthorization(\n '0x',\n MaxUint256,\n signature\n );\n\n return calldata;\n };\n}\n","import { BalancerSdkConfig } from '@/types';\nimport { GraphQLClient } from 'graphql-request';\nimport { getNetworkConfig } from '../sdk.helpers';\nimport { getSdk } from './generated/balancer-subgraph-types';\nimport { SubgraphClient } from './subgraph';\n\nexport class Subgraph {\n public readonly url: string;\n public readonly client: SubgraphClient;\n\n constructor(config: BalancerSdkConfig) {\n this.url = getNetworkConfig(config).urls.subgraph;\n this.client = this.initClient();\n }\n\n private initClient(): SubgraphClient {\n const client = new GraphQLClient(this.url);\n return getSdk(client);\n }\n}\n","import { Swaps } from '@/modules/swaps/swaps.module';\nimport { BalancerSdkConfig } from '@/types';\nimport {\n SubgraphPoolBase,\n ZERO,\n parseToPoolsDict,\n getSpotPriceAfterSwapForPath,\n} from '@balancer-labs/sor';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\n\nexport class Pricing {\n private readonly swaps: Swaps;\n\n constructor(config: BalancerSdkConfig, swaps?: Swaps) {\n if (swaps) {\n this.swaps = swaps;\n } else {\n this.swaps = new Swaps(config);\n }\n }\n\n /**\n * Retrieves pools using poolDataService.\n * @returns {boolean} Boolean indicating whether pools data was fetched correctly (true) or not (false).\n */\n async fetchPools(): Promise {\n return this.swaps.fetchPools();\n }\n\n /**\n * Get currently saved pools list (fetched using fetchPools()).\n * @returns {SubgraphPoolBase[]} pools list.\n */\n public getPools(): SubgraphPoolBase[] {\n return this.swaps.getPools();\n }\n\n /**\n * Calculates Spot Price for a token pair - finds most liquid path and uses this as reference SP.\n * @param { string } tokenIn Token in address.\n * @param { string } tokenOut Token out address.\n * @param { SubgraphPoolBase[] } pools Optional - Pool data. Will be fetched via dataProvider if not supplied.\n * @returns { string } Spot price.\n */\n async getSpotPrice(\n tokenIn: string,\n tokenOut: string,\n pools: SubgraphPoolBase[] = []\n ): Promise {\n // If pools list isn't supplied fetch it from swaps data provider\n if (pools.length === 0) {\n await this.fetchPools();\n pools = this.getPools();\n }\n\n // We find the path for the pair with the highest liquidity and use this as the ref SP\n const poolsDict = parseToPoolsDict(pools, 0);\n // This creates all paths for tokenIn>Out ordered by liquidity\n const paths = this.swaps.sor.routeProposer.getCandidatePathsFromDict(\n tokenIn,\n tokenOut,\n 0,\n poolsDict,\n 4\n );\n\n if (paths.length === 0)\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_PAIR);\n return getSpotPriceAfterSwapForPath(paths[0], 0, ZERO).toString();\n }\n}\n","import { Contract } from '@ethersproject/contracts';\nimport { Provider } from '@ethersproject/providers';\nimport { Signer } from '@ethersproject/abstract-signer';\n\nconst abi = [\n 'function getPoolId() view returns (bytes32)',\n 'function getSwapFeePercentage() view returns (uint256)',\n 'function getProtocolFeesCollector() view returns (address)',\n 'function inRecoveryMode() view returns (bool)',\n];\n\nexport const BasePool = (\n address: string,\n signerOrProvider: Signer | Provider\n): Contract => new Contract(address, abi, signerOrProvider);\n","import { set } from 'lodash';\nimport { Fragment, JsonFragment, Interface, Result } from '@ethersproject/abi';\nimport { CallOverrides } from '@ethersproject/contracts';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { Multicall } from '@/contracts';\n\nexport class Multicaller {\n private interface: Interface;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private calls: [string, string, any][] = [];\n private paths: string[] = [];\n\n constructor(\n private multicall: Multicall,\n abi: string | Array,\n private options: CallOverrides = {}\n ) {\n this.interface = new Interface(abi);\n }\n\n call(\n path: string,\n address: string,\n functionName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n params?: any[]\n ): Multicaller {\n this.calls.push([address, functionName, params]);\n this.paths.push(path);\n return this;\n }\n\n async execute(\n from: Record = {}\n ): Promise> {\n const obj = from;\n const results = await this.executeMulticall();\n results.forEach((result, i) =>\n set(obj, this.paths[i], result.length > 1 ? result : result[0])\n );\n this.calls = [];\n this.paths = [];\n return obj;\n }\n\n private async executeMulticall(): Promise {\n const [, res] = await this.multicall.callStatic.aggregate(\n this.calls.map(([address, functionName, params]) => ({\n target: address,\n callData: this.interface.encodeFunctionData(functionName, params),\n })),\n this.options\n );\n\n return res.map((result: BytesLike, i: number) =>\n this.interface.decodeFunctionResult(this.calls[i][1], result)\n );\n }\n}\n","export const oneSecondInMs = 1000;\nexport const twentyFourHoursInSecs = 24 * 60 * 60;\n\nexport function toJsTimestamp(unixTimestamp: number): number {\n return unixTimestamp * oneSecondInMs;\n}\n\nexport function toUnixTimestamp(jsTimestamp: number): number {\n return Math.round(jsTimestamp / oneSecondInMs);\n}\n\nexport function isLessThan24Hours(incomingDateInSec: number): boolean {\n const now = Math.round(Date.now() / 1000);\n const difference = now - incomingDateInSec;\n\n return difference < twentyFourHoursInSecs;\n}\n","import { JsonFragment } from '@ethersproject/abi';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { formatUnits } from '@ethersproject/units';\nimport { Multicall, VeBal__factory } from '@/contracts';\nimport { Multicaller } from '@/lib/utils/multiCaller';\nimport { toJsTimestamp } from '@/lib/utils/time';\n\nexport type VeBalLockInfo = {\n lockedEndDate: number;\n lockedAmount: string;\n totalSupply: string;\n epoch: string;\n hasExistingLock: boolean;\n isExpired: boolean;\n};\n\ntype VeBalLockInfoResult = {\n locked: BigNumber[];\n epoch: BigNumber;\n totalSupply: BigNumber;\n};\n\nexport class VeBal {\n constructor(private veBalAddress: string, private multicall: Multicall) {}\n\n public async getLockInfo(\n account: string\n ): Promise {\n if (!this.veBalAddress) throw new Error('veBal address must be defined');\n\n const multicaller = new Multicaller(this.multicall, [\n ...(VeBal__factory.abi as readonly JsonFragment[]),\n ]);\n\n multicaller.call('locked', this.veBalAddress, 'locked', [account]);\n multicaller.call('epoch', this.veBalAddress, 'epoch');\n multicaller.call('totalSupply', this.veBalAddress, 'totalSupply()');\n\n const result = await multicaller.execute();\n\n return this.formatLockInfo(result);\n }\n\n public formatLockInfo(lockInfo: VeBalLockInfoResult): VeBalLockInfo {\n const [lockedAmount, lockedEndDate] = lockInfo.locked;\n\n const hasExistingLock = lockedAmount.gt(0);\n const lockedEndDateNormalised = toJsTimestamp(lockedEndDate.toNumber());\n const isExpired = hasExistingLock && Date.now() > lockedEndDateNormalised;\n\n return {\n lockedEndDate: lockedEndDateNormalised,\n lockedAmount: formatUnits(lockedAmount),\n totalSupply: formatUnits(lockInfo.totalSupply),\n epoch: formatUnits(lockInfo.epoch, 0),\n hasExistingLock,\n isExpired,\n };\n }\n}\n","import { Provider } from '@ethersproject/providers';\nimport { Contract } from '@ethersproject/contracts';\nimport { formatUnits } from '@ethersproject/units';\n\nimport { VeDelegationProxy__factory } from '@/contracts';\nimport { ContractAddresses } from '@/types';\n\nexport class VeBalProxy {\n instance: Contract;\n\n constructor(addresses: ContractAddresses, provider: Provider) {\n if (!addresses.veBalProxy)\n throw new Error('veBalProxy address must be defined');\n this.instance = VeDelegationProxy__factory.connect(\n addresses.veBalProxy,\n provider\n );\n }\n\n async getAdjustedBalance(account: string): Promise {\n const balance = await this.instance.adjustedBalanceOf(account);\n return formatUnits(balance);\n }\n}\n","import { Contract } from '@ethersproject/contracts';\nimport { Provider } from '@ethersproject/providers';\nimport { Signer } from '@ethersproject/abstract-signer';\n\nimport { BasePool } from './implementations/base-pool';\nimport { VeBal } from './implementations/veBAL';\nimport { VeBalProxy } from './implementations/veBAL-proxy';\nimport {\n AaveLinearPoolFactory,\n AaveLinearPoolFactory__factory,\n BalancerHelpers,\n BalancerHelpers__factory,\n BalancerRelayer__factory,\n ComposableStablePoolFactory,\n ComposableStablePoolFactory__factory,\n ERC20,\n ERC20__factory,\n ERC4626LinearPoolFactory,\n ERC4626LinearPoolFactory__factory,\n EulerLinearPoolFactory,\n EulerLinearPoolFactory__factory,\n GaugeClaimHelper,\n GaugeClaimHelper__factory,\n GearboxLinearPoolFactory,\n GearboxLinearPoolFactory__factory,\n GyroConfig,\n GyroConfig__factory,\n LidoRelayer,\n LidoRelayer__factory,\n LiquidityGaugeV5__factory,\n Multicall,\n Multicall__factory,\n Vault,\n Vault__factory,\n WeightedPoolFactory,\n WeightedPoolFactory__factory,\n YearnLinearPoolFactory,\n YearnLinearPoolFactory__factory,\n} from '@/contracts';\nimport { Network } from '@/lib/constants/network';\nimport { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { ContractAddresses } from '@/types';\n\ntype ContractFactory = (\n address: string,\n signerOrProvider: Signer | Provider\n) => Contract;\n\nexport interface ContractInstances {\n aaveLinearPoolFactory?: AaveLinearPoolFactory;\n balancerHelpers: BalancerHelpers;\n BasePool: ContractFactory;\n composableStablePoolFactory?: ComposableStablePoolFactory;\n ERC20: ContractFactory;\n erc4626LinearPoolFactory?: ERC4626LinearPoolFactory;\n eulerLinearPoolFactory?: EulerLinearPoolFactory;\n gaugeClaimHelper?: GaugeClaimHelper;\n gearboxLinearPoolFactory?: GearboxLinearPoolFactory;\n gyroConfig?: GyroConfig;\n lidoRelayer?: LidoRelayer;\n liquidityGauge: ContractFactory;\n multicall: Multicall;\n relayer: Contract;\n vault: Vault;\n veBal?: VeBal;\n veBalProxy?: VeBalProxy;\n weightedPoolFactory?: WeightedPoolFactory;\n yearnLinearPoolFactory?: YearnLinearPoolFactory;\n}\n\nexport class Contracts {\n contractAddresses: ContractAddresses;\n private instances: ContractInstances;\n\n /**\n * Create instances of Balancer contracts connected to passed provider.\n * @param { Network | ContractAddresses } networkOrAddresses\n * @param { Provider } provider\n */\n constructor(\n networkOrAddresses: Network | ContractAddresses,\n provider: Provider\n ) {\n // Access addresses using passed network if available\n if (typeof networkOrAddresses === 'number') {\n this.contractAddresses =\n BALANCER_NETWORK_CONFIG[networkOrAddresses].addresses.contracts;\n } else {\n this.contractAddresses = networkOrAddresses;\n }\n\n const vault: Vault = Vault__factory.connect(\n this.contractAddresses.vault,\n provider\n );\n const balancerHelpers: BalancerHelpers = BalancerHelpers__factory.connect(\n this.contractAddresses.balancerHelpers,\n provider\n );\n let lidoRelayer: undefined | LidoRelayer;\n if (this.contractAddresses.lidoRelayer)\n lidoRelayer = LidoRelayer__factory.connect(\n this.contractAddresses.lidoRelayer,\n provider\n );\n\n const multicall: Multicall = Multicall__factory.connect(\n this.contractAddresses.multicall,\n provider\n );\n const relayer = BalancerRelayer__factory.connect(\n this.contractAddresses.balancerRelayer,\n provider\n );\n let veBal: undefined | VeBal;\n if (this.contractAddresses.veBal) {\n veBal = new VeBal(this.contractAddresses.veBal, multicall);\n }\n let veBalProxy: undefined | VeBalProxy;\n if (this.contractAddresses.veBalProxy) {\n veBalProxy = new VeBalProxy(this.contractAddresses, provider);\n }\n let gaugeClaimHelper: undefined | GaugeClaimHelper;\n if (this.contractAddresses.gaugeClaimHelper)\n gaugeClaimHelper = GaugeClaimHelper__factory.connect(\n this.contractAddresses.gaugeClaimHelper,\n provider\n );\n let composableStablePoolFactory: undefined | ComposableStablePoolFactory;\n if (this.contractAddresses.composableStablePoolFactory) {\n composableStablePoolFactory =\n ComposableStablePoolFactory__factory.connect(\n this.contractAddresses.composableStablePoolFactory,\n provider\n );\n }\n let weightedPoolFactory: undefined | WeightedPoolFactory;\n if (this.contractAddresses.weightedPoolFactory) {\n weightedPoolFactory = WeightedPoolFactory__factory.connect(\n this.contractAddresses.weightedPoolFactory,\n provider\n );\n }\n let aaveLinearPoolFactory: undefined | AaveLinearPoolFactory;\n if (this.contractAddresses.aaveLinearPoolFactory) {\n aaveLinearPoolFactory = AaveLinearPoolFactory__factory.connect(\n this.contractAddresses.aaveLinearPoolFactory,\n provider\n );\n }\n let erc4626LinearPoolFactory: undefined | ERC4626LinearPoolFactory;\n if (this.contractAddresses.erc4626LinearPoolFactory) {\n erc4626LinearPoolFactory = ERC4626LinearPoolFactory__factory.connect(\n this.contractAddresses.erc4626LinearPoolFactory,\n provider\n );\n }\n let eulerLinearPoolFactory: undefined | EulerLinearPoolFactory;\n if (this.contractAddresses.eulerLinearPoolFactory) {\n eulerLinearPoolFactory = EulerLinearPoolFactory__factory.connect(\n this.contractAddresses.eulerLinearPoolFactory,\n provider\n );\n }\n let gearboxLinearPoolFactory: undefined | GearboxLinearPoolFactory;\n if (this.contractAddresses.gearboxLinearPoolFactory) {\n gearboxLinearPoolFactory = GearboxLinearPoolFactory__factory.connect(\n this.contractAddresses.gearboxLinearPoolFactory,\n provider\n );\n }\n let yearnLinearPoolFactory: undefined | YearnLinearPoolFactory;\n if (this.contractAddresses.yearnLinearPoolFactory) {\n yearnLinearPoolFactory = YearnLinearPoolFactory__factory.connect(\n this.contractAddresses.yearnLinearPoolFactory,\n provider\n );\n }\n let gyroConfig: undefined | GyroConfig;\n if (this.contractAddresses.gyroConfigProxy) {\n gyroConfig = GyroConfig__factory.connect(\n this.contractAddresses.gyroConfigProxy,\n provider\n );\n }\n\n this.instances = {\n aaveLinearPoolFactory,\n balancerHelpers,\n BasePool: this.getBasePool,\n composableStablePoolFactory,\n ERC20: this.getErc20,\n erc4626LinearPoolFactory,\n eulerLinearPoolFactory,\n gaugeClaimHelper,\n gearboxLinearPoolFactory,\n gyroConfig,\n liquidityGauge: this.getLiquidityGauge,\n lidoRelayer,\n multicall,\n relayer,\n veBal,\n veBalProxy,\n weightedPoolFactory,\n yearnLinearPoolFactory,\n vault,\n };\n }\n\n /**\n * Expose contract instances.\n */\n get contracts(): ContractInstances {\n return this.instances;\n }\n\n /**\n * Helper to create ERC20 contract.\n * @param { string } address ERC20 address.\n * @param { Signer | Provider } signerOrProvider Signer or Provider.\n * @returns Contract.\n */\n getErc20(address: string, signerOrProvider: Signer | Provider): ERC20 {\n return ERC20__factory.connect(address, signerOrProvider);\n }\n\n /**\n * Helper to create base pool contract.\n * @param { string } address pool address.\n * @param { Signer | Provider } signerOrProvider Signer or Provider.\n * @returns Contract.\n */\n getBasePool(address: string, signerOrProvider: Signer | Provider): Contract {\n return BasePool(address, signerOrProvider);\n }\n\n /**\n * Helper to create LiquidityGauge contract.\n * @param { string } address Gauge address.\n * @param { Signer | Provider} signerOrProvider Signer or Provider.\n * @returns Contract.\n */\n getLiquidityGauge = LiquidityGaugeV5__factory.connect;\n}\n","/**\n * Calculate the Impermanent Loss for a given pool and user.\n *\n * 1. Prepare the data:\n * a. get exit price for pools' tokens\n * b. get entry price for pools' tokens\n * 2. calculate delta values for tokens in pools\n * 3. calculate and return the impermanent loss as percentage rounded to 2 decimal places.\n *\n */\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Findable, Pool, PoolToken, Price } from '@/types';\nimport { Logger } from '@/lib/utils/logger';\n\ntype Asset = {\n priceDelta: number;\n weight: number;\n};\n\ntype TokenPrices = {\n [key: string]: number;\n};\n\nexport class ImpermanentLossService {\n constructor(\n private tokenPrices: Findable,\n private tokenHistoricalPrices: Findable\n ) {}\n\n /**\n * entry point to calculate impermanent loss.\n *\n * The function will\n * - retrieve the tokens' historical value at the desired time in the future\n * - calculate the relative variation between current and historical value\n * - return the IL in percentage rounded to 2 decimal places\n *\n * @param timestamp UNIX timestamp from which the IL is desired\n * @param pool the pool\n * @returns the impermanent loss as percentage rounded to 2 decimal places\n */\n async calcImpLoss(timestamp: number, pool: Pool): Promise {\n if (timestamp * 1000 >= Date.now()) {\n console.error(\n `[ImpermanentLossService][calcImpLoss]Error: ${BalancerError.getMessage(\n BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE\n )}`\n );\n throw new BalancerError(BalancerErrorCode.TIMESTAMP_IN_THE_FUTURE);\n }\n const assets = await this.prepareData(timestamp, pool);\n\n const poolValueDelta = this.getPoolValueDelta(assets);\n const holdValueDelta = this.getHoldValueDelta(assets);\n\n const impLoss = this.calculateImpermanentLoss(\n poolValueDelta,\n holdValueDelta\n );\n return impLoss;\n }\n\n calculateImpermanentLoss(\n poolValueDelta: number,\n holdValueDelta: number\n ): number {\n return (\n Math.floor(Math.abs(poolValueDelta / holdValueDelta - 1) * 100 * 100) /\n 100\n );\n }\n\n getPoolValueDelta(assets: Asset[]): number {\n return assets.reduce(\n (result, asset) =>\n result * Math.pow(Math.abs(asset.priceDelta + 1), asset.weight),\n 1\n );\n }\n\n getHoldValueDelta(assets: Asset[]): number {\n return assets.reduce(\n (result, asset) => result + Math.abs(asset.priceDelta + 1) * asset.weight,\n 0\n );\n }\n\n /**\n * prepare the data for calculating the impermanent loss\n *\n * @param entryTimestamp UNIX timestamp from which the IL is desired\n * @param pool the pool\n * @returns a list of pair weight/price delta for each token in the pool\n * @throws BalancerError if\n * 1. a token's price is unknown\n * 2. a token's weight is unknown\n * 3. the user has no liquidity invested in the pool\n */\n async prepareData(entryTimestamp: number, pool: Pool): Promise {\n const poolTokens = pool.tokens.filter(\n (token) => token.address !== pool.address\n );\n\n const weights = this.getWeights(poolTokens);\n\n const tokenAddresses = poolTokens.map((t) => t.address);\n\n const entryPrices = await this.getEntryPrices(\n entryTimestamp,\n tokenAddresses\n );\n const exitPrices: TokenPrices = await this.getExitPrices(poolTokens);\n\n return this.getAssets(poolTokens, exitPrices, entryPrices, weights);\n }\n\n getAssets(\n poolTokens: PoolToken[],\n exitPrices: TokenPrices,\n entryPrices: TokenPrices,\n weights: number[]\n ): Asset[] {\n return poolTokens.map((token, i) => ({\n priceDelta: this.getDelta(\n entryPrices[token.address],\n exitPrices[token.address]\n ),\n weight: weights[i],\n }));\n }\n\n getDelta(entryPrice: number, exitPrice: number): number {\n if (entryPrice === 0) {\n console.error(\n `[ImpermanentLossService][getDelta]Error: ${BalancerError.getMessage(\n BalancerErrorCode.ILLEGAL_PARAMETER\n )}: entry price is 0`\n );\n throw new BalancerError(BalancerErrorCode.ILLEGAL_PARAMETER);\n }\n return (exitPrice - entryPrice) / entryPrice;\n }\n\n /**\n * returns the list of token's weights.\n *\n * @param poolTokens the pools' tokens\n * @returns the list of token's weights\n * @throws BalancerError if a token's weight is missing\n *\n */\n getWeights(poolTokens: PoolToken[]): number[] {\n const noWeights = poolTokens.every((token) => !token.weight);\n const uniformWeight = Math.round((1 / poolTokens.length) * 100) / 100;\n const weights: number[] = noWeights\n ? poolTokens.map(() => uniformWeight) // if no weight is returned we assume the tokens are balanced uniformly in the pool\n : poolTokens.map((token) => Number(token.weight ?? 0));\n\n if (weights.some((w) => w === 0)) {\n console.error(\n `[ImpermanentLossService][getWeights]Error: ${BalancerError.getMessage(\n BalancerErrorCode.MISSING_WEIGHT\n )}`\n );\n throw new BalancerError(BalancerErrorCode.MISSING_WEIGHT);\n }\n return weights;\n }\n\n /**\n * get the current's tokens' prices\n * @param tokens the pools' tokens\n * @returns a list of tokens with prices\n */\n async getExitPrices(tokens: PoolToken[]): Promise {\n const prices = await Promise.all(\n tokens.map((token) => this.tokenPrices.find(token.address))\n ).catch(() => []);\n\n if (!prices.length || prices.some((price) => price?.usd === undefined)) {\n console.error(\n `[ImpermanentLossService][getExitPrices]Error: ${BalancerError.getMessage(\n BalancerErrorCode.MISSING_PRICE_RATE\n )}`\n );\n throw new BalancerError(BalancerErrorCode.MISSING_PRICE_RATE);\n }\n\n const tokensWithPrice = tokens.map((token, i) => ({\n ...token,\n price: prices[i],\n }));\n\n const tokenPrices: TokenPrices = {};\n for (const token of tokensWithPrice) {\n if (token.price?.usd) tokenPrices[token.address] = +token.price.usd; // price.usd is never undefined but JS complains\n }\n return tokenPrices;\n }\n\n /**\n * get the tokens' price at a given time\n *\n * @param timestamp the Unix timestamp\n * @param tokenAddresses the tokens' addresses\n * @returns a map of tokens' price\n */\n async getEntryPrices(\n timestamp: number,\n tokenAddresses: string[]\n ): Promise {\n const prices: TokenPrices = {};\n for (const address of tokenAddresses) {\n const price = await this.tokenHistoricalPrices\n .findBy(address, timestamp)\n .catch((reason) => {\n const logger = Logger.getInstance();\n logger.warn(\n `[ImpermanentLossService][getEntryPrices]Error: ${reason.message}`\n );\n return undefined;\n });\n if (!price?.usd) {\n const logger = Logger.getInstance();\n logger.warn(\n `[ImpermanentLossService][getEntryPrices]Error: ${BalancerError.getMessage(\n BalancerErrorCode.MISSING_PRICE_RATE\n )}`\n );\n throw new BalancerError(BalancerErrorCode.MISSING_PRICE_RATE);\n }\n prices[address] = +price.usd;\n }\n return prices;\n }\n}\n","/**\n * Weekly Bal emissions are fixed / year according to:\n * https://docs.google.com/spreadsheets/d/1FY0gi596YWBOTeu_mrxhWcdF74SwKMNhmu0qJVgs0KI/edit#gid=0\n *\n * Using regular numbers for simplicity assuming frontend use only.\n *\n * Calculation source\n * https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/liquidity-mining/contracts/BalancerTokenAdmin.sol\n */\n\nexport const INITIAL_RATE = 145000;\nexport const START_EPOCH_TIME = 1648465251;\nconst RATE_REDUCTION_TIME = 365 * 86400;\nconst RATE_REDUCTION_COEFFICIENT = 2 ** (1 / 4);\n\n/**\n * Weekly BAL emissions\n *\n * @param currentTimestamp used to get the epoch\n * @returns BAL emitted in a week\n */\nexport const weekly = (\n currentTimestamp: number = Math.round(new Date().getTime() / 1000)\n): number => {\n const miningEpoch = Math.floor(\n (currentTimestamp - START_EPOCH_TIME) / RATE_REDUCTION_TIME\n );\n\n const rate = INITIAL_RATE * RATE_REDUCTION_COEFFICIENT ** -miningEpoch;\n\n return rate;\n};\n\n/**\n * Total BAL emitted in epoch (1 year)\n *\n * @param epoch starting from 0 for the first year of emissions\n * @returns BAL emitted in epoch\n */\nexport const total = (epoch: number): number => {\n const weeklyRate = INITIAL_RATE * RATE_REDUCTION_COEFFICIENT ** -epoch;\n const dailyRate = weeklyRate / 7;\n\n return dailyRate * 365;\n};\n\n/**\n * Total BAL emitted between two timestamps\n *\n * @param start starting timestamp\n * @param end ending timestamp\n * @returns BAL emitted in period\n */\nexport const between = (start: number, end: number): number => {\n if (start < START_EPOCH_TIME) {\n throw 'start timestamp before emission schedule deployment';\n }\n if (end < start) {\n throw 'cannot finish before starting';\n }\n\n let totalEmissions = 0;\n\n const startingEpoch = Math.floor(\n (start - START_EPOCH_TIME) / RATE_REDUCTION_TIME\n );\n const endingEpoch = Math.floor(\n (end - START_EPOCH_TIME) / RATE_REDUCTION_TIME\n );\n\n for (\n let currentEpoch = startingEpoch;\n currentEpoch <= endingEpoch;\n currentEpoch++\n ) {\n totalEmissions += total(currentEpoch);\n }\n\n // Subtract what isn't emmited within the time range\n const startingEpochEnd =\n START_EPOCH_TIME + RATE_REDUCTION_TIME * (startingEpoch + 1);\n const endingEpochStart = START_EPOCH_TIME + RATE_REDUCTION_TIME * endingEpoch;\n\n const secondsInStartingEpoch = startingEpochEnd - start;\n const secondsInEndingEpoch = end - endingEpochStart;\n\n totalEmissions -=\n (total(startingEpoch) * (RATE_REDUCTION_TIME - secondsInStartingEpoch)) /\n RATE_REDUCTION_TIME;\n totalEmissions -=\n (total(endingEpoch) * (RATE_REDUCTION_TIME - secondsInEndingEpoch)) /\n RATE_REDUCTION_TIME;\n\n return totalEmissions;\n};\n","import { Findable, Price } from '@/types';\nimport { BaseFeeDistributor } from '@/modules/data';\n\nexport interface ProtocolRevenueData {\n lastWeekBalRevenue: number;\n lastWeekBBAUsdRevenue: number;\n veBalSupply: number;\n}\n\nexport class ProtocolRevenue {\n constructor(\n private repository: BaseFeeDistributor,\n private tokenPrices: Findable\n ) {}\n\n async data(now = Date.now()): Promise {\n const data = await this.repository.multicallData(now);\n const balPrice = await this.tokenPrices.find(data.balAddress);\n\n if (!balPrice || !balPrice.usd) {\n throw `No BAL USD price found`;\n }\n\n return {\n lastWeekBalRevenue: data.balAmount * parseFloat(balPrice.usd),\n lastWeekBBAUsdRevenue: data.bbAUsdAmount * data.bbAUsdPrice,\n veBalSupply: data.veBalSupply,\n };\n }\n}\n","/**\n * Calculates pool fees\n *\n * 1. Pool fees in last 24hrs\n */\nimport { isLessThan24Hours } from '@/lib/utils/time';\nimport { Pool, Findable, PoolAttribute } from '@/types';\n\nexport class PoolFees {\n constructor(\n private yesterdaysPools: Findable | undefined\n ) {}\n\n // 🚨 this is adding 1 call to get yesterday's block height and 2nd call to fetch yesterday's pools data from subgraph\n // TODO: find a better data source for that eg. add blocks to graph, replace with a database, or dune\n async last24h(pool: Pool): Promise {\n let yesterdaysPool;\n if (this.yesterdaysPools) {\n yesterdaysPool = await this.yesterdaysPools.find(pool.id);\n }\n if (!pool.totalSwapFee) {\n return 0;\n }\n\n if (!yesterdaysPool?.totalSwapFee) {\n // Process edge case when pool creation time is less that 24h\n if (pool.createTime && isLessThan24Hours(pool.createTime)) {\n return parseFloat(pool.totalSwapFee);\n }\n return 0;\n }\n\n return (\n parseFloat(pool.totalSwapFee) - parseFloat(yesterdaysPool.totalSwapFee)\n );\n }\n}\n","import { formatUnits } from '@ethersproject/units';\nimport * as emissions from '@/modules/data/bal/emissions';\nimport type {\n Findable,\n Pool,\n PoolAttribute,\n Price,\n Token,\n TokenAttribute,\n LiquidityGauge,\n Network,\n PoolToken,\n} from '@/types';\nimport { BaseFeeDistributor } from '@/modules/data';\nimport { ProtocolRevenue } from './protocol-revenue';\nimport { Liquidity } from '@/modules/liquidity/liquidity.module';\nimport { identity, zipObject, pickBy } from 'lodash';\nimport { PoolFees } from '../fees/fees';\nimport { BALANCER_NETWORK_CONFIG } from '@/lib/constants/config';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { Logger } from '@/lib/utils/logger';\nimport { GyroConfigRepository } from '@/modules/data/gyro-config/repository';\nimport { POOLS_TO_IGNORE } from '@/lib/constants/poolsToIgnore';\n\nexport interface AprBreakdown {\n swapFees: number;\n tokenAprs: {\n total: number;\n breakdown: { [address: string]: number };\n };\n stakingApr: {\n min: number;\n max: number;\n };\n rewardAprs: {\n total: number;\n breakdown: { [address: string]: number };\n };\n protocolApr: number;\n min: number;\n max: number;\n}\n\n/**\n * Calculates pool APR via summing up sources of APR:\n *\n * 1. Swap fees (pool level) data coming from subgraph\n * 2. Yield bearing pool tokens, with data from external sources eg: http endpoints, subgraph, onchain\n * * stETH\n * * aave\n * * usd+\n * map token: calculatorFn\n * 3. Staking rewards based from veBal gauges\n */\nexport class PoolApr {\n constructor(\n private pools: Findable,\n private tokenPrices: Findable,\n private tokenMeta: Findable,\n private tokenYields: Findable,\n private feeCollector: Findable,\n private yesterdaysPools?: Findable,\n private liquidityGauges?: Findable,\n private feeDistributor?: BaseFeeDistributor,\n private gyroConfigRepository?: GyroConfigRepository\n ) {}\n\n /**\n * Pool revenue via swap fees.\n * Fees and liquidity are takes from subgraph as USD floats.\n *\n * @returns APR [bsp] from fees accumulated over last 24h\n */\n async swapFees(pool: Pool): Promise {\n // 365 * dailyFees * (1 - protocolFees) / totalLiquidity\n const last24hFees = await this.last24hFees(pool);\n const totalLiquidity = await this.totalLiquidity(pool);\n // TODO: what to do when we are missing last24hFees or totalLiquidity?\n // eg: stable phantom returns 0\n if (!last24hFees || !totalLiquidity) {\n return 0;\n }\n const dailyFees =\n last24hFees * (1 - (await this.protocolSwapFeePercentage(pool)));\n const feesDailyBsp = 10000 * (dailyFees / parseFloat(totalLiquidity));\n\n return Math.round(365 * feesDailyBsp);\n }\n\n /**\n * Pool revenue from holding yield-bearing wrapped tokens.\n *\n * @returns APR [bsp] from tokens contained in the pool\n */\n async tokenAprs(pool: Pool): Promise {\n if (!pool.tokens) {\n return {\n total: 0,\n breakdown: {},\n };\n }\n\n const totalLiquidity = await this.totalLiquidity(pool);\n\n // Filter out BPT: token with the same address as the pool\n // TODO: move this to data layer\n const bptFreeTokens = pool.tokens.filter((token) => {\n return token.address !== pool.address;\n });\n\n // Get each token APRs\n const aprs = await Promise.all(\n bptFreeTokens.map(async (token) => {\n let apr = 0;\n const tokenYield = await this.tokenYields.find(token.address);\n if (tokenYield) {\n // metastable pools incorrectly apply the swap fee to the yield earned.\n // they don't have the concept of a yield fee like the newer pools do.\n if (\n pool.poolType === 'MetaStable' ||\n pool.poolType.includes('Gyro')\n ) {\n apr =\n tokenYield * (1 - (await this.protocolSwapFeePercentage(pool)));\n } else if (\n pool.poolType === 'ComposableStable' ||\n (pool.poolType === 'Weighted' && pool.poolTypeVersion >= 2)\n ) {\n if (token.isExemptFromYieldProtocolFee) {\n apr = tokenYield;\n } else {\n apr =\n tokenYield *\n (1 - parseFloat(pool.protocolYieldFeeCache || '0.5'));\n }\n } else {\n apr = tokenYield;\n }\n } else {\n // Handle subpool APRs with recursive call to get the subPool APR\n const subPool = await this.pools.findBy('address', token.address);\n\n if (subPool) {\n // INFO: Liquidity mining APR can't cascade to other pools\n const subSwapFees = await this.swapFees(subPool);\n const subtokenAprs = await this.tokenAprs(subPool);\n let subApr = subtokenAprs.total;\n if (\n pool.poolType === 'ComposableStable' ||\n (pool.poolType === 'Weighted' && pool.poolTypeVersion === 2)\n ) {\n if (!token.isExemptFromYieldProtocolFee) {\n subApr =\n subApr *\n (1 - parseFloat(pool.protocolYieldFeeCache || '0.5'));\n }\n }\n apr = subSwapFees + subApr;\n }\n }\n\n return apr;\n })\n );\n\n // Get token weights normalised by usd price\n const getWeight = async (token: PoolToken): Promise => {\n let tokenPrice: string | undefined;\n if (token.weight) {\n return parseFloat(token.weight);\n } else if (token.token?.pool?.poolType) {\n const poolToken = await this.pools.findBy('address', token.address);\n if (poolToken) {\n tokenPrice = (await this.bptPrice(poolToken)).toString();\n }\n } else {\n tokenPrice =\n token.price?.usd ||\n (await this.tokenPrices.find(token.address))?.usd ||\n token.token?.latestUSDPrice;\n }\n if (tokenPrice) {\n // using floats assuming frontend purposes with low precision needs\n const tokenValue = parseFloat(token.balance) * parseFloat(tokenPrice);\n return tokenValue / parseFloat(totalLiquidity);\n } else {\n throw `No price for ${token.address}`;\n }\n };\n\n // Normalise tokenAPRs according to weights\n const weightedAprs = await Promise.all(\n bptFreeTokens.map(async (token, idx) => {\n if (aprs[idx] === 0) {\n return 0;\n }\n\n // Handle missing token weights, usually due to missing token prices\n try {\n const weight = await getWeight(token);\n return Math.round(aprs[idx] * weight);\n } catch (e) {\n const logger = Logger.getInstance();\n logger.error(e as string);\n return 0;\n }\n })\n );\n\n // sum them up to get pool APRs\n const apr = weightedAprs.reduce((sum, apr) => sum + apr, 0);\n const breakdown = pickBy(\n zipObject(\n bptFreeTokens.map((t) => t.address),\n weightedAprs\n ),\n identity\n );\n\n return {\n total: apr,\n breakdown,\n };\n }\n\n /**\n * Calculates staking rewards based on veBal gauges deployed with Curve Finance contracts.\n * https://curve.readthedocs.io/dao-gauges.html\n *\n * Terminology:\n * - LP token of a gauge is a BPT of a pool\n * - Depositing into a gauge is called staking on the frontend\n * - gauge totalSupply - BPT tokens deposited to a gauge\n * - gauge workingSupply - effective BPT tokens participating in reward distribution. sum of 40% deposit + 60% boost from individual user's veBal\n * - gauge relative weight - weight of this gauge in bal inflation distribution [0..1] scaled to 1e18\n *\n * APR sources:\n * - gauge BAL emissions = min: 40% of totalSupply, max: 40% of totalSupply + 60% of totalSupply * gauge LPs voting power\n * https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/liquidity-mining/contracts/gauges/ethereum/LiquidityGaugeV5.vy#L338\n * - gauge reward tokens: Admin or designated depositor has an option to deposit additional reward with a weekly accruing cadence.\n * https://github.com/balancer-labs/balancer-v2-monorepo/blob/master/pkg/liquidity-mining/contracts/gauges/ethereum/LiquidityGaugeV5.vy#L641\n * rate: amount of token per second\n *\n * @param pool\n * @param boost range between 1 and 2.5\n * @returns APR [bsp] from protocol rewards.\n */\n async stakingApr(pool: Pool, boost = 1): Promise {\n if (!this.liquidityGauges) {\n return 0;\n }\n\n // Data resolving\n const gauge = await this.liquidityGauges.findBy('poolId', pool.id);\n if (\n !gauge ||\n (pool.chainId == 1 && gauge.workingSupply === 0) ||\n (pool.chainId > 1 && gauge.totalSupply === 0) ||\n (pool.chainId > 1 && gauge.balInflationRate === 0)\n ) {\n return 0;\n }\n\n const bal =\n BALANCER_NETWORK_CONFIG[pool.chainId as Network].addresses.tokens.bal;\n if (!bal) {\n return 0;\n }\n\n const [balPrice, bptPriceUsd] = await Promise.all([\n this.tokenPrices.find(bal), // BAL\n this.bptPrice(pool),\n ]);\n\n if (!balPrice?.usd) {\n throw 'Missing BAL price';\n }\n\n const gaugeSupply = (gauge.workingSupply + 0.4) / 0.4; // Only 40% of LP token staked accrue emissions, totalSupply = workingSupply * 2.5\n const gaugeSupplyUsd = gaugeSupply * bptPriceUsd;\n\n // Handle child chain gauges with inflation_rate\n // balInflationRate - amount of BAL tokens per second as a float\n if (gauge.balInflationRate) {\n const reward =\n gauge.balInflationRate * 86400 * 365 * parseFloat(balPrice.usd);\n return Math.round((boost * 10000 * reward) / gaugeSupplyUsd);\n } else if (pool.chainId > 1) {\n // TODO: remove after all gauges are migrated (around 01-07-2023), Subgraph is returning BAL staking rewards as reward tokens for L2 gauges.\n if (!gauge.rewardTokens) {\n return 0;\n }\n\n const balReward = bal && gauge.rewardTokens[bal];\n if (balReward) {\n let reward: { address: string; value: number };\n try {\n reward = await this.rewardTokenApr(bal, balReward);\n const totalSupplyUsd = gauge.totalSupply * bptPriceUsd;\n const rewardValue = reward.value / totalSupplyUsd;\n return Math.round(10000 * rewardValue);\n } catch (e) {\n return 0;\n }\n } else {\n return 0;\n }\n }\n\n // Handle mainnet gauges\n const balPriceUsd = parseFloat(balPrice.usd);\n const now = Math.round(new Date().getTime() / 1000);\n const totalBalEmissions = (emissions.weekly(now) / 7) * 365;\n const gaugeBalEmissions = totalBalEmissions * gauge.relativeWeight;\n const gaugeBalEmissionsUsd = gaugeBalEmissions * balPriceUsd;\n const gaugeBalAprBps = Math.round(\n (boost * 10000 * gaugeBalEmissionsUsd) / gaugeSupplyUsd\n );\n\n return gaugeBalAprBps;\n }\n\n /**\n * Some gauges are holding tokens distributed as rewards to LPs.\n *\n * @param pool\n * @returns APR [bsp] from token rewards.\n */\n async rewardAprs(pool: Pool): Promise {\n if (!this.liquidityGauges) {\n return { total: 0, breakdown: {} };\n }\n\n // Data resolving\n const gauge = await this.liquidityGauges.findBy('poolId', pool.id);\n if (\n !gauge ||\n !gauge.rewardTokens ||\n Object.keys(gauge.rewardTokens).length < 1\n ) {\n return { total: 0, breakdown: {} };\n }\n\n // BAL rewards already returned as stakingApr, so we can filter them out\n const bal =\n BALANCER_NETWORK_CONFIG[pool.chainId as Network].addresses.tokens.bal;\n const rewardTokenAddresses = Object.keys(gauge.rewardTokens).filter(\n (a) => a != bal\n );\n\n // Gets each tokens rate, extrapolate to a year and convert to USD\n const rewards = rewardTokenAddresses.map(async (tAddress) => {\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n const data = gauge!.rewardTokens![tAddress];\n try {\n const reward = await this.rewardTokenApr(tAddress, data);\n return reward;\n } catch (e) {\n return { address: tAddress, value: 0 };\n }\n });\n\n // Get the gauge totalSupplyUsd\n const bptPriceUsd = await this.bptPrice(pool);\n const totalSupplyUsd = gauge.totalSupply * bptPriceUsd;\n\n if (totalSupplyUsd == 0) {\n return { total: 0, breakdown: {} };\n }\n\n const rewardTokensBreakdown: Record = {};\n\n let total = 0;\n for await (const reward of Object.values(rewards)) {\n const rewardValue = reward.value / totalSupplyUsd;\n const rewardValueScaled = Math.round(10000 * rewardValue);\n total += rewardValueScaled;\n rewardTokensBreakdown[reward.address] = rewardValueScaled;\n }\n\n return {\n total,\n breakdown: rewardTokensBreakdown,\n };\n }\n\n /**\n * 80BAL-20WETH pool is accruing protocol revenue.\n *\n * @param pool\n * @returns accrued protocol revenue as APR [bsp]\n */\n async protocolApr(pool: Pool): Promise {\n const veBalPoolId =\n '0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014';\n\n if (pool.id != veBalPoolId || !this.feeDistributor) {\n return 0;\n }\n\n const revenue = new ProtocolRevenue(this.feeDistributor, this.tokenPrices);\n\n const { lastWeekBalRevenue, lastWeekBBAUsdRevenue, veBalSupply } =\n await revenue.data();\n\n const bptPrice = await this.bptPrice(pool);\n if (!bptPrice) {\n throw 'bptPrice for veBal pool missing';\n }\n\n const dailyRevenue = (lastWeekBalRevenue + lastWeekBBAUsdRevenue) / 7;\n const apr = Math.round(\n (10000 * (365 * dailyRevenue)) / (bptPrice * veBalSupply)\n );\n\n return apr;\n }\n\n /**\n * Composes all sources for total pool APR.\n *\n * @returns pool APR split [bsp]\n */\n async apr(pool: Pool): Promise {\n if (POOLS_TO_IGNORE.includes(pool.id)) {\n return {\n swapFees: 0,\n tokenAprs: {\n total: 0,\n breakdown: {},\n },\n stakingApr: {\n min: 0,\n max: 0,\n },\n rewardAprs: {\n total: 0,\n breakdown: {},\n },\n protocolApr: 0,\n min: 0,\n max: 0,\n };\n }\n const [\n swapFees,\n tokenAprs,\n minStakingApr,\n maxStakingApr,\n rewardAprs,\n protocolApr,\n ] = await Promise.all([\n this.swapFees(pool), // pool snapshot for last 24h fees dependency\n this.tokenAprs(pool),\n this.stakingApr(pool),\n this.stakingApr(pool, 2.5),\n this.rewardAprs(pool),\n this.protocolApr(pool),\n ]);\n\n return {\n swapFees,\n tokenAprs,\n stakingApr: {\n min: minStakingApr,\n max: maxStakingApr,\n },\n rewardAprs,\n protocolApr,\n min: swapFees + tokenAprs.total + rewardAprs.total + minStakingApr,\n max:\n swapFees +\n tokenAprs.total +\n rewardAprs.total +\n protocolApr +\n maxStakingApr,\n };\n }\n\n private async last24hFees(pool: Pool): Promise {\n const poolFees = new PoolFees(this.yesterdaysPools);\n return poolFees.last24h(pool);\n }\n\n /**\n * Total Liquidity based on USD token prices taken from external price feed, eg: coingecko.\n *\n * @param pool\n * @returns Pool liquidity in USD\n */\n private async totalLiquidity(pool: Pool): Promise {\n try {\n const liquidityService = new Liquidity(this.pools, this.tokenPrices);\n const liquidity = await liquidityService.getLiquidity(pool);\n return liquidity;\n } catch (err) {\n const logger = Logger.getInstance();\n logger.warn('Liquidity calculcation failed, falling back to subgraph');\n return pool.totalLiquidity;\n }\n }\n\n /**\n * BPT price as pool totalLiquidity / pool total Shares\n * Total Liquidity is calculated based on USD token prices taken from external price feed, eg: coingecko.\n *\n * @param pool\n * @returns BPT price in USD\n */\n private async bptPrice(pool: Pool) {\n return (\n parseFloat(await this.totalLiquidity(pool)) / parseFloat(pool.totalShares)\n );\n }\n\n private async protocolSwapFeePercentage(pool: Pool) {\n let fee = 0.5;\n if (pool.poolType.includes('Gyro') && this.gyroConfigRepository) {\n fee = await this.gyroConfigRepository.getGyroProtocolFee(pool.address);\n } else if (pool.protocolSwapFeeCache) {\n fee = parseFloat(pool.protocolSwapFeeCache);\n } else {\n fee = (await this.feeCollector.find('')) || 0.5;\n }\n return fee;\n }\n\n private async rewardTokenApr(\n tokenAddress: string,\n rewardData: { rate: BigNumber; period_finish: BigNumber; decimals?: number }\n ) {\n if (rewardData.period_finish.toNumber() < Date.now() / 1000) {\n return {\n address: tokenAddress,\n value: 0,\n };\n } else {\n const yearlyReward = rewardData.rate.mul(86400).mul(365);\n const price = await this.tokenPrices.find(tokenAddress);\n if (price && price.usd) {\n let decimals = 18;\n if (rewardData.decimals) {\n decimals = rewardData.decimals;\n } else {\n const meta = await this.tokenMeta.find(tokenAddress);\n decimals = meta?.decimals || 18;\n }\n const yearlyRewardUsd =\n parseFloat(formatUnits(yearlyReward, decimals)) *\n parseFloat(price.usd);\n return {\n address: tokenAddress,\n value: yearlyRewardUsd,\n };\n } else {\n throw `No USD price for ${tokenAddress}`;\n }\n }\n }\n}\n","import { BigNumber, parseFixed } from '@ethersproject/bignumber';\nimport { Zero, WeiPerEther } from '@ethersproject/constants';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { isSameAddress, parsePoolInfo } from '@/lib/utils';\nimport { _downscaleDown } from '@/lib/utils/solidityMaths';\nimport { Pool, PoolAttribute, PoolType } from '@/types';\n\nimport { Findable } from '../data/types';\nimport { PoolTypeConcerns } from '../pools/pool-type-concerns';\n\ntype SpotPrices = { [tokenIn: string]: string };\n\nconst supportedPoolTypes: string[] = Object.values(PoolType);\nexport interface Node {\n address: string;\n id: string;\n joinAction: JoinAction;\n exitAction: ExitAction;\n isProportionalExit: boolean;\n type: string;\n children: Node[];\n marked: boolean;\n index: string;\n proportionOfParent: BigNumber;\n parent: Node | undefined;\n isLeaf: boolean;\n spotPrices: SpotPrices;\n decimals: number;\n balance: string;\n priceRate: string;\n}\n\ntype JoinAction = 'input' | 'batchSwap' | 'wrap' | 'joinPool';\nconst joinActions = new Map();\nsupportedPoolTypes.forEach((type) => {\n if (type.includes('Linear') && supportedPoolTypes.includes(type))\n joinActions.set(type as PoolType, 'batchSwap');\n});\njoinActions.set(PoolType.Element, 'batchSwap');\njoinActions.set(PoolType.Investment, 'joinPool');\njoinActions.set(PoolType.LiquidityBootstrapping, 'joinPool');\njoinActions.set(PoolType.MetaStable, 'joinPool');\njoinActions.set(PoolType.Stable, 'joinPool');\njoinActions.set(PoolType.StablePhantom, 'batchSwap');\njoinActions.set(PoolType.Weighted, 'joinPool');\njoinActions.set(PoolType.ComposableStable, 'joinPool');\n\ntype ExitAction = 'output' | 'batchSwap' | 'unwrap' | 'exitPool';\nconst exitActions = new Map();\nsupportedPoolTypes.forEach((type) => {\n if (type.includes('Linear') && supportedPoolTypes.includes(type))\n exitActions.set(type as PoolType, 'batchSwap');\n});\nexitActions.set(PoolType.Element, 'batchSwap');\nexitActions.set(PoolType.Investment, 'exitPool');\nexitActions.set(PoolType.LiquidityBootstrapping, 'exitPool');\nexitActions.set(PoolType.MetaStable, 'exitPool');\nexitActions.set(PoolType.Stable, 'exitPool');\nexitActions.set(PoolType.StablePhantom, 'batchSwap');\nexitActions.set(PoolType.Weighted, 'exitPool');\nexitActions.set(PoolType.ComposableStable, 'exitPool');\n\nexport class PoolGraph {\n constructor(private pools: Findable) {}\n\n async buildGraphFromRootPool(\n poolId: string,\n tokensToUnwrap: string[]\n ): Promise {\n const rootPool = await this.pools.find(poolId);\n if (!rootPool) throw new BalancerError(BalancerErrorCode.POOL_DOESNT_EXIST);\n const nodeIndex = 0;\n const rootNode = await this.buildGraphFromPool(\n rootPool.address,\n nodeIndex,\n undefined,\n WeiPerEther,\n tokensToUnwrap\n );\n return rootNode[0];\n }\n\n getTokenTotal(pool: Pool): BigNumber {\n const bptIndex = pool.tokensList.indexOf(pool.address);\n let total = Zero;\n const { balancesEvm } = parsePoolInfo(pool);\n balancesEvm.forEach((balance, i) => {\n // Ignore phantomBpt balance\n if (bptIndex !== i) {\n total = total.add(balance);\n }\n });\n return total;\n }\n\n async buildGraphFromPool(\n address: string,\n nodeIndex: number,\n parent: Node | undefined,\n proportionOfParent: BigNumber,\n tokensToUnwrap: string[]\n ): Promise<[Node, number]> {\n const pool = await this.pools.findBy('address', address);\n\n if (!pool) {\n if (!parent) {\n // If pool not found by address and is root pool (without parent), then throw error\n throw new BalancerError(BalancerErrorCode.POOL_DOESNT_EXIST);\n } else {\n // If pool not found by address, but it has parent, assume it's a leaf token and add a leafTokenNode\n const parentPool = (await this.pools.findBy(\n 'address',\n parent.address\n )) as Pool;\n const tokenIndex = parentPool.tokensList.indexOf(address);\n const leafTokenDecimals = parentPool.tokens[tokenIndex].decimals ?? 18;\n const { balancesEvm } = parsePoolInfo(parentPool);\n\n const nodeInfo = PoolGraph.createInputTokenNode(\n nodeIndex,\n address,\n leafTokenDecimals,\n parent,\n proportionOfParent,\n balancesEvm[tokenIndex].toString()\n );\n return nodeInfo;\n }\n }\n\n const joinAction = joinActions.get(pool.poolType);\n const exitAction = exitActions.get(pool.poolType);\n if (!joinAction || !exitAction)\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n\n const tokenTotal = this.getTokenTotal(pool);\n // Spot price service\n const { spotPriceCalculator } = PoolTypeConcerns.from(pool.poolType);\n const spotPrices: SpotPrices = {};\n let decimals = 18;\n // Spot price of a path is product of the sp of each pool in path. We calculate the sp for each pool token here to use as required later.\n pool.tokens.forEach((token) => {\n if (isSameAddress(token.address, pool.address)) {\n // Updated node with BPT token decimal\n decimals = token.decimals ? token.decimals : 18;\n return;\n }\n const sp = spotPriceCalculator.calcPoolSpotPrice(\n token.address,\n pool.address,\n pool\n );\n spotPrices[token.address] = sp;\n });\n\n let poolNode: Node = {\n address: pool.address,\n id: pool.id,\n type: pool.poolType,\n joinAction,\n exitAction,\n isProportionalExit: false,\n children: [],\n marked: false,\n index: nodeIndex.toString(),\n parent,\n proportionOfParent,\n isLeaf: false,\n spotPrices,\n decimals,\n balance: pool.totalShares,\n priceRate: WeiPerEther.toString(),\n };\n this.updateNodeIfProportionalExit(pool, poolNode);\n nodeIndex++;\n if (pool.poolType.toString().includes('Linear')) {\n [poolNode, nodeIndex] = this.createLinearNodeChildren(\n poolNode,\n nodeIndex,\n pool,\n tokensToUnwrap\n );\n } else {\n const { balancesEvm } = parsePoolInfo(pool);\n for (let i = 0; i < pool.tokens.length; i++) {\n // ignore any phantomBpt tokens\n if (isSameAddress(pool.tokens[i].address, pool.address)) continue;\n let proportion: BigNumber;\n // If the pool is a weighted pool we can use the actual tokenWeight as proportion\n if (pool.poolType === 'Weighted') {\n const tokenWeight = pool.tokens[i].weight as string;\n proportion = parseFixed(tokenWeight, 18);\n } else {\n proportion = BigNumber.from(balancesEvm[i])\n .mul((1e18).toString())\n .div(tokenTotal);\n }\n const finalProportion = proportion\n .mul(proportionOfParent)\n .div((1e18).toString());\n const childNode = await this.buildGraphFromPool(\n pool.tokens[i].address,\n nodeIndex,\n poolNode,\n finalProportion,\n tokensToUnwrap\n );\n nodeIndex = childNode[1];\n if (childNode[0]) poolNode.children.push(childNode[0]);\n }\n }\n return [poolNode, nodeIndex];\n }\n\n /**\n * Updates isProportionalExit for Node if the pool supports it\n * @param pool\n * @param node\n */\n updateNodeIfProportionalExit(pool: Pool, node: Node): void {\n if (pool.poolType === PoolType.Weighted) node.isProportionalExit = true;\n else if (\n pool.poolType === PoolType.ComposableStable &&\n pool.poolTypeVersion > 2\n )\n node.isProportionalExit = true;\n }\n\n createLinearNodeChildren(\n linearPoolNode: Node,\n nodeIndex: number,\n linearPool: Pool,\n tokensToUnwrap: string[]\n ): [Node, number] {\n // Main token\n if (linearPool.mainIndex === undefined)\n throw new Error('Issue With Linear Pool');\n\n if (\n tokensToUnwrap\n .map((t) => t.toLowerCase())\n .includes(linearPool.tokensList[linearPool.mainIndex].toLowerCase())\n ) {\n // Linear pool will be joined via wrapped token. This will be the child node.\n const wrappedNodeInfo = this.createWrappedTokenNode(\n linearPool,\n nodeIndex,\n linearPoolNode,\n linearPoolNode.proportionOfParent\n );\n linearPoolNode.children.push(wrappedNodeInfo[0]);\n return [linearPoolNode, wrappedNodeInfo[1]];\n } else {\n const { balancesEvm } = parsePoolInfo(linearPool);\n const mainTokenDecimals =\n linearPool.tokens[linearPool.mainIndex].decimals ?? 18;\n\n const nodeInfo = PoolGraph.createInputTokenNode(\n nodeIndex,\n linearPool.tokensList[linearPool.mainIndex],\n mainTokenDecimals,\n linearPoolNode,\n linearPoolNode.proportionOfParent,\n balancesEvm[linearPool.mainIndex].toString()\n );\n linearPoolNode.children.push(nodeInfo[0]);\n nodeIndex = nodeInfo[1];\n return [linearPoolNode, nodeIndex];\n }\n }\n\n createWrappedTokenNode(\n linearPool: Pool,\n nodeIndex: number,\n parent: Node | undefined,\n proportionOfParent: BigNumber\n ): [Node, number] {\n if (\n linearPool.wrappedIndex === undefined ||\n linearPool.mainIndex === undefined\n )\n throw new Error('Issue With Linear Pool');\n\n const { balancesEvm, upScaledBalances, scalingFactorsRaw, priceRates } =\n parsePoolInfo(linearPool);\n\n const wrappedTokenNode: Node = {\n type: 'WrappedToken',\n address: linearPool.tokensList[linearPool.wrappedIndex],\n id: 'N/A',\n children: [],\n marked: false,\n joinAction: 'wrap',\n exitAction: 'unwrap',\n isProportionalExit: false,\n index: nodeIndex.toString(),\n parent,\n proportionOfParent,\n isLeaf: false,\n spotPrices: {},\n decimals: 18,\n balance: balancesEvm[linearPool.wrappedIndex].toString(),\n priceRate: priceRates[linearPool.wrappedIndex].toString(),\n };\n nodeIndex++;\n\n const mainTokenDecimals =\n linearPool.tokens[linearPool.mainIndex].decimals ?? 18;\n\n /**\n * - upscaledBalances takes price rate into account, which is equivalent to unwrapping tokens\n * - downscaling with scalingFactorsRaw will downscale the unwrapped balance to the main token decimals\n */\n const unwrappedBalance = _downscaleDown(\n upScaledBalances[linearPool.wrappedIndex],\n scalingFactorsRaw[linearPool.mainIndex]\n ).toString();\n\n const inputNode = PoolGraph.createInputTokenNode(\n nodeIndex,\n linearPool.tokensList[linearPool.mainIndex],\n mainTokenDecimals,\n wrappedTokenNode,\n proportionOfParent,\n unwrappedBalance\n );\n wrappedTokenNode.children = [inputNode[0]];\n nodeIndex = inputNode[1];\n return [wrappedTokenNode, nodeIndex];\n }\n\n static createInputTokenNode(\n nodeIndex: number,\n address: string,\n decimals: number,\n parent: Node | undefined,\n proportionOfParent: BigNumber,\n balance: string\n ): [Node, number] {\n return [\n {\n address,\n id: 'N/A',\n type: 'Input',\n children: [],\n marked: false,\n joinAction: 'input',\n exitAction: 'output',\n isProportionalExit: false,\n index: nodeIndex.toString(), // This will be updated with real amounts in join construction.\n parent,\n proportionOfParent,\n isLeaf: true,\n spotPrices: {},\n decimals,\n balance,\n priceRate: WeiPerEther.toString(),\n },\n nodeIndex + 1,\n ];\n }\n\n static orderByBfs(root: Node): Node[] {\n // Breadth first traversal of graph\n const nodes: Node[] = [];\n const orderedNodes: Node[] = [];\n root.marked = true;\n nodes.push(root);\n while (nodes.length > 0) {\n const currentNode = nodes.shift(); // removes first\n if (currentNode) orderedNodes.push(currentNode);\n currentNode?.children.forEach((c) => {\n if (!c.marked) {\n c.marked = true;\n nodes.push(c);\n }\n });\n }\n return orderedNodes;\n }\n\n // Return a list of leaf token addresses\n static getLeafAddresses(nodes: Node[]): string[] {\n return nodes.filter((n) => n.isLeaf).map((n) => n.address);\n }\n\n /**\n * Checks if list of Nodes only contains pools that support proportional exits\n * @param nodes\n * @returns\n */\n static isProportionalPools(nodes: Node[]): boolean {\n return nodes.every((node) => {\n if (node.children.length > 1) return node.isProportionalExit;\n else return true;\n });\n }\n\n // Get full graph from root pool and return ordered nodes\n getGraphNodes = async (\n isJoin: boolean,\n poolId: string,\n tokensToUnwrap: string[]\n ): Promise => {\n const rootPool = await this.pools.find(poolId);\n if (!rootPool) throw new BalancerError(BalancerErrorCode.POOL_DOESNT_EXIST);\n\n const rootNode = await this.buildGraphFromRootPool(poolId, tokensToUnwrap);\n\n if (rootNode.id !== poolId) throw new Error('Error creating graph nodes');\n\n if (isJoin) return PoolGraph.orderByBfs(rootNode).reverse();\n else return PoolGraph.orderByBfs(rootNode);\n };\n}\n","import { defaultAbiCoder, Result } from '@ethersproject/abi';\n\nexport class WeightedPoolDecoder {\n /**\n * Cannot be constructed.\n */\n private constructor() {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n }\n\n /**\n * Decodes the userData parameter for providing the initial liquidity to a WeightedPool\n * @param data - encoded data\n */\n static joinInit = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256[]'], data);\n\n /**\n * Decodes the userData parameter for joining a WeightedPool with exact token inputs\n * @param data - encoded data\n */\n static joinExactTokensInForBPTOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256[]', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for joining a WeightedPool with a single token to receive an exact amount of BPT\n * @param data - encoded data\n */\n static joinTokenInForExactBPTOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for joining a WeightedPool proportionally to receive an exact amount of BPT\n * @param data - encoded data\n */\n static joinAllTokensInForExactBPTOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for exiting a WeightedPool by removing a single token in return for an exact amount of BPT\n * @param data - encoded data\n */\n static exitExactBPTInForOneTokenOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for exiting a WeightedPool by removing tokens in return for an exact amount of BPT\n * @param data - encoded data\n *\n */\n static exitExactBPTInForTokensOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256'], data);\n\n /**\n * Decodes the userData parameter for exiting a WeightedPool by removing exact amounts of tokens\n * @param data - encoded data\n */\n static exitBPTInForExactTokensOut = (data: string): Result =>\n defaultAbiCoder.decode(['uint256', 'uint256[]', 'uint256'], data);\n}\n","import { parseFixed, BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { defaultAbiCoder } from '@ethersproject/abi';\nimport { Zero } from '@ethersproject/constants';\nimport { bnum } from '@balancer-labs/sor';\n\nimport { PoolDictionary, Pool } from '../poolSource';\nimport { WeightedPoolDecoder } from '@/pool-weighted/decoder';\nimport { WeightedPoolJoinKind } from '@/pool-weighted/encoder';\nimport { isSameAddress } from '@/lib/utils';\nimport { Relayer } from '@/modules/relayer/relayer.module';\nimport { RelayerModel } from '../relayer';\nimport { ActionType } from '../vaultModel.module';\nimport { PoolToken } from '@/types';\n\nexport interface JoinPoolRequest {\n actionType: ActionType.Join;\n poolId: string;\n encodedUserData: string;\n outputReference: string;\n}\n\nexport class JoinModel {\n constructor(private relayerModel: RelayerModel) {}\n\n /**\n * Finds join kind given encoded user data.\n * @param encodedUserData\n * @returns\n */\n joinKind(encodedUserData: string): WeightedPoolJoinKind {\n const decodedUserData = defaultAbiCoder.decode(\n ['uint256'],\n encodedUserData\n );\n const joinKind = decodedUserData[0] as BigNumber;\n if (!joinKind) throw new Error('No exit kind.');\n return joinKind.toNumber() as WeightedPoolJoinKind;\n }\n\n /**\n * Decodes user join data and returns token input amounts\n * @param encodedUserData\n * @param joinKind\n * @returns\n */\n decodeJoinData(\n encodedUserData: string,\n joinKind: WeightedPoolJoinKind\n ): string | string[] {\n // At the moment all pools have same structure so just use WeightedPoolDecoded for all\n if (joinKind === WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT) {\n const bptAmountOut =\n WeightedPoolDecoder.joinAllTokensInForExactBPTOut(encodedUserData);\n return bptAmountOut.toString();\n } else if (joinKind === WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT) {\n const [, amountsIn] =\n WeightedPoolDecoder.joinExactTokensInForBPTOut(encodedUserData);\n return amountsIn;\n } else if (joinKind === WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT) {\n const [, bptAmountOut, tokenIndex] =\n WeightedPoolDecoder.joinTokenInForExactBPTOut(encodedUserData);\n return [bptAmountOut.toString(), tokenIndex];\n } else throw new Error('Non supported join data');\n }\n\n allTokensInForExactBPTOut(): string {\n throw new Error('joinAllTokensInForExactBPTOut not supported');\n /*\n We need maths for _calcAllTokensInGivenExactBptOut\n From SC:\n uint256 bptAmountOut = userData.allTokensInForExactBptOut();\n // Note that there is no maximum amountsIn parameter: this is handled by `IVault.joinPool`.\n \n uint256[] memory amountsIn = WeightedMath._calcAllTokensInGivenExactBptOut(balances, bptAmountOut, totalSupply);\n \n return (bptAmountOut, amountsIn);\n \n const bptAmountOut = this.decodeJoinData(\n encodedUserData,\n PoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT\n );\n */\n }\n\n joinExactTokensInForBPTOut(\n encodedUserData: string,\n pool: Pool\n ): [string, string[], string[]] {\n // This does not include a value for pre-minted BPT\n const amountsInWithRef = this.decodeJoinData(\n encodedUserData,\n WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT\n ) as string[];\n\n const amountsIn =\n this.relayerModel.doChainedRefReplacements(amountsInWithRef);\n // Calculate amount of BPT out given exact amounts in\n const bptAmountOut = pool._calcBptOutGivenExactTokensIn(\n amountsIn.map((a) => BigNumber.from(a))\n );\n\n // Updates BPT/totalShares value for pool\n if (\n pool.SubgraphType == 'StablePhantom' ||\n pool.SubgraphType == 'ComposableStable'\n ) {\n // Update BPT balance\n // totalShares will be updated as a side effect within SOR\n const bptAsPoolToken = pool.tokens.find((t: PoolToken) =>\n isSameAddress(t.address, pool.address)\n );\n if (!bptAsPoolToken)\n throw new Error('Pool does not contain BPT as a token');\n const bptBalanceEVM = parseFixed(\n bptAsPoolToken.balance.toString(),\n bptAsPoolToken.decimals\n );\n // subtract value because joining pool reduces pre-minted BPT being held by the pool\n pool.updateTokenBalanceForPool(\n pool.address,\n bptBalanceEVM.sub(bptAmountOut)\n );\n } else {\n // For pools that do not contain BPT as a token, update totalShares directly\n pool.updateTokenBalanceForPool(\n pool.address,\n pool.totalShares.add(bptAmountOut)\n );\n }\n\n const tokensWithoutBpt = pool.tokens.filter(\n (t: PoolToken) => !isSameAddress(t.address, pool.address)\n );\n // Update each tokens balance\n amountsIn.forEach((amount, i) => {\n const balanceEvm = parseFixed(\n tokensWithoutBpt[i].balance.toString(),\n tokensWithoutBpt[i].decimals\n );\n pool.updateTokenBalanceForPool(\n tokensWithoutBpt[i].address,\n balanceEvm.add(amount)\n );\n });\n return [\n bptAmountOut.toString(),\n tokensWithoutBpt.map((t: PoolToken) => t.address),\n amountsIn,\n ];\n }\n\n joinTokenInForExactBPTOut(\n encodedUserData: string,\n pool: Pool\n ): [string, string, string] {\n const [bptAmountOutWithRef, tokenInIndex] = this.decodeJoinData(\n encodedUserData,\n WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT\n ) as string;\n\n const bptAmountOut =\n this.relayerModel.doChainedRefReplacement(bptAmountOutWithRef);\n // Uses an existing SOR functionality so need to deal with pairData and scaling\n const pairData = pool.parsePoolPairData(\n pool.tokensList[Number(tokenInIndex)],\n pool.address\n );\n\n const bptAmountOutHuman = formatFixed(bptAmountOut, 18);\n // Needs human scale\n const amountInHuman = pool\n ._tokenInForExactTokenOut(\n pairData as never,\n bnum(bptAmountOutHuman.toString())\n )\n .dp(pairData.decimalsIn);\n const amountInEvm = parseFixed(\n amountInHuman.toString(),\n pairData.decimalsIn\n );\n\n // Update balances of tokenIn and tokenOut - use EVM scale\n pool.updateTokenBalanceForPool(\n pairData.tokenIn,\n pairData.balanceIn.add(amountInEvm)\n );\n // For a join we have to add the extra BPT to the balance as this is equivalent to bptTotalSupply\n pool.updateTokenBalanceForPool(\n pairData.tokenOut,\n pairData.balanceOut.add(bptAmountOut)\n );\n\n return [amountInEvm.toString(), pairData.tokenIn, amountInEvm.toString()];\n }\n\n /**\n * Perform the specified exit type.\n * @param joinPoolRequest\n * @returns tokens out\n */\n async doJoinPool(\n joinPoolRequest: JoinPoolRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n const pool = pools[joinPoolRequest.poolId];\n const joinKind = this.joinKind(joinPoolRequest.encodedUserData);\n let bptOut = '0';\n let tokens: string[] = [];\n let amounts: string[] = [];\n if (joinKind === WeightedPoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT) {\n // Returns amount of tokens in - This isn't currently implemented\n bptOut = this.allTokensInForExactBPTOut();\n } else if (joinKind === WeightedPoolJoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT) {\n // Returns amount of BPT out\n [bptOut, tokens, amounts] = this.joinExactTokensInForBPTOut(\n joinPoolRequest.encodedUserData,\n pool\n );\n } else if (joinKind === WeightedPoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT) {\n // Returns amount of tokenIn\n let tokenIn: string, amountIn: string;\n [bptOut, tokenIn, amountIn] = this.joinTokenInForExactBPTOut(\n joinPoolRequest.encodedUserData,\n pool\n );\n tokens.push(tokenIn);\n amounts.push(amountIn);\n } else throw new Error('Exit type not implemented');\n\n tokens.push(pool.address);\n // -ve because coming from Vault\n amounts.push(Zero.sub(bptOut).toString());\n\n if (\n joinPoolRequest.outputReference &&\n Relayer.isChainedReference(joinPoolRequest.outputReference)\n ) {\n this.relayerModel.setChainedReferenceValue(\n joinPoolRequest.outputReference,\n bptOut\n );\n }\n return [tokens, amounts];\n }\n}\n","import { parseFixed, BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { defaultAbiCoder } from '@ethersproject/abi';\nimport { Zero } from '@ethersproject/constants';\nimport { bnum } from '@balancer-labs/sor';\n\nimport { PoolDictionary, Pool } from '../poolSource';\nimport { ComposableStablePoolExitKind } from '@/pool-composable-stable';\nimport { WeightedPoolDecoder } from '@/pool-weighted/decoder';\nimport { WeightedPoolExitKind } from '@/pool-weighted/encoder';\nimport { isSameAddress } from '@/lib/utils';\nimport { RelayerModel } from '../relayer';\nimport { ActionType } from '../vaultModel.module';\nimport { OutputReference } from '@/modules/relayer/types';\nimport { PoolToken } from '@/types';\n\nexport interface ExitPoolRequest {\n actionType: ActionType.Exit;\n poolId: string;\n encodedUserData: string;\n outputReferences: OutputReference[];\n}\n\nfunction getBalancesForTokens(pool: Pool, tokens: string[]): string[] {\n const balances: string[] = [];\n tokens.forEach((t) => {\n const tokenIndex = pool.tokens.findIndex((pt: PoolToken) =>\n isSameAddress(pt.address, t)\n );\n if (tokenIndex < 0) throw 'Pool does not contain tokenIn';\n balances.push(\n parseFixed(\n pool.tokens[tokenIndex].balance,\n pool.tokens[tokenIndex].decimals\n ).toString()\n );\n });\n return balances;\n}\n\nexport class ExitModel {\n constructor(private relayerModel: RelayerModel) {}\n\n /**\n * Finds exit kind given encoded user data and pool type.\n * @param poolType\n * @param encodedUserData\n * @returns\n */\n exitKind(poolType: string, encodedUserData: string): WeightedPoolExitKind {\n const decodedUserData = defaultAbiCoder.decode(\n ['uint256'],\n encodedUserData\n );\n const exitKind = decodedUserData[0] as BigNumber;\n if (!exitKind) throw new Error('No exit kind.');\n if (poolType === 'ComposableStable') {\n if (\n exitKind.toNumber() ===\n ComposableStablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT\n )\n return WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT;\n if (\n exitKind.toNumber() ===\n ComposableStablePoolExitKind.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT\n )\n return WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT;\n else {\n return WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT;\n }\n } else {\n return exitKind.toNumber() as WeightedPoolExitKind;\n }\n }\n\n /**\n * Decodes user exit data and returns token input amounts\n * @param encodedUserData\n * @param exitKind\n * @returns\n */\n decodeExitData(\n encodedUserData: string,\n exitKind: WeightedPoolExitKind\n ): string[] {\n // At the moment all pools have same structure so just use WeightedPoolDecoded for all\n if (exitKind === WeightedPoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT) {\n const [, amountsOut, maxBPTAmountIn] =\n WeightedPoolDecoder.exitBPTInForExactTokensOut(encodedUserData);\n return [amountsOut.toString(), maxBPTAmountIn.toString()];\n } else if (\n exitKind === WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT\n ) {\n const [, bptIn, tokenIndex] =\n WeightedPoolDecoder.exitExactBPTInForOneTokenOut(encodedUserData);\n return [bptIn.toString(), tokenIndex.toString()];\n } else if (exitKind === WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT) {\n const [, bptIn] =\n WeightedPoolDecoder.exitExactBPTInForTokensOut(encodedUserData);\n return [bptIn.toString()];\n } else throw new Error('Non supported exit data');\n }\n\n /**\n * Exit pool, BPT in to tokens out.\n * Updates pool balances.\n * @param encodedUserData\n * @param pool\n * @returns tokensOut\n */\n exactBptInForTokensOut(\n encodedUserData: string,\n pool: Pool\n ): [string, string[], string[]] {\n const [bptInWithRef] = this.decodeExitData(\n encodedUserData,\n WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT\n );\n\n const bptIn = this.relayerModel.doChainedRefReplacement(bptInWithRef);\n // Calculate amount of tokens out given an exact amount of BPT in\n const amountsOut = pool\n ._calcTokensOutGivenExactBptIn(BigNumber.from(bptIn))\n .map((a: BigNumber) => a.toString());\n\n // Updates BPT/totalShares value for pool\n if (\n pool.SubgraphType == 'StablePhantom' ||\n pool.SubgraphType == 'ComposableStable'\n ) {\n // Update BPT balance\n // totalShares will be updated as a side effect within SOR\n const bptAsPoolToken = pool.tokens.find((t: PoolToken) =>\n isSameAddress(t.address, pool.address)\n );\n if (!bptAsPoolToken)\n throw new Error('Pool does not contain BPT as a token');\n const bptBalanceEVM = parseFixed(\n bptAsPoolToken.balance.toString(),\n bptAsPoolToken.decimals\n );\n pool.updateTokenBalanceForPool(\n pool.address,\n bptBalanceEVM.add(bptIn) // add value because exiting pool increases pre-minted BPT being held by the pool\n );\n } else {\n // For pools that do not contain BPT as a token, update totalShares directly\n pool.updateTokenBalanceForPool(pool.address, pool.totalShares.sub(bptIn));\n }\n\n const tokensWithoutBpt = pool.tokens.filter(\n (t: PoolToken) => !isSameAddress(t.address, pool.address)\n );\n // Update each tokens balance\n amountsOut.forEach((amountOut: string, i: number) => {\n const balanceEvm = parseFixed(\n tokensWithoutBpt[i].balance.toString(),\n tokensWithoutBpt[i].decimals\n );\n pool.updateTokenBalanceForPool(\n tokensWithoutBpt[i].address,\n balanceEvm.sub(amountOut)\n );\n });\n return [\n bptIn,\n tokensWithoutBpt.map((t: PoolToken) => t.address),\n amountsOut,\n ];\n }\n\n /**\n * Exit pool, BPT in to single token out.\n * Updates pool balances.\n * @param encodedUserData\n * @param pool\n * @returns tokens out\n */\n exactBptInForOneTokenOut(\n encodedUserData: string,\n pool: Pool\n ): [string, string[], string[]] {\n const [bptInWithRef, tokenIndex] = this.decodeExitData(\n encodedUserData,\n WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT\n );\n const bptIn = this.relayerModel.doChainedRefReplacement(bptInWithRef);\n // Uses an existing SOR functionality so need to deal with pairData and scaling\n const pairData = pool.parsePoolPairData(\n pool.address,\n pool.tokensList[Number(tokenIndex)]\n );\n // Calculation requires floating point number input\n const amountInHuman: string = formatFixed(bptIn, pairData.decimalsIn);\n // Calculate amount of token out given an exact amount of BPT in\n const amountOutHuman = pool\n ._exactTokenInForTokenOut(pairData as never, bnum(amountInHuman))\n .dp(pairData.decimalsOut);\n const amountOutEvm = parseFixed(\n amountOutHuman.toString(),\n pairData.decimalsOut\n );\n\n // Update balances use EVM scaled\n const poolBalances = getBalancesForTokens(pool, [\n pool.address,\n pairData.tokenOut,\n ]);\n // Subtract token out amount from pool\n pool.updateTokenBalanceForPool(\n pairData.tokenOut,\n BigNumber.from(poolBalances[1]).sub(amountOutEvm)\n );\n\n if (\n pool.SubgraphType == 'StablePhantom' ||\n pool.SubgraphType == 'ComposableStable'\n ) {\n // Add value because exiting pool increases pre-minted BPT being held by the pool\n // totalShares is updated as a side effect on SOR\n pool.updateTokenBalanceForPool(\n pool.address,\n BigNumber.from(poolBalances[0]).add(bptIn)\n );\n } else {\n // Exiting a pool is equivalent to removing from totalSupply (totalShares) so must sub here\n pool.updateTokenBalanceForPool(pool.address, pool.totalShares.sub(bptIn));\n }\n\n const tokensWithoutBpt = pool.tokensList.filter(\n (t: string) => !isSameAddress(t, pool.address)\n );\n const amountsOut = new Array(tokensWithoutBpt.length).fill('0');\n amountsOut[Number(tokenIndex)] = amountOutEvm.toString();\n return [bptIn, tokensWithoutBpt, amountsOut];\n }\n\n /**\n * Perform the specified exit type.\n * @param exitPoolRequest\n * @returns tokens out\n */\n async doExitPool(\n exitPoolRequest: ExitPoolRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n const pool = pools[exitPoolRequest.poolId];\n const exitKind = this.exitKind(\n pool.SubgraphType,\n exitPoolRequest.encodedUserData\n );\n let amountsOut: string[] = [];\n let bptIn: string;\n let tokensOut: string[] = [];\n const tokens: string[] = [];\n const deltas: string[] = [];\n if (exitKind === WeightedPoolExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT) {\n [bptIn, tokensOut, amountsOut] = this.exactBptInForTokensOut(\n exitPoolRequest.encodedUserData,\n pool\n );\n } else if (\n exitKind === WeightedPoolExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT\n ) {\n [bptIn, tokensOut, amountsOut] = this.exactBptInForOneTokenOut(\n exitPoolRequest.encodedUserData,\n pool\n );\n } else throw new Error('Exit type not implemented');\n\n // Save any chained references\n for (let i = 0; i < exitPoolRequest.outputReferences.length; i++) {\n const tokenOut =\n pool.tokensList[exitPoolRequest.outputReferences[i].index];\n const tokenOutIndex = tokensOut.indexOf(tokenOut);\n if (tokenOutIndex === -1) throw new Error('Token out not found');\n this.relayerModel.setChainedReferenceValue(\n exitPoolRequest.outputReferences[i].key.toString(),\n amountsOut[tokenOutIndex]\n );\n }\n tokens.push(pool.address, ...tokensOut);\n deltas.push(bptIn, ...amountsOut.map((a) => Zero.sub(a).toString()));\n return [tokens, deltas];\n }\n}\n","import { parseFixed, BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { Zero } from '@ethersproject/constants';\nimport { bnum } from '@balancer-labs/sor';\n\nimport { PoolDictionary, Pool } from '../poolSource';\nimport { EncodeBatchSwapInput } from '@/modules/relayer/types';\nimport { Swap, SwapType } from '@/modules/swaps/types';\nimport { Relayer } from '@/modules/relayer/relayer.module';\nimport { RelayerModel } from '../relayer';\nimport { ActionType } from '../vaultModel.module';\n\nexport interface SwapRequest\n extends Pick {\n actionType: ActionType.Swap;\n}\n\nexport interface BatchSwapRequest\n extends Pick<\n EncodeBatchSwapInput,\n 'swaps' | 'assets' | 'funds' | 'swapType' | 'outputReferences'\n > {\n actionType: ActionType.BatchSwap;\n}\n\nexport class SwapModel {\n constructor(private relayerModel: RelayerModel) {}\n\n /**\n * Performs a single swap with one pool.\n * @param swapRequest\n * @returns Returns the net Vault asset balance delta. Positive amount represent token (or ETH) sent to the Vault, and negative amount represent token (or ETH) sent by the Vault. Delta corresponds to the asset out.\n */\n async doSingleSwap(\n swapRequest: SwapRequest,\n pools: PoolDictionary\n ): Promise {\n const amountIn = this.relayerModel.doChainedRefReplacement(\n swapRequest.request.amount.toString()\n );\n\n const pool = pools[swapRequest.request.poolId];\n const [, amountOutEvm] = this.doSwap(\n swapRequest.request.assetIn,\n swapRequest.request.assetOut,\n pool,\n swapRequest.request.kind,\n amountIn\n );\n\n const delta = Zero.sub(amountOutEvm);\n if (!swapRequest.outputReference)\n throw new Error('Missing outputReference');\n\n // Swap return values are signed, as they are Vault deltas (positive values correspond to assets sent\n // to the Vault, and negative values are assets received from the Vault). To simplify the chained reference\n // value model, we simply store the absolute value.\n this.relayerModel.setChainedReferenceValue(\n swapRequest.outputReference.toString(),\n delta.abs().toString()\n );\n return [delta.toString(), amountIn];\n }\n\n /**\n * Performs a series of swaps with one or multiple Pools.\n * @param batchSwapRequest\n * @returns Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at the same index in the `assets` array.\n */\n async doBatchSwap(\n batchSwapRequest: BatchSwapRequest,\n pools: PoolDictionary\n ): Promise {\n const assets = batchSwapRequest.assets;\n const deltas = new Array(assets.length).fill(Zero);\n // Used for multihop swaps where previous swap return is used as input to next swap\n let previousAmount: string;\n\n for (let i = 0; i < batchSwapRequest.swaps.length; ++i) {\n const amount = batchSwapRequest.swaps[i].amount;\n if (Relayer.isChainedReference(amount)) {\n batchSwapRequest.swaps[i].amount =\n this.relayerModel.getChainedReferenceValue(amount);\n }\n }\n\n // Handle each swap in order\n batchSwapRequest.swaps.forEach((swap) => {\n const tokenIn = assets[swap.assetInIndex];\n const tokenOut = assets[swap.assetOutIndex];\n const pool = pools[swap.poolId];\n let amount = swap.amount;\n if (amount === '0') amount = previousAmount;\n const [amountInEvm, amountOutEvm] = this.doSwap(\n tokenIn,\n tokenOut,\n pool,\n batchSwapRequest.swapType,\n amount\n );\n\n previousAmount =\n batchSwapRequest.swapType === SwapType.SwapExactIn\n ? amountOutEvm.toString()\n : amountInEvm.toString();\n\n deltas[swap.assetInIndex] = deltas[swap.assetInIndex].add(amountInEvm);\n deltas[swap.assetOutIndex] = deltas[swap.assetOutIndex].sub(amountOutEvm);\n });\n\n for (let i = 0; i < batchSwapRequest.outputReferences.length; i++) {\n // Batch swap return values are signed, as they are Vault deltas (positive values correspond to assets sent\n // to the Vault, and negative values are assets received from the Vault). To simplify the chained reference\n // value model, we simply store the absolute value.\n this.relayerModel.setChainedReferenceValue(\n batchSwapRequest.outputReferences[i].key.toString(),\n deltas[batchSwapRequest.outputReferences[i].index].abs().toString()\n );\n }\n return deltas.map((d) => d.toString());\n }\n\n /**\n * Perform swap against a pool (and update balances)\n * @param tokenIn\n * @param tokenOut\n * @param pool\n * @param swapType\n * @param amount (EVM Scale)\n * @returns\n */\n doSwap(\n tokenIn: string,\n tokenOut: string,\n pool: Pool,\n swapType: SwapType,\n amount: string\n ): BigNumber[] {\n const pairData = pool.parsePoolPairData(tokenIn, tokenOut);\n const isExactIn = swapType === SwapType.SwapExactIn;\n let amountInEvm: string | BigNumber = isExactIn\n ? BigNumber.from(amount)\n : Zero;\n let amountOutEvm: string | BigNumber = isExactIn\n ? Zero\n : BigNumber.from(amount);\n const amountInHuman: string | BigNumber = formatFixed(\n amountInEvm,\n pairData.decimalsIn\n );\n const amountOutHuman: string | BigNumber = formatFixed(\n amountOutEvm,\n pairData.decimalsOut\n );\n\n if (isExactIn) {\n // Needs human scale\n const amountOutHuman = pool\n ._exactTokenInForTokenOut(\n pairData as never,\n bnum(amountInHuman.toString())\n )\n .dp(pairData.decimalsOut);\n amountOutEvm = parseFixed(\n amountOutHuman.toString(),\n pairData.decimalsOut\n );\n } else {\n // Needs human scale\n const amountInHuman = pool\n ._tokenInForExactTokenOut(\n pairData as never,\n bnum(amountOutHuman.toString())\n )\n .dp(pairData.decimalsIn);\n amountInEvm = parseFixed(amountInHuman.toString(), pairData.decimalsIn);\n }\n // Update balances of tokenIn and tokenOut - use EVM scale\n pool.updateTokenBalanceForPool(\n pairData.tokenIn,\n pairData.balanceIn.add(amountInEvm)\n );\n pool.updateTokenBalanceForPool(\n pairData.tokenOut,\n pairData.balanceOut.sub(amountOutEvm)\n );\n return [amountInEvm, amountOutEvm];\n }\n}\n","import { LinearPool } from '@balancer-labs/sor';\nimport { parseFixed } from '@ethersproject/bignumber';\n\nimport { EncodeUnwrapAaveStaticTokenInput } from '@/modules/relayer/types';\n\nimport { PoolDictionary } from '../poolSource';\nimport { RelayerModel } from '../relayer';\nimport { ActionType } from '../vaultModel.module';\nimport { WeiPerEther, Zero } from '@ethersproject/constants';\nimport { SolidityMaths } from '@/lib/utils/solidityMaths';\n\nexport interface UnwrapRequest\n extends Pick {\n poolId: string;\n actionType: ActionType.Unwrap;\n}\n\nexport class UnwrapModel {\n constructor(private relayerModel: RelayerModel) {}\n\n /**\n * Perform the specified unwrap type.\n * @param unwrapRequest\n * @param pools\n * @returns tokens out and their respective deltas\n */\n async doUnwrap(\n unwrapRequest: UnwrapRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n const pool = pools[unwrapRequest.poolId] as LinearPool;\n const wrappedToken = pool.tokens[pool.wrappedIndex];\n const underlyingToken = pool.tokens[pool.mainIndex];\n\n const amountIn = this.relayerModel.doChainedRefReplacement(\n unwrapRequest.amount.toString()\n );\n\n // must be negative because is leaving the vault\n const amountOut = SolidityMaths.divDownFixed(\n SolidityMaths.mulDownFixed(\n BigInt(amountIn),\n parseFixed(wrappedToken.priceRate, 18).toBigInt()\n ),\n WeiPerEther.toBigInt()\n ).toString();\n\n // Save chained references\n this.relayerModel.setChainedReferenceValue(\n unwrapRequest.outputReference.toString(),\n amountOut\n );\n\n const tokens = [wrappedToken.address, underlyingToken.address];\n const deltas = [amountIn, Zero.sub(amountOut).toString()];\n return [tokens, deltas];\n }\n}\n","import { PoolDictionary } from '../poolSource';\nimport { RelayerModel } from '../relayer';\nimport { JoinModel, JoinPoolRequest } from './join';\nimport { ExitModel, ExitPoolRequest } from './exit';\nimport { SwapModel, BatchSwapRequest, SwapRequest } from './swap';\nimport { UnwrapModel, UnwrapRequest } from './unwrap';\n\nexport class PoolModel {\n joinModel: JoinModel;\n exitModel: ExitModel;\n swapModel: SwapModel;\n unwrapModel: UnwrapModel;\n\n constructor(private relayerModel: RelayerModel) {\n this.joinModel = new JoinModel(relayerModel);\n this.exitModel = new ExitModel(relayerModel);\n this.swapModel = new SwapModel(relayerModel);\n this.unwrapModel = new UnwrapModel(relayerModel);\n }\n\n async doJoin(\n joinPoolRequest: JoinPoolRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n return this.joinModel.doJoinPool(joinPoolRequest, pools);\n }\n\n async doExit(\n exitPoolRequest: ExitPoolRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n return this.exitModel.doExitPool(exitPoolRequest, pools);\n }\n\n async doBatchSwap(\n batchSwapRequest: BatchSwapRequest,\n pools: PoolDictionary\n ): Promise {\n return this.swapModel.doBatchSwap(batchSwapRequest, pools);\n }\n\n async doSingleSwap(\n swapRequest: SwapRequest,\n pools: PoolDictionary\n ): Promise {\n return this.swapModel.doSingleSwap(swapRequest, pools);\n }\n\n async doUnwrap(\n unwrapRequest: UnwrapRequest,\n pools: PoolDictionary\n ): Promise<[string[], string[]]> {\n return this.unwrapModel.doUnwrap(unwrapRequest, pools);\n }\n}\n","import { Relayer } from '@/modules/relayer/relayer.module';\n\nexport class RelayerModel {\n chainedRefs: Record = {};\n\n /**\n * Stores `value` as the amount referenced by chained reference `ref`.\n * @param ref\n * @param value\n */\n setChainedReferenceValue(ref: string, value: string): void {\n this.chainedRefs[ref] = value;\n }\n\n /**\n * Returns the amount referenced by chained reference `ref`.\n * @param ref\n * @returns\n */\n getChainedReferenceValue(ref: string): string {\n return this.chainedRefs[ref];\n }\n\n doChainedRefReplacement(amount: string): string {\n if (Relayer.isChainedReference(amount.toString())) {\n return this.getChainedReferenceValue(amount.toString());\n } else return amount;\n }\n\n doChainedRefReplacements(amounts: string[]): string[] {\n return amounts.map((amount) =>\n this.doChainedRefReplacement(amount).toString()\n );\n }\n}\n","import { cloneDeep } from 'lodash';\nimport {\n SubgraphPoolBase,\n SubgraphToken,\n PoolDataService,\n WeightedPool,\n StablePool,\n MetaStablePool,\n LinearPool,\n PhantomStablePool,\n ComposableStablePool,\n} from '@balancer-labs/sor';\nimport { Logger } from '@/lib/utils/logger';\n\nexport interface PoolDictionary {\n [poolId: string]: Pool;\n}\n\nexport type Pool =\n | (\n | WeightedPool\n | StablePool\n | LinearPool\n | MetaStablePool\n | PhantomStablePool\n | ComposableStablePool\n ) & { SubgraphType: string };\n\nexport class PoolsSource {\n poolsArray: SubgraphPoolBase[] = [];\n poolsDict: PoolDictionary = {};\n constructor(\n private poolDataService: PoolDataService,\n private wrappedNativeAsset: string\n ) {}\n dataSource(): PoolDataService {\n return this.poolDataService;\n }\n\n async all(refresh = false): Promise {\n if (refresh || this.poolsArray.length === 0) {\n const list = cloneDeep(await this.dataSource().getPools());\n for (const pool of list) {\n // For non pre-minted BPT pools we add the BPT to the token list. This makes the SOR functions work for joins/exits\n if (\n [\n 'Weighted',\n 'Investment',\n 'Stable',\n 'LiquidityBootstrapping',\n ].includes(pool.poolType)\n ) {\n const BptAsToken: SubgraphToken = {\n address: pool.address,\n balance: pool.totalShares,\n decimals: 18,\n priceRate: '1',\n weight: '0',\n };\n pool.tokens.push(BptAsToken);\n pool.tokensList.push(pool.address);\n }\n }\n this.poolsArray = list;\n }\n return this.poolsArray;\n }\n\n parseToPoolsDict(pools: SubgraphPoolBase[]): PoolDictionary {\n return Object.fromEntries(\n cloneDeep(pools)\n .filter(\n (pool) => pool.tokensList.length > 0 && pool.tokens[0].balance !== '0'\n )\n .map((pool) => [pool.id, this.parseNewPool(pool)])\n .filter(([, pool]) => pool !== undefined)\n );\n }\n\n parseNewPool(subgraphPool: SubgraphPoolBase): Pool | undefined {\n // We're not interested in any pools which don't allow swapping\n if (!subgraphPool.swapEnabled) return undefined;\n\n let pool: Pool = {} as Pool;\n\n try {\n if (\n ['Weighted', 'Investment', 'LiquidityBootstrapping'].includes(\n subgraphPool.poolType\n )\n ) {\n const sorPool = WeightedPool.fromPool(subgraphPool, false);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType === 'Stable') {\n const sorPool = StablePool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType === 'MetaStable') {\n const sorPool = MetaStablePool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType.toString().includes('Linear')) {\n const sorPool = LinearPool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType === 'StablePhantom') {\n const sorPool = PhantomStablePool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else if (subgraphPool.poolType === 'ComposableStable') {\n const sorPool = ComposableStablePool.fromPool(subgraphPool);\n pool = sorPool as Pool;\n } else {\n const logger = Logger.getInstance();\n logger.warn(\n `Unknown pool type or type field missing: ${subgraphPool.poolType} ${subgraphPool.id}`\n );\n return undefined;\n }\n if (!pool) throw new Error('Issue with Pool');\n pool.SubgraphType = subgraphPool.poolType;\n } catch (err) {\n console.error(`Error parseNewPool`);\n return undefined;\n }\n return pool;\n }\n\n /**\n * Converts Subgraph array into PoolDictionary\n * @param refresh\n * @returns\n */\n async poolsDictionary(refresh = false): Promise {\n if (refresh || Object.keys(this.poolsDict).length === 0) {\n const poolsArray = await this.all(refresh);\n this.poolsDict = this.parseToPoolsDict(poolsArray);\n }\n return this.poolsDict;\n }\n}\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { Zero } from '@ethersproject/constants';\nimport { PoolDataService } from '@balancer-labs/sor';\n\nimport { PoolModel } from './poolModel/poolModel';\nimport { JoinPoolRequest } from './poolModel/join';\nimport { ExitPoolRequest } from './poolModel/exit';\nimport { BatchSwapRequest, SwapRequest } from './poolModel/swap';\nimport { UnwrapRequest } from './poolModel/unwrap';\nimport { RelayerModel } from './relayer';\nimport { PoolsSource } from './poolSource';\nimport {\n EncodeBatchSwapInput,\n EncodeJoinPoolInput,\n EncodeExitPoolInput,\n} from '../relayer/types';\nimport { Swap } from '../swaps/types';\n\nexport enum ActionType {\n BatchSwap,\n Join,\n Exit,\n Swap,\n Unwrap,\n}\n\nexport type Requests =\n | BatchSwapRequest\n | JoinPoolRequest\n | ExitPoolRequest\n | SwapRequest\n | UnwrapRequest;\n\n/**\n * Controller / use-case layer for interacting with pools data.\n */\nexport class VaultModel {\n poolsSource: PoolsSource;\n\n constructor(poolDataService: PoolDataService, wrappedNativeAsset: string) {\n this.poolsSource = new PoolsSource(poolDataService, wrappedNativeAsset);\n }\n\n updateDeltas(\n deltas: Record,\n assets: string[],\n amounts: string[]\n ): Record {\n assets.forEach((t, i) => {\n if (!deltas[t]) deltas[t] = Zero;\n deltas[t] = deltas[t].add(amounts[i]);\n });\n return deltas;\n }\n\n async multicall(\n rawCalls: Requests[],\n refresh = false\n ): Promise> {\n const relayerModel = new RelayerModel();\n const poolModel = new PoolModel(relayerModel);\n const pools = await this.poolsSource.poolsDictionary(refresh);\n const deltas: Record = {};\n for (const call of rawCalls) {\n let tokens: string[] = [];\n let amounts: string[] = [];\n switch (call.actionType) {\n case ActionType.Join: {\n [tokens, amounts] = await poolModel.doJoin(call, pools);\n break;\n }\n case ActionType.Exit: {\n [tokens, amounts] = await poolModel.doExit(call, pools);\n break;\n }\n case ActionType.BatchSwap: {\n tokens = call.assets;\n amounts = await poolModel.doBatchSwap(call, pools);\n break;\n }\n case ActionType.Swap: {\n tokens = [call.request.assetOut, call.request.assetIn];\n amounts = await poolModel.doSingleSwap(call, pools);\n break;\n }\n case ActionType.Unwrap: {\n [tokens, amounts] = await poolModel.doUnwrap(call, pools);\n break;\n }\n default:\n break;\n }\n this.updateDeltas(deltas, tokens, amounts);\n }\n return deltas;\n }\n\n static mapSwapRequest(call: Swap): SwapRequest {\n const swapRequest: SwapRequest = {\n actionType: ActionType.Swap,\n request: call.request,\n funds: call.funds,\n outputReference: call.outputReference,\n };\n return swapRequest;\n }\n\n static mapBatchSwapRequest(call: EncodeBatchSwapInput): BatchSwapRequest {\n const batchSwapRequest: BatchSwapRequest = {\n actionType: ActionType.BatchSwap,\n swaps: call.swaps,\n assets: call.assets,\n funds: call.funds,\n swapType: call.swapType,\n outputReferences: call.outputReferences,\n };\n return batchSwapRequest;\n }\n\n static mapJoinPoolRequest(call: EncodeJoinPoolInput): JoinPoolRequest {\n const joinPoolRequest: JoinPoolRequest = {\n actionType: ActionType.Join,\n poolId: call.poolId,\n encodedUserData: call.joinPoolRequest.userData,\n outputReference: call.outputReference,\n };\n return joinPoolRequest;\n }\n\n static mapExitPoolRequest(call: EncodeExitPoolInput): ExitPoolRequest {\n const exitPoolRequest: ExitPoolRequest = {\n actionType: ActionType.Exit,\n poolId: call.poolId,\n encodedUserData: call.exitPoolRequest.userData,\n outputReferences: call.outputReferences,\n };\n return exitPoolRequest;\n }\n\n static mapUnwrapRequest(\n amount: BigNumberish,\n outputReference: BigNumberish,\n poolId: string\n ): UnwrapRequest {\n const unwrapRequest: UnwrapRequest = {\n actionType: ActionType.Unwrap,\n poolId,\n amount,\n outputReference,\n };\n return unwrapRequest;\n }\n}\n","import { cloneDeep } from 'lodash';\nimport { BigNumber, BigNumberish, parseFixed } from '@ethersproject/bignumber';\nimport { AddressZero, WeiPerEther, Zero } from '@ethersproject/constants';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { EncodeJoinPoolInput, Relayer } from '@/modules/relayer/relayer.module';\nimport {\n FundManagement,\n SingleSwap,\n Swap,\n SwapType,\n} from '@/modules/swaps/types';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport { BalancerNetworkConfig, JoinPoolRequest, PoolType } from '@/types';\nimport { PoolGraph, Node } from '../graph/graph';\n\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { networkAddresses } from '@/lib/constants/config';\nimport { AssetHelpers, getEthValue, isSameAddress, replace } from '@/lib/utils';\nimport {\n SolidityMaths,\n _computeScalingFactor,\n _upscale,\n} from '@/lib/utils/solidityMaths';\nimport { calcPriceImpact } from '../pricing/priceImpact';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { getPoolAddress } from '@/pool-utils';\nimport { Simulation, SimulationType } from '../simulation/simulation.module';\nimport { Requests, VaultModel } from '../vaultModel/vaultModel.module';\nimport { SwapRequest } from '../vaultModel/poolModel/swap';\nimport { JoinPoolRequest as JoinPoolModelRequest } from '../vaultModel/poolModel/join';\nimport { JsonRpcSigner } from '@ethersproject/providers';\nimport { BalancerRelayer__factory } from '@/contracts/factories/BalancerRelayer__factory';\nimport { Logger } from '@/lib/utils/logger';\n\nconst balancerRelayerInterface = BalancerRelayer__factory.createInterface();\n\n// Quickly switch useful debug logs on/off\nconst DEBUG = false;\n\nfunction debugLog(log: string) {\n const logger = Logger.getInstance();\n if (DEBUG) logger.info(log);\n}\n\nexport class Join {\n private relayer: string;\n private wrappedNativeAsset;\n constructor(\n private poolGraph: PoolGraph,\n networkConfig: BalancerNetworkConfig,\n private simulationService: Simulation\n ) {\n const { tokens, contracts } = networkAddresses(networkConfig.chainId);\n this.relayer = contracts.balancerRelayer;\n this.wrappedNativeAsset = tokens.wrappedNativeAsset;\n }\n\n private checkInputs(tokensIn: string[], amountsIn: string[]) {\n if (tokensIn.length === 0)\n throw new BalancerError(BalancerErrorCode.MISSING_TOKENS);\n\n if (amountsIn.every((a) => a === '0'))\n throw new BalancerError(BalancerErrorCode.JOIN_WITH_ZERO_AMOUNT);\n\n if (tokensIn.length != amountsIn.length)\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n\n if (\n tokensIn.some((t) => t === AddressZero) &&\n tokensIn.some(\n (t) => t.toLowerCase() === this.wrappedNativeAsset.toLowerCase()\n )\n )\n throw new BalancerError(BalancerErrorCode.INPUT_TOKEN_INVALID);\n }\n\n async joinPool(\n poolId: string,\n tokensIn: string[],\n amountsIn: string[],\n userAddress: string,\n slippage: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType,\n authorisation?: string\n ): Promise<{\n to: string;\n encodedCall: string;\n expectedOut: string;\n minOut: string;\n priceImpact: string;\n value: BigNumberish;\n }> {\n this.checkInputs(tokensIn, amountsIn);\n\n // Create nodes for each pool/token interaction and order by breadth first\n const orderedNodes = await this.poolGraph.getGraphNodes(true, poolId, []);\n\n const nativeAssetIndex = tokensIn.findIndex((t) => t === AddressZero);\n const isNativeAssetJoin = nativeAssetIndex !== -1;\n const tokensInWithoutNativeAsset = replace(\n tokensIn,\n nativeAssetIndex,\n this.wrappedNativeAsset.toLowerCase()\n );\n\n const joinPaths = Join.getJoinPaths(\n orderedNodes,\n tokensInWithoutNativeAsset,\n amountsIn\n );\n\n const totalBptZeroPi = Join.totalBptZeroPriceImpact(joinPaths);\n /*\n - Create calls with 0 min bpt for each root join\n - static call (or V4 special call) to get actual amounts for each root join\n - Apply slippage to amounts\n - Recreate calls with minAmounts === actualAmountsWithSlippage\n - Return minAmoutOut (sum actualAmountsWithSlippage), UI would use this to display to user\n - Return updatedCalls, UI would use this to execute tx\n */\n // Create calls with 0 expected for each root join\n // Peek is enabled here so we can static call the returned amounts and use these to set limits\n debugLog(`\\n--- Simulation Calls ---`);\n const {\n multiRequests,\n encodedCall: queryData,\n outputIndexes,\n } = await this.createCalls(\n joinPaths,\n userAddress,\n isNativeAssetJoin,\n undefined,\n authorisation\n );\n\n // TODO: add this back once relayerV6 is released and we're able to peek while joining with ETH\n // const simulationValue = isNativeAssetJoin\n // ? simulationDeltas[this.wrappedNativeAsset.toLowerCase()]\n // : Zero;\n\n // static call (or V4 special call) to get actual amounts for each root join\n const { amountsOut, totalAmountOut } = await this.amountsOutByJoinPath(\n userAddress,\n multiRequests,\n queryData,\n tokensInWithoutNativeAsset,\n outputIndexes,\n signer,\n simulationType,\n '0' // TODO: change to simulationValue.tosString() once relayerV6 is released\n );\n\n const { minAmountsOut, totalMinAmountOut } = this.minAmountsOutByJoinPath(\n slippage,\n amountsOut,\n totalAmountOut\n );\n const priceImpact = calcPriceImpact(\n BigInt(totalAmountOut),\n totalBptZeroPi.toBigInt(),\n true\n ).toString();\n\n // Create calls with minAmountsOut\n debugLog(`\\n--- Final Calls ---`);\n const { encodedCall, deltas } = await this.createCalls(\n joinPaths,\n userAddress,\n isNativeAssetJoin,\n minAmountsOut,\n authorisation\n );\n\n const value = isNativeAssetJoin\n ? deltas[this.wrappedNativeAsset.toLowerCase()]\n : Zero;\n debugLog(`Total value: ${value.toString()}`);\n\n this.assertDeltas(\n poolId,\n deltas,\n tokensInWithoutNativeAsset,\n amountsIn,\n totalMinAmountOut\n );\n\n return {\n to: this.relayer,\n encodedCall,\n expectedOut: totalAmountOut,\n minOut: totalMinAmountOut,\n priceImpact,\n value,\n };\n }\n\n private assertDeltas(\n poolId: string,\n deltas: Record,\n tokensIn: string[],\n amountsIn: string[],\n minBptOut: string\n ): void {\n const poolAddress = getPoolAddress(poolId);\n const outDiff = deltas[poolAddress.toLowerCase()].add(minBptOut);\n\n if (outDiff.abs().gt(3)) {\n console.error(\n `join assertDeltas, bptOut: `,\n poolAddress,\n minBptOut,\n deltas[poolAddress.toLowerCase()]?.toString()\n );\n throw new BalancerError(BalancerErrorCode.JOIN_DELTA_AMOUNTS);\n }\n delete deltas[poolAddress.toLowerCase()];\n\n tokensIn.forEach((token, i) => {\n if (\n !BigNumber.from(amountsIn[i]).eq(0) &&\n deltas[token.toLowerCase()]?.toString() !== amountsIn[i]\n ) {\n console.error(\n `join assertDeltas, tokenIn: `,\n token,\n amountsIn[i],\n deltas[token.toLowerCase()]?.toString()\n );\n throw new BalancerError(BalancerErrorCode.JOIN_DELTA_AMOUNTS);\n }\n delete deltas[token.toLowerCase()];\n });\n\n for (const token in deltas) {\n if (deltas[token].toString() !== '0') {\n console.error(\n `join assertDeltas, non-input token should be 0: `,\n token,\n deltas[token].toString()\n );\n throw new BalancerError(BalancerErrorCode.JOIN_DELTA_AMOUNTS);\n }\n }\n }\n\n // Create join paths from tokensIn all the way to the root node.\n static getJoinPaths = (\n orderedNodes: Node[],\n tokensIn: string[],\n amountsIn: string[]\n ): Node[][] => {\n const joinPaths: Node[][] = [];\n\n // Filter all nodes that contain a token in the tokensIn array\n const inputNodes = orderedNodes.filter((node) =>\n tokensIn\n .filter((t, i) => BigNumber.from(amountsIn[i]).gt(0)) // Remove input tokens with 0 amounts\n .map((tokenIn) => tokenIn.toLowerCase())\n .includes(node.address.toLowerCase())\n );\n\n // If inputNodes contain at least one leaf token, then add path to join proportionally with all leaf tokens contained in tokensIn\n const containsLeafNode = inputNodes.some((node) => node.isLeaf);\n if (containsLeafNode) {\n joinPaths.push(orderedNodes);\n }\n\n // Add a join path for each non-leaf input node\n const nonLeafInputNodes = inputNodes.filter((node) => !node.isLeaf);\n nonLeafInputNodes.forEach((nonLeafInputNode) => {\n // Get amount in for current node\n const nonLeafAmountIn = amountsIn.find((amountIn, i) =>\n isSameAddress(tokensIn[i], nonLeafInputNode.address)\n ) as string;\n // Split amount in between nodes with same non-leaf input token based on proportionOfParent\n const totalProportions = nonLeafInputNodes\n .filter((node) => isSameAddress(node.address, nonLeafInputNode.address))\n .reduce(\n (total, node) => total.add(node.proportionOfParent),\n BigNumber.from(0)\n );\n const proportionalNonLeafAmountIn = BigNumber.from(nonLeafAmountIn)\n .mul(nonLeafInputNode.proportionOfParent)\n .div(totalProportions)\n .toString();\n // Create input node for current non-leaf input token\n const [inputTokenNode] = PoolGraph.createInputTokenNode(\n 0, // temp value that will be updated after creation\n nonLeafInputNode.address,\n nonLeafInputNode.decimals,\n nonLeafInputNode.parent,\n WeiPerEther,\n nonLeafInputNode.balance\n );\n // Update index to be actual amount in\n inputTokenNode.index = proportionalNonLeafAmountIn;\n inputTokenNode.isLeaf = false;\n // Start join path with input node\n const nonLeafJoinPath = [inputTokenNode];\n // Add each parent to the join path until we reach the root node\n let parent = inputTokenNode.parent;\n let currentChild = inputTokenNode;\n while (parent) {\n const parentCopy = cloneDeep(parent);\n parentCopy.children = parentCopy.children.map((child) => {\n if (child.address === currentChild.address) {\n // Replace original child with current child that was modified to handle the non-leaf join\n return currentChild;\n } else {\n // Update index of siblings that are not within the join path to be 0\n return { ...child, index: '0' };\n }\n });\n nonLeafJoinPath.push(parentCopy);\n currentChild = parentCopy;\n parent = parentCopy.parent;\n }\n // Add join path to list of join paths\n joinPaths.push(nonLeafJoinPath);\n });\n\n // After creating all join paths, update the index of each input node to be the amount in for that node\n // All other node indexes will be used as a reference to store the amounts out for that node\n this.updateInputAmounts(joinPaths, tokensIn, amountsIn);\n\n return joinPaths;\n };\n\n /*\n AmountsIn should be adjusted after being split between tokensIn to fix eventual rounding issues.\n This prevents the transaction to leave out dust amounts.\n */\n private static updateInputAmounts = (\n joinPaths: Node[][],\n tokensIn: string[],\n amountsIn: string[]\n ): void => {\n // Helper function to calculate and adjust amount difference for each token in\n const ajdustAmountInDiff = (\n tokenInInputNodes: Node[],\n amountIn: string\n ): void => {\n if (tokenInInputNodes.length > 1) {\n // Sum of amountsIn from each input node with same tokenIn\n const amountsInSumforTokenIn = tokenInInputNodes.reduce(\n (sum, currentNode) => sum.add(currentNode.index),\n BigNumber.from(0)\n );\n // Compare total amountIn with sum of amountIn split between each input node with same tokenIn\n const diff = BigNumber.from(amountIn).sub(amountsInSumforTokenIn);\n // Apply difference to first input node with same tokenIn\n tokenInInputNodes[0].index = diff\n .add(tokenInInputNodes[0].index)\n .toString();\n }\n };\n\n // Update amountsIn within leaf join path\n const leafJoinPath = joinPaths.find((joinPath) => joinPath[0].isLeaf);\n if (leafJoinPath) {\n // Update input proportions so inputs are shared correctly between leaf nodes with same tokenIn\n const totalProportions = this.updateTotalProportions(leafJoinPath);\n // Update input nodes to have correct input amount\n leafJoinPath.forEach((node) => {\n if (node.joinAction === 'input')\n node = this.updateNodeAmount(\n node,\n tokensIn,\n amountsIn,\n totalProportions\n );\n });\n // Adjust amountIn for each tokenIn to fix eventual rounding issues\n tokensIn.forEach((tokenIn, i) => {\n const tokenInInputNodes = leafJoinPath.filter(\n (inputNode) =>\n inputNode.isLeaf && isSameAddress(inputNode.address, tokenIn)\n );\n ajdustAmountInDiff(tokenInInputNodes, amountsIn[i]);\n });\n }\n\n // Adjust amountsIn shared between non-leaf join paths with same tokenIn\n const nonLeafJoinPaths = joinPaths.filter(\n (joinPath) => !joinPath[0].isLeaf\n );\n if (nonLeafJoinPaths.length > 1) {\n tokensIn.forEach((tokenIn, i) => {\n const tokenInInputNodes = nonLeafJoinPaths\n .map((path) => path[0])\n .filter((node) => isSameAddress(node.address, tokenIn));\n ajdustAmountInDiff(tokenInInputNodes, amountsIn[i]);\n });\n }\n };\n\n private createCalls = async (\n joinPaths: Node[][],\n userAddress: string,\n isNativeAssetJoin: boolean,\n minAmountsOut?: string[], // one for each joinPath\n authorisation?: string\n ): Promise<{\n multiRequests: Requests[][];\n encodedCall: string;\n outputIndexes: number[];\n deltas: Record;\n }> => {\n // Create calls for both leaf and non-leaf inputs\n const { multiRequests, encodedCalls, outputIndexes, deltas } =\n this.createActionCalls(\n joinPaths,\n userAddress,\n isNativeAssetJoin,\n minAmountsOut\n );\n\n if (authorisation) {\n encodedCalls.unshift(this.createSetRelayerApproval(authorisation));\n }\n const encodedCall = balancerRelayerInterface.encodeFunctionData(\n 'multicall',\n [encodedCalls]\n );\n\n return {\n multiRequests,\n encodedCall,\n outputIndexes: authorisation\n ? outputIndexes.map((i) => i + 1)\n : outputIndexes,\n deltas,\n };\n };\n\n /*\n 1. For each input token:\n 1. recursively find the spot price for each pool in the path of the join\n 2. take the product to get the spot price of the path\n 3. multiply the input amount of that token by the path spot price to get the \"zeroPriceImpact\" amount of BPT for that token\n 2. Sum each tokens zeroPriceImpact BPT amount to get total zeroPriceImpact BPT\n */\n static totalBptZeroPriceImpact = (joinPaths: Node[][]): BigNumber => {\n // Add bptZeroPriceImpact for all inputs\n let totalBptZeroPi = BigNumber.from('0');\n joinPaths.forEach((joinPath) => {\n const isLeafJoin = joinPath[0].isLeaf;\n if (isLeafJoin) {\n // Calculate bptZeroPriceImpact for leaf inputs\n const leafNodes = joinPath.filter((node) => node.isLeaf);\n leafNodes.forEach((leafNode) => {\n const bptOut = this.bptOutZeroPiForInputNode(leafNode);\n totalBptZeroPi = totalBptZeroPi.add(bptOut);\n });\n } else {\n // Calculate bptZeroPriceImpact for non-leaf inputs\n const bptOut = this.bptOutZeroPiForInputNode(joinPath[0]);\n totalBptZeroPi = totalBptZeroPi.add(bptOut);\n }\n });\n return totalBptZeroPi;\n };\n\n /*\n 1. recursively find the spot price for each pool in the path of the join\n 2. take the product to get the spot price of the path\n 3. multiply the input amount of that token by the path spot price to get the \"zeroPriceImpact\" amount of BPT for that token \n */\n static bptOutZeroPiForInputNode = (inputNode: Node): bigint => {\n if (inputNode.index === '0' || inputNode.joinAction !== 'input')\n return BigInt(0);\n let spProduct = 1;\n let parentNode: Node | undefined = inputNode.parent;\n let childAddress = inputNode.address;\n // Traverse up graph until we reach root adding each node\n while (parentNode !== undefined) {\n if (\n parentNode.joinAction === 'batchSwap' ||\n parentNode.joinAction === 'joinPool'\n ) {\n const sp = parentNode.spotPrices[childAddress.toLowerCase()];\n spProduct = spProduct * parseFloat(sp);\n childAddress = parentNode.address;\n }\n parentNode = parentNode.parent;\n }\n const spPriceScaled = parseFixed(spProduct.toFixed(18), 18);\n const scalingFactor = _computeScalingFactor(BigInt(inputNode.decimals));\n const inputAmountScaled = _upscale(BigInt(inputNode.index), scalingFactor);\n const bptOut = SolidityMaths.divDownFixed(\n inputAmountScaled,\n spPriceScaled.toBigInt()\n );\n return bptOut;\n };\n\n /*\n Simulate transaction and decodes each output of interest.\n */\n private amountsOutByJoinPath = async (\n userAddress: string,\n multiRequests: Requests[][],\n callData: string,\n tokensIn: string[],\n outputIndexes: number[],\n signer: JsonRpcSigner,\n simulationType: SimulationType,\n value: string\n ): Promise<{ amountsOut: string[]; totalAmountOut: string }> => {\n const amountsOut = await this.simulationService.simulateGeneralisedJoin(\n this.relayer,\n multiRequests,\n callData,\n outputIndexes,\n userAddress,\n tokensIn,\n signer,\n simulationType,\n value\n );\n\n const totalAmountOut = amountsOut\n .reduce((sum, amount) => sum.add(BigNumber.from(amount)), Zero)\n .toString();\n\n return {\n amountsOut,\n totalAmountOut,\n };\n };\n\n /*\n Apply slippage to amounts\n */\n private minAmountsOutByJoinPath = (\n slippage: string,\n amounts: string[],\n totalAmountOut: string\n ): { minAmountsOut: string[]; totalMinAmountOut: string } => {\n const minAmountsOut = amounts.map((amount) =>\n subSlippage(BigNumber.from(amount), BigNumber.from(slippage)).toString()\n );\n const totalMinAmountOut = subSlippage(\n BigNumber.from(totalAmountOut),\n BigNumber.from(slippage)\n ).toString();\n\n return {\n minAmountsOut,\n totalMinAmountOut,\n };\n };\n\n private updateDeltas(\n deltas: Record,\n assets: string[],\n amounts: string[]\n ): Record {\n assets.forEach((t, i) => {\n const asset = t.toLowerCase();\n if (!deltas[asset]) deltas[asset] = Zero;\n deltas[asset] = deltas[asset].add(amounts[i]);\n });\n return deltas;\n }\n\n // Create actions for each Node and return in multicall array\n // Create calls for each path, use value stored in minBptAmounts if available\n private createActionCalls = (\n joinPaths: Node[][],\n userAddress: string,\n isNativeAssetJoin: boolean,\n minAmountsOut?: string[]\n ): {\n multiRequests: Requests[][];\n encodedCalls: string[];\n outputIndexes: number[];\n deltas: Record;\n } => {\n const multiRequests: Requests[][] = [];\n const encodedCalls: string[] = [];\n const outputIndexes: number[] = [];\n const isSimulation = !minAmountsOut;\n const deltas: Record = {};\n\n joinPaths.forEach((joinPath, j) => {\n const isLeafJoin = joinPath[0].isLeaf;\n const modelRequests: Requests[] = [];\n\n joinPath.forEach((node, i) => {\n // Prevent adding action calls with input amounts equal 0\n if (\n node.children.length > 0 &&\n node.children.filter((c) => this.shouldBeConsidered(c)).length === 0\n ) {\n node.index = '0';\n return;\n }\n\n // Sender's rule\n // 1. If any child node is an input node, tokens are coming from the user\n const hasChildInput = node.children\n .filter((c) => this.shouldBeConsidered(c))\n .some((c) => c.joinAction === 'input');\n const sender = hasChildInput ? userAddress : this.relayer;\n\n // Recipient's rule\n // 1. Transactions with sibling input node must be sent to user because it will be the sender of the following transaction (per sender's rule above)\n // e.g. boostedMetaAlt - MAI/bbausd - joining with MAI from user and bbausd from earlier actions. MAI needs to come from user.\n // 2. Last transaction must be sent to the user\n // 3. Otherwise relayer\n // Note: scenario 1 usually happens with joinPool transactions that have both BPT and undelying tokens as tokensIn\n const isLastChainedCall = i === joinPath.length - 1;\n const hasSiblingInput =\n (isLeafJoin && // non-leaf joins don't have siblings that should be considered\n node.parent?.children\n .filter((s) => this.shouldBeConsidered(s))\n .some((s) => s.joinAction === 'input')) ??\n false;\n const recipient =\n isLastChainedCall || hasSiblingInput ? userAddress : this.relayer;\n\n // Last action will use minBptOut to protect user. Middle calls can safely have 0 minimum as tx will revert if last fails.\n const minOut =\n isLastChainedCall && minAmountsOut ? minAmountsOut[j] : '0';\n\n switch (node.joinAction) {\n case 'batchSwap':\n {\n const { modelRequest, encodedCall, assets, amounts } =\n this.createSwap(\n node,\n j,\n minOut,\n sender,\n recipient,\n isNativeAssetJoin,\n isSimulation\n );\n modelRequests.push(modelRequest);\n encodedCalls.push(encodedCall);\n this.updateDeltas(deltas, assets, amounts);\n }\n break;\n case 'joinPool':\n {\n const { modelRequest, encodedCall, assets, amounts, minBptOut } =\n this.createJoinPool(\n node,\n j,\n minOut,\n sender,\n recipient,\n isNativeAssetJoin,\n isSimulation\n );\n modelRequests.push(modelRequest);\n encodedCalls.push(encodedCall);\n this.updateDeltas(\n deltas,\n [node.address, ...assets],\n [minBptOut, ...amounts]\n );\n }\n break;\n default:\n return;\n }\n });\n if (isSimulation) {\n const outputRef = 100 * j;\n const encodedPeekCall = Relayer.encodePeekChainedReferenceValue(\n Relayer.toChainedReference(outputRef, false)\n );\n encodedCalls.push(encodedPeekCall);\n outputIndexes.push(encodedCalls.indexOf(encodedPeekCall));\n }\n multiRequests.push(modelRequests);\n });\n\n return { multiRequests, encodedCalls, outputIndexes, deltas };\n };\n\n /**\n * Creates a map of node address and total proportion. Used for the case where there may be multiple inputs using same token, e.g. DAI input to 2 pools.\n * @param nodes nodes to consider.\n */\n static updateTotalProportions = (\n nodes: Node[]\n ): Record => {\n const totalProportions: Record = {};\n nodes.forEach((node) => {\n if (!totalProportions[node.address])\n totalProportions[node.address] = node.proportionOfParent;\n else {\n totalProportions[node.address] = totalProportions[node.address].add(\n node.proportionOfParent\n );\n }\n });\n return totalProportions;\n };\n\n /**\n * Uses relayer to approve itself to act in behalf of the user\n *\n * @param authorisation Encoded authorisation call.\n * @returns relayer approval call\n */\n private createSetRelayerApproval = (authorisation: string): string => {\n return Relayer.encodeSetRelayerApproval(this.relayer, true, authorisation);\n };\n\n static updateNodeAmount = (\n node: Node,\n tokensIn: string[],\n amountsIn: string[],\n totalProportions: Record\n ): Node => {\n /*\n An input node requires a real amount (not an outputRef) as it is first node in chain.\n This amount will be used when chaining to parent.\n Amounts are split proportionally between all inputs with same token.\n */\n const tokenIndex = tokensIn\n .map((t) => t.toLowerCase())\n .indexOf(node.address.toLowerCase());\n if (tokenIndex === -1) {\n node.index = '0';\n return node;\n }\n\n // Calculate proportional split\n const totalProportion = totalProportions[node.address];\n const inputProportion = node.proportionOfParent\n .mul((1e18).toString())\n .div(totalProportion);\n const inputAmount = inputProportion\n .mul(amountsIn[tokenIndex])\n .div((1e18).toString());\n // Update index with actual value\n node.index = inputAmount.toString();\n // console.log(\n // `${node.type} ${node.address} prop: ${node.proportionOfParent.toString()}\n // ${node.joinAction} (\n // Inputs: ${inputAmount.toString()}\n // OutputRef: ${node.index}\n // )`\n // );\n return node;\n };\n\n private createSwap = (\n node: Node,\n joinPathIndex: number,\n expectedOut: string,\n sender: string,\n recipient: string,\n isNativeAssetJoin: boolean,\n isSimulation: boolean\n ): {\n modelRequest: SwapRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n } => {\n // We only need swaps for main > linearBpt so shouldn't be more than token > token\n if (node.children.length !== 1) throw new Error('Unsupported swap');\n const tokenIn = node.children[0].address;\n const amountIn = this.getOutputRefValue(joinPathIndex, node.children[0]);\n\n // Single swap limits are always positive\n // Swap within generalisedJoin is always exactIn, so use minAmountOut to set limit\n const limit: string = expectedOut;\n\n const assetIn =\n isNativeAssetJoin && !isSimulation\n ? this.replaceWrappedNativeAsset([tokenIn])[0]\n : tokenIn;\n\n const request: SingleSwap = {\n poolId: node.id,\n kind: SwapType.SwapExactIn,\n assetIn,\n assetOut: node.address,\n amount: amountIn.value,\n userData: '0x',\n };\n\n const fromInternalBalance = this.allImmediateChildrenSendToInternal(node);\n const toInternalBalance = this.allSiblingsSendToInternal(node);\n\n const funds: FundManagement = {\n sender,\n recipient,\n fromInternalBalance,\n toInternalBalance,\n };\n\n const outputReference = BigNumber.from(\n this.getOutputRefValue(joinPathIndex, node).value\n );\n\n const value =\n isNativeAssetJoin && !isSimulation\n ? getEthValue([assetIn], [amountIn.value])\n : Zero;\n\n const call: Swap = {\n request,\n funds,\n limit,\n deadline: BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value,\n outputReference,\n };\n\n const encodedCall = Relayer.encodeSwap(call);\n\n debugLog(`\\nSwap:`);\n debugLog(`${JSON.stringify(call)}`);\n debugLog(`Partial value: ${JSON.stringify(call.value?.toString())}`);\n\n const modelRequest = VaultModel.mapSwapRequest(call);\n\n const hasChildInput = node.children.some((c) => c.joinAction === 'input');\n // If node has no child input the swap is part of a chain and token in shouldn't be considered for user deltas\n const userTokenIn = !hasChildInput ? '0' : amountIn.value;\n // If node has parent the swap is part of a chain and BPT out shouldn't be considered for user deltas\n const userBptOut =\n node.parent != undefined\n ? '0'\n : BigNumber.from(expectedOut).mul(-1).toString(); // needs to be negative because it's handled by the vault model as an amount going out of the vault\n\n const assets = [node.address, tokenIn];\n const amounts = [userBptOut, userTokenIn];\n\n return { modelRequest, encodedCall, assets, amounts };\n };\n\n private createJoinPool = (\n node: Node,\n joinPathIndex: number,\n minAmountOut: string,\n sender: string,\n recipient: string,\n isNativeAssetJoin: boolean,\n isSimulation: boolean\n ): {\n modelRequest: JoinPoolModelRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n minBptOut: string;\n } => {\n const inputTokens: string[] = [];\n const inputAmts: string[] = [];\n\n // inputTokens needs to include each asset even if it has 0 amount\n node.children.forEach((child) => {\n inputTokens.push(child.address);\n // non-leaf joins should set input amounts only for children that are in their joinPath\n if (this.shouldBeConsidered(child)) {\n inputAmts.push(this.getOutputRefValue(joinPathIndex, child).value);\n } else {\n inputAmts.push('0');\n }\n });\n\n if (node.type === PoolType.ComposableStable) {\n // assets need to include the phantomPoolToken\n inputTokens.push(node.address);\n // need to add a placeholder so sorting works\n inputAmts.push('0');\n }\n\n // sort inputs\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [sortedTokens, sortedAmounts] = assetHelpers.sortTokens(\n inputTokens,\n inputAmts\n ) as [string[], string[]];\n\n // userData amounts should not include the BPT of the pool being joined\n let userDataAmounts = [];\n const bptIndex = sortedTokens\n .map((t) => t.toLowerCase())\n .indexOf(node.address.toLowerCase());\n if (bptIndex === -1) {\n userDataAmounts = sortedAmounts;\n } else {\n userDataAmounts = [\n ...sortedAmounts.slice(0, bptIndex),\n ...sortedAmounts.slice(bptIndex + 1),\n ];\n }\n\n let userData: string;\n if (node.type === PoolType.Weighted) {\n userData = WeightedPoolEncoder.joinExactTokensInForBPTOut(\n userDataAmounts,\n minAmountOut\n );\n } else {\n userData = StablePoolEncoder.joinExactTokensInForBPTOut(\n userDataAmounts,\n minAmountOut\n );\n }\n\n const value =\n isNativeAssetJoin && !isSimulation\n ? getEthValue(\n this.replaceWrappedNativeAsset(sortedTokens),\n sortedAmounts\n )\n : Zero;\n\n const fromInternalBalance = this.allImmediateChildrenSendToInternal(node);\n\n const call: EncodeJoinPoolInput = Relayer.formatJoinPoolInput({\n poolId: node.id,\n kind: 0,\n sender,\n recipient,\n value,\n outputReference: this.getOutputRefValue(joinPathIndex, node).value,\n joinPoolRequest: {} as JoinPoolRequest,\n assets:\n isNativeAssetJoin && !isSimulation\n ? this.replaceWrappedNativeAsset(sortedTokens)\n : sortedTokens, // Must include BPT token\n maxAmountsIn: sortedAmounts,\n userData,\n fromInternalBalance,\n });\n const encodedCall = Relayer.encodeJoinPool(call);\n\n debugLog(`\\nJoin:`);\n debugLog(JSON.stringify(call));\n debugLog(`Partial value: ${JSON.stringify(call.value?.toString())}`);\n const modelRequest = VaultModel.mapJoinPoolRequest(call);\n\n const userAmountsTokenIn = sortedAmounts.map((a) =>\n Relayer.isChainedReference(a) ? '0' : a\n );\n const userAmountOut = Relayer.isChainedReference(minAmountOut)\n ? '0'\n : minAmountOut;\n\n const hasChildInput = node.children\n .filter((c) => this.shouldBeConsidered(c))\n .some((c) => c.joinAction === 'input');\n // If node has no child input the join is part of a chain and amounts in shouldn't be considered for user deltas\n const assets = !hasChildInput ? [] : sortedTokens;\n const amounts = !hasChildInput ? [] : userAmountsTokenIn;\n // If node has parent the join is part of a chain and shouldn't be considered for user deltas\n const minBptOut =\n node.parent != undefined\n ? Zero.toString()\n : Zero.sub(userAmountOut).toString(); // -ve because coming from Vault\n\n return { modelRequest, encodedCall, assets, amounts, minBptOut };\n };\n\n private getOutputRefValue = (\n joinPathIndex: number,\n node: Node\n ): { value: string; isRef: boolean } => {\n if (node.joinAction === 'input') {\n // Input nodes have their indexes set as the actual input amount, instead of a chained reference\n return { value: node.index, isRef: false };\n } else if (node.index !== '0' || !node.parent) {\n // Root node (parent === undefined) has index zero, but should still pass chained reference as outputRef value\n return {\n value: Relayer.toChainedReference(\n BigNumber.from(node.index).add(joinPathIndex * 100)\n ).toString(),\n isRef: true,\n };\n } else {\n return {\n value: '0',\n isRef: true,\n };\n }\n };\n\n // Nodes with index 0 won't affect transactions so they shouldn't be considered\n private shouldBeConsidered = (node: Node): boolean => {\n return node.index !== '0';\n };\n\n // joinPool transaction always sends to non-internal balance\n // input always behave as sending to non-internal balance\n private sendsToInternalBalance = (node: Node): boolean => {\n return node.joinAction !== 'input' && node.joinAction !== 'joinPool';\n };\n\n private allImmediateChildrenSendToInternal = (node: Node): boolean => {\n const children = node.children.filter((c) => this.shouldBeConsidered(c));\n if (children.length === 0) return false;\n return (\n children.filter((c) => this.sendsToInternalBalance(c)).length ===\n children.length\n );\n };\n\n private allSiblingsSendToInternal = (node: Node): boolean => {\n if (!node.parent) return false;\n const siblings = node.parent.children.filter((s) =>\n this.shouldBeConsidered(s)\n );\n return (\n siblings.filter((s) => this.sendsToInternalBalance(s)).length ===\n siblings.length\n );\n };\n\n private replaceWrappedNativeAsset = (tokens: string[]): string[] => {\n const wrappedNativeAssetIndex = tokens.findIndex(\n (t) => t.toLowerCase() === this.wrappedNativeAsset.toLowerCase()\n );\n return replace(tokens, wrappedNativeAssetIndex, AddressZero);\n };\n}\n","import axios from 'axios';\nimport { AddressZero, MaxInt256 } from '@ethersproject/constants';\nimport { parseFixed } from '@ethersproject/bignumber';\n\nimport { networkAddresses } from '@/lib/constants/config';\nimport { BalancerTenderlyConfig } from '@/types';\n\ntype StateOverrides = {\n [address: string]: { value: { [key: string]: string } };\n};\n\nexport default class TenderlyHelper {\n private vaultAddress;\n private tenderlyUrl;\n private opts?;\n private blockNumber: number | undefined;\n\n constructor(private chainId: number, tenderlyConfig: BalancerTenderlyConfig) {\n const { contracts } = networkAddresses(this.chainId);\n this.vaultAddress = contracts.vault as string;\n this.tenderlyUrl = `https://api.tenderly.co/api/v1/account/${tenderlyConfig.user}/project/${tenderlyConfig.project}/`;\n this.opts = {\n headers: {\n 'X-Access-Key': tenderlyConfig.accessKey,\n },\n };\n\n this.blockNumber = tenderlyConfig.blockNumber;\n }\n\n simulateMulticall = async (\n to: string,\n data: string,\n userAddress: string,\n tokens: string[],\n value = '0'\n ): Promise => {\n const tokensOverrides = await this.encodeBalanceAndAllowanceOverrides(\n userAddress,\n tokens\n );\n const relayerApprovalOverride = await this.encodeRelayerApprovalOverride(\n userAddress,\n to\n );\n const encodedStateOverrides = {\n ...tokensOverrides,\n ...relayerApprovalOverride,\n };\n return this.simulateTransaction(\n to,\n data,\n userAddress,\n encodedStateOverrides,\n value\n );\n };\n\n simulateTransaction = async (\n to: string,\n data: string,\n userAddress: string,\n encodedStateOverrides: StateOverrides,\n value: string\n ): Promise => {\n // Map encoded-state response into simulate request body by replacing property names\n const stateOverrides = Object.fromEntries(\n Object.keys(encodedStateOverrides).map((address) => {\n // Object.fromEntries require format [key, value] instead of {key: value}\n return [address, { storage: encodedStateOverrides[address].value }];\n })\n );\n\n // Set user balance to 1000 ETH to make sure the simulation doesn't fail due to insufficient balance\n const state_objects = {\n ...stateOverrides,\n [userAddress]: {\n balance: parseFixed('100', 18).toHexString(),\n },\n };\n\n const body = {\n // -- Standard TX fields --\n network_id: this.chainId.toString(),\n block_number: this.blockNumber,\n from: userAddress,\n to,\n input: data,\n // gas: 8000000,\n // gas_price: '0',\n value,\n // -- Simulation config (tenderly specific) --\n save_if_fails: true,\n // save: true,\n simulation_type: 'quick', // remove this while developing/debugging\n state_objects,\n };\n\n const SIMULATE_URL = this.tenderlyUrl + 'simulate';\n\n const resp = await axios.post(SIMULATE_URL, body, this.opts);\n\n const simulatedTransactionOutput =\n resp.data.transaction.transaction_info.call_trace.output;\n\n return simulatedTransactionOutput;\n };\n\n // Encode relayer approval state override\n encodeRelayerApprovalOverride = async (\n userAddress: string,\n relayerAddress: string\n ): Promise => {\n const stateOverrides: StateOverrides = {\n [`${this.vaultAddress}`]: {\n value: {\n [`_approvedRelayers[${userAddress}][${relayerAddress}]`]:\n true.toString(),\n },\n },\n };\n\n const encodedStateOverrides = await this.requestStateOverrides(\n stateOverrides\n );\n\n return encodedStateOverrides;\n };\n\n // Encode token balances and allowances overrides to max value\n encodeBalanceAndAllowanceOverrides = async (\n userAddress: string,\n tokens: string[]\n ): Promise => {\n const tokensWithoutNativeAsset = tokens.filter(\n (token) => token !== AddressZero\n );\n\n if (tokensWithoutNativeAsset.length === 0) return {};\n\n // Create balances and allowances overrides for each token address provided\n let stateOverrides: StateOverrides = {};\n tokensWithoutNativeAsset.forEach(\n (token) =>\n (stateOverrides = {\n ...stateOverrides,\n [`${token}`]: {\n value: {\n [`_balances[${userAddress}]`]: MaxInt256.toString(),\n [`_allowances[${userAddress}][${this.vaultAddress}]`]:\n MaxInt256.toString(),\n [`balanceOf[${userAddress}]`]: MaxInt256.toString(),\n [`allowance[${userAddress}][${this.vaultAddress}]`]:\n MaxInt256.toString(),\n [`balances[${userAddress}]`]: MaxInt256.toString(),\n [`allowed[${userAddress}][${this.vaultAddress}]`]:\n MaxInt256.toString(),\n },\n },\n })\n );\n\n const encodedStateOverrides = await this.requestStateOverrides(\n stateOverrides\n );\n\n if (\n Object.keys(encodedStateOverrides).some((k) => {\n return Object.keys(encodedStateOverrides[k].value).length !== 2;\n })\n )\n throw new Error(\n \"Couldn't encode state overrides - states should match the ones in the contracts\"\n );\n\n return encodedStateOverrides;\n };\n\n private requestStateOverrides = async (\n stateOverrides: StateOverrides\n ): Promise => {\n const ENCODE_STATES_URL = this.tenderlyUrl + 'contracts/encode-states';\n const body = {\n networkID: this.chainId.toString(),\n stateOverrides,\n };\n\n const encodedStatesResponse = await axios.post(\n ENCODE_STATES_URL,\n body,\n this.opts\n );\n const encodedStateOverrides = encodedStatesResponse.data\n .stateOverrides as StateOverrides;\n\n if (\n !encodedStateOverrides ||\n Object.keys(encodedStateOverrides).length !==\n Object.keys(stateOverrides).length\n )\n throw new Error(\n \"Couldn't encode state overrides - contracts should be verified and whitelisted on Tenderly\"\n );\n\n return encodedStateOverrides;\n };\n}\n","import { PoolDataService } from '@balancer-labs/sor';\nimport { defaultAbiCoder } from '@ethersproject/abi';\nimport { JsonRpcSigner } from '@ethersproject/providers';\n\nimport TenderlyHelper from '@/lib/utils/tenderlyHelper';\nimport { BalancerNetworkConfig } from '@/types';\n\nimport { VaultModel, Requests } from '../vaultModel/vaultModel.module';\n\nexport enum SimulationType {\n Tenderly,\n VaultModel,\n Static,\n}\n\n/**\n * Simulation module is responsible for simulating the results of a generalised\n * join or exit using different types of simulation, such as:\n * - Tenderly: uses Tenderly Simulation API (third party service)\n * - VaultModel: uses TS math, which may be less accurate (min. 99% accuracy)\n * - Static: uses staticCall, which is 100% accurate but requires vault approval\n *\n * This module allows a user to perform a simulation and check for expected\n * amounts out in order to make an informed decision on whether to proceed with\n * the transaction. These expected amounts out can be used as limits to prevent\n * frontrunning and ensure that the transaction will return minimum amounts out.\n */\n\nexport class Simulation {\n private tenderlyHelper?: TenderlyHelper;\n private vaultModel: VaultModel | undefined;\n constructor(\n networkConfig: BalancerNetworkConfig,\n poolDataService?: PoolDataService\n ) {\n if (networkConfig.tenderly) {\n this.tenderlyHelper = new TenderlyHelper(\n networkConfig.chainId,\n networkConfig.tenderly\n );\n }\n if (!poolDataService) {\n this.vaultModel = undefined;\n } else {\n this.vaultModel = new VaultModel(\n poolDataService,\n networkConfig.addresses.tokens.wrappedNativeAsset\n );\n }\n }\n\n simulateGeneralisedJoin = async (\n to: string,\n multiRequests: Requests[][],\n encodedCall: string,\n outputIndexes: number[],\n userAddress: string,\n tokensIn: string[],\n signer: JsonRpcSigner,\n simulationType: SimulationType,\n value: string\n ): Promise => {\n const amountsOut: string[] = [];\n switch (simulationType) {\n case SimulationType.Tenderly: {\n if (!this.tenderlyHelper) {\n throw new Error('Missing Tenderly config');\n }\n const simulationResult = await this.tenderlyHelper.simulateMulticall(\n to,\n encodedCall,\n userAddress,\n tokensIn,\n value\n );\n amountsOut.push(...this.decodeResult(simulationResult, outputIndexes));\n break;\n }\n\n case SimulationType.VaultModel: {\n const requestResult = await this.simulateRequests(multiRequests);\n amountsOut.push(...requestResult);\n break;\n }\n case SimulationType.Static: {\n const staticResult = await signer.call({\n to,\n data: encodedCall,\n value,\n });\n\n try {\n amountsOut.push(...this.decodeResult(staticResult, outputIndexes));\n } catch (_) {\n // decoding output failed, so we assume the response contains an error message and try to decode it instead\n const decodedResponse = Buffer.from(\n staticResult.split('x')[1],\n 'hex'\n ).toString('utf8');\n throw new Error(\n `Transaction reverted with error: ${decodedResponse}`\n );\n }\n break;\n }\n default:\n throw new Error('Simulation type not supported');\n }\n return amountsOut;\n };\n\n simulateGeneralisedExit = async (\n to: string,\n multiRequests: Requests[][],\n encodedCall: string,\n outputIndexes: number[],\n userAddress: string,\n tokenIn: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType\n ): Promise => {\n const amountsOut: string[] = [];\n switch (simulationType) {\n case SimulationType.Tenderly: {\n if (!this.tenderlyHelper) {\n throw new Error('Missing Tenderly config');\n }\n const simulationResult = await this.tenderlyHelper.simulateMulticall(\n to,\n encodedCall,\n userAddress,\n [tokenIn]\n );\n amountsOut.push(...this.decodeResult(simulationResult, outputIndexes));\n break;\n }\n\n case SimulationType.VaultModel: {\n const requestResult = await this.simulateRequests(multiRequests);\n amountsOut.push(...requestResult);\n break;\n }\n case SimulationType.Static: {\n const staticResult = await signer.call({\n to,\n data: encodedCall,\n });\n try {\n amountsOut.push(...this.decodeResult(staticResult, outputIndexes));\n } catch (_) {\n // decoding output failed, so we assume the response contains an error message and try to decode it instead\n const decodedResponse = Buffer.from(\n staticResult.split('x')[1],\n 'hex'\n ).toString('utf8');\n throw new Error(\n `Transaction reverted with error: ${decodedResponse}`\n );\n }\n break;\n }\n default:\n throw new Error('Simulation type not supported');\n }\n return amountsOut;\n };\n\n private decodeResult = (result: string, outputIndexes: number[]) => {\n const multicallResult = defaultAbiCoder.decode(\n ['bytes[]'],\n result\n )[0] as string[];\n\n // Decode each root output\n const amountsOut = outputIndexes.map((outputIndex) => {\n const result = defaultAbiCoder.decode(\n ['uint256'],\n multicallResult[outputIndex]\n );\n return result.toString();\n });\n\n return amountsOut;\n };\n\n private simulateRequests = async (multiRequests: Requests[][]) => {\n if (this.vaultModel === undefined)\n throw new Error('Missing Vault Model Config.');\n // make one multicall for each exitPath\n // take only bptOut/tokenOut delta into account\n const amountsOut: string[] = [];\n for (const [i, requests] of multiRequests.entries()) {\n const deltas = await this.vaultModel.multicall(requests, i === 0);\n const tokenOutDeltas = Object.values(deltas).filter((d) => d.lt(0));\n if (tokenOutDeltas.length === 0)\n throw new Error('No delta found for token out.');\n amountsOut.push(...tokenOutDeltas.map((d) => d.mul(-1).toString()));\n }\n return amountsOut;\n };\n}\n","import { cloneDeep } from 'lodash';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { WeiPerEther, Zero } from '@ethersproject/constants';\nimport { JsonRpcSigner } from '@ethersproject/providers';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { BalancerRelayer__factory } from '@/contracts/factories/BalancerRelayer__factory';\nimport { networkAddresses } from '@/lib/constants/config';\nimport { AssetHelpers, subSlippage } from '@/lib/utils';\nimport { PoolGraph, Node } from '@/modules/graph/graph';\nimport { Join } from '@/modules/joins/joins.module';\nimport { calcPriceImpact } from '@/modules/pricing/priceImpact';\nimport {\n EncodeUnwrapInput,\n OutputReference,\n Relayer,\n EncodeBatchSwapInput,\n} from '@/modules/relayer/relayer.module';\nimport {\n Simulation,\n SimulationType,\n} from '@/modules/simulation/simulation.module';\nimport {\n FundManagement,\n SingleSwap,\n Swap,\n SwapType,\n BatchSwapStep,\n} from '@/modules/swaps/types';\nimport { ExitPoolRequest as ExitPoolModelRequest } from '@/modules/vaultModel/poolModel/exit';\nimport {\n BatchSwapRequest,\n SwapRequest,\n} from '@/modules/vaultModel/poolModel/swap';\nimport { UnwrapRequest } from '@/modules/vaultModel/poolModel/unwrap';\nimport { Requests, VaultModel } from '@/modules/vaultModel/vaultModel.module';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport { getPoolAddress } from '@/pool-utils';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { BalancerNetworkConfig, ExitPoolRequest, PoolType } from '@/types';\nimport { Logger } from '@/lib/utils/logger';\n\nconst balancerRelayerInterface = BalancerRelayer__factory.createInterface();\n\nexport interface GeneralisedExitOutput {\n to: string;\n encodedCall: string;\n tokensOut: string[];\n expectedAmountsOut: string[];\n minAmountsOut: string[];\n priceImpact: string;\n}\n\nexport interface ExitInfo {\n tokensOut: string[];\n estimatedAmountsOut: string[];\n priceImpact: string;\n tokensToUnwrap: string[];\n}\n\n// Quickly switch useful debug logs on/off\nconst DEBUG = false;\n\nfunction debugLog(log: string) {\n const logger = Logger.getInstance();\n if (DEBUG) logger.info(log);\n}\n\nexport class Exit {\n private wrappedNativeAsset: string;\n private relayer: string;\n\n constructor(\n private poolGraph: PoolGraph,\n networkConfig: BalancerNetworkConfig,\n private simulationService: Simulation\n ) {\n const { tokens, contracts } = networkAddresses(networkConfig.chainId);\n this.wrappedNativeAsset = tokens.wrappedNativeAsset;\n this.relayer = contracts.balancerRelayer;\n }\n\n async getExitInfo(\n poolId: string,\n amountBptIn: string,\n userAddress: string,\n signer: JsonRpcSigner\n ): Promise<{\n tokensOut: string[];\n estimatedAmountsOut: string[];\n priceImpact: string;\n tokensToUnwrap: string[];\n }> {\n debugLog(`\\n--- getExitInfo()`);\n /*\n Overall exit flow description:\n - Create calls with 0 expected min amount for each token out\n - static call (or V4 special call) to get actual amounts for each token out\n - Apply slippage to amountsOut\n - Recreate calls with minAmounts === actualAmountsWithSlippage\n - Return minAmoutsOut, UI would use this to display to user\n - Return updatedCalls, UI would use this to execute tx\n */\n const exit = await this.getExit(\n poolId,\n amountBptIn,\n userAddress,\n signer,\n [],\n SimulationType.VaultModel\n );\n\n return {\n tokensOut: exit.tokensOut,\n estimatedAmountsOut: exit.expectedAmountsOut,\n priceImpact: exit.priceImpact,\n tokensToUnwrap: exit.tokensToUnwrap,\n };\n }\n\n async buildExitCall(\n poolId: string,\n amountBptIn: string,\n userAddress: string,\n slippage: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType.Static | SimulationType.Tenderly,\n authorisation?: string,\n tokensToUnwrap?: string[]\n ): Promise<{\n to: string;\n encodedCall: string;\n tokensOut: string[];\n expectedAmountsOut: string[];\n minAmountsOut: string[];\n priceImpact: string;\n }> {\n debugLog(\n `\\n--- exitPool(): simulationType: ${simulationType} - tokensToUnwrap: ${tokensToUnwrap}`\n );\n /*\n Overall exit flow description:\n - Create calls with 0 expected min amount for each token out\n - static call (or V4 special call) to get actual amounts for each token out\n - Apply slippage to amountsOut\n - Recreate calls with minAmounts === actualAmountsWithSlippage\n - Return minAmoutsOut, UI would use this to display to user\n - Return updatedCalls, UI would use this to execute tx\n */\n\n const exit = await this.getExit(\n poolId,\n amountBptIn,\n userAddress,\n signer,\n tokensToUnwrap ?? [],\n simulationType,\n authorisation\n );\n\n const { minAmountsOutByExitPath, minAmountsOutByTokenOut } =\n this.minAmountsOut(\n exit.expectedAmountsOutByExitPath,\n exit.expectedAmountsOut,\n slippage\n );\n\n debugLog(`------------ Updating limits...`);\n // Create calls with minimum expected amount out for each exit path\n const { encodedCall, deltas } = await this.createCalls(\n exit.exitPaths,\n userAddress,\n exit.isProportional,\n minAmountsOutByExitPath,\n authorisation\n );\n\n this.assertDeltas(\n poolId,\n deltas,\n amountBptIn,\n exit.tokensOut,\n minAmountsOutByTokenOut\n );\n\n return {\n to: this.relayer,\n encodedCall,\n tokensOut: exit.tokensOut,\n expectedAmountsOut: exit.expectedAmountsOut,\n minAmountsOut: minAmountsOutByTokenOut,\n priceImpact: exit.priceImpact,\n };\n }\n\n private async getExit(\n poolId: string,\n amountBptIn: string,\n userAddress: string,\n signer: JsonRpcSigner,\n tokensToUnwrap: string[],\n simulationType: SimulationType,\n authorisation?: string\n ): Promise<{\n tokensToUnwrap: string[];\n tokensOut: string[];\n exitPaths: Node[][];\n isProportional: boolean;\n expectedAmountsOut: string[];\n expectedAmountsOutByExitPath: string[];\n priceImpact: string;\n }> {\n // Create nodes and order by breadth first - initially trys with no unwrapping\n const orderedNodes = await this.poolGraph.getGraphNodes(\n false,\n poolId,\n tokensToUnwrap\n );\n\n const isProportional = PoolGraph.isProportionalPools(orderedNodes);\n debugLog(`\\nisProportional = ${isProportional}`);\n\n let exitPaths: Node[][] = [];\n let tokensOutByExitPath: string[] = [];\n let tokensOut: string[] = [];\n\n const outputNodes = orderedNodes.filter((n) => n.exitAction === 'output');\n tokensOutByExitPath = outputNodes.map((n) => n.address.toLowerCase());\n\n tokensOut = [...new Set(tokensOutByExitPath)].sort();\n\n if (isProportional) {\n // All proportional will have single path from root node, exiting proportionally by ref all the way to leafs\n const path = orderedNodes.map((node, i) => {\n // First node should exit with full BPT amount in\n if (i === 0) node.index = amountBptIn;\n return node;\n });\n exitPaths[0] = path;\n } else {\n // Create exit paths for each output node and splits amount in proportionally between them\n exitPaths = this.getExitPaths(outputNodes, amountBptIn);\n }\n\n // Create calls with minimum expected amount out for each exit path\n const {\n multiRequests,\n encodedCall: queryData,\n outputIndexes,\n } = await this.createCalls(\n exitPaths,\n userAddress,\n isProportional,\n undefined,\n authorisation\n );\n\n const expectedAmountsOutByExitPath = await this.amountsOutByExitPath(\n userAddress,\n multiRequests,\n queryData,\n orderedNodes[0].address,\n outputIndexes,\n signer,\n simulationType\n );\n\n const tokensWithInsufficientBalance = outputNodes\n .filter((outputNode, i) =>\n BigNumber.from(expectedAmountsOutByExitPath[i]).gt(outputNode.balance)\n )\n .map((node) => node.address.toLowerCase());\n\n if (\n tokensToUnwrap.some((t) =>\n tokensWithInsufficientBalance.includes(t.toLowerCase())\n )\n ) {\n /**\n * This means there is not enough balance to exit to main or wrapped tokens only\n */\n throw new Error(\n 'Insufficient pool balance to perform generalised exit - try exitting with smaller amounts'\n );\n } else if (tokensWithInsufficientBalance.length > 0) {\n return await this.getExit(\n poolId,\n amountBptIn,\n userAddress,\n signer,\n [...new Set(tokensWithInsufficientBalance)].sort(),\n simulationType,\n authorisation\n );\n } else {\n const expectedAmountsOut = this.amountsOutByTokenOut(\n tokensOut,\n tokensOutByExitPath,\n expectedAmountsOutByExitPath\n );\n\n const priceImpact = await this.calculatePriceImpact(\n poolId,\n this.poolGraph,\n tokensOut,\n expectedAmountsOut,\n amountBptIn\n );\n\n return {\n tokensToUnwrap,\n tokensOut,\n exitPaths,\n isProportional,\n expectedAmountsOut,\n expectedAmountsOutByExitPath,\n priceImpact,\n };\n }\n }\n\n /*\n (From Fernando)\n 1. Given a bpt amount in find the expect token amounts out (proportionally)\n 2. Uses bptZeroPi = _bptForTokensZeroPriceImpact (the same is used for joins too)\n 3. PI = bptAmountIn / bptZeroPi - 1\n */\n private async calculatePriceImpact(\n poolId: string,\n poolGraph: PoolGraph,\n tokensOut: string[],\n amountsOut: string[],\n amountBptIn: string\n ): Promise {\n // Create nodes for each pool/token interaction and order by breadth first\n const orderedNodesForJoin = await poolGraph.getGraphNodes(true, poolId, []);\n const joinPaths = Join.getJoinPaths(\n orderedNodesForJoin,\n tokensOut,\n amountsOut\n );\n const totalBptZeroPi = Join.totalBptZeroPriceImpact(joinPaths);\n const priceImpact = calcPriceImpact(\n BigInt(amountBptIn),\n totalBptZeroPi.toBigInt(),\n false\n ).toString();\n return priceImpact;\n }\n\n private assertDeltas(\n poolId: string,\n deltas: Record,\n bptIn: string,\n tokensOut: string[],\n amountsOut: string[]\n ): void {\n const poolAddress = getPoolAddress(poolId);\n const outDiff = deltas[poolAddress.toLowerCase()].sub(bptIn);\n\n if (outDiff.abs().gt(3)) {\n console.error(\n `exit assertDeltas, bptIn: `,\n poolAddress,\n bptIn,\n deltas[poolAddress.toLowerCase()]?.toString()\n );\n throw new BalancerError(BalancerErrorCode.EXIT_DELTA_AMOUNTS);\n }\n delete deltas[poolAddress.toLowerCase()];\n\n tokensOut.forEach((token, i) => {\n const diff = deltas[token.toLowerCase()].add(amountsOut[i]);\n if (diff.abs().gt(1)) {\n console.error(\n `exit assertDeltas, tokenOut: `,\n token,\n amountsOut[i],\n deltas[token.toLowerCase()]?.toString()\n );\n throw new BalancerError(BalancerErrorCode.EXIT_DELTA_AMOUNTS);\n }\n delete deltas[token.toLowerCase()];\n });\n\n for (const token in deltas) {\n if (deltas[token].toString() !== '0') {\n console.error(\n `exit assertDeltas, non-input token should be 0: `,\n token,\n deltas[token].toString()\n );\n throw new BalancerError(BalancerErrorCode.EXIT_DELTA_AMOUNTS);\n }\n }\n }\n\n // Query amounts out through static call and return decoded result\n private amountsOutByExitPath = async (\n userAddress: string,\n multiRequests: Requests[][],\n callData: string,\n tokenIn: string,\n outputIndexes: number[],\n signer: JsonRpcSigner,\n simulationType: SimulationType\n ): Promise => {\n const amountsOutByExitPath =\n await this.simulationService.simulateGeneralisedExit(\n this.relayer,\n multiRequests,\n callData,\n outputIndexes,\n userAddress,\n tokenIn,\n signer,\n simulationType\n );\n\n return amountsOutByExitPath;\n };\n\n // Aggregate amounts out by exit path into amounts out by token out\n private amountsOutByTokenOut = (\n tokensOut: string[],\n tokensOutByExitPath: string[],\n expectedAmountsOutByExitPath: string[]\n ) => {\n // Aggregate amountsOutByExitPath into expectedAmountsOut\n const expectedAmountsOutMap: Record = {};\n tokensOutByExitPath.forEach(\n (tokenOut, i) =>\n (expectedAmountsOutMap[tokenOut] = (\n expectedAmountsOutMap[tokenOut] ?? Zero\n ).add(expectedAmountsOutByExitPath[i]))\n );\n const expectedAmountsOut = tokensOut.map((tokenOut) =>\n expectedAmountsOutMap[tokenOut].toString()\n );\n\n return expectedAmountsOut;\n };\n\n // Apply slippage tolerance to expected amounts out\n private minAmountsOut = (\n expectedAmountsOutByExitPath: string[],\n expectedAmountsOutByTokenOut: string[],\n slippage: string\n ) => {\n // Apply slippage tolerance on expected amount out for each exit path\n const minAmountsOutByExitPath = expectedAmountsOutByExitPath.map(\n (expectedAmountOut) =>\n subSlippage(\n BigNumber.from(expectedAmountOut),\n BigNumber.from(slippage)\n ).toString()\n );\n\n // Apply slippage tolerance on expected amount out for each token out\n const minAmountsOutByTokenOut = expectedAmountsOutByTokenOut.map(\n (expectedAmountOut) =>\n subSlippage(\n BigNumber.from(expectedAmountOut),\n BigNumber.from(slippage)\n ).toString()\n );\n\n return { minAmountsOutByExitPath, minAmountsOutByTokenOut };\n };\n\n // Create one exit path for each output node\n private getExitPaths = (outputNodes: Node[], amountIn: string): Node[][] => {\n const exitPaths = outputNodes.map((outputNode) => {\n const exitPath = [outputNode];\n while (exitPath[0].parent) {\n exitPath.unshift(cloneDeep(exitPath[0].parent));\n }\n /*\n The input/root node requires a real amount (not a reference/index) as it is first node in chain.\n This amount will be used when chaining to children.\n */\n exitPath[0].index = exitPath[exitPath.length - 1].proportionOfParent\n .mul(amountIn)\n .div(WeiPerEther)\n .toString();\n return exitPath;\n });\n\n /*\n Amounts in for exit paths should be adjusted after caculated to fix eventual rounding issues\n */\n // Sum amountIn for each exit path\n const amountsInSum = exitPaths.reduce((accumulator, currentExitPath) => {\n const amountInForCurrentExitPath = currentExitPath[0].index;\n return BigNumber.from(amountInForCurrentExitPath).add(accumulator);\n }, Zero);\n // Compare total amountIn with sum of calculated amountIn for each exit path\n const amountsInDiff = BigNumber.from(amountIn).sub(amountsInSum);\n // Add diff to last exit path amountIn\n exitPaths[exitPaths.length - 1][0].index = amountsInDiff\n .add(exitPaths[exitPaths.length - 1][0].index)\n .toString();\n\n return exitPaths;\n };\n\n private async createCalls(\n exitPaths: Node[][],\n userAddress: string,\n isProportional: boolean,\n minAmountsOut?: string[],\n authorisation?: string\n ): Promise<{\n multiRequests: Requests[][];\n encodedCall: string;\n outputIndexes: number[];\n deltas: Record;\n }> {\n const { multiRequests, calls, outputIndexes, deltas } =\n this.createActionCalls(\n cloneDeep(exitPaths),\n userAddress,\n isProportional,\n minAmountsOut\n );\n\n if (authorisation) {\n calls.unshift(\n Relayer.encodeSetRelayerApproval(this.relayer, true, authorisation)\n );\n }\n\n const encodedCall = balancerRelayerInterface.encodeFunctionData(\n 'multicall',\n [calls]\n );\n\n return {\n multiRequests,\n encodedCall,\n outputIndexes: authorisation\n ? outputIndexes.map((i) => i + 1)\n : outputIndexes,\n deltas,\n };\n }\n\n private updateDeltas(\n deltas: Record,\n assets: string[],\n amounts: string[]\n ): Record {\n assets.forEach((t, i) => {\n const asset = t.toLowerCase();\n if (!deltas[asset]) deltas[asset] = Zero;\n deltas[asset] = deltas[asset].add(amounts[i]);\n });\n return deltas;\n }\n\n private createActionCalls(\n exitPaths: Node[][],\n userAddress: string,\n isProportional: boolean,\n minAmountsOut?: string[]\n ): {\n multiRequests: Requests[][];\n calls: string[];\n outputIndexes: number[];\n deltas: Record;\n } {\n const multiRequests: Requests[][] = [];\n const calls: string[] = [];\n const outputIndexes: number[] = [];\n const isPeek = !minAmountsOut;\n const deltas: Record = {};\n\n const getSenderAddress = (exitPath: Node[], node: Node) => {\n // Calls from root node are sent by the user\n if (!node.parent) return userAddress;\n // Otherwise sent by the parent's recipient\n return getRecipientAddress(exitPath, node.parent);\n };\n\n const getRecipientAddress = (exitPath: Node[], node: Node) => {\n // Always send to user on calls that contain outputs, otherwise send to relayer\n const exitChildren = node.children.filter((child) =>\n exitPath.map((n) => n.index).includes(child.index)\n );\n const hasOutputChild = exitChildren.some(\n (c) => c.exitAction === 'output'\n );\n return hasOutputChild ? userAddress : this.relayer;\n };\n\n // Create actions for each Node and return in multicall array\n\n exitPaths.forEach((exitPath, i) => {\n const modelRequests: Requests[] = [];\n const outputNodes = exitPath.filter(\n (node) => node.exitAction === 'output'\n );\n exitPath.forEach((node) => {\n // Find the exit child node\n const exitChild = node.children.find((child) =>\n exitPath.map((n) => n.index).includes(child.index)\n );\n\n const sender = getSenderAddress(exitPath, node);\n const recipient = getRecipientAddress(exitPath, node);\n\n const exitChildren = node.children.filter((child) =>\n exitPath.map((n) => n.index).includes(child.index)\n );\n // An action that has either outputs or unwraps as child actions is the last action where we're able to set limits on expected output amounts\n const isLastActionWithLimits = exitChildren.some(\n (c) => c.exitAction === 'output' || c.exitAction === 'unwrap'\n );\n\n // Last calls will use minAmountsOut to protect user. Middle calls can safely have 0 minimum as tx will revert if last fails.\n let minAmountOut = '0';\n const minAmountsOutProportional = Array(node.children.length).fill('0');\n if (minAmountsOut && isLastActionWithLimits) {\n if (isProportional) {\n // Proportional exits have a minAmountOut for each output node within a single exit path\n\n /**\n * minAmountsOut is related to the whole multicall transaction, while\n * minAmountsOutProportional is related only to the current node/transaction\n * This section is responsible for mapping each minAmountOut to their\n * respective position on the minAmountsOutProportional array\n * TODO: extract to a function so it's easier to understand\n */\n node.children.forEach((child, i) => {\n let outputChildIndex: number;\n if (child.exitAction === 'unwrap') {\n outputChildIndex = outputNodes.indexOf(child.children[0]);\n minAmountOut = WeiPerEther.mul(minAmountsOut[outputChildIndex])\n .div(child.priceRate)\n .toString();\n } else if (child.exitAction === 'output') {\n outputChildIndex = outputNodes.indexOf(child);\n minAmountOut = minAmountsOut[outputChildIndex];\n } else {\n minAmountOut = '0'; // clears minAmountOut if it's not an output or unwrap\n }\n minAmountsOutProportional[i] = minAmountOut;\n });\n } else {\n // Non-proportional exits have a minAmountOut for each exit path\n if (exitChild?.exitAction === 'unwrap') {\n minAmountOut = WeiPerEther.mul(minAmountsOut[i])\n .div(exitChild.priceRate)\n .toString();\n } else {\n minAmountOut = minAmountsOut[i];\n }\n }\n }\n\n switch (node.exitAction) {\n case 'unwrap': {\n const { modelRequest, encodedCall, assets, amounts } =\n this.createUnwrap(\n node,\n exitChild as Node,\n i,\n minAmountOut,\n sender,\n recipient\n );\n modelRequests.push(modelRequest);\n calls.push(encodedCall);\n this.updateDeltas(deltas, assets, amounts);\n break;\n }\n case 'batchSwap': {\n const { modelRequest, encodedCall, assets, amounts } =\n this.createSwap(\n node,\n exitChild as Node,\n i,\n minAmountOut,\n sender,\n recipient\n );\n modelRequests.push(modelRequest);\n calls.push(encodedCall);\n this.updateDeltas(deltas, assets, amounts);\n break;\n }\n case 'exitPool': {\n let exit;\n if (isProportional) {\n exit = this.createExitPoolProportional(\n node,\n minAmountsOutProportional,\n sender,\n recipient\n );\n } else {\n exit = this.createExitPool(\n node,\n exitChild as Node,\n i,\n minAmountOut,\n sender,\n recipient\n );\n }\n const { modelRequest, encodedCall, bptIn, tokensOut, amountsOut } =\n exit;\n modelRequests.push(modelRequest);\n calls.push(encodedCall);\n this.updateDeltas(\n deltas,\n [node.address, ...tokensOut],\n [bptIn, ...amountsOut]\n );\n break;\n }\n case 'output':\n if (isPeek) {\n calls.push(\n Relayer.encodePeekChainedReferenceValue(\n Relayer.toChainedReference(\n this.getOutputRef(i, node.index),\n false\n )\n )\n );\n outputIndexes.push(calls.length - 1);\n }\n break;\n default:\n return;\n }\n });\n multiRequests.push(modelRequests);\n });\n\n return { multiRequests, calls, outputIndexes, deltas };\n }\n\n private createUnwrap = (\n node: Node,\n exitChild: Node,\n exitPathIndex: number,\n minAmountOut: string,\n sender: string,\n recipient: string\n ): {\n modelRequest: UnwrapRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n } => {\n const amount = Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, node.index)\n ).toString();\n const outputReference = Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, exitChild.index)\n );\n\n const linearPoolType = node.parent?.type as string;\n\n const call: EncodeUnwrapInput = {\n wrappedToken: node.address,\n sender,\n recipient,\n amount,\n outputReference,\n };\n\n const encodedCall = Relayer.encodeUnwrap(call, linearPoolType);\n\n debugLog(`linear type: , ${linearPoolType}`);\n debugLog('\\nUwrap:');\n debugLog(JSON.stringify(call));\n\n const modelRequest = VaultModel.mapUnwrapRequest(\n amount,\n outputReference,\n node.parent?.id as string // linear pool id\n );\n\n const assets = [exitChild.address];\n const amounts = [Zero.sub(minAmountOut).toString()]; // needs to be negative because it's handled by the vault model as an amount going out of the vault\n return { modelRequest, encodedCall, assets, amounts };\n };\n\n private createSwap(\n node: Node,\n exitChild: Node,\n exitPathIndex: number,\n minAmountOut: string,\n sender: string,\n recipient: string\n ): {\n modelRequest: SwapRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n } {\n const isRootNode = !node.parent;\n const amountIn = isRootNode\n ? node.index\n : Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, node.index)\n ).toString();\n\n const tokenOut = exitChild.address;\n const assets = [tokenOut, node.address];\n\n // Single swap limits are always positive\n // Swap within generalisedExit is always exactIn, so use minAmountOut to set limit\n const limit: string = minAmountOut;\n\n const request: SingleSwap = {\n poolId: node.id,\n kind: SwapType.SwapExactIn,\n assetIn: node.address,\n assetOut: tokenOut,\n amount: amountIn,\n userData: '0x',\n };\n\n const fromInternalBalance = this.receivesFromInternal(node);\n const toInternalBalance = this.receivesFromInternal(exitChild);\n\n const funds: FundManagement = {\n sender,\n recipient,\n fromInternalBalance,\n toInternalBalance,\n };\n\n const outputReference = Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, exitChild.index)\n );\n\n const call: Swap = {\n request,\n funds,\n limit,\n deadline: BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value: '0', // TODO: check if swap with ETH is possible in this case and handle it\n outputReference,\n };\n debugLog('\\nSwap:');\n debugLog(JSON.stringify(call));\n\n const encodedCall = Relayer.encodeSwap(call);\n\n const modelRequest = VaultModel.mapSwapRequest(call);\n\n // If node isn't rootNode, the swap is part of a chain and shouldn't be considered for user deltas\n const bptIn = !isRootNode ? '0' : amountIn;\n // If child exit action is not output, the swap is part of a chain and shouldn't be considered for user deltas\n const userTokenOutAmount =\n exitChild.exitAction !== 'output'\n ? '0'\n : BigNumber.from(minAmountOut).mul(-1).toString(); // needs to be negative because it's handled by the vault model as an amount going out of the vault\n const amounts = [userTokenOutAmount, bptIn];\n\n return { modelRequest, encodedCall, assets, amounts };\n }\n\n private createBatchSwap(\n node: Node,\n exitChildren: Node[],\n exitPathIndex: number,\n minAmountsOut: string[],\n sender: string,\n recipient: string\n ): {\n modelRequest: BatchSwapRequest;\n encodedCall: string;\n assets: string[];\n amounts: string[];\n } {\n const isRootNode = !node.parent;\n const amountIn = isRootNode\n ? node.index\n : Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, node.index)\n ).toString();\n\n const tokensOut = exitChildren.map((n) => n.address);\n const assets = [...tokensOut, node.address];\n // TODO - setting these right?\n const limits = [...minAmountsOut];\n limits.push(amountIn);\n const batchSwapSteps: BatchSwapStep[] = [];\n const outputReferences: OutputReference[] = [];\n exitChildren.forEach((child, i) => {\n // TODO - Is this correct?\n const amount = child.proportionOfParent\n .mul(amountIn)\n .div(WeiPerEther)\n .toString();\n const swapStep: BatchSwapStep = {\n poolId: node.id,\n assetInIndex: assets.length - 1,\n assetOutIndex: i,\n amount,\n userData: '0x',\n };\n batchSwapSteps.push(swapStep);\n // TODO - Is this right?\n outputReferences.push({\n index: i,\n key: Relayer.toChainedReference(this.getOutputRef(0, child.index)),\n });\n });\n\n const total = batchSwapSteps.reduce((acc, swap) => {\n return acc.add(swap.amount);\n }, BigNumber.from(0));\n const dust = BigNumber.from(amountIn).sub(total);\n batchSwapSteps[0].amount = dust.add(batchSwapSteps[0].amount).toString();\n\n const fromInternalBalance = this.receivesFromInternal(node);\n // TODO - This is assuming that all exit to same, is this right?\n const toInternalBalance = this.receivesFromInternal(exitChildren[0]);\n\n const funds: FundManagement = {\n sender,\n recipient,\n fromInternalBalance,\n toInternalBalance,\n };\n\n const call: EncodeBatchSwapInput = {\n swapType: SwapType.SwapExactIn,\n swaps: batchSwapSteps,\n assets,\n funds,\n limits,\n deadline: BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value: '0', // TODO: check if swap with ETH is possible in this case and handle it\n outputReferences,\n };\n debugLog('\\nBatchSwap:');\n debugLog(JSON.stringify(call));\n\n const encodedCall = Relayer.encodeBatchSwap(call);\n\n const modelRequest = VaultModel.mapBatchSwapRequest(call);\n\n // If node isn't rootNode, the swap is part of a chain and shouldn't be considered for user deltas\n const bptIn = !isRootNode ? '0' : amountIn;\n // If child exit action is not output, the swap is part of a chain and shouldn't be considered for user deltas\n const userTokensOut = exitChildren.map((child, i) => {\n const userTokenOutAmount =\n child.exitAction !== 'output'\n ? '0'\n : BigNumber.from(minAmountsOut[i]).mul(-1).toString(); // needs to be negative because it's handled by the vault model as an amount going out of the vault\n return userTokenOutAmount;\n });\n\n const amounts = [...userTokensOut, bptIn];\n\n return { modelRequest, encodedCall, assets, amounts };\n }\n\n private createExitPool(\n node: Node,\n exitChild: Node,\n exitPathIndex: number,\n minAmountOut: string,\n sender: string,\n recipient: string\n ): {\n modelRequest: ExitPoolModelRequest;\n encodedCall: string;\n bptIn: string;\n tokensOut: string[];\n amountsOut: string[];\n } {\n const tokenOut = exitChild.address;\n const isRootNode = !node.parent;\n const amountIn = isRootNode\n ? node.index\n : Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, node.index)\n ).toString();\n\n const tokensOut: string[] = [];\n const amountsOut: string[] = [];\n\n // tokensOut needs to include each asset even if it has 0 amount\n node.children.forEach((child) => {\n tokensOut.push(child.address);\n amountsOut.push(child.address === tokenOut ? minAmountOut : '0');\n });\n\n if (node.type === PoolType.ComposableStable) {\n // assets need to include the phantomPoolToken\n tokensOut.push(node.address);\n // need to add a placeholder so sorting works\n amountsOut.push('0');\n }\n\n // sort inputs\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [sortedTokens, sortedAmounts] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n // userData amounts should not include the BPT of the pool being joined\n let userDataTokens = [];\n const bptIndex = sortedTokens\n .map((t) => t.toLowerCase())\n .indexOf(node.address.toLowerCase());\n if (bptIndex === -1) {\n userDataTokens = sortedTokens;\n } else {\n userDataTokens = [\n ...sortedTokens.slice(0, bptIndex),\n ...sortedTokens.slice(bptIndex + 1),\n ];\n }\n\n let userData: string;\n if (node.type === PoolType.Weighted) {\n userData = WeightedPoolEncoder.exitExactBPTInForOneTokenOut(\n amountIn,\n userDataTokens.indexOf(tokenOut)\n );\n } else {\n userData = StablePoolEncoder.exitExactBPTInForOneTokenOut(\n amountIn,\n userDataTokens.indexOf(tokenOut)\n );\n }\n\n const outputReferences = [\n {\n index: sortedTokens\n .map((t) => t.toLowerCase())\n .indexOf(tokenOut.toLowerCase()),\n key: Relayer.toChainedReference(\n this.getOutputRef(exitPathIndex, exitChild.index)\n ),\n },\n ];\n\n const toInternalBalance = this.receivesFromInternal(exitChild);\n\n const call = Relayer.formatExitPoolInput({\n poolId: node.id,\n poolKind: 0,\n sender,\n recipient,\n outputReferences,\n exitPoolRequest: {} as ExitPoolRequest,\n assets: sortedTokens,\n minAmountsOut: sortedAmounts,\n userData,\n toInternalBalance,\n });\n debugLog('\\nExit:');\n debugLog(JSON.stringify(call));\n\n const encodedCall = Relayer.encodeExitPool(call);\n const modelRequest = VaultModel.mapExitPoolRequest(call);\n\n const userAmountTokensOut = sortedAmounts.map((a) =>\n Relayer.isChainedReference(a) ? '0' : Zero.sub(a).toString()\n );\n const userBptIn = Relayer.isChainedReference(amountIn) ? '0' : amountIn;\n // If node isn't rootNode, the exit is part of a chain and shouldn't be considered for user deltas\n const deltaBptIn = !isRootNode ? Zero.toString() : userBptIn;\n // // If child exit action is not output, the exit is part of a chain and shouldn't be considered for user deltas\n const deltaTokensOut =\n exitChild.exitAction !== 'output' ? [] : sortedTokens;\n const deltaAmountsOut =\n exitChild.exitAction !== 'output' ? [] : userAmountTokensOut;\n\n return {\n modelRequest,\n encodedCall,\n bptIn: deltaBptIn,\n tokensOut: deltaTokensOut,\n amountsOut: deltaAmountsOut,\n };\n }\n\n private createExitPoolProportional(\n node: Node,\n minAmountsOut: string[],\n sender: string,\n recipient: string\n ): {\n modelRequest: ExitPoolModelRequest;\n encodedCall: string;\n bptIn: string;\n tokensOut: string[];\n amountsOut: string[];\n } {\n const isRootNode = !node.parent;\n const amountIn = isRootNode\n ? node.index\n : Relayer.toChainedReference(this.getOutputRef(0, node.index)).toString();\n\n const tokensOut = node.children.map((child) => child.address);\n const amountsOut = [...minAmountsOut];\n\n if (node.type === PoolType.ComposableStable) {\n // assets need to include the phantomPoolToken\n tokensOut.push(node.address);\n // need to add a placeholder so sorting works\n amountsOut.push('0');\n }\n\n // TODO: we shoule consider let the graph handle sorting instead of manipulating\n // token order within actions - specially now that we have different sorting\n // cases and that the subgraph is already handling them properly\n\n // sort inputs\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [sortedTokens, sortedAmounts] = assetHelpers.sortTokens(\n tokensOut,\n amountsOut\n ) as [string[], string[]];\n\n let userData: string;\n if (node.type === PoolType.Weighted) {\n userData = WeightedPoolEncoder.exitExactBPTInForTokensOut(amountIn);\n } else if (node.type === PoolType.ComposableStable) {\n userData =\n ComposableStablePoolEncoder.exitExactBPTInForAllTokensOut(amountIn);\n } else {\n // TODO: double check if it's ok to set the Stable Pool Encoder as the default/else case\n userData = StablePoolEncoder.exitExactBPTInForTokensOut(amountIn);\n }\n\n const outputReferences = node.children.map((child) => {\n return {\n index: sortedTokens\n .map((t) => t.toLowerCase())\n .indexOf(child.address.toLowerCase()),\n key: Relayer.toChainedReference(this.getOutputRef(0, child.index)),\n };\n });\n // We have to use correct pool type based off following from Relayer:\n // enum PoolKind { WEIGHTED, LEGACY_STABLE, COMPOSABLE_STABLE, COMPOSABLE_STABLE_V2 }\n // (note only Weighted and COMPOSABLE_STABLE_V2 will support proportional exits)\n let kind = 0;\n if (node.type === PoolType.ComposableStable) {\n kind = 3;\n }\n\n const allChildrenReceiveFromInternal = node.children.every((child) =>\n this.receivesFromInternal(child)\n );\n\n const call = Relayer.formatExitPoolInput({\n poolId: node.id,\n poolKind: kind,\n sender,\n recipient,\n outputReferences,\n exitPoolRequest: {} as ExitPoolRequest,\n assets: sortedTokens,\n minAmountsOut: sortedAmounts,\n userData,\n toInternalBalance: allChildrenReceiveFromInternal,\n });\n debugLog('\\nExitProportional:');\n debugLog(JSON.stringify(call));\n const encodedCall = Relayer.encodeExitPool(call);\n const modelRequest = VaultModel.mapExitPoolRequest(call);\n\n const userAmountTokensOut = sortedAmounts.map((a) =>\n Relayer.isChainedReference(a) ? '0' : Zero.sub(a).toString()\n );\n const userBptIn = Relayer.isChainedReference(amountIn) ? '0' : amountIn;\n // If current node is the root node the exit the delta BPT in should be considered for user deltas\n const deltaBptIn = isRootNode ? userBptIn : Zero.toString();\n // If the respective child node is an output, it should be considered for user deltas\n const deltaTokensOut = sortedTokens.filter((t) =>\n node.children\n .filter((c) => c.exitAction === 'output')\n .map((c) => c.address)\n .includes(t)\n );\n const deltaAmountsOut = userAmountTokensOut.filter((_, i) =>\n deltaTokensOut.includes(sortedTokens[i])\n );\n\n return {\n modelRequest,\n encodedCall,\n bptIn: deltaBptIn,\n tokensOut: deltaTokensOut,\n amountsOut: deltaAmountsOut,\n };\n }\n\n private getOutputRef = (exitPathIndex: number, nodeIndex: string): number => {\n return exitPathIndex * 100 + parseInt(nodeIndex);\n };\n\n // node without parent is the root node and it receives from non-internal balance\n // exitPool always expects amounts from non-internal balance\n // output always behave as receiving from non-internal balance\n // others should always receive from internal balance\n private receivesFromInternal = (node: Node): boolean => {\n if (!node.parent) return false;\n return (\n node.exitAction !== 'output' &&\n node.exitAction !== 'unwrap' &&\n node.exitAction !== 'exitPool'\n );\n };\n}\n","/**\n * Calculates pool fees\n *\n * 1. Pool fees in last 24hrs\n */\nimport { isLessThan24Hours } from '@/lib/utils/time';\nimport { Pool, Findable, PoolAttribute } from '@/types';\n\nexport class PoolVolume {\n constructor(\n private yesterdaysPools: Findable | undefined\n ) {}\n\n // 🚨 this is adding 1 call to get yesterday's block height and 2nd call to fetch yesterday's pools data from subgraph\n // TODO: find a better data source for that eg. add blocks to graph, replace with a database, or dune\n async last24h(pool: Pool): Promise {\n let yesterdaysPool;\n if (this.yesterdaysPools) {\n yesterdaysPool = await this.yesterdaysPools.find(pool.id);\n }\n\n if (!pool.totalSwapVolume) {\n return 0;\n }\n\n if (!yesterdaysPool?.totalSwapVolume) {\n // Process edge case when pool creation time is less that 24h\n if (pool.createTime && isLessThan24Hours(pool.createTime)) {\n return parseFloat(pool.totalSwapVolume);\n }\n return 0;\n }\n\n return (\n parseFloat(pool.totalSwapVolume) -\n parseFloat(yesterdaysPool.totalSwapVolume)\n );\n }\n}\n","import { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport {\n ComposableStableCreatePoolParameters,\n InitJoinPoolAttributes,\n InitJoinPoolParameters,\n JoinPoolDecodedAttributes,\n JoinPoolRequestDecodedAttributes,\n} from '@/modules/pools/factory/types';\nimport { balancerVault, networkAddresses } from '@/lib/constants/config';\nimport { AssetHelpers, getRandomBytes32 } from '@/lib/utils';\nimport { PoolFactory } from '@/modules/pools/factory/pool-factory';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { BalancerNetworkConfig } from '@/types';\nimport {\n ComposableStablePool__factory,\n ComposableStablePoolFactory__factory,\n} from '@/contracts';\nimport { JsonRpcProvider, TransactionReceipt } from '@ethersproject/providers';\nimport { LogDescription } from '@ethersproject/abi';\nimport { findEventInReceiptLogs } from '@/lib/utils';\nimport { Contract } from '@ethersproject/contracts';\nimport { ContractInstances } from '@/modules/contracts/contracts.module';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { ComposableStablePoolInterface } from '@/contracts/ComposableStablePool';\n\nexport class ComposableStableFactory implements PoolFactory {\n private wrappedNativeAsset: string;\n private contracts: ContractInstances;\n\n constructor(\n networkConfig: BalancerNetworkConfig,\n contracts: ContractInstances\n ) {\n const { tokens } = networkAddresses(networkConfig.chainId);\n this.wrappedNativeAsset = tokens.wrappedNativeAsset;\n this.contracts = contracts;\n }\n\n /**\n * Builds a transaction for a composable pool create operation.\n * @param name The name of the pool\n * @param symbol The symbol of the pool\n * @param tokenAddresses The token's addresses\n * @param amplificationParameter The amplification parameter(must be greater than 1)\n * @param rateProviders The addresses of the rate providers for each token, ordered\n * @param tokenRateCacheDurations the Token Rate Cache Duration of each token\n * @param exemptFromYieldProtocolFeeFlags Array containing boolean for each token exemption from yield protocol fee flags\n * @param swapFeeEvm The swapFee for the owner of the pool in string format parsed to evm(100% is 1e18, 10% is 1e17, 1% is 1e16)\n * @param owner The address of the owner of the pool\n * @returns A TransactionRequest object, which can be directly inserted in the transaction to create a composable stable pool\n */\n create({\n name,\n symbol,\n tokenAddresses,\n amplificationParameter,\n rateProviders,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n swapFeeEvm,\n owner,\n salt,\n }: ComposableStableCreatePoolParameters): { to?: string; data: BytesLike } {\n this.checkCreateInputs({\n rateProviders,\n tokenAddresses,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n swapFeeEvm,\n });\n const params = this.parseCreateParamsForEncoding({\n name,\n symbol,\n tokenAddresses,\n amplificationParameter,\n rateProviders,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n swapFeeEvm,\n owner,\n salt,\n });\n const encodedFunctionData = this.encodeCreateFunctionData(params);\n return {\n to: this.contracts.composableStablePoolFactory?.address,\n data: encodedFunctionData,\n };\n }\n\n checkCreateInputs = ({\n tokenAddresses,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n rateProviders,\n swapFeeEvm,\n }: Pick<\n ComposableStableCreatePoolParameters,\n | 'rateProviders'\n | 'tokenRateCacheDurations'\n | 'tokenAddresses'\n | 'exemptFromYieldProtocolFeeFlags'\n | 'swapFeeEvm'\n >): void => {\n if (\n tokenAddresses.length !== tokenRateCacheDurations.length ||\n tokenRateCacheDurations.length !==\n exemptFromYieldProtocolFeeFlags.length ||\n exemptFromYieldProtocolFeeFlags.length !== rateProviders.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n if (BigInt(swapFeeEvm) <= BigInt(0) || BigInt(swapFeeEvm) > BigInt(1e17)) {\n throw new BalancerError(BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE);\n }\n };\n parseCreateParamsForEncoding = ({\n name,\n symbol,\n tokenAddresses,\n amplificationParameter,\n rateProviders,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags,\n swapFeeEvm,\n owner,\n salt,\n }: ComposableStableCreatePoolParameters): [\n string,\n string,\n string[],\n string,\n string[],\n string[],\n boolean[],\n string,\n string,\n BytesLike\n ] => {\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [\n sortedTokens,\n sortedRateProviders,\n sortedTokenRateCacheDurations,\n sortedExemptFromYieldProtocols,\n ] = assetHelpers.sortTokens(\n tokenAddresses,\n rateProviders,\n tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags\n ) as [string[], string[], string[], boolean[]];\n const params = [\n name,\n symbol,\n sortedTokens,\n amplificationParameter,\n sortedRateProviders,\n sortedTokenRateCacheDurations,\n sortedExemptFromYieldProtocols,\n swapFeeEvm.toString(),\n owner,\n salt || getRandomBytes32(),\n ] as [\n string,\n string,\n string[],\n string,\n string[],\n string[],\n boolean[],\n string,\n string,\n BytesLike\n ];\n return params;\n };\n\n encodeCreateFunctionData = (\n params: [\n string,\n string,\n string[],\n string,\n string[],\n string[],\n boolean[],\n string,\n string,\n BytesLike\n ]\n ): string => {\n const composablePoolFactoryInterface =\n ComposableStablePoolFactory__factory.createInterface();\n return composablePoolFactoryInterface.encodeFunctionData('create', params);\n };\n\n /**\n * Builds a transaction for a composable pool init join operation.\n * @param joiner The address of the joiner of the pool\n * @param poolId The id of the pool\n * @param poolAddress The address of the pool\n * @param tokensIn Array with the address of the tokens\n * @param amountsIn Array with the amount of each token\n * @returns A InitJoinPoolAttributes object, which can be directly inserted in the transaction to init join a composable stable pool\n */\n buildInitJoin({\n joiner,\n poolId,\n poolAddress,\n tokensIn,\n amountsIn,\n }: InitJoinPoolParameters): InitJoinPoolAttributes {\n this.checkInitJoinInputs({\n tokensIn,\n amountsIn,\n poolId,\n poolAddress,\n });\n const { attributes, params } = this.parseParamsForInitJoin({\n joiner,\n poolId,\n poolAddress,\n tokensIn,\n amountsIn,\n });\n const { functionName, data } = this.encodeInitJoinFunctionData(params);\n\n return {\n to: balancerVault,\n functionName,\n data,\n attributes,\n };\n }\n\n checkInitJoinInputs = ({\n poolId,\n poolAddress,\n tokensIn,\n amountsIn,\n }: Pick<\n InitJoinPoolParameters,\n 'tokensIn' | 'amountsIn' | 'poolId' | 'poolAddress'\n >): void => {\n if (!poolId || !poolAddress) {\n throw new BalancerError(BalancerErrorCode.NO_POOL_DATA);\n }\n if (tokensIn.length !== amountsIn.length) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n };\n\n parseParamsForInitJoin = ({\n joiner,\n poolId,\n poolAddress,\n tokensIn,\n amountsIn,\n }: InitJoinPoolParameters): {\n attributes: JoinPoolDecodedAttributes;\n params: [string, string, string, JoinPoolRequestDecodedAttributes];\n } => {\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n // sort inputs\n const tokensWithBpt = [...tokensIn, poolAddress];\n const amountsWithBpt = [...amountsIn, '0'];\n const maxAmountsWithBpt = [\n ...amountsIn,\n // this max amount needs to be >= PREMINT - bptAmountOut,\n // The vault returns BAL#506 if it's not,\n // PREMINT is around 2^111, but here we set the max amount of BPT as MAX_UINT_256-1 for safety\n BigInt.asUintN(256, BigInt(-1)).toString(),\n ];\n const [sortedTokens, sortedAmounts, sortedMaxAmounts] =\n assetHelpers.sortTokens(\n tokensWithBpt,\n amountsWithBpt,\n maxAmountsWithBpt\n ) as [string[], string[], string[]];\n\n const userData = ComposableStablePoolEncoder.joinInit(sortedAmounts);\n\n const attributes: JoinPoolDecodedAttributes = {\n poolId: poolId,\n sender: joiner,\n recipient: joiner,\n joinPoolRequest: {\n assets: sortedTokens,\n maxAmountsIn: sortedMaxAmounts,\n userData,\n fromInternalBalance: false,\n },\n };\n return {\n attributes,\n params: [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ],\n };\n };\n encodeInitJoinFunctionData = (\n params: [string, string, string, JoinPoolRequestDecodedAttributes]\n ): {\n functionName: string;\n data: string;\n } => {\n const functionName = 'joinPool';\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, params);\n\n return { functionName, data };\n };\n\n getPoolAddressAndIdWithReceipt = async (\n provider: JsonRpcProvider,\n receipt: TransactionReceipt\n ): Promise<{\n poolId: string;\n poolAddress: string;\n }> => {\n const poolCreationEvent: LogDescription = findEventInReceiptLogs({\n receipt,\n to: this.contracts.composableStablePoolFactory?.address || '',\n contractInterface: ComposableStablePoolFactory__factory.createInterface(),\n logName: 'PoolCreated',\n });\n\n const poolAddress = poolCreationEvent.args.pool;\n const composableStablePoolInterface = this.getPoolInterface();\n const pool = new Contract(\n poolAddress,\n composableStablePoolInterface,\n provider\n );\n const poolId = await pool.getPoolId();\n return {\n poolAddress,\n poolId,\n };\n };\n\n getPoolInterface(): ComposableStablePoolInterface {\n return ComposableStablePool__factory.createInterface();\n }\n}\n","import { LogDescription } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\nimport { Contract } from '@ethersproject/contracts';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { JsonRpcProvider, TransactionReceipt } from '@ethersproject/providers';\n\nimport { Vault__factory } from '@/contracts/factories/Vault__factory';\nimport { WeightedPoolFactory__factory } from '@/contracts/factories/WeightedPoolFactory__factory';\nimport { balancerVault, networkAddresses } from '@/lib/constants/config';\nimport {\n AssetHelpers,\n findEventInReceiptLogs,\n getRandomBytes32,\n} from '@/lib/utils';\nimport { ContractInstances } from '@/modules/contracts/contracts.module';\nimport { PoolFactory } from '@/modules/pools/factory/pool-factory';\nimport {\n InitJoinPoolAttributes,\n InitJoinPoolParameters,\n JoinPoolDecodedAttributes,\n JoinPoolRequestDecodedAttributes,\n WeightedCreatePoolParameters,\n} from '@/modules/pools/factory/types';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { BalancerNetworkConfig } from '@/types';\nimport { WeightedPool__factory } from '@/contracts';\nimport { SolidityMaths } from '@/lib/utils/solidityMaths';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { WeightedPoolInterface } from '@/contracts/WeightedPool';\n\nexport class WeightedFactory implements PoolFactory {\n private wrappedNativeAsset: string;\n private contracts: ContractInstances;\n\n constructor(\n networkConfig: BalancerNetworkConfig,\n contracts: ContractInstances\n ) {\n const { tokens } = networkAddresses(networkConfig.chainId);\n this.wrappedNativeAsset = tokens.wrappedNativeAsset;\n this.contracts = contracts;\n }\n\n /**\n * Builds a transaction for a weighted pool create operation.\n * @param factoryAddress The address of the factory for weighted pool (contract address)\n * @param name The name of the pool\n * @param symbol The symbol of the pool\n * @param tokenAddresses The token's addresses\n * @param normalizedWeights The weights for each token, ordered\n * @param rateProviders The rate providers for each token, ordered\n * @param swapFeeEvm The swapFee for the owner of the pool in string or bigint formatted to evm(100% is 1e18, 10% is 1e17, 1% is 1e16)\n * @param owner The address of the owner of the pool\n * @param salt The salt of the pool (bytes32)\n * @returns TransactionRequest object, which can be directly inserted in the transaction to create a weighted pool\n */\n create({\n name,\n symbol,\n tokenAddresses,\n normalizedWeights,\n rateProviders,\n swapFeeEvm,\n owner,\n salt,\n }: WeightedCreatePoolParameters): {\n to?: string;\n data: BytesLike;\n } {\n this.checkCreateInputs({\n tokenAddresses,\n normalizedWeights,\n swapFeeEvm,\n rateProviders,\n });\n const params = this.parseCreateParamsForEncoding({\n name,\n symbol,\n tokenAddresses,\n normalizedWeights,\n rateProviders,\n swapFeeEvm,\n owner,\n salt,\n });\n const encodedFunctionData = this.encodeCreateFunctionData(params);\n return {\n to: this.contracts.weightedPoolFactory?.address,\n data: encodedFunctionData,\n };\n }\n\n checkCreateInputs({\n tokenAddresses,\n normalizedWeights,\n swapFeeEvm,\n rateProviders,\n }: Pick<\n WeightedCreatePoolParameters,\n 'tokenAddresses' | 'normalizedWeights' | 'swapFeeEvm' | 'rateProviders'\n >): void {\n if (\n tokenAddresses.length !== normalizedWeights.length ||\n normalizedWeights.length !== rateProviders.length\n ) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n if (tokenAddresses.length < 2) {\n throw new BalancerError(BalancerErrorCode.BELOW_MIN_TOKENS);\n }\n if (tokenAddresses.length > 8) {\n throw new BalancerError(BalancerErrorCode.ABOVE_MAX_TOKENS);\n }\n if (BigInt(swapFeeEvm) <= BigInt(0) || BigInt(swapFeeEvm) > BigInt(1e17)) {\n throw new BalancerError(BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE);\n }\n const normalizedWeightsSum = (normalizedWeights as string[]).reduce(\n (acc, cur) => SolidityMaths.add(acc, BigInt(cur)),\n BigInt(0)\n );\n if (normalizedWeightsSum !== BigInt(1e18)) {\n throw new BalancerError(BalancerErrorCode.INVALID_WEIGHTS);\n }\n }\n\n parseCreateParamsForEncoding = ({\n name,\n symbol,\n tokenAddresses,\n normalizedWeights,\n rateProviders,\n swapFeeEvm,\n owner,\n salt,\n }: WeightedCreatePoolParameters): [\n string,\n string,\n string[],\n BigNumberish[],\n string[],\n string,\n string,\n BytesLike\n ] => {\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n const [sortedTokens, sortedNormalizedWeights, sortedRateProviders] =\n assetHelpers.sortTokens(\n tokenAddresses,\n normalizedWeights,\n rateProviders\n ) as [string[], BigNumberish[], string[]];\n return [\n name,\n symbol,\n sortedTokens,\n sortedNormalizedWeights,\n sortedRateProviders,\n swapFeeEvm.toString(),\n owner,\n salt || getRandomBytes32(),\n ];\n };\n\n encodeCreateFunctionData = (\n params: [\n string,\n string,\n string[],\n BigNumberish[],\n string[],\n string,\n string,\n BytesLike\n ]\n ): string => {\n const weightedPoolInterface =\n WeightedPoolFactory__factory.createInterface();\n\n return weightedPoolInterface.encodeFunctionData('create', params);\n };\n\n /**\n * Returns a InitJoinPoolAttributes to make a init join transaction\n * @param joiner The address of the joiner of the pool\n * @param poolId The id of the pool\n * @param tokensIn Array with the address of the tokens\n * @param amountsIn Array with the amount of each token\n * @returns InitJoinPoolAttributes object, which can be directly inserted in the transaction to init join a weighted pool\n */\n buildInitJoin({\n joiner,\n poolId,\n tokensIn,\n amountsIn,\n }: InitJoinPoolParameters): InitJoinPoolAttributes {\n this.checkInitJoinInputs({\n poolId,\n tokensIn,\n amountsIn,\n });\n const { attributes, params } = this.parseParamsForInitJoin({\n joiner,\n poolId,\n tokensIn,\n amountsIn,\n });\n const { functionName, data } = this.encodeInitJoinFunctionData(params);\n\n return {\n to: balancerVault,\n functionName,\n data,\n attributes,\n };\n }\n\n parseParamsForInitJoin = ({\n joiner,\n poolId,\n tokensIn,\n amountsIn,\n }: Omit): {\n attributes: JoinPoolDecodedAttributes;\n params: [string, string, string, JoinPoolRequestDecodedAttributes];\n } => {\n const assetHelpers = new AssetHelpers(this.wrappedNativeAsset);\n\n const [sortedTokens, sortedAmounts] = assetHelpers.sortTokens(\n tokensIn,\n amountsIn\n ) as [string[], string[]];\n\n const userData = WeightedPoolEncoder.joinInit(sortedAmounts);\n\n const attributes = {\n poolId: poolId,\n sender: joiner,\n recipient: joiner,\n joinPoolRequest: {\n assets: sortedTokens,\n maxAmountsIn: sortedAmounts,\n userData,\n fromInternalBalance: false,\n },\n };\n\n return {\n attributes,\n params: [\n attributes.poolId,\n attributes.sender,\n attributes.recipient,\n attributes.joinPoolRequest,\n ],\n };\n };\n\n encodeInitJoinFunctionData = (\n params: [string, string, string, JoinPoolRequestDecodedAttributes]\n ): {\n functionName: string;\n data: string;\n } => {\n const functionName = 'joinPool';\n\n const vaultInterface = Vault__factory.createInterface();\n const data = vaultInterface.encodeFunctionData(functionName, params);\n return { functionName, data };\n };\n checkInitJoinInputs = ({\n poolId,\n tokensIn,\n amountsIn,\n }: Pick<\n InitJoinPoolParameters,\n 'tokensIn' | 'amountsIn' | 'poolId'\n >): void => {\n if (!poolId) {\n throw new BalancerError(BalancerErrorCode.NO_POOL_DATA);\n }\n if (tokensIn.length !== amountsIn.length) {\n throw new BalancerError(BalancerErrorCode.INPUT_LENGTH_MISMATCH);\n }\n };\n\n async getPoolAddressAndIdWithReceipt(\n provider: JsonRpcProvider,\n receipt: TransactionReceipt\n ): Promise<{ poolId: string; poolAddress: string }> {\n const poolCreationEvent: LogDescription = findEventInReceiptLogs({\n receipt,\n to: this.contracts.weightedPoolFactory?.address || '',\n contractInterface: WeightedPoolFactory__factory.createInterface(),\n logName: 'PoolCreated',\n });\n\n const poolAddress = poolCreationEvent.args.pool;\n const weightedPoolInterface = this.getPoolInterface();\n const pool = new Contract(poolAddress, weightedPoolInterface, provider);\n const poolId = await pool.getPoolId();\n return {\n poolAddress,\n poolId,\n };\n }\n\n getPoolInterface(): WeightedPoolInterface {\n return WeightedPool__factory.createInterface();\n }\n}\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { JoinPool } from '@/modules/pools/pool-types/concerns/types';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { ERC4626LinearPoolInterface } from '@/contracts/ERC4626LinearPool';\nimport { GearboxLinearPoolInterface } from '@/contracts/GearboxLinearPool';\nimport { EulerLinearPoolInterface } from '@/contracts/EulerLinearPool';\nimport { AaveLinearPoolInterface } from '@/contracts/AaveLinearPool';\nimport { YearnLinearPoolInterface } from '@/contracts/YearnLinearPool';\nimport { AaveLinearPoolFactoryInterface } from '@/contracts/AaveLinearPoolFactory';\nimport { ERC4626LinearPoolFactoryInterface } from '@/contracts/ERC4626LinearPoolFactory';\nimport { EulerLinearPoolFactoryInterface } from '@/contracts/EulerLinearPoolFactory';\nimport { GearboxLinearPoolFactoryInterface } from '@/contracts/GearboxLinearPoolFactory';\nimport { YearnLinearPoolFactoryInterface } from '@/contracts/YearnLinearPoolFactory';\n\nexport type CreatePoolParameters = {\n name: string;\n symbol: string;\n tokenAddresses: string[];\n swapFeeEvm: string;\n owner: string;\n salt?: BytesLike;\n};\n\nexport interface ComposableStableCreatePoolParameters\n extends CreatePoolParameters {\n amplificationParameter: string;\n rateProviders: string[];\n tokenRateCacheDurations: string[];\n exemptFromYieldProtocolFeeFlags: boolean[];\n\n salt?: BytesLike;\n}\n\nexport interface WeightedCreatePoolParameters extends CreatePoolParameters {\n rateProviders: string[];\n normalizedWeights: BigNumberish[];\n}\n\nexport type LinearCreatePoolParameters = Pick<\n CreatePoolParameters,\n 'name' | 'symbol' | 'swapFeeEvm' | 'owner' | 'salt'\n> & {\n mainToken: string;\n wrappedToken: string;\n upperTargetEvm: string;\n protocolId: ProtocolId;\n};\n\nexport interface InitJoinPoolParameters {\n joiner: string;\n poolId: string;\n poolAddress: string;\n tokensIn: string[];\n amountsIn: string[];\n}\n\nexport interface InitJoinPoolAttributes {\n to: string;\n functionName: string;\n attributes: JoinPool;\n data: string;\n value?: BigNumber;\n}\n\n// Source of the protocolId's: https://github.com/balancer/balancer-v2-monorepo/blob/647320a4a375c724276af8e1ae26948de8fa411b/pkg/interfaces/contracts/standalone-utils/IProtocolIdRegistry.sol#L54-L72\nexport enum ProtocolId {\n AAVE_V1 = 0,\n AAVE_V2 = 1,\n AAVE_V3 = 2,\n AMPLEFORTH = 3,\n BEEFY = 4,\n EULER = 5,\n GEARBOX = 6,\n IDLE = 7,\n MORPHO = 8,\n RADIANT = 9,\n REAPER = 10,\n SILO = 11,\n STARGATE = 12,\n STURDY = 13,\n TESSERA = 14,\n TETU = 15,\n YEARN = 16,\n MIDAS = 17,\n AGAVE = 18,\n}\n\nexport type JoinPoolDecodedAttributes = {\n poolId: string;\n sender: string;\n recipient: string;\n joinPoolRequest: JoinPoolRequestDecodedAttributes;\n};\n\nexport type JoinPoolRequestDecodedAttributes = {\n assets: string[];\n maxAmountsIn: string[];\n userData: string;\n fromInternalBalance: boolean;\n};\n\nexport type LinearPoolInterface =\n | ERC4626LinearPoolInterface\n | EulerLinearPoolInterface\n | AaveLinearPoolInterface\n | YearnLinearPoolInterface\n | GearboxLinearPoolInterface;\n\nexport type LinearPoolFactoryInterface =\n | AaveLinearPoolFactoryInterface\n | ERC4626LinearPoolFactoryInterface\n | EulerLinearPoolFactoryInterface\n | GearboxLinearPoolFactoryInterface\n | YearnLinearPoolFactoryInterface;\n","import { LogDescription } from '@ethersproject/abi';\nimport { BytesLike } from '@ethersproject/bytes';\nimport { Contract } from '@ethersproject/contracts';\nimport { JsonRpcProvider, TransactionReceipt } from '@ethersproject/providers';\n\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport {\n AaveLinearPool__factory,\n AaveLinearPoolFactory__factory,\n ERC4626LinearPool__factory,\n ERC4626LinearPoolFactory__factory,\n EulerLinearPool__factory,\n EulerLinearPoolFactory__factory,\n GearboxLinearPool__factory,\n GearboxLinearPoolFactory__factory,\n YearnLinearPool__factory,\n YearnLinearPoolFactory__factory,\n} from '@/contracts';\nimport { AaveLinearPoolInterface } from '@/contracts/AaveLinearPool';\nimport { ERC4626LinearPoolInterface } from '@/contracts/ERC4626LinearPool';\nimport { EulerLinearPoolInterface } from '@/contracts/EulerLinearPool';\nimport { EulerLinearPoolFactoryInterface } from '@/contracts/EulerLinearPoolFactory';\nimport { GearboxLinearPoolInterface } from '@/contracts/GearboxLinearPool';\nimport { YearnLinearPoolInterface } from '@/contracts/YearnLinearPool';\nimport { ContractInstances } from '@/modules/contracts/contracts.module';\nimport { PoolFactory } from '@/modules/pools/factory/pool-factory';\nimport {\n InitJoinPoolAttributes,\n LinearCreatePoolParameters,\n LinearPoolFactoryInterface,\n ProtocolId,\n} from '@/modules/pools/factory/types';\nimport { PoolType } from '@/types';\nimport { findEventInReceiptLogs, getRandomBytes32 } from '@/lib/utils';\n\ntype LinearPoolParamsToEncode = [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n BytesLike\n];\n\ntype EulerLinearPoolParamsToEncode = [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string\n];\n\nexport class LinearFactory implements PoolFactory {\n private contracts: ContractInstances;\n private readonly poolType: PoolType;\n\n constructor(contracts: ContractInstances, poolType: PoolType) {\n this.contracts = contracts;\n this.poolType = poolType;\n }\n\n getPoolFactoryInterface = (): LinearPoolFactoryInterface => {\n switch (this.poolType) {\n case PoolType.AaveLinear:\n return AaveLinearPoolFactory__factory.createInterface();\n case PoolType.Linear:\n case PoolType.ERC4626Linear:\n return ERC4626LinearPoolFactory__factory.createInterface();\n case PoolType.EulerLinear:\n return EulerLinearPoolFactory__factory.createInterface();\n case PoolType.GearboxLinear:\n return GearboxLinearPoolFactory__factory.createInterface();\n case PoolType.YearnLinear:\n return YearnLinearPoolFactory__factory.createInterface();\n default:\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n };\n\n getPoolInterface = ():\n | AaveLinearPoolInterface\n | ERC4626LinearPoolInterface\n | EulerLinearPoolInterface\n | GearboxLinearPoolInterface\n | YearnLinearPoolInterface => {\n switch (this.poolType) {\n case PoolType.AaveLinear:\n return AaveLinearPool__factory.createInterface();\n case PoolType.Linear:\n case PoolType.ERC4626Linear:\n return ERC4626LinearPool__factory.createInterface();\n case PoolType.EulerLinear:\n return EulerLinearPool__factory.createInterface();\n case PoolType.GearboxLinear:\n return GearboxLinearPool__factory.createInterface();\n case PoolType.YearnLinear:\n return YearnLinearPool__factory.createInterface();\n default:\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n };\n\n buildInitJoin(): InitJoinPoolAttributes {\n // Linear Pools doesn't need to be initialized, they are initialized on deploy\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n\n /**\n *\n * @param name The name of the pool\n * @param symbol The symbol of the pool (BPT name)\n * @param mainToken The main token\n * @param wrappedToken The wrapped token\n * @param upperTargetEvm The maximum balance of the main token\n * @param swapFeeEvm The swap fee of the pool\n * @param owner The address of the owner of the pool\n * @param protocolId The protocolId, to check the available value\n */\n create({\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId,\n salt,\n }: LinearCreatePoolParameters): {\n to?: string;\n data: BytesLike;\n } {\n this.checkCreateInputs({ swapFeeEvm, protocolId });\n const params = this.parseCreateParamsForEncoding({\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId,\n salt,\n });\n const data = this.encodeCreateFunctionData(params);\n return {\n to: this.getFactoryAddress(),\n data,\n };\n }\n\n checkCreateInputs = ({\n swapFeeEvm,\n protocolId,\n }: {\n swapFeeEvm: string;\n protocolId: ProtocolId;\n }): void => {\n if (!ProtocolId[protocolId]) {\n throw new BalancerError(BalancerErrorCode.INVALID_PROTOCOL_ID);\n }\n if (BigInt(swapFeeEvm) <= BigInt(0) || BigInt(swapFeeEvm) > BigInt(1e17)) {\n throw new BalancerError(BalancerErrorCode.INVALID_SWAP_FEE_PERCENTAGE);\n }\n this.getFactoryAddress();\n };\n\n parseCreateParamsForEncoding = ({\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId,\n salt,\n }: Omit):\n | LinearPoolParamsToEncode\n | EulerLinearPoolParamsToEncode => {\n if (this.poolType === PoolType.EulerLinear) {\n return [\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId.toString(),\n ] as [string, string, string, string, string, string, string, string];\n }\n return [\n name,\n symbol,\n mainToken,\n wrappedToken,\n upperTargetEvm,\n swapFeeEvm,\n owner,\n protocolId.toString(),\n salt || getRandomBytes32(),\n ] as [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n BytesLike\n ];\n };\n\n encodeCreateFunctionData = (\n params: LinearPoolParamsToEncode | EulerLinearPoolParamsToEncode\n ): string => {\n const linearPoolInterface: LinearPoolFactoryInterface =\n this.getPoolFactoryInterface();\n const encodedData =\n // YearnLinearPools doesn't have protocolId, the encoding of the params is different\n this.poolType === PoolType.EulerLinear\n ? (\n linearPoolInterface as EulerLinearPoolFactoryInterface\n ).encodeFunctionData(\n 'create',\n params as EulerLinearPoolParamsToEncode\n )\n : (\n linearPoolInterface as Exclude<\n LinearPoolFactoryInterface,\n EulerLinearPoolFactoryInterface\n >\n ).encodeFunctionData('create', params as LinearPoolParamsToEncode);\n return encodedData;\n };\n\n getFactoryAddress = (): string => {\n switch (this.poolType) {\n case PoolType.AaveLinear:\n if (this.contracts.aaveLinearPoolFactory) {\n return this.contracts.aaveLinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n case PoolType.Linear:\n case PoolType.ERC4626Linear:\n if (this.contracts.erc4626LinearPoolFactory) {\n return this.contracts.erc4626LinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n case PoolType.EulerLinear:\n if (this.contracts.eulerLinearPoolFactory) {\n return this.contracts.eulerLinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n case PoolType.GearboxLinear:\n if (this.contracts.gearboxLinearPoolFactory) {\n return this.contracts.gearboxLinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n case PoolType.YearnLinear:\n if (this.contracts.yearnLinearPoolFactory) {\n return this.contracts.yearnLinearPoolFactory.address;\n } else throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n default:\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n };\n\n getPoolAddressAndIdWithReceipt = async (\n provider: JsonRpcProvider,\n receipt: TransactionReceipt\n ): Promise<{ poolId: string; poolAddress: string }> => {\n const poolCreationEvent: LogDescription = findEventInReceiptLogs({\n receipt,\n to: this.getFactoryAddress() || '',\n contractInterface: this.getPoolFactoryInterface(),\n logName: 'PoolCreated',\n });\n\n const poolAddress = poolCreationEvent.args.pool;\n const linearPoolInterface = this.getPoolInterface();\n const pool = new Contract(poolAddress, linearPoolInterface, provider);\n const poolId = await pool.getPoolId();\n return {\n poolAddress,\n poolId,\n };\n };\n}\n","import { BalancerNetworkConfig, PoolType } from '@/types';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { PoolFactory } from '@/modules/pools/factory/pool-factory';\nimport { ComposableStableFactory } from '@/modules/pools/factory/composable-stable/composable-stable.factory';\nimport { WeightedFactory } from '@/modules/pools/factory/weighted/weighted.factory';\nimport {\n ContractInstances,\n Contracts,\n} from '@/modules/contracts/contracts.module';\nimport { LinearFactory } from '@/modules/pools/factory/linear/linear.factory';\n\n/**\n * Wrapper around pool type specific methods.\n *\n * Returns a class instance of a type specific factory.\n */\nexport class PoolFactory__factory {\n networkConfig: BalancerNetworkConfig;\n contracts: ContractInstances;\n\n constructor(\n networkConfig: BalancerNetworkConfig,\n balancerContracts: Contracts\n ) {\n this.networkConfig = networkConfig;\n this.contracts = balancerContracts.contracts;\n }\n\n of(poolType: PoolType): PoolFactory {\n switch (poolType) {\n case 'Weighted':\n return new WeightedFactory(this.networkConfig, this.contracts);\n case 'Investment':\n case 'LiquidityBootstrapping': {\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n case 'Stable': {\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n case 'ComposableStable': {\n return new ComposableStableFactory(this.networkConfig, this.contracts);\n }\n case 'MetaStable': {\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n case 'StablePhantom': {\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n case 'Linear':\n case 'AaveLinear':\n case 'ERC4626Linear':\n case 'EulerLinear':\n case 'GearboxLinear':\n case 'YearnLinear': {\n return new LinearFactory(this.contracts, poolType);\n }\n default:\n throw new BalancerError(BalancerErrorCode.UNSUPPORTED_POOL_TYPE);\n }\n }\n}\n","import * as PoolQueries from './types';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero, Zero, MaxUint256 } from '@ethersproject/constants';\nimport { getEncoder } from './get_encoder';\nimport { removeItem } from '@/lib/utils';\n\n/**\n * Builds parameters quering join / exit liquidity functions in the Balancer Helpers contract.\n */\nexport class ParamsBuilder implements PoolQueries.ParamsBuilder {\n private encoder: PoolQueries.Encoder;\n\n constructor(private pool: PoolQueries.Pool) {\n const encoder = getEncoder(pool.poolType);\n if (encoder) {\n this.encoder = encoder;\n } else {\n throw 'Pool type not supported';\n }\n }\n\n /**\n * Encodes the query to get expected amount of BPT when joining a Pool with exact token inputs\n * @param maxAmountsInByToken - The amounts each of token, mapped by token address, to deposit in the pool as liquidity,\n * doesn't need to have all tokens, only the ones that will be deposited\n * @param minimumBPT - the minimum acceptable BPT to receive in return for deposited tokens (optional)\n */\n buildQueryJoinExactIn({\n maxAmountsInByToken,\n minimumBPT = Zero,\n }: PoolQueries.JoinExactInParams): PoolQueries.queryJoinParams {\n const bptIndex = this.pool.tokensList.findIndex((token) =>\n this.pool.id.includes(token)\n );\n\n const assets = [...this.pool.tokensList];\n\n const maxAmountsIn = this.pool.tokensList.map(\n (tokenAddress) =>\n maxAmountsInByToken.get(tokenAddress) ?? BigNumber.from('0')\n );\n\n let maxInWithoutBpt;\n\n // Remove BPT token from amounts for user data\n if (bptIndex > -1) {\n maxInWithoutBpt = removeItem(maxAmountsIn, bptIndex);\n } else {\n maxInWithoutBpt = maxAmountsIn;\n }\n\n const userData = this.encoder.joinExactTokensInForBPTOut(\n maxInWithoutBpt,\n minimumBPT\n );\n\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets,\n maxAmountsIn,\n userData,\n fromInternalBalance: false, // from internal balance is ignored on query join, can be just false\n },\n ] as PoolQueries.queryJoinParams;\n\n return params;\n }\n\n /**\n * Encodes the query to get expected token amount when joining a Pool specifying fixed BPT out.\n *\n * @param maxAmountIn - The max expected amount for tokenIn (optional)\n * @param bptOut - the expected BPT for providing liquidity\n * @param tokenIn - address of a token joining the pool\n */\n buildQueryJoinExactOut({\n maxAmountIn,\n bptOut,\n tokenIn,\n }: PoolQueries.JoinExactOutParams): PoolQueries.queryJoinParams {\n const bptIndex = this.pool.tokensList.findIndex((token) =>\n this.pool.id.includes(token)\n );\n let tokensWithoutBpt = [...this.pool.tokensList];\n if (bptIndex > -1) {\n tokensWithoutBpt = removeItem(this.pool.tokensList, bptIndex);\n }\n const tokenIndex = tokensWithoutBpt.indexOf(tokenIn);\n\n const userData = this.encoder.joinTokenInForExactBPTOut(bptOut, tokenIndex);\n const maxAmountsIn = maxAmountIn\n ? this.pool.tokensList.map((tokenAddress) =>\n tokenAddress === tokenIn ? maxAmountIn : '0'\n )\n : [];\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets: this.pool.tokensList,\n maxAmountsIn,\n userData,\n fromInternalBalance: false, // from internal balance is ignored on query join, can be just false\n },\n ] as PoolQueries.queryJoinParams;\n\n return params;\n }\n\n /**\n * Encodes the query for exiting the pool to a single token\n *\n * @param minAmountOut - minimum expected amount for token out\n * @param bptIn - BPT, shares of the pool liquidity\n * @param tokenOut - address of an exit liquidity token\n */\n buildQueryExitToSingleToken({\n minAmountOut,\n bptIn,\n tokenOut,\n }: PoolQueries.ExitToSingleTokenParams): PoolQueries.queryExitParams {\n const bptIndex = this.pool.tokensList.findIndex((token) =>\n this.pool.id.includes(token)\n );\n let tokensWithoutBpt = [...this.pool.tokensList];\n if (bptIndex > -1) {\n tokensWithoutBpt = removeItem(this.pool.tokensList, bptIndex);\n }\n const tokenIndex = tokensWithoutBpt.indexOf(tokenOut);\n\n const userData = this.encoder.exitExactBPTInForOneTokenOut(\n bptIn,\n tokenIndex\n );\n const minAmountsOut = minAmountOut\n ? this.pool.tokensList.map((tokenAddress) =>\n tokenAddress === tokenOut ? minAmountOut : '0'\n )\n : [];\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets: this.pool.tokensList,\n minAmountsOut,\n userData,\n toInternalBalance: false, // to internal balance is ignored on query join, can be just false\n },\n ] as PoolQueries.queryExitParams;\n\n return params;\n }\n\n /**\n * Encodes the query for exiting the pool with all underlying tokens proportionally.\n * Not supported by ComposableStable\n *\n * @param minAmountsOut - minimum expected amounts, can be set to zero for a query, ordered same as pool.tokensList\n * @param bptIn - BPT, shares of the pool liquidity\n */\n buildQueryExitProportionally({\n minAmountsOut = [],\n bptIn,\n }: PoolQueries.ExitProportionallyParams): PoolQueries.queryExitParams {\n if (!this.encoder.exitExactBPTInForTokensOut) {\n throw 'Proportional exit not implemented';\n }\n\n const userData = this.encoder.exitExactBPTInForTokensOut(bptIn);\n\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets: this.pool.tokensList,\n minAmountsOut,\n userData,\n toInternalBalance: false,\n },\n ] as PoolQueries.queryExitParams;\n\n return params;\n }\n\n /**\n * Encodes calldata to query expected BPT for known amounts out.\n *\n * @param minAmountsOut - minimum expected amounts, ordered same as pool.tokensList\n * @param maxBptIn - BPT, shares of the pool liquidity, can be set to zero for a query\n */\n buildQueryExitExactOut({\n minAmountsOut,\n maxBptIn = MaxUint256,\n }: PoolQueries.ExitExactOutParams): PoolQueries.queryExitParams {\n const bptIndex = this.pool.tokensList.findIndex((token) =>\n this.pool.id.includes(token)\n );\n\n let minAmountsOutWithoutBpt = [...minAmountsOut];\n // Remove BPT token from amounts\n if (bptIndex > -1) {\n minAmountsOutWithoutBpt = removeItem(minAmountsOut, bptIndex);\n }\n\n const userData = this.encoder.exitBPTInForExactTokensOut(\n minAmountsOutWithoutBpt,\n maxBptIn\n );\n\n const params = [\n this.pool.id,\n AddressZero, // sender is ignored on query join, so it can be just address zero\n AddressZero, // same as sender\n {\n assets: this.pool.tokensList,\n minAmountsOut,\n userData,\n toInternalBalance: false, // to internal balance is ignored on query join, can be just false\n },\n ] as PoolQueries.queryExitParams;\n\n return params;\n }\n}\n","import { WeightedPoolEncoder } from '@/pool-weighted/encoder';\nimport { StablePoolEncoder } from '@/pool-stable/encoder';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\nimport { PoolType } from '@/types';\nimport { isLinearish } from '@/lib/utils';\n\nexport const getEncoder = (\n poolType: PoolType\n):\n | typeof WeightedPoolEncoder\n | typeof StablePoolEncoder\n | typeof ComposableStablePoolEncoder\n | undefined => {\n switch (poolType) {\n case PoolType.Weighted:\n return WeightedPoolEncoder;\n\n case PoolType.Stable:\n case PoolType.MetaStable:\n case PoolType.StablePhantom:\n case PoolType.Element:\n case PoolType.Gyro2:\n case PoolType.Gyro3:\n return StablePoolEncoder;\n\n case PoolType.ComposableStable:\n return ComposableStablePoolEncoder;\n\n default: {\n if (isLinearish(poolType)) return StablePoolEncoder;\n break;\n }\n }\n};\n","import * as emissions from '@/modules/data/bal/emissions';\nimport { Findable, LiquidityGauge } from '@/types';\n\n/**\n * Returns BAL emissions per pool\n */\nexport class EmissionsService {\n constructor(private liquidityGaugesRepository: Findable) {}\n\n async relativeWeight(poolId: string): Promise {\n const gauge = await this.liquidityGaugesRepository.findBy('poolId', poolId);\n\n if (gauge) {\n return gauge.relativeWeight;\n }\n\n return 0;\n }\n\n async weekly(poolId: string): Promise {\n const perWeek = emissions.weekly();\n const relativeWeight = await this.relativeWeight(poolId);\n\n return perWeek * relativeWeight;\n }\n}\n","import { parseUnits } from '@ethersproject/units';\nimport { BigNumber } from '@ethersproject/bignumber';\n\n/**\n * Calculates the proportional amounts of tokens in relation to a given token and amount.\n * Useful for calculating the amounts of tokens to be sent to a pool when joining or swapping.\n * When using proportional amounts to join a pool the price impact will be minimal.\n *\n * @param pool - Pool object\n * @param token - Token address in relation to which the amounts are calculated\n * @param amount - Amount of token\n * @returns Object with tokens and amounts\n * @example\n * const pool = {\n * id: '0x0000',\n * tokens: [\n * { address: '0x1234', balance: '10' },\n * { address: '0x5678', balance: '20' }\n * ]\n * }\n *\n * const { tokens, amounts } = proportionalAmounts(pool, '0x1234', '1000000000000000000')\n */\nexport const proportionalAmounts = (\n pool: {\n id: string;\n tokens: { address: string; balance: string; decimals?: number }[];\n },\n token: string,\n amount: string\n): {\n tokens: string[];\n amounts: string[];\n} => {\n const tokensWithoutBpt = pool.tokens.filter(\n (t) => !pool.id.toLowerCase().includes(t.address.toLowerCase())\n );\n const referenceTokenIndex = tokensWithoutBpt.findIndex(\n (t) => t.address.toLowerCase() === token.toLowerCase()\n );\n\n if (referenceTokenIndex == -1) {\n throw new Error('Token not found in pool');\n }\n\n const balances = tokensWithoutBpt.map((t) =>\n parseUnits(t.balance, t.decimals)\n );\n const amountBn = BigNumber.from(amount);\n const proportionalAmounts = balances.map((b) =>\n b.mul(amountBn).div(balances[referenceTokenIndex])\n );\n\n return {\n tokens: tokensWithoutBpt.map((t) => t.address),\n amounts: proportionalAmounts.map((a) => a.toString()),\n };\n};\n","import { BigNumberish } from '@ethersproject/bignumber';\nimport { JsonRpcSigner } from '@ethersproject/providers';\n\nimport { BalancerError } from '@/balancerErrors';\nimport { Contracts } from '@/modules/contracts/contracts.module';\nimport { ImpermanentLossService } from '@/modules/pools/impermanentLoss/impermanentLossService';\nimport type {\n BalancerNetworkConfig,\n BalancerDataRepositories,\n Findable,\n Searchable,\n Pool,\n PoolWithMethods,\n AprBreakdown,\n PoolAttribute,\n} from '@/types';\nimport { Logger } from '@/lib/utils/logger';\n\nimport {\n ExitExactBPTInAttributes,\n JoinPoolAttributes,\n} from './pool-types/concerns/types';\nimport { PoolTypeConcerns } from './pool-type-concerns';\nimport { PoolApr } from './apr/apr';\nimport { Liquidity } from '../liquidity/liquidity.module';\nimport { Join } from '../joins/joins.module';\nimport { Exit, GeneralisedExitOutput, ExitInfo } from '../exits/exits.module';\nimport { PoolVolume } from './volume/volume';\nimport { PoolFees } from './fees/fees';\nimport { Simulation, SimulationType } from '../simulation/simulation.module';\nimport { PoolGraph } from '../graph/graph';\nimport { PoolFactory__factory } from './pool-factory__factory';\nimport * as Queries from './queries';\nimport { EmissionsService } from './emissions';\nimport { proportionalAmounts } from './proportional-amounts';\n\nconst notImplemented = (poolType: string, name: string) => () => {\n throw `${name} for poolType ${poolType} not implemented`;\n};\n\n/**\n * Controller / use-case layer for interacting with pools data.\n */\nexport class Pools implements Findable {\n aprService;\n liquidityService;\n joinService;\n exitService;\n feesService;\n volumeService;\n simulationService;\n poolFactory;\n impermanentLossService;\n graphService;\n emissionsService;\n proportionalAmounts;\n\n constructor(\n private networkConfig: BalancerNetworkConfig,\n private repositories: BalancerDataRepositories,\n private balancerContracts: Contracts\n ) {\n this.aprService = new PoolApr(\n this.repositories.pools,\n this.repositories.tokenPrices,\n this.repositories.tokenMeta,\n this.repositories.tokenYields,\n this.repositories.feeCollector,\n this.repositories.yesterdaysPools,\n this.repositories.liquidityGauges,\n this.repositories.feeDistributor,\n this.repositories.gyroConfigRepository\n );\n this.liquidityService = new Liquidity(\n repositories.pools,\n repositories.tokenPrices\n );\n this.simulationService = new Simulation(\n networkConfig,\n this.repositories.poolsForSimulations\n );\n this.graphService = new PoolGraph(this.repositories.poolsOnChain);\n this.joinService = new Join(\n this.graphService,\n networkConfig,\n this.simulationService\n );\n this.exitService = new Exit(\n this.graphService,\n networkConfig,\n this.simulationService\n );\n this.feesService = new PoolFees(repositories.yesterdaysPools);\n this.volumeService = new PoolVolume(repositories.yesterdaysPools);\n this.poolFactory = new PoolFactory__factory(\n networkConfig,\n balancerContracts\n );\n this.impermanentLossService = new ImpermanentLossService(\n repositories.tokenPrices,\n repositories.tokenHistoricalPrices\n );\n if (repositories.liquidityGauges) {\n this.emissionsService = new EmissionsService(\n repositories.liquidityGauges\n );\n }\n this.proportionalAmounts = proportionalAmounts;\n }\n\n static wrap(\n pool: Pool,\n networkConfig: BalancerNetworkConfig\n ): PoolWithMethods {\n let concerns: ReturnType;\n let queries: Queries.ParamsBuilder;\n let methods;\n try {\n concerns = PoolTypeConcerns.from(pool.poolType);\n methods = {\n buildJoin: (\n joiner: string,\n tokensIn: string[],\n amountsIn: string[],\n slippage: string\n ): JoinPoolAttributes => {\n return concerns.join.buildJoin({\n joiner,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset,\n });\n },\n calcPriceImpact: async (\n tokenAmounts: string[],\n bptAmount: string,\n isJoin: boolean\n ) =>\n concerns.priceImpactCalculator.calcPriceImpact(\n pool,\n tokenAmounts.map(BigInt),\n BigInt(bptAmount),\n isJoin\n ),\n buildExitExactBPTIn: (\n exiter: string,\n bptIn: string,\n slippage: string,\n shouldUnwrapNativeAsset = false,\n singleTokenOut?: string,\n toInternalBalance = false\n ) => {\n if (concerns.exit.buildExitExactBPTIn) {\n return concerns.exit.buildExitExactBPTIn({\n exiter,\n pool,\n bptIn,\n slippage,\n shouldUnwrapNativeAsset,\n wrappedNativeAsset,\n singleTokenOut,\n toInternalBalance,\n });\n } else {\n throw 'ExitExactBPTIn not supported';\n }\n },\n buildExitExactTokensOut: (\n exiter: string,\n tokensOut: string[],\n amountsOut: string[],\n slippage: string,\n toInternalBalance = false\n ) =>\n concerns.exit.buildExitExactTokensOut({\n exiter,\n pool,\n tokensOut,\n amountsOut,\n slippage,\n wrappedNativeAsset,\n toInternalBalance,\n }),\n buildRecoveryExit: (\n exiter: string,\n bptIn: string,\n slippage: string,\n toInternalBalance = false\n ) =>\n concerns.exit.buildRecoveryExit({\n exiter,\n pool,\n bptIn,\n slippage,\n toInternalBalance,\n }),\n\n // TODO: spotPrice fails, because it needs a subgraphType,\n // either we refetch or it needs a type transformation from SDK internal to SOR (subgraph)\n // spotPrice: async (tokenIn: string, tokenOut: string) =>\n // methods.spotPriceCalculator.calcPoolSpotPrice(tokenIn, tokenOut, data),\n calcSpotPrice: (tokenIn: string, tokenOut: string) =>\n concerns.spotPriceCalculator.calcPoolSpotPrice(\n tokenIn,\n tokenOut,\n pool\n ),\n calcProportionalAmounts: (token: string, amount: string) => {\n return proportionalAmounts(pool, token, amount);\n },\n };\n } catch (error) {\n if ((error as BalancerError).code != 'UNSUPPORTED_POOL_TYPE') {\n const logger = Logger.getInstance();\n logger.warn(error as string);\n }\n\n methods = {\n buildJoin: notImplemented(pool.poolType, 'buildJoin'),\n calcPriceImpact: notImplemented(pool.poolType, 'calcPriceImpact'),\n buildExitExactBPTIn: notImplemented(\n pool.poolType,\n 'buildExitExactBPTIn'\n ),\n buildExitExactTokensOut: notImplemented(\n pool.poolType,\n 'buildExitExactTokensOut'\n ),\n calcSpotPrice: notImplemented(pool.poolType, 'calcSpotPrice'),\n buildRecoveryExit: notImplemented(pool.poolType, 'buildRecoveryExit'),\n };\n }\n\n try {\n queries = new Queries.ParamsBuilder(pool);\n methods = {\n ...methods,\n buildQueryJoinExactIn: queries.buildQueryJoinExactIn.bind(queries),\n buildQueryJoinExactOut: queries.buildQueryJoinExactOut.bind(queries),\n buildQueryExitExactOut: queries.buildQueryExitExactOut.bind(queries),\n buildQueryExitToSingleToken:\n queries.buildQueryExitToSingleToken.bind(queries),\n buildQueryExitProportionally:\n queries.buildQueryExitProportionally.bind(queries),\n };\n } catch (error) {\n methods = {\n ...methods,\n buildQueryJoinExactIn: notImplemented(\n pool.poolType,\n 'buildQueryJoinExactIn'\n ),\n buildQueryJoinExactOut: notImplemented(\n pool.poolType,\n 'buildQueryJoinExactOut'\n ),\n buildQueryExitExactOut: notImplemented(\n pool.poolType,\n 'buildQueryExitExactOut'\n ),\n buildQueryExitToSingleToken: notImplemented(\n pool.poolType,\n 'buildQueryExitToSingleToken'\n ),\n buildQueryExitProportionally: notImplemented(\n pool.poolType,\n 'buildQueryExitProportionally'\n ),\n };\n }\n const wrappedNativeAsset =\n networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase();\n const bptIndex = pool.tokensList.indexOf(pool.address);\n return {\n ...pool,\n ...methods,\n bptIndex,\n };\n }\n\n dataSource(): Findable & Searchable {\n // TODO: Add API data repository to data and use liveModelProvider as fallback\n return this.repositories.pools;\n }\n\n /**\n * Calculates APR on any pool data\n *\n * @param pool\n * @returns\n */\n async apr(pool: Pool): Promise {\n return this.aprService.apr(pool);\n }\n\n /**\n * Calculates Impermanent Loss on any pool data\n *\n * @param timestamp\n * @param pool\n * @returns\n */\n async impermanentLoss(timestamp: number, pool: Pool): Promise {\n return this.impermanentLossService.calcImpLoss(timestamp, pool);\n }\n\n /**\n * Calculates total pool liquidity in USD\n *\n * @param pool\n * @returns total pool liquidity in USD\n */\n async liquidity(pool: Pool): Promise {\n return this.liquidityService.getLiquidity(pool);\n }\n\n /**\n * Calculates pool's BPT price in USD\n *\n * @param pool\n * @returns pool's BPT price in USD\n */\n async bptPrice(pool: Pool): Promise {\n return this.liquidityService.getBptPrice(pool);\n }\n\n /**\n * Builds join transaction\n *\n * @param pool Pool\n * @param tokensIn Token addresses\n * @param amountsIn Token amounts in EVM scale\n * @param userAddress User address\n * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%.\n * @returns Transaction object\n * @throws Error if pool type is not implemented\n */\n buildJoin({\n pool,\n tokensIn,\n amountsIn,\n userAddress,\n slippage,\n }: {\n pool: Pool;\n tokensIn: string[];\n amountsIn: string[];\n userAddress: string;\n slippage: string;\n }): JoinPoolAttributes {\n const concerns = PoolTypeConcerns.from(pool.poolType);\n\n if (!concerns)\n throw `buildJoin for poolType ${pool.poolType} not implemented`;\n\n return concerns.join.buildJoin({\n joiner: userAddress,\n pool,\n tokensIn,\n amountsIn,\n slippage,\n wrappedNativeAsset:\n this.networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase(),\n });\n }\n\n buildExitExactBPTIn({\n pool,\n bptAmount,\n userAddress,\n slippage,\n shouldUnwrapNativeAsset,\n singleTokenOut,\n }: {\n pool: Pool;\n bptAmount: string;\n userAddress: string;\n slippage: string;\n shouldUnwrapNativeAsset?: boolean;\n singleTokenOut?: string;\n }): ExitExactBPTInAttributes {\n const concerns = PoolTypeConcerns.from(pool.poolType);\n if (!concerns || !concerns.exit.buildExitExactBPTIn)\n throw `buildExit for poolType ${pool.poolType} not implemented`;\n\n return concerns.exit.buildExitExactBPTIn({\n pool,\n exiter: userAddress,\n bptIn: bptAmount,\n slippage,\n wrappedNativeAsset:\n this.networkConfig.addresses.tokens.wrappedNativeAsset.toLowerCase(),\n shouldUnwrapNativeAsset: shouldUnwrapNativeAsset ?? false,\n singleTokenOut: singleTokenOut ?? undefined,\n toInternalBalance: false,\n });\n }\n\n buildRecoveryExit({\n pool,\n bptAmount,\n userAddress,\n slippage,\n toInternalBalance,\n }: {\n pool: Pool;\n bptAmount: string;\n userAddress: string;\n slippage: string;\n toInternalBalance?: boolean;\n }): ExitExactBPTInAttributes {\n const concerns = PoolTypeConcerns.from(pool.poolType);\n if (!concerns || !concerns.exit.buildRecoveryExit)\n throw `buildRecoveryExit for poolType ${pool.poolType} not implemented`;\n\n return concerns.exit.buildRecoveryExit({\n exiter: userAddress,\n pool,\n bptIn: bptAmount,\n slippage,\n toInternalBalance: !!toInternalBalance,\n });\n }\n\n /**\n * Builds generalised join transaction\n *\n * @param poolId Pool id\n * @param tokens Token addresses\n * @param amounts Token amounts in EVM scale\n * @param userAddress User address\n * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%.\n * @param signer JsonRpcSigner that will sign the staticCall transaction if Static simulation chosen\n * @param simulationType Simulation type (VaultModel, Tenderly or Static)\n * @param authorisation Optional auhtorisation call to be added to the chained transaction\n * @returns transaction data ready to be sent to the network along with min and expected BPT amounts out.\n */\n async generalisedJoin(\n poolId: string,\n tokens: string[],\n amounts: string[],\n userAddress: string,\n slippage: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType,\n authorisation?: string\n ): Promise<{\n to: string;\n encodedCall: string;\n minOut: string;\n expectedOut: string;\n priceImpact: string;\n value: BigNumberish;\n }> {\n return this.joinService.joinPool(\n poolId,\n tokens,\n amounts,\n userAddress,\n slippage,\n signer,\n simulationType,\n authorisation\n );\n }\n\n /**\n * Builds generalised exit transaction\n *\n * @param poolId Pool id\n * @param amount Token amount in EVM scale\n * @param userAddress User address\n * @param slippage Maximum slippage tolerance in bps i.e. 50 = 0.5%.\n * @param signer JsonRpcSigner that will sign the staticCall transaction if Static simulation chosen\n * @param simulationType Simulation type (Tenderly or Static) - VaultModel should not be used to build exit transaction\n * @param authorisation Optional auhtorisation call to be added to the chained transaction\n * @param tokensToUnwrap List all tokens that requires exit by unwrapping - info provided by getExitInfo\n * @returns transaction data ready to be sent to the network along with tokens, min and expected amounts out.\n */\n async generalisedExit(\n poolId: string,\n amount: string,\n userAddress: string,\n slippage: string,\n signer: JsonRpcSigner,\n simulationType: SimulationType.Static | SimulationType.Tenderly,\n authorisation?: string,\n tokensToUnwrap?: string[]\n ): Promise {\n return this.exitService.buildExitCall(\n poolId,\n amount,\n userAddress,\n slippage,\n signer,\n simulationType,\n authorisation,\n tokensToUnwrap\n );\n }\n\n /**\n * Calculates price impact for an action on a pool\n *\n * @param pool\n * @returns percentage as a string in EVM scale\n */\n calcPriceImpact({\n pool,\n tokenAmounts,\n bptAmount,\n isJoin,\n }: {\n pool: Pool;\n tokenAmounts: string[];\n bptAmount: string;\n isJoin: boolean;\n }): string {\n const concerns = PoolTypeConcerns.from(pool.poolType);\n return concerns.priceImpactCalculator.calcPriceImpact(\n pool,\n tokenAmounts.map(BigInt),\n BigInt(bptAmount),\n isJoin\n );\n }\n\n /**\n * Gets info required to build generalised exit transaction\n *\n * @param poolId Pool id\n * @param amountBptIn BPT amount in EVM scale\n * @param userAddress User address\n * @param signer JsonRpcSigner that will sign the staticCall transaction if Static simulation chosen\n * @returns info required to build a generalised exit transaction including whether tokens need to be unwrapped\n */\n async getExitInfo(\n poolId: string,\n amountBptIn: string,\n userAddress: string,\n signer: JsonRpcSigner\n ): Promise {\n return this.exitService.getExitInfo(\n poolId,\n amountBptIn,\n userAddress,\n signer\n );\n }\n\n /**\n * Calculates total fees for the pool in the last 24 hours\n *\n * @param pool\n * @returns\n */\n async fees(pool: Pool): Promise {\n return this.feesService.last24h(pool);\n }\n\n /**\n * Calculates total volume of the pool in the last 24 hours\n *\n * @param pool\n * @returns\n */\n async volume(pool: Pool): Promise {\n return this.volumeService.last24h(pool);\n }\n\n async find(id: string): Promise {\n const data = await this.dataSource().find(id);\n if (!data) return;\n\n return Pools.wrap(data, this.networkConfig);\n }\n\n async findBy(\n param: string,\n value: string\n ): Promise {\n if (param == 'id') {\n return this.find(value);\n } else if (param == 'address') {\n const data = await this.dataSource().findBy('address', value);\n if (!data) return;\n\n return Pools.wrap(data, this.networkConfig);\n } else {\n throw `search by ${param} not implemented`;\n }\n }\n\n async all(): Promise {\n const list = await this.dataSource().all();\n if (!list) return [];\n\n return list\n .map((data: Pool) => Pools.wrap(data, this.networkConfig))\n .filter((p) => p) as PoolWithMethods[];\n }\n\n async where(filter: (pool: Pool) => boolean): Promise {\n const list = await this.dataSource().where(filter);\n if (!list) return [];\n\n const wrapped = list.map((data: Pool) =>\n Pools.wrap(data, this.networkConfig)\n );\n\n return wrapped.filter((p) => p) as PoolWithMethods[];\n }\n}\n","export const version = \"strings/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { arrayify } from \"@ethersproject/bytes\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n///////////////////////////////\nexport var UnicodeNormalizationForm;\n(function (UnicodeNormalizationForm) {\n UnicodeNormalizationForm[\"current\"] = \"\";\n UnicodeNormalizationForm[\"NFC\"] = \"NFC\";\n UnicodeNormalizationForm[\"NFD\"] = \"NFD\";\n UnicodeNormalizationForm[\"NFKC\"] = \"NFKC\";\n UnicodeNormalizationForm[\"NFKD\"] = \"NFKD\";\n})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {}));\n;\nexport var Utf8ErrorReason;\n(function (Utf8ErrorReason) {\n // A continuation byte was present where there was nothing to continue\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"UNEXPECTED_CONTINUE\"] = \"unexpected continuation byte\";\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"BAD_PREFIX\"] = \"bad codepoint prefix\";\n // The string is too short to process the expected codepoint\n // - offset = the index the codepoint began in\n Utf8ErrorReason[\"OVERRUN\"] = \"string overrun\";\n // A missing continuation byte was expected but not found\n // - offset = the index the continuation byte was expected at\n Utf8ErrorReason[\"MISSING_CONTINUE\"] = \"missing continuation byte\";\n // The computed code point is outside the range for UTF-8\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\n Utf8ErrorReason[\"OUT_OF_RANGE\"] = \"out of UTF-8 range\";\n // UTF-8 strings may not contain UTF-16 surrogate pairs\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\n Utf8ErrorReason[\"UTF16_SURROGATE\"] = \"UTF-16 surrogate\";\n // The string is an overlong representation\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; already bounds checked\n Utf8ErrorReason[\"OVERLONG\"] = \"overlong representation\";\n})(Utf8ErrorReason || (Utf8ErrorReason = {}));\n;\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n return logger.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) {\n break;\n }\n i++;\n }\n return i;\n }\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === Utf8ErrorReason.OVERRUN) {\n return bytes.length - offset - 1;\n }\n // Nothing to skip\n return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === Utf8ErrorReason.OVERLONG) {\n output.push(badCodepoint);\n return 0;\n }\n // Put the replacement character into the output\n output.push(0xfffd);\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n// Common error handing strategies\nexport const Utf8ErrorFuncs = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(bytes, onError) {\n if (onError == null) {\n onError = Utf8ErrorFuncs.error;\n }\n bytes = arrayify(bytes);\n const result = [];\n let i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n const c = bytes[i++];\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n // 1110 xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n }\n else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n }\n else {\n if ((c & 0xc0) === 0x80) {\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\n }\n else {\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\n }\n continue;\n }\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\n continue;\n }\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\n res = null;\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n // See above loop for invalid continuation byte\n if (res === null) {\n continue;\n }\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n result.push(res);\n }\n return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nexport function toUtf8Bytes(str, form = UnicodeNormalizationForm.current) {\n if (form != UnicodeNormalizationForm.current) {\n logger.checkNormalize();\n str = str.normalize(form);\n }\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 0x80) {\n result.push(c);\n }\n else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n }\n else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new Error(\"invalid utf-8 string\");\n }\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n }\n else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n return arrayify(result);\n}\n;\nfunction escapeChar(value) {\n const hex = (\"0000\" + value.toString(16));\n return \"\\\\u\" + hex.substring(hex.length - 4);\n}\nexport function _toEscapedUtf8String(bytes, onError) {\n return '\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\n if (codePoint < 256) {\n switch (codePoint) {\n case 8: return \"\\\\b\";\n case 9: return \"\\\\t\";\n case 10: return \"\\\\n\";\n case 13: return \"\\\\r\";\n case 34: return \"\\\\\\\"\";\n case 92: return \"\\\\\\\\\";\n }\n if (codePoint >= 32 && codePoint < 127) {\n return String.fromCharCode(codePoint);\n }\n }\n if (codePoint <= 0xffff) {\n return escapeChar(codePoint);\n }\n codePoint -= 0x10000;\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\n }).join(\"\") + '\"';\n}\nexport function _toUtf8String(codePoints) {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n }).join(\"\");\n}\nexport function toUtf8String(bytes, onError) {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\nexport function toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n//# sourceMappingURL=utf8.js.map","\"use strict\";\nimport { HashZero } from \"@ethersproject/constants\";\nimport { arrayify, concat, hexlify } from \"@ethersproject/bytes\";\nimport { toUtf8Bytes, toUtf8String } from \"./utf8\";\nexport function formatBytes32String(text) {\n // Get the bytes\n const bytes = toUtf8Bytes(text);\n // Check we have room for null-termination\n if (bytes.length > 31) {\n throw new Error(\"bytes32 string must be less than 32 bytes\");\n }\n // Zero-pad (implicitly null-terminates)\n return hexlify(concat([bytes, HashZero]).slice(0, 32));\n}\nexport function parseBytes32String(bytes) {\n const data = arrayify(bytes);\n // Must be 32 bytes with a null-termination\n if (data.length !== 32) {\n throw new Error(\"invalid bytes32 - not 32 bytes long\");\n }\n if (data[31] !== 0) {\n throw new Error(\"invalid bytes32 string - no null terminator\");\n }\n // Find the null termination\n let length = 31;\n while (data[length - 1] === 0) {\n length--;\n }\n // Determine the string value\n return toUtf8String(data.slice(0, length));\n}\n//# sourceMappingURL=bytes32.js.map","/**\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\n *\n * @version 0.8.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2015-2018\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n 'use strict';\n\n var INPUT_ERROR = 'input is invalid type';\n var FINALIZE_ERROR = 'finalize already called';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_SHA3_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\n var PADDING = [6, 1536, 393216, 100663296];\n var SHIFT = [0, 8, 16, 24];\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\n var BITS = [224, 256, 384, 512];\n var SHAKE_BITS = [128, 256];\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\n var CSHAKE_BYTEPAD = {\n '128': 168,\n '256': 136\n };\n\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n var createOutputMethod = function (bits, padding, outputType) {\n return function (message) {\n return new Keccak(bits, padding, bits).update(message)[outputType]();\n };\n };\n\n var createShakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits) {\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\n };\n };\n\n var createCshakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits, n, s) {\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\n };\n };\n\n var createKmacOutputMethod = function (bits, padding, outputType) {\n return function (key, message, outputBits, s) {\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\n };\n };\n\n var createOutputMethods = function (method, createMethod, bits, padding) {\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createMethod(bits, padding, type);\n }\n return method;\n };\n\n var createMethod = function (bits, padding) {\n var method = createOutputMethod(bits, padding, 'hex');\n method.create = function () {\n return new Keccak(bits, padding, bits);\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n return createOutputMethods(method, createOutputMethod, bits, padding);\n };\n\n var createShakeMethod = function (bits, padding) {\n var method = createShakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits) {\n return new Keccak(bits, padding, outputBits);\n };\n method.update = function (message, outputBits) {\n return method.create(outputBits).update(message);\n };\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\n };\n\n var createCshakeMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createCshakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits, n, s) {\n if (!n && !s) {\n return methods['shake' + bits].create(outputBits);\n } else {\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\n }\n };\n method.update = function (message, outputBits, n, s) {\n return method.create(outputBits, n, s).update(message);\n };\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\n };\n\n var createKmacMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createKmacOutputMethod(bits, padding, 'hex');\n method.create = function (key, outputBits, s) {\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\n };\n method.update = function (key, message, outputBits, s) {\n return method.create(key, outputBits, s).update(message);\n };\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\n };\n\n var algorithms = [\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\n ];\n\n var methods = {}, methodNames = [];\n\n for (var i = 0; i < algorithms.length; ++i) {\n var algorithm = algorithms[i];\n var bits = algorithm.bits;\n for (var j = 0; j < bits.length; ++j) {\n var methodName = algorithm.name + '_' + bits[j];\n methodNames.push(methodName);\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\n if (algorithm.name !== 'sha3') {\n var newMethodName = algorithm.name + bits[j];\n methodNames.push(newMethodName);\n methods[newMethodName] = methods[methodName];\n }\n }\n }\n\n function Keccak(bits, padding, outputBits) {\n this.blocks = [];\n this.s = [];\n this.padding = padding;\n this.outputBits = outputBits;\n this.reset = true;\n this.finalized = false;\n this.block = 0;\n this.start = 0;\n this.blockCount = (1600 - (bits << 1)) >> 5;\n this.byteCount = this.blockCount << 2;\n this.outputBlocks = outputBits >> 5;\n this.extraBytes = (outputBits & 31) >> 3;\n\n for (var i = 0; i < 50; ++i) {\n this.s[i] = 0;\n }\n }\n\n Keccak.prototype.update = function (message) {\n if (this.finalized) {\n throw new Error(FINALIZE_ERROR);\n }\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\n\n while (index < length) {\n if (this.reset) {\n this.reset = false;\n blocks[0] = this.block;\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n if (notString) {\n for (i = this.start; index < length && i < byteCount; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < byteCount; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n this.lastByteIndex = i;\n if (i >= byteCount) {\n this.start = i - byteCount;\n this.block = blocks[blockCount];\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n this.reset = true;\n } else {\n this.start = i;\n }\n }\n return this;\n };\n\n Keccak.prototype.encode = function (x, right) {\n var o = x & 255, n = 1;\n var bytes = [o];\n x = x >> 8;\n o = x & 255;\n while (o > 0) {\n bytes.unshift(o);\n x = x >> 8;\n o = x & 255;\n ++n;\n }\n if (right) {\n bytes.push(n);\n } else {\n bytes.unshift(n);\n }\n this.update(bytes);\n return bytes.length;\n };\n\n Keccak.prototype.encodeString = function (str) {\n var notString, type = typeof str;\n if (type !== 'string') {\n if (type === 'object') {\n if (str === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\n str = new Uint8Array(str);\n } else if (!Array.isArray(str)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var bytes = 0, length = str.length;\n if (notString) {\n bytes = length;\n } else {\n for (var i = 0; i < str.length; ++i) {\n var code = str.charCodeAt(i);\n if (code < 0x80) {\n bytes += 1;\n } else if (code < 0x800) {\n bytes += 2;\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes += 3;\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\n bytes += 4;\n }\n }\n }\n bytes += this.encode(bytes * 8);\n this.update(str);\n return bytes;\n };\n\n Keccak.prototype.bytepad = function (strs, w) {\n var bytes = this.encode(w);\n for (var i = 0; i < strs.length; ++i) {\n bytes += this.encodeString(strs[i]);\n }\n var paddingBytes = w - bytes % w;\n var zeros = [];\n zeros.length = paddingBytes;\n this.update(zeros);\n return this;\n };\n\n Keccak.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\n blocks[i >> 2] |= this.padding[i & 3];\n if (this.lastByteIndex === this.byteCount) {\n blocks[0] = blocks[blockCount];\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n blocks[blockCount - 1] |= 0x80000000;\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n };\n\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var hex = '', block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\n }\n if (j % blockCount === 0) {\n f(s);\n i = 0;\n }\n }\n if (extraBytes) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\n if (extraBytes > 1) {\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\n }\n if (extraBytes > 2) {\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\n }\n }\n return hex;\n };\n\n Keccak.prototype.arrayBuffer = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var bytes = this.outputBits >> 3;\n var buffer;\n if (extraBytes) {\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\n } else {\n buffer = new ArrayBuffer(bytes);\n }\n var array = new Uint32Array(buffer);\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n array[j] = s[i];\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n array[i] = s[i];\n buffer = buffer.slice(0, bytes);\n }\n return buffer;\n };\n\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\n\n Keccak.prototype.digest = Keccak.prototype.array = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var array = [], offset, block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n array[offset + 1] = (block >> 8) & 0xFF;\n array[offset + 2] = (block >> 16) & 0xFF;\n array[offset + 3] = (block >> 24) & 0xFF;\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n if (extraBytes > 1) {\n array[offset + 1] = (block >> 8) & 0xFF;\n }\n if (extraBytes > 2) {\n array[offset + 2] = (block >> 16) & 0xFF;\n }\n }\n return array;\n };\n\n function Kmac(bits, padding, outputBits) {\n Keccak.call(this, bits, padding, outputBits);\n }\n\n Kmac.prototype = new Keccak();\n\n Kmac.prototype.finalize = function () {\n this.encode(this.outputBits, true);\n return Keccak.prototype.finalize.call(this);\n };\n\n var f = function (s) {\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\n for (n = 0; n < 48; n += 2) {\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\n\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\n s[0] ^= h;\n s[1] ^= l;\n s[10] ^= h;\n s[11] ^= l;\n s[20] ^= h;\n s[21] ^= l;\n s[30] ^= h;\n s[31] ^= l;\n s[40] ^= h;\n s[41] ^= l;\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\n s[2] ^= h;\n s[3] ^= l;\n s[12] ^= h;\n s[13] ^= l;\n s[22] ^= h;\n s[23] ^= l;\n s[32] ^= h;\n s[33] ^= l;\n s[42] ^= h;\n s[43] ^= l;\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\n s[4] ^= h;\n s[5] ^= l;\n s[14] ^= h;\n s[15] ^= l;\n s[24] ^= h;\n s[25] ^= l;\n s[34] ^= h;\n s[35] ^= l;\n s[44] ^= h;\n s[45] ^= l;\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\n s[6] ^= h;\n s[7] ^= l;\n s[16] ^= h;\n s[17] ^= l;\n s[26] ^= h;\n s[27] ^= l;\n s[36] ^= h;\n s[37] ^= l;\n s[46] ^= h;\n s[47] ^= l;\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\n s[8] ^= h;\n s[9] ^= l;\n s[18] ^= h;\n s[19] ^= l;\n s[28] ^= h;\n s[29] ^= l;\n s[38] ^= h;\n s[39] ^= l;\n s[48] ^= h;\n s[49] ^= l;\n\n b0 = s[0];\n b1 = s[1];\n b32 = (s[11] << 4) | (s[10] >>> 28);\n b33 = (s[10] << 4) | (s[11] >>> 28);\n b14 = (s[20] << 3) | (s[21] >>> 29);\n b15 = (s[21] << 3) | (s[20] >>> 29);\n b46 = (s[31] << 9) | (s[30] >>> 23);\n b47 = (s[30] << 9) | (s[31] >>> 23);\n b28 = (s[40] << 18) | (s[41] >>> 14);\n b29 = (s[41] << 18) | (s[40] >>> 14);\n b20 = (s[2] << 1) | (s[3] >>> 31);\n b21 = (s[3] << 1) | (s[2] >>> 31);\n b2 = (s[13] << 12) | (s[12] >>> 20);\n b3 = (s[12] << 12) | (s[13] >>> 20);\n b34 = (s[22] << 10) | (s[23] >>> 22);\n b35 = (s[23] << 10) | (s[22] >>> 22);\n b16 = (s[33] << 13) | (s[32] >>> 19);\n b17 = (s[32] << 13) | (s[33] >>> 19);\n b48 = (s[42] << 2) | (s[43] >>> 30);\n b49 = (s[43] << 2) | (s[42] >>> 30);\n b40 = (s[5] << 30) | (s[4] >>> 2);\n b41 = (s[4] << 30) | (s[5] >>> 2);\n b22 = (s[14] << 6) | (s[15] >>> 26);\n b23 = (s[15] << 6) | (s[14] >>> 26);\n b4 = (s[25] << 11) | (s[24] >>> 21);\n b5 = (s[24] << 11) | (s[25] >>> 21);\n b36 = (s[34] << 15) | (s[35] >>> 17);\n b37 = (s[35] << 15) | (s[34] >>> 17);\n b18 = (s[45] << 29) | (s[44] >>> 3);\n b19 = (s[44] << 29) | (s[45] >>> 3);\n b10 = (s[6] << 28) | (s[7] >>> 4);\n b11 = (s[7] << 28) | (s[6] >>> 4);\n b42 = (s[17] << 23) | (s[16] >>> 9);\n b43 = (s[16] << 23) | (s[17] >>> 9);\n b24 = (s[26] << 25) | (s[27] >>> 7);\n b25 = (s[27] << 25) | (s[26] >>> 7);\n b6 = (s[36] << 21) | (s[37] >>> 11);\n b7 = (s[37] << 21) | (s[36] >>> 11);\n b38 = (s[47] << 24) | (s[46] >>> 8);\n b39 = (s[46] << 24) | (s[47] >>> 8);\n b30 = (s[8] << 27) | (s[9] >>> 5);\n b31 = (s[9] << 27) | (s[8] >>> 5);\n b12 = (s[18] << 20) | (s[19] >>> 12);\n b13 = (s[19] << 20) | (s[18] >>> 12);\n b44 = (s[29] << 7) | (s[28] >>> 25);\n b45 = (s[28] << 7) | (s[29] >>> 25);\n b26 = (s[38] << 8) | (s[39] >>> 24);\n b27 = (s[39] << 8) | (s[38] >>> 24);\n b8 = (s[48] << 14) | (s[49] >>> 18);\n b9 = (s[49] << 14) | (s[48] >>> 18);\n\n s[0] = b0 ^ (~b2 & b4);\n s[1] = b1 ^ (~b3 & b5);\n s[10] = b10 ^ (~b12 & b14);\n s[11] = b11 ^ (~b13 & b15);\n s[20] = b20 ^ (~b22 & b24);\n s[21] = b21 ^ (~b23 & b25);\n s[30] = b30 ^ (~b32 & b34);\n s[31] = b31 ^ (~b33 & b35);\n s[40] = b40 ^ (~b42 & b44);\n s[41] = b41 ^ (~b43 & b45);\n s[2] = b2 ^ (~b4 & b6);\n s[3] = b3 ^ (~b5 & b7);\n s[12] = b12 ^ (~b14 & b16);\n s[13] = b13 ^ (~b15 & b17);\n s[22] = b22 ^ (~b24 & b26);\n s[23] = b23 ^ (~b25 & b27);\n s[32] = b32 ^ (~b34 & b36);\n s[33] = b33 ^ (~b35 & b37);\n s[42] = b42 ^ (~b44 & b46);\n s[43] = b43 ^ (~b45 & b47);\n s[4] = b4 ^ (~b6 & b8);\n s[5] = b5 ^ (~b7 & b9);\n s[14] = b14 ^ (~b16 & b18);\n s[15] = b15 ^ (~b17 & b19);\n s[24] = b24 ^ (~b26 & b28);\n s[25] = b25 ^ (~b27 & b29);\n s[34] = b34 ^ (~b36 & b38);\n s[35] = b35 ^ (~b37 & b39);\n s[44] = b44 ^ (~b46 & b48);\n s[45] = b45 ^ (~b47 & b49);\n s[6] = b6 ^ (~b8 & b0);\n s[7] = b7 ^ (~b9 & b1);\n s[16] = b16 ^ (~b18 & b10);\n s[17] = b17 ^ (~b19 & b11);\n s[26] = b26 ^ (~b28 & b20);\n s[27] = b27 ^ (~b29 & b21);\n s[36] = b36 ^ (~b38 & b30);\n s[37] = b37 ^ (~b39 & b31);\n s[46] = b46 ^ (~b48 & b40);\n s[47] = b47 ^ (~b49 & b41);\n s[8] = b8 ^ (~b0 & b2);\n s[9] = b9 ^ (~b1 & b3);\n s[18] = b18 ^ (~b10 & b12);\n s[19] = b19 ^ (~b11 & b13);\n s[28] = b28 ^ (~b20 & b22);\n s[29] = b29 ^ (~b21 & b23);\n s[38] = b38 ^ (~b30 & b32);\n s[39] = b39 ^ (~b31 & b33);\n s[48] = b48 ^ (~b40 & b42);\n s[49] = b49 ^ (~b41 & b43);\n\n s[0] ^= RC[n];\n s[1] ^= RC[n + 1];\n }\n };\n\n if (COMMON_JS) {\n module.exports = methods;\n } else {\n for (i = 0; i < methodNames.length; ++i) {\n root[methodNames[i]] = methods[methodNames[i]];\n }\n if (AMD) {\n define(function () {\n return methods;\n });\n }\n }\n})();\n","export const version = \"solidity/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { arrayify, concat, hexlify, zeroPad } from \"@ethersproject/bytes\";\nimport { keccak256 as hashKeccak256 } from \"@ethersproject/keccak256\";\nimport { sha256 as hashSha256 } from \"@ethersproject/sha2\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\nconst regexBytes = new RegExp(\"^bytes([0-9]+)$\");\nconst regexNumber = new RegExp(\"^(u?int)([0-9]*)$\");\nconst regexArray = new RegExp(\"^(.*)\\\\[([0-9]*)\\\\]$\");\nconst Zeros = \"0000000000000000000000000000000000000000000000000000000000000000\";\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nfunction _pack(type, value, isArray) {\n switch (type) {\n case \"address\":\n if (isArray) {\n return zeroPad(value, 32);\n }\n return arrayify(value);\n case \"string\":\n return toUtf8Bytes(value);\n case \"bytes\":\n return arrayify(value);\n case \"bool\":\n value = (value ? \"0x01\" : \"0x00\");\n if (isArray) {\n return zeroPad(value, 32);\n }\n return arrayify(value);\n }\n let match = type.match(regexNumber);\n if (match) {\n //let signed = (match[1] === \"int\")\n let size = parseInt(match[2] || \"256\");\n if ((match[2] && String(size) !== match[2]) || (size % 8 !== 0) || size === 0 || size > 256) {\n logger.throwArgumentError(\"invalid number type\", \"type\", type);\n }\n if (isArray) {\n size = 256;\n }\n value = BigNumber.from(value).toTwos(size);\n return zeroPad(value, size / 8);\n }\n match = type.match(regexBytes);\n if (match) {\n const size = parseInt(match[1]);\n if (String(size) !== match[1] || size === 0 || size > 32) {\n logger.throwArgumentError(\"invalid bytes type\", \"type\", type);\n }\n if (arrayify(value).byteLength !== size) {\n logger.throwArgumentError(`invalid value for ${type}`, \"value\", value);\n }\n if (isArray) {\n return arrayify((value + Zeros).substring(0, 66));\n }\n return value;\n }\n match = type.match(regexArray);\n if (match && Array.isArray(value)) {\n const baseType = match[1];\n const count = parseInt(match[2] || String(value.length));\n if (count != value.length) {\n logger.throwArgumentError(`invalid array length for ${type}`, \"value\", value);\n }\n const result = [];\n value.forEach(function (value) {\n result.push(_pack(baseType, value, true));\n });\n return concat(result);\n }\n return logger.throwArgumentError(\"invalid type\", \"type\", type);\n}\n// @TODO: Array Enum\nexport function pack(types, values) {\n if (types.length != values.length) {\n logger.throwArgumentError(\"wrong number of values; expected ${ types.length }\", \"values\", values);\n }\n const tight = [];\n types.forEach(function (type, index) {\n tight.push(_pack(type, values[index]));\n });\n return hexlify(concat(tight));\n}\nexport function keccak256(types, values) {\n return hashKeccak256(pack(types, values));\n}\nexport function sha256(types, values) {\n return hashSha256(pack(types, values));\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nimport sha3 from \"js-sha3\";\nimport { arrayify } from \"@ethersproject/bytes\";\nexport function keccak256(data) {\n return '0x' + sha3.keccak_256(arrayify(data));\n}\n//# sourceMappingURL=index.js.map","import { formatBytes32String } from '@ethersproject/strings';\nimport { keccak256 } from '@ethersproject/solidity';\nimport { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumber, formatFixed } from '@ethersproject/bignumber';\nimport { Provider } from '@ethersproject/providers';\nimport { GyroConfig, GyroConfig__factory, Multicall } from '@/contracts';\nimport { GyroConfigInterface } from '@/contracts/GyroConfig';\n\nexport interface GyroConfigRepository {\n getGyroProtocolFee(poolAddress: string): Promise;\n}\n\nconst protocolFeePercKey = formatBytes32String('PROTOCOL_SWAP_FEE_PERC');\nconst gyroPoolTypeKey = formatBytes32String('E-CLP');\nconst encodedPoolTypeKey = keccak256(\n ['bytes'],\n [\n defaultAbiCoder.encode(\n ['bytes32', 'bytes32'],\n [protocolFeePercKey, gyroPoolTypeKey]\n ),\n ]\n);\n\nexport class GyroConfigRepositoryImpl implements GyroConfigRepository {\n gyroConfigInterface: GyroConfigInterface;\n gyroConfig: GyroConfig;\n\n constructor(\n private gyroConfigAddress: string,\n private multicall: Multicall,\n provider: Provider\n ) {\n this.gyroConfigInterface = GyroConfig__factory.createInterface();\n this.gyroConfig = GyroConfig__factory.connect(gyroConfigAddress, provider);\n }\n\n async getGyroProtocolFee(poolAddress: string): Promise {\n let fee;\n const encodedPoolSpecificKey = keccak256(\n ['bytes'],\n [\n defaultAbiCoder.encode(\n ['bytes32', 'uint256'],\n [protocolFeePercKey, poolAddress]\n ),\n ]\n );\n const payload = [\n {\n target: this.gyroConfigAddress,\n callData: this.gyroConfigInterface.encodeFunctionData('hasKey', [\n encodedPoolSpecificKey,\n ]),\n },\n {\n target: this.gyroConfigAddress,\n callData: this.gyroConfigInterface.encodeFunctionData('hasKey', [\n encodedPoolTypeKey,\n ]),\n },\n {\n target: this.gyroConfigAddress,\n callData: this.gyroConfigInterface.encodeFunctionData('hasKey', [\n protocolFeePercKey,\n ]),\n },\n ];\n const [, [hasSpecificKeyHex, hasPoolTypeKeyHex, hasDefaultKeyHex]] =\n await this.multicall.callStatic.aggregate(payload);\n const hasSpecificKey = BigNumber.from(hasSpecificKeyHex).eq(1);\n const hasPoolTypeKey = BigNumber.from(hasPoolTypeKeyHex).eq(1);\n const hasDefaultKey = BigNumber.from(hasDefaultKeyHex).eq(1);\n if (hasSpecificKey) {\n fee = parseFloat(\n formatFixed(await this.gyroConfig.getUint(encodedPoolSpecificKey), 18)\n );\n } else if (hasPoolTypeKey) {\n fee = parseFloat(\n formatFixed(await this.gyroConfig.getUint(encodedPoolTypeKey), 18)\n );\n } else if (hasDefaultKey) {\n fee = parseFloat(\n formatFixed(await this.gyroConfig.getUint(protocolFeePercKey), 18)\n );\n } else {\n fee = 0;\n }\n return fee;\n }\n}\n","import { Interface } from '@ethersproject/abi';\nimport { getAddress } from '@ethersproject/address';\nimport { formatUnits } from '@ethersproject/units';\nimport { Multicall } from '@/contracts';\n\nconst gaugeControllerInterface = new Interface([\n 'function gauge_relative_weight(address gauge, uint timestamp) view returns (uint)',\n]);\n\nconst gaugeControllerCheckpointerInterface = new Interface([\n 'function gauge_relative_weight(address gauge) view returns (uint)',\n]);\n\nexport class GaugeControllerMulticallRepository {\n constructor(\n private multicall: Multicall,\n private gaugeControllerAddress: string,\n private gaugeControllerCheckpointerAddress?: string\n ) {}\n\n async getRelativeWeights(\n gaugeAddresses: string[],\n timestamp?: number\n ): Promise<{ [gaugeAddress: string]: number }> {\n const payload = gaugeAddresses.map((gaugeAddress) => {\n // The checkpointer only exists for mainnet, if the network is a testnet, it'll use the regular gauge controller\n if (this.gaugeControllerCheckpointerAddress && !timestamp) {\n return {\n target: this.gaugeControllerCheckpointerAddress,\n callData: gaugeControllerCheckpointerInterface.encodeFunctionData(\n 'gauge_relative_weight',\n [getAddress(gaugeAddress)]\n ),\n };\n }\n return {\n target: this.gaugeControllerAddress,\n callData: gaugeControllerInterface.encodeFunctionData(\n 'gauge_relative_weight',\n [getAddress(gaugeAddress), timestamp || Math.floor(Date.now() / 1000)]\n ),\n };\n });\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const weights = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseFloat(formatUnits(res[i], 18));\n return p;\n },\n {}\n );\n\n return weights;\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { Findable } from '@/types';\n\nexport abstract class AbstractSubgraphRepository\n implements Findable\n{\n protected abstract mapType(subgraphFragment: any): T;\n\n abstract query(args: any): Promise;\n\n async get(args: any): Promise {\n const result = await this.query(args);\n return result?.length > 0 ? result[0] : undefined;\n }\n\n async find(id: string): Promise {\n return this.get({ where: { id: id } });\n }\n\n async findBy(attribute: A, value: string): Promise {\n return this.get({ where: { [String(attribute)]: value } });\n }\n\n async findAllBy(\n attribute: A,\n value: string,\n first = 1000,\n skip = 0\n ): Promise {\n const args = {\n where: { [String(attribute)]: value },\n first: first,\n skip: skip,\n };\n return this.query(args);\n }\n}\n","import { Network } from '@/lib/constants/network';\nimport { AbstractSubgraphRepository } from './abstract-subgraph-repository';\nimport { createSubgraphClient, SubgraphClient } from '../subgraph';\n\nexport abstract class BalancerSubgraphRepository<\n T,\n A\n> extends AbstractSubgraphRepository {\n protected client: SubgraphClient;\n\n constructor(\n url: string,\n protected chainId: Network,\n protected blockHeight?: () => Promise\n ) {\n super();\n this.client = createSubgraphClient(url);\n }\n}\n","import { Network } from '@/lib/constants/network';\nimport { AbstractSubgraphRepository } from './abstract-subgraph-repository';\nimport { createGaugesClient, GaugesClient } from '../subgraph';\n\nexport abstract class GaugesSubgraphRepository<\n T,\n A\n> extends AbstractSubgraphRepository {\n protected client: GaugesClient;\n\n constructor(\n url: string,\n protected chainId: Network,\n protected blockHeight?: () => Promise\n ) {\n super();\n this.client = createGaugesClient(url);\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { GaugeShare, GaugeShareAttributes } from './types';\nimport { GaugesSubgraphRepository } from '@/modules/subgraph/repository';\nimport {\n SubgraphGaugeShareFragment,\n GaugeShare_OrderBy,\n OrderDirection,\n} from '@/modules/subgraph/generated/balancer-gauges';\n\nexport class GaugeSharesRepository extends GaugesSubgraphRepository<\n GaugeShare,\n GaugeShareAttributes\n> {\n async query(args: any): Promise {\n if (!args.orderBy) args.orderBy = GaugeShare_OrderBy.balance;\n if (!args.orderDirection) args.orderDirection = OrderDirection.desc;\n if (!args.block && this.blockHeight)\n args.block = { number: await this.blockHeight() };\n\n const { gaugeShares } = await this.client.GaugeShares(args);\n return gaugeShares.map(this.mapType);\n }\n\n mapType(subgraphGaugeShare: SubgraphGaugeShareFragment): GaugeShare {\n return {\n id: subgraphGaugeShare.id,\n balance: subgraphGaugeShare.balance,\n userAddress: subgraphGaugeShare.user?.id,\n gauge: {\n id: subgraphGaugeShare.gauge.id,\n poolId: subgraphGaugeShare.gauge.poolId || undefined,\n isKilled: subgraphGaugeShare.gauge.isKilled,\n totalSupply: subgraphGaugeShare.gauge.totalSupply,\n },\n };\n }\n\n async findByUser(\n userAddress: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(\n GaugeShareAttributes.UserAddress,\n userAddress,\n first,\n skip\n );\n }\n\n async findByGauge(\n gaugeId: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(GaugeShareAttributes.GaugeId, gaugeId, first, skip);\n }\n}\n","import { Multicall } from '@/contracts';\nimport { Interface } from '@ethersproject/abi';\nimport { formatUnits } from '@ethersproject/units';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport type { Network } from '@/types';\n\nconst liquidityGaugeV5Interface = new Interface([\n 'function totalSupply() view returns (uint)',\n 'function working_supply() view returns (uint)',\n 'function reward_count() view returns (uint)',\n 'function reward_tokens(uint rewardIndex) view returns (address)',\n 'function reward_data(address rewardToken) view returns (tuple(address token, address distributor, uint period_finish, uint rate, uint last_update, uint integral) data)',\n]);\n\nconst childLiquidityGaugeInterface = new Interface([\n 'function inflation_rate(uint currentWeekTimestamp) view returns (uint)',\n]);\n\nexport interface RewardData {\n token: string; // Always 0x0\n distributor: string;\n period_finish: BigNumber;\n rate: BigNumber; // per second\n last_update: BigNumber;\n integral: BigNumber; // sum accrued to date\n decimals?: number; // Provided by subgraph\n}\n\n/**\n * A lot of code to get liquidity gauge state via RPC multicall.\n * TODO: reseach helper contracts or extend subgraph\n */\nexport class LiquidityGaugesMulticallRepository {\n constructor(private multicall: Multicall, private chainId: Network) {}\n\n async getTotalSupplies(\n gaugeAddresses: string[]\n ): Promise<{ [gaugeAddress: string]: number }> {\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData('totalSupply', []),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n // Handle 0x\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n\n const totalSupplies = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseFloat(formatUnits(res0x[i], 18));\n return p;\n },\n {}\n );\n\n return totalSupplies;\n }\n\n async getWorkingSupplies(\n gaugeAddresses: string[]\n ): Promise<{ [gaugeAddress: string]: number }> {\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'working_supply',\n []\n ),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n // Handle 0x\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n\n const workingSupplies = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseFloat(formatUnits(res0x[i], 18));\n return p;\n },\n {}\n );\n\n return workingSupplies;\n }\n\n async getInflationRates(\n gaugeAddresses: string[]\n ): Promise<{ [gaugeAddress: string]: number }> {\n const currentWeek = Math.floor(Date.now() / 1000 / 604800);\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: childLiquidityGaugeInterface.encodeFunctionData(\n 'inflation_rate',\n [currentWeek]\n ),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n // Handle 0x\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n\n const inflationRates = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseFloat(formatUnits(res0x[i], 18));\n return p;\n },\n {}\n );\n\n return inflationRates;\n }\n\n async getRewardCounts(\n gaugeAddresses: string[]\n ): Promise<{ [gaugeAddress: string]: number }> {\n let rewardCounts;\n if (this.chainId == 1) {\n const payload = gaugeAddresses.map((gaugeAddress) => ({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'reward_count',\n []\n ),\n }));\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n // Handle 0x return values\n const res0x = res.map((r: string) => (r == '0x' ? '0x0' : r));\n\n rewardCounts = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a, i) => {\n p[a] ||= parseInt(res0x[i]);\n return p;\n },\n {}\n );\n } else {\n rewardCounts = gaugeAddresses.reduce(\n (p: { [key: string]: number }, a) => {\n p[a] ||= 1;\n return p;\n },\n {}\n );\n }\n\n return rewardCounts;\n }\n\n async getRewardTokens(\n gaugeAddresses: string[],\n passingRewardCounts?: { [gaugeAddress: string]: number }\n ): Promise<{ [gaugeAddress: string]: string[] }> {\n const rewardCounts =\n passingRewardCounts || (await this.getRewardCounts(gaugeAddresses));\n const gaugesWithRewards = gaugeAddresses.filter(\n (gaugeAddress) => rewardCounts[gaugeAddress] > 0\n );\n const startIndexes = [0];\n const payload = gaugesWithRewards\n .map((gaugeAddress, gaugeIndex) => {\n const calls = [];\n for (let i = 0; i < rewardCounts[gaugeAddress]; i++) {\n calls.push({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'reward_tokens',\n [i]\n ),\n });\n }\n startIndexes[gaugeIndex + 1] =\n startIndexes[gaugeIndex] + rewardCounts[gaugeAddress];\n return calls;\n })\n .flat();\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const rewardTokens = gaugesWithRewards.reduce(\n (p: { [key: string]: string[] }, a, i) => {\n const start = startIndexes[i];\n const end = startIndexes[i + 1];\n const tokens: string[] = [];\n for (let i = start; i < end; i++) {\n tokens.push(\n liquidityGaugeV5Interface.decodeFunctionResult(\n 'reward_tokens',\n res[i]\n )[0]\n );\n }\n p[a] ||= tokens;\n return p;\n },\n {}\n );\n\n return rewardTokens;\n }\n\n async getRewardData(\n gaugeAddresses: string[],\n passingRewardTokens?: { [gaugeAddress: string]: string[] }\n ): Promise<{\n [gaugeAddress: string]: { [rewardTokenAddress: string]: RewardData };\n }> {\n const rewardTokens =\n passingRewardTokens || (await this.getRewardTokens(gaugeAddresses));\n\n const startIndexes = [0];\n const payload = Object.keys(rewardTokens)\n .map((gaugeAddress, gaugeIndex) => {\n const calls = [];\n for (let i = 0; i < rewardTokens[gaugeAddress].length; i++) {\n calls.push({\n target: gaugeAddress,\n callData: liquidityGaugeV5Interface.encodeFunctionData(\n 'reward_data',\n [rewardTokens[gaugeAddress][i]]\n ),\n });\n }\n startIndexes[gaugeIndex + 1] =\n startIndexes[gaugeIndex] + rewardTokens[gaugeAddress].length;\n return calls;\n })\n .flat();\n const [, res] = (await this.multicall.callStatic.aggregate(payload)) as [\n unknown,\n string[]\n ];\n const decoded = res.map(\n (r) => liquidityGaugeV5Interface.decodeFunctionResult('reward_data', r)[0]\n );\n\n const rewardData = Object.keys(rewardTokens).reduce(\n (p: { [key: string]: { [key: string]: RewardData } }, a, i) => {\n const start = startIndexes[i];\n const data = rewardTokens[a].reduce(\n (d: { [key: string]: RewardData }, t, x) => {\n d[t] ||= decoded[start + x] as RewardData;\n return d;\n },\n {}\n );\n p[a] ||= data;\n return p;\n },\n {}\n );\n\n return rewardData;\n }\n}\n","import { Findable } from '../types';\nimport {\n createGaugesClient,\n GaugesClient,\n SubgraphLiquidityGauge,\n} from '@/modules/subgraph/subgraph';\n\n/**\n * Access liquidity gauges indexed by subgraph.\n * Because we have ~100 gauges to save on repeated http calls we cache all results as `gauges` on an instance.\n * Balancer's subgraph URL: https://thegraph.com/hosted-service/subgraph/balancer-labs/balancer-gauges\n */\nexport class LiquidityGaugesSubgraphRepository\n implements Findable\n{\n private client: GaugesClient;\n public gauges: SubgraphLiquidityGauge[] = [];\n\n constructor(url: string) {\n this.client = createGaugesClient(url);\n }\n\n async fetch(): Promise {\n console.time('fetching liquidity gauges');\n const queryResult = await this.client.Pools({\n first: 1000,\n where: {\n preferentialGauge_not: null,\n },\n });\n const qauges = queryResult.pools.map((pool) => pool.preferentialGauge);\n // TODO: optionally convert subgraph type to sdk internal type\n this.gauges = qauges as SubgraphLiquidityGauge[];\n\n console.timeEnd('fetching liquidity gauges');\n return this.gauges;\n }\n\n async find(id: string): Promise {\n if (this.gauges.length == 0) {\n await this.fetch();\n }\n\n return this.gauges.find((gauge) => gauge.id == id);\n }\n\n async findBy(\n param: string,\n value: string\n ): Promise {\n if (this.gauges.length == 0) {\n await this.fetch();\n }\n\n if (param == 'id') {\n return this.find(value);\n } else if (param == 'poolId') {\n return this.gauges.find((gauge) => gauge.poolId == value);\n } else if (param == 'poolAddress') {\n return this.gauges.find((gauge) => gauge.poolAddress == value);\n } else {\n throw `search by ${param} not implemented`;\n }\n }\n}\n","import { GaugeControllerMulticallRepository } from '../gauge-controller/multicall';\nimport { LiquidityGaugesMulticallRepository, RewardData } from './multicall';\nimport { LiquidityGaugesSubgraphRepository } from './subgraph';\nimport { parseUnits } from '@ethersproject/units';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport type {\n Maybe,\n SubgraphLiquidityGauge,\n} from '@/modules/subgraph/subgraph';\nimport type { Findable } from '../types';\nimport type { Network } from '@/types';\nimport { Multicall } from '@/contracts';\n\nexport interface LiquidityGauge {\n id: string;\n address: string;\n name: string;\n poolId?: Maybe;\n poolAddress: string;\n totalSupply: number;\n workingSupply: number;\n relativeWeight: number;\n rewardTokens?: { [tokenAddress: string]: RewardData };\n claimableTokens?: { [tokenAddress: string]: BigNumber };\n balInflationRate?: number;\n}\n\nexport class LiquidityGaugeSubgraphRPCProvider\n implements Findable\n{\n gaugeController?: GaugeControllerMulticallRepository;\n multicall: LiquidityGaugesMulticallRepository;\n subgraph: LiquidityGaugesSubgraphRepository;\n workingSupplies: { [gaugeAddress: string]: number } = {};\n relativeWeights: { [gaugeAddress: string]: number } = {};\n inflationRates: { [gaugeAddress: string]: number } = {};\n rewardData: {\n [gaugeAddress: string]: { [tokenAddress: string]: RewardData };\n } = {};\n gauges?: Promise;\n\n constructor(\n subgraphUrl: string,\n multicall: Multicall,\n gaugeControllerAddress: string,\n private chainId: Network,\n gaugeControllerCheckpointerAddress?: string\n ) {\n if (gaugeControllerAddress) {\n this.gaugeController = new GaugeControllerMulticallRepository(\n multicall,\n gaugeControllerAddress,\n gaugeControllerCheckpointerAddress\n );\n }\n this.multicall = new LiquidityGaugesMulticallRepository(multicall, chainId);\n this.subgraph = new LiquidityGaugesSubgraphRepository(subgraphUrl);\n }\n\n async fetch(): Promise {\n const gauges: SubgraphLiquidityGauge[] = await this.subgraph.fetch();\n const gaugeAddresses = gauges.map((g) => g.id);\n if (this.chainId == 1) {\n console.time('Fetching multicall.getWorkingSupplies');\n this.workingSupplies = await this.multicall.getWorkingSupplies(\n gaugeAddresses\n );\n console.timeEnd('Fetching multicall.getWorkingSupplies');\n } else {\n // Filter out gauges that are not from the factory supporting inflation rate\n // Safe to remove this once all gauges are migrated to the new factory\n const oldFactories = [\n '0x3b8ca519122cdd8efb272b0d3085453404b25bd0', // Polygon\n '0xb08e16cfc07c684daa2f93c70323badb2a6cbfd2', // Arbitrum\n '0x2e96068b3d5b5bae3d7515da4a1d2e52d08a2647', // Optimism\n '0x809b79b53f18e9bc08a961ed4678b901ac93213a', // Gnosis\n ];\n\n const childGaugeAddresses = gauges\n .filter((g) => !oldFactories.includes(g.factory.id.toLowerCase()))\n .map((g) => g.id);\n\n if (childGaugeAddresses.length > 0) {\n console.time('Fetching multicall.inflationRates');\n this.inflationRates = await this.multicall.getInflationRates(\n childGaugeAddresses\n );\n console.timeEnd('Fetching multicall.inflationRates');\n console.time('Fetching multicall.getWorkingSupplies');\n this.workingSupplies = await this.multicall.getWorkingSupplies(\n childGaugeAddresses\n );\n console.timeEnd('Fetching multicall.getWorkingSupplies');\n }\n }\n if (this.gaugeController) {\n console.time('Fetching gaugeController.getRelativeWeights');\n this.relativeWeights = await this.gaugeController.getRelativeWeights(\n gaugeAddresses\n );\n console.timeEnd('Fetching gaugeController.getRelativeWeights');\n }\n\n // Kept as a potential fallback for getting rewardData from RPC\n // this.rewardData = await this.multicall.getRewardData(\n // gaugeAddresses //,\n // // rewardTokens\n // );\n\n // Reward data was made available from subgraph, keeping it separate for potential RPC fallback\n this.rewardData = gauges.reduce(\n (r: { [key: string]: { [key: string]: RewardData } }, g) => {\n r[g.id] ||= g.tokens\n ? Object.fromEntries(\n g.tokens.map((t) => [\n t.id.split('-')[0],\n {\n distributor: '',\n last_update: BigNumber.from(0),\n integral: BigNumber.from(0),\n token: t.id.split('-')[0],\n decimals: t.decimals,\n rate: parseUnits(t.rate || '0', t.decimals),\n period_finish: BigNumber.from(\n (t.periodFinish as unknown as string) || '0'\n ),\n },\n ])\n )\n : {};\n\n return r;\n },\n {}\n );\n\n return gauges.map(this.compose.bind(this));\n }\n\n async find(id: string): Promise {\n if (!this.gauges) {\n this.gauges = this.fetch();\n }\n\n return (await this.gauges).find((g) => g.id == id);\n }\n\n async findBy(\n attribute: string,\n value: string\n ): Promise {\n if (!this.gauges) {\n this.gauges = this.fetch();\n }\n\n let gauge: LiquidityGauge | undefined;\n if (attribute == 'id') {\n return this.find(value);\n } else if (attribute == 'address') {\n return this.find(value);\n } else if (attribute == 'poolId') {\n gauge = (await this.gauges).find((g) => g.poolId == value);\n } else if (attribute == 'poolAddress') {\n gauge = (await this.gauges).find((g) => g.poolAddress == value);\n } else {\n throw `search by ${attribute} not implemented`;\n }\n\n return gauge;\n }\n\n private compose(subgraphGauge: SubgraphLiquidityGauge) {\n return {\n id: subgraphGauge.id,\n address: subgraphGauge.id,\n name: subgraphGauge.symbol,\n poolId: subgraphGauge.poolId,\n poolAddress: subgraphGauge.poolAddress,\n totalSupply: parseFloat(subgraphGauge.totalSupply),\n workingSupply: this.workingSupplies[subgraphGauge.id],\n relativeWeight: this.relativeWeights[subgraphGauge.id],\n rewardTokens: this.rewardData[subgraphGauge.id],\n balInflationRate: this.inflationRates[subgraphGauge.id],\n };\n }\n}\n","import axios from 'axios';\nimport { jsonToGraphQLQuery } from 'json-to-graphql-query';\n\nexport default class BalancerAPIClient {\n constructor(private readonly url: string, private readonly apiKey: string) {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public async get(query: unknown): Promise {\n try {\n const payload = this.toPayload(query);\n const { data } = await axios.post(this.url, payload, {\n headers: {\n 'x-api-key': this.apiKey,\n },\n });\n if (data.errors) {\n throw new Error(\n data.errors.map((error: Error) => error.message).join(',')\n );\n }\n return data.data;\n } catch (error) {\n console.error(error);\n throw error;\n }\n\n return [];\n }\n\n public toPayload(query: unknown): unknown {\n return JSON.stringify({ query: jsonToGraphQLQuery({ query }) });\n }\n}\n","import { Findable } from '../types';\nimport { PoolAttribute, PoolsRepositoryFetchOptions } from './types';\nimport { GraphQLQuery, Pool } from '@/types';\nimport BalancerAPIClient from '@/modules/api/balancer-api.client';\nimport {\n GraphQLArgsBuilder,\n BalancerAPIArgsFormatter,\n} from '@/lib/graphql/args-builder';\nimport { GraphQLArgs } from '@/lib/graphql/types';\n\ninterface PoolsBalancerAPIOptions {\n url: string;\n apiKey: string;\n query?: GraphQLQuery;\n}\n\nconst MAX_POOLS_PER_REQUEST = 1000;\nconst DEFAULT_SKIP = 0;\nconst DEFAULT_FIRST = 10;\nconst CHECK_TIMEOUT_SECONDS = 10;\nconst CHECK_INTERVAL_MS = 10;\nconst MAX_CHECKS = (CHECK_TIMEOUT_SECONDS * 1000) / CHECK_INTERVAL_MS;\n\nfunction timeout(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Access pools using the Balancer GraphQL Api.\n *\n * Balancer's API URL: https://api.balancer.fi/query/\n */\nexport class PoolsBalancerAPIRepository\n implements Findable\n{\n private client: BalancerAPIClient;\n public pools: Pool[] = [];\n public skip = 0; // Keep track of how many pools to skip on next fetch, so this functions similar to subgraph repository.\n public nextToken: string | undefined | null; // A token to pass to the next query to retrieve the next page of results. Undefined initially, null when there are no more results.\n private query: GraphQLQuery;\n private hasFetched = false;\n private isFetching = false;\n\n constructor(options: PoolsBalancerAPIOptions) {\n this.client = new BalancerAPIClient(options.url, options.apiKey);\n\n const defaultArgs: GraphQLArgs = {\n chainId: 1,\n orderBy: 'totalLiquidity',\n orderDirection: 'desc',\n where: {\n swapEnabled: {\n eq: true,\n },\n totalShares: {\n gt: 0.05,\n },\n },\n };\n\n const defaultAttributes = {\n id: true,\n address: true,\n };\n\n this.query = {\n args: Object.assign({}, options.query?.args || defaultArgs),\n attrs: Object.assign({}, options.query?.attrs || defaultAttributes),\n };\n\n // skip is not a valid argument for the Balancer API, it uses nextToken\n delete this.query.args.skip;\n }\n\n private fetchFromCache(first: number, skip: number): Pool[] {\n const pools = this.pools.slice(skip, first + skip);\n return pools;\n }\n\n async fetch(options?: PoolsRepositoryFetchOptions): Promise {\n const first = options?.first || DEFAULT_FIRST;\n const skip = options?.skip || DEFAULT_SKIP;\n\n if (!this.hasFetched) {\n this.fetchAll(options);\n }\n await this.awaitEnoughPoolsFetched(first, skip);\n return this.fetchFromCache(first, skip);\n }\n\n // Fetches all pools from the API in a loop and saves them to the cache.\n async fetchAll(options?: PoolsRepositoryFetchOptions): Promise {\n this.isFetching = true;\n this.hasFetched = true;\n\n if (this.nextToken) {\n this.query.args.nextToken = this.nextToken;\n }\n\n this.query.args.first = MAX_POOLS_PER_REQUEST;\n const formattedArgs = new GraphQLArgsBuilder(this.query.args).format(\n new BalancerAPIArgsFormatter()\n );\n\n const attrs = this.query.attrs;\n attrs.nextToken = true;\n\n const formattedQuery = {\n pools: {\n __args: formattedArgs,\n ...attrs,\n },\n };\n\n const apiResponse = await this.client.get(formattedQuery);\n const apiResponseData = apiResponse.pools;\n\n this.nextToken = apiResponseData.nextToken;\n this.pools = this.pools.concat(apiResponseData.pools.map(this.format));\n\n if (this.nextToken) return await this.fetchAll(options);\n\n this.isFetching = false;\n }\n\n // A function that waits until enough pools have been loaded into the cache\n // or fetching has finished. Used so that all pools can be fetched in the\n // background, while fetch returns the first results to the user quickly.\n async awaitEnoughPoolsFetched(first: number, skip: number): Promise {\n for (let totalChecks = 0; totalChecks < MAX_CHECKS; totalChecks++) {\n if (this.pools.length > first + skip) {\n return;\n }\n if (!this.isFetching) {\n return;\n }\n await timeout(CHECK_INTERVAL_MS);\n }\n\n return;\n }\n\n async find(id: string): Promise {\n if (this.pools.length == 0) {\n await this.fetch();\n }\n\n return this.findBy('id', id);\n }\n\n async findBy(param: PoolAttribute, value: string): Promise {\n if (this.pools.length == 0) {\n await this.fetch();\n }\n\n const pool = this.pools.find((pool) => pool[param] == value);\n if (pool) {\n return this.format(pool);\n }\n }\n\n /** Fixes any formatting issues from the subgraph\n * - GraphQL can't store a map so pool.apr.[rewardAprs/tokenAprs].breakdown\n * is JSON data that needs to be parsed so they match the Pool type correctly.\n */\n private format(pool: Pool): Pool {\n if (pool.apr?.rewardAprs.breakdown) {\n // GraphQL can't store this as a map so it's JSON that we must parse\n const rewardsBreakdown = JSON.parse(\n pool.apr?.rewardAprs.breakdown as unknown as string\n );\n pool.apr.rewardAprs.breakdown = rewardsBreakdown;\n }\n if (pool.apr?.tokenAprs.breakdown) {\n // GraphQL can't store this as a map so it's JSON that we must parse\n const tokenAprsBreakdown = JSON.parse(\n pool.apr?.tokenAprs.breakdown as unknown as string\n );\n pool.apr.tokenAprs.breakdown = tokenAprsBreakdown;\n }\n\n return pool;\n }\n}\n","import { Pool, PoolType, PoolToken, SubPool } from '@/.';\nimport {\n SubgraphPool,\n SubgraphPoolTokenFragment,\n SubgraphSubPoolFragment,\n SubgraphSubPoolTokenFragment,\n} from '@/modules/subgraph/subgraph';\n\ninterface SubgraphSubPoolToken extends SubgraphSubPoolTokenFragment {\n token?: SubgraphSubPoolMeta | null;\n}\n\ninterface SubgraphSubPoolMeta {\n latestUSDPrice?: string | null;\n pool?: SubgraphSubPool | null;\n}\n\ninterface SubgraphSubPool extends SubgraphSubPoolFragment {\n tokens: SubgraphSubPoolToken[];\n}\n\nexport const mapType = (subgraphPool: SubgraphPool, chainId: number): Pool => {\n return {\n id: subgraphPool.id,\n name: subgraphPool.name || '',\n address: subgraphPool.address,\n chainId: chainId,\n poolType: subgraphPool.poolType as PoolType,\n poolTypeVersion: subgraphPool.poolTypeVersion || 1,\n swapFee: subgraphPool.swapFee,\n swapEnabled: subgraphPool.swapEnabled,\n protocolYieldFeeCache: subgraphPool.protocolYieldFeeCache || '0.5', // Default protocol yield fee\n protocolSwapFeeCache: subgraphPool.protocolSwapFeeCache || '0.5', // Default protocol swap fee\n amp: subgraphPool.amp ?? undefined,\n owner: subgraphPool.owner ?? undefined,\n factory: subgraphPool.factory ?? undefined,\n symbol: subgraphPool.symbol ?? undefined,\n tokens: (subgraphPool.tokens || []).map(mapToken),\n tokensList: subgraphPool.tokensList,\n tokenAddresses: (subgraphPool.tokens || []).map((t) => t.address),\n totalLiquidity: subgraphPool.totalLiquidity,\n totalShares: subgraphPool.totalShares,\n totalSwapFee: subgraphPool.totalSwapFee,\n totalSwapVolume: subgraphPool.totalSwapVolume,\n priceRateProviders: subgraphPool.priceRateProviders ?? undefined,\n // onchain: subgraphPool.onchain,\n createTime: subgraphPool.createTime,\n mainIndex: subgraphPool.mainIndex ?? undefined,\n wrappedIndex: subgraphPool.wrappedIndex ?? undefined,\n // mainTokens: subgraphPool.mainTokens,\n // wrappedTokens: subgraphPool.wrappedTokens,\n // unwrappedTokens: subgraphPool.unwrappedTokens,\n // isNew: subgraphPool.isNew,\n // volumeSnapshot: subgraphPool.volumeSnapshot,\n // feesSnapshot: subgraphPool.???, // Approximated last 24h fees\n // boost: subgraphPool.boost,\n totalWeight: subgraphPool.totalWeight || '1',\n lowerTarget: subgraphPool.lowerTarget ?? '0',\n upperTarget: subgraphPool.upperTarget ?? '0',\n isInRecoveryMode: subgraphPool.isInRecoveryMode ?? false,\n isPaused: subgraphPool.isPaused ?? false,\n };\n};\n\nconst mapToken = (subgraphToken: SubgraphPoolTokenFragment): PoolToken => {\n const subPoolInfo = mapSubPools(\n // need to typecast as the fragment is 3 layers deep while the type is infinite levels deep\n subgraphToken.token as SubgraphSubPoolMeta\n );\n return {\n ...subgraphToken,\n isExemptFromYieldProtocolFee:\n subgraphToken.isExemptFromYieldProtocolFee || false,\n token: subPoolInfo,\n };\n};\n\nconst mapSubPools = (metadata: SubgraphSubPoolMeta) => {\n let subPool: SubPool | null = null;\n\n if (metadata.pool) {\n subPool = {\n id: metadata.pool.id,\n address: metadata.pool.address,\n totalShares: metadata.pool.totalShares,\n poolType: metadata.pool.poolType as PoolType,\n mainIndex: metadata.pool.mainIndex || 0,\n };\n\n if (metadata?.pool.tokens) {\n subPool.tokens = metadata.pool.tokens.map(mapSubPoolToken);\n }\n }\n\n return {\n pool: subPool,\n latestUSDPrice: metadata.latestUSDPrice || undefined,\n };\n};\n\nconst mapSubPoolToken = (token: SubgraphSubPoolToken) => {\n return {\n address: token.address,\n decimals: token.decimals,\n symbol: token.symbol,\n balance: token.balance,\n priceRate: token.priceRate,\n weight: token.weight,\n isExemptFromYieldProtocolFee:\n token.isExemptFromYieldProtocolFee || undefined,\n token: token.token ? mapSubPools(token.token) : undefined,\n };\n};\n","import { Findable, Searchable } from '../types';\nimport {\n createSubgraphClient,\n SubgraphClient,\n Pool_OrderBy,\n OrderDirection,\n} from '@/modules/subgraph/subgraph';\nimport {\n GraphQLArgsBuilder,\n SubgraphArgsFormatter,\n} from '@/lib/graphql/args-builder';\nimport { GraphQLArgs } from '@/lib/graphql/types';\nimport { PoolAttribute, PoolsRepositoryFetchOptions } from './types';\nimport { GraphQLQuery, Pool } from '@/types';\nimport { Network } from '@/lib/constants/network';\nimport { PoolsQueryVariables } from '../../subgraph/subgraph';\nimport { mapType } from './subgraph-helpers';\nimport { Logger } from '@/lib/utils/logger';\n\ninterface PoolsSubgraphRepositoryOptions {\n url: string;\n chainId: Network;\n blockHeight?: () => Promise;\n query?: GraphQLQuery;\n}\n\n/**\n * Access pools using generated subgraph client.\n *\n * Balancer's subgraph URL: https://thegraph.com/hosted-service/subgraph/balancer-labs/balancer-v2\n */\nexport class PoolsSubgraphRepository\n implements Findable, Searchable\n{\n private client: SubgraphClient;\n private chainId: Network;\n private pools?: Promise;\n public skip = 0;\n private blockHeight: undefined | (() => Promise);\n private query: GraphQLQuery;\n\n /**\n * Repository with optional lazy loaded blockHeight\n *\n * @param url subgraph URL\n * @param chainId current network, needed for L2s logic\n * @param blockHeight lazy loading blockHeigh resolver\n */\n constructor(options: PoolsSubgraphRepositoryOptions) {\n this.client = createSubgraphClient(options.url);\n this.blockHeight = options.blockHeight;\n this.chainId = options.chainId;\n\n const defaultArgs: GraphQLArgs = {\n orderBy: Pool_OrderBy.TotalLiquidity,\n orderDirection: OrderDirection.Desc,\n where: {\n totalShares: {\n gt: 0.000000000001,\n },\n },\n };\n\n const args = Object.assign({}, options.query?.args || defaultArgs);\n const attrs = Object.assign({}, options.query?.attrs || {});\n\n this.query = {\n args,\n attrs,\n };\n }\n\n /**\n * We need a list of all the pools, for calculating APRs (nested pools), and for SOR (path finding).\n * All the pools are fetched on page load and cachced for speedy lookups.\n *\n * @returns Promise resolving to pools list\n */\n private async fetchAllPools(): Promise {\n const logger = Logger.getInstance();\n logger.time('fetching pools');\n\n if (this.blockHeight) {\n this.query.args.block = { number: await this.blockHeight() };\n }\n const formattedQuery = new GraphQLArgsBuilder(this.query.args).format(\n new SubgraphArgsFormatter()\n ) as PoolsQueryVariables;\n\n const { pool0, pool1000, pool2000 } = await this.client.AllPools(\n formattedQuery\n );\n logger.timeEnd('fetching pools');\n\n return [...pool0, ...pool1000, ...pool2000].map((pool) =>\n mapType(pool, this.chainId)\n );\n }\n\n async fetch(options?: PoolsRepositoryFetchOptions): Promise {\n const logger = Logger.getInstance();\n logger.time('fetching pools');\n if (options?.skip) {\n this.query.args.skip = options.skip;\n }\n if (this.blockHeight) {\n this.query.args.block = { number: await this.blockHeight() };\n }\n\n this.query.args.first = options?.first || this.query.args.first || 1000;\n\n const formattedQuery = new GraphQLArgsBuilder(this.query.args).format(\n new SubgraphArgsFormatter()\n ) as PoolsQueryVariables;\n\n const { pools } = await this.client.Pools(formattedQuery);\n\n this.skip = (options?.skip || 0) + pools.length;\n logger.timeEnd('fetching pools');\n\n return pools.map((pool) => mapType(pool, this.chainId));\n }\n\n async find(id: string): Promise {\n return await this.findBy('id', id);\n }\n\n async findBy(param: PoolAttribute, value: string): Promise {\n if (!this.pools) {\n this.pools = this.fetchAllPools();\n }\n\n return (await this.pools).find((pool) => pool[param] == value);\n\n // TODO: @Nma - Fetching pools outside of default query is causing a lot of requests\n // on a frontend, because results aren't cached anywhere.\n // For fetching pools directly from subgraph with custom queries please use the client not this repository.\n // Code below kept for reference, to be removed later.\n //\n // if (this.pools) {\n // return (await this.pools).find((p) => p[param] === value);\n // }\n // const { pools } = await this.client.Pools({\n // where: {\n // [param]: value,\n // swapEnabled: true,\n // totalShares_gt: '0.000000000001',\n // },\n // block: await this.block(),\n // });\n // const poolsTab: Pool[] = pools.map(this.mapType.bind(this));\n // return poolsTab.length > 0 ? poolsTab[0] : undefined;\n }\n\n async all(): Promise {\n if (!this.pools) {\n this.pools = this.fetchAllPools();\n }\n return this.pools;\n }\n\n async block(): Promise<{ number: number | undefined } | undefined> {\n return this.blockHeight ? { number: await this.blockHeight() } : undefined;\n }\n\n async where(filter: (pool: Pool) => boolean): Promise {\n if (!this.pools) {\n this.pools = this.fetchAllPools();\n }\n\n return (await this.pools).filter(filter);\n }\n}\n","import { Cacheable, Findable, Searchable } from '../types';\nimport { Provider } from '@ethersproject/providers';\nimport { PoolAttribute, PoolsRepositoryFetchOptions } from './types';\nimport { Pool } from '@/types';\nimport { getOnChainBalances } from '../../../modules/sor/pool-data/onChainData3';\nimport { PoolsSubgraphRepository } from './subgraph';\nimport { Logger } from '@/lib/utils/logger';\n\ninterface PoolsSubgraphOnChainRepositoryOptions {\n provider: Provider;\n multicall: string;\n vault: string;\n}\n\n/**\n * Access pools using generated subgraph client and multicall.\n */\nexport class PoolsSubgraphOnChainRepository\n implements Findable, Searchable, Cacheable\n{\n private provider: Provider;\n private pools?: Promise;\n private multicall: string;\n private vault: string;\n public skip = 0;\n\n /**\n * Repository using multicall to get onchain data.\n *\n * @param poolsSubgraph subgraph repository\n * @param options options containing provider, multicall and vault addresses\n */\n constructor(\n private poolsSubgraph: PoolsSubgraphRepository,\n options: PoolsSubgraphOnChainRepositoryOptions,\n private readonly poolsToIgnore: string[] | undefined,\n private batchSize?: number\n ) {\n this.provider = options.provider;\n this.multicall = options.multicall;\n this.vault = options.vault;\n }\n\n private filterPools(pools: Pool[]): Pool[] {\n const filteredPools = pools.filter((p) => {\n if (p.swapEnabled === false) return false;\n if (!this.poolsToIgnore) return true;\n const index = this.poolsToIgnore.findIndex(\n (id) => id.toLowerCase() === p.id.toLowerCase()\n );\n return index === -1;\n });\n return filteredPools;\n }\n\n /**\n * We need a list of all the pools, for calculating APRs (nested pools), and for SOR (path finding).\n * All the pools are fetched on page load and cachced for speedy lookups.\n *\n * @returns Promise resolving to pools list\n */\n private async fetchDefault(): Promise {\n const pools = await this.poolsSubgraph.all();\n const filteredPools = this.filterPools(pools);\n\n const logger = Logger.getInstance();\n logger.time(`fetching onchain ${filteredPools.length} pools`);\n\n const onchainPools = await getOnChainBalances(\n filteredPools,\n this.multicall,\n this.vault,\n this.provider,\n this.batchSize\n );\n\n logger.timeEnd(`fetching onchain ${filteredPools.length} pools`);\n\n return onchainPools;\n }\n\n async fetch(options?: PoolsRepositoryFetchOptions): Promise {\n const pools = await this.poolsSubgraph.fetch(options);\n const filteredPools = this.filterPools(pools);\n\n const logger = Logger.getInstance();\n logger.time(`fetching onchain ${filteredPools.length} pools`);\n\n const onchainPools = await getOnChainBalances(\n filteredPools,\n this.multicall,\n this.vault,\n this.provider,\n this.batchSize\n );\n\n logger.timeEnd(`fetching onchain ${filteredPools.length} pools`);\n\n return onchainPools;\n }\n\n async find(id: string, forceRefresh = false): Promise {\n return await this.findBy('id', id, forceRefresh);\n }\n\n async findBy(\n param: PoolAttribute,\n value: string,\n forceRefresh = false\n ): Promise {\n if (!this.pools || forceRefresh) {\n this.pools = this.fetchDefault();\n }\n\n return (await this.pools).find((pool) => pool[param] == value);\n }\n\n async all(): Promise {\n if (!this.pools) {\n this.pools = this.fetchDefault();\n }\n return this.pools;\n }\n\n async where(filter: (pool: Pool) => boolean): Promise {\n if (!this.pools) {\n this.pools = this.fetchDefault();\n }\n\n return (await this.pools).filter(filter);\n }\n\n async refresh(pool: Pool): Promise {\n const onchainPool = await getOnChainBalances(\n [pool],\n this.multicall,\n this.vault,\n this.provider\n );\n\n // If the pool is already cached, replace it with the new one\n if (this.pools) {\n const index = (await this.pools).findIndex(\n (p) => p.address === pool.address\n );\n if (index !== -1) {\n this.pools = Promise.resolve([\n ...(await this.pools).splice(index, 1),\n onchainPool[0],\n ]);\n }\n }\n\n return onchainPool[0];\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { GaugesSubgraphRepository } from '@/modules/subgraph/repository';\nimport { PoolGauges, PoolGaugesAttributes } from './types';\n\nexport class PoolGaugesRepository extends GaugesSubgraphRepository<\n PoolGauges,\n PoolGaugesAttributes\n> {\n async query(args: any): Promise {\n if (!args.block && this.blockHeight)\n args.block = { number: await this.blockHeight() };\n\n const { pools } = await this.client.PoolGauges(args);\n return pools.map(this.mapType);\n }\n\n mapType(fragment: any): PoolGauges {\n return fragment as PoolGauges;\n }\n}\n","export enum PoolJoinExitAttributes {\n Pool = 'pool',\n Sender = 'sender',\n}\n\nexport interface PoolJoinExit {\n id: string;\n userAddress: string;\n poolId: string;\n timestamp: number;\n type: string;\n amounts: string[];\n tokens: string[];\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { PoolJoinExit, PoolJoinExitAttributes } from './types';\nimport { BalancerSubgraphRepository } from '@/modules/subgraph/repository';\nimport {\n JoinExit_OrderBy,\n OrderDirection,\n SubgraphJoinExitFragment,\n} from '@/modules/subgraph/generated/balancer-subgraph-types';\n\nexport class PoolJoinExitRepository extends BalancerSubgraphRepository<\n PoolJoinExit,\n PoolJoinExitAttributes\n> {\n async query(args: any): Promise {\n if (!args.orderBy) args.orderBy = JoinExit_OrderBy.Timestamp;\n if (!args.orderDirection) args.orderDirection = OrderDirection.Asc;\n if (!args.block && this.blockHeight)\n args.block = { number: await this.blockHeight() };\n\n const { joinExits } = await this.client.JoinExits(args);\n return joinExits.map(this.mapType);\n }\n\n mapType(item: SubgraphJoinExitFragment): PoolJoinExit {\n return {\n id: item.id,\n userAddress: item.user.id,\n poolId: item.pool.id,\n timestamp: item.timestamp,\n type: item.type,\n amounts: item.amounts,\n tokens: item.pool.tokensList,\n };\n }\n\n async findByUser(\n sender: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(PoolJoinExitAttributes.Sender, sender, first, skip);\n }\n\n async findJoins(sender: string, pool: string): Promise {\n return this.query({ where: { sender, pool, type: 'Join' } });\n }\n\n async findExits(sender: string, pool: string): Promise {\n return this.query({ where: { sender, pool, type: 'Exit' } });\n }\n\n async findByPool(\n poolId: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(PoolJoinExitAttributes.Pool, poolId, first, skip);\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any */\nimport { PoolShare, PoolShareAttributes } from './types';\nimport { BalancerSubgraphRepository } from '@/modules/subgraph/repository';\nimport {\n SubgraphPoolShareFragment,\n PoolShare_OrderBy,\n OrderDirection,\n} from '@/modules/subgraph/generated/balancer-subgraph-types';\n\nexport class PoolSharesRepository extends BalancerSubgraphRepository<\n PoolShare,\n PoolShareAttributes\n> {\n async query(args: any): Promise {\n if (!args.orderBy) args.orderBy = PoolShare_OrderBy.Balance;\n if (!args.orderDirection) args.orderDirection = OrderDirection.Desc;\n if (!args.block && this.blockHeight)\n args.block = { number: await this.blockHeight() };\n\n const { poolShares } = await this.client.PoolShares(args);\n return poolShares.map(this.mapType);\n }\n\n mapType(subgraphPoolShare: SubgraphPoolShareFragment): PoolShare {\n return {\n id: subgraphPoolShare.id,\n userAddress: subgraphPoolShare.userAddress.id,\n poolId: subgraphPoolShare.poolId.id,\n balance: subgraphPoolShare.balance,\n };\n }\n\n async findByUser(\n userAddress: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(\n PoolShareAttributes.UserAddress,\n userAddress,\n first,\n skip\n );\n }\n\n async findByPool(\n poolId: string,\n first?: number,\n skip?: number\n ): Promise {\n return this.findAllBy(PoolShareAttributes.PoolId, poolId, first, skip);\n }\n}\n","import type { Findable, Token } from '@/types';\nimport type { TokenAttribute } from './types';\n\nexport class StaticTokenProvider implements Findable {\n constructor(private tokens: Token[]) {}\n\n async find(address: string): Promise {\n return this.tokens.find((token) => {\n return token.address.toLowerCase() === address.toLowerCase();\n });\n }\n\n async findBy(\n attribute: TokenAttribute,\n value: string\n ): Promise {\n return this.tokens.find((token) => {\n return token[attribute] === value;\n });\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport {\n CoingeckoConfig,\n Findable,\n Network,\n Price,\n TokenPrices,\n} from '@/types';\nimport axios, { AxiosError } from 'axios';\nimport { TOKENS } from '@/lib/constants/tokens';\nimport { Debouncer, tokenAddressForPricing } from '@/lib/utils';\nimport {\n getCoingeckoApiBaseUrl,\n getCoingeckoApiKeyHeaderName,\n} from '@/lib/utils/coingecko-api';\n\n/**\n * Simple coingecko price source implementation. Configurable by network and token addresses.\n */\nexport class CoingeckoPriceRepository implements Findable {\n prices: { [key: string]: Promise } = {};\n nativePrice?: Promise;\n private readonly url: string;\n private readonly urlNative: string;\n private readonly coingeckoApiKeyHeaderName: string;\n baseTokenAddresses: string[];\n debouncer: Debouncer;\n apiKey?: string;\n\n constructor(\n tokenAddresses: string[],\n private chainId: Network = 1,\n coingecko?: CoingeckoConfig\n ) {\n this.baseTokenAddresses = tokenAddresses.map(tokenAddressForPricing);\n this.url = `${getCoingeckoApiBaseUrl(\n coingecko?.isDemoApiKey\n )}simple/token_price/${this.platform(chainId)}?vs_currencies=usd,eth`;\n this.urlNative = `${getCoingeckoApiBaseUrl(\n coingecko?.isDemoApiKey\n )}simple/price/?vs_currencies=eth,usd&ids=`;\n this.coingeckoApiKeyHeaderName = getCoingeckoApiKeyHeaderName(\n coingecko?.isDemoApiKey\n );\n this.apiKey = coingecko?.coingeckoApiKey;\n this.debouncer = new Debouncer(\n this.fetch.bind(this),\n 200,\n coingecko?.tokensPerPriceRequest ?? 10\n );\n }\n\n private async fetch(\n addresses: string[],\n { signal }: { signal?: AbortSignal } = {}\n ): Promise {\n try {\n const { data } = await axios.get(\n `${this.url}&contract_addresses=${addresses.join(',')}`,\n {\n signal,\n headers: {\n [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '',\n },\n }\n );\n return data;\n } catch (error) {\n const message = ['Error fetching token prices from coingecko'];\n if ((error as AxiosError).isAxiosError) {\n if ((error as AxiosError).response?.status !== undefined) {\n message.push(`with status ${(error as AxiosError).response?.status}`);\n }\n } else {\n message.push(error as string);\n }\n return Promise.reject(message.join(' '));\n }\n }\n\n private fetchNative({\n signal,\n }: { signal?: AbortSignal } = {}): Promise {\n console.time(`fetching coingecko for native token`);\n enum Assets {\n ETH = 'ethereum',\n MATIC = 'matic-network',\n XDAI = 'xdai',\n }\n let assetId: Assets = Assets.ETH;\n if (this.chainId === 137) assetId = Assets.MATIC;\n if (this.chainId === 100) assetId = Assets.XDAI;\n return axios\n .get<{ [key in Assets]: Price }>(`${this.urlNative}${assetId}`, {\n signal,\n headers: {\n [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '',\n },\n })\n .then(({ data }) => {\n return data[assetId];\n })\n .catch((error) => {\n const message = ['Error fetching native token from coingecko'];\n if (error.isAxiosError) {\n if (error.response?.status) {\n message.push(`with status ${error.response.status}`);\n }\n } else {\n message.push(error);\n }\n return Promise.reject(message.join(' '));\n })\n .finally(() => {\n console.timeEnd(`fetching coingecko for native token`);\n });\n }\n\n find(inputAddress: string): Promise {\n const address = tokenAddressForPricing(inputAddress, this.chainId);\n if (!this.prices[address]) {\n // Make initial call with all the tokens we want to preload\n if (Object.keys(this.prices).length === 0) {\n for (const baseAddress of this.baseTokenAddresses) {\n this.prices[baseAddress] = this.debouncer\n .fetch(baseAddress)\n .then((prices) => prices[baseAddress]);\n }\n }\n\n // Handle native asset special case\n if (\n address === TOKENS(this.chainId).Addresses.nativeAsset.toLowerCase()\n ) {\n if (!this.nativePrice) {\n this.prices[address] = this.fetchNative();\n }\n\n return this.prices[address];\n }\n\n this.prices[address] = this.debouncer\n .fetch(address)\n .then((prices) => prices[address]);\n }\n\n return this.prices[address];\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute != 'address') {\n return undefined;\n }\n\n return this.find(value);\n }\n\n private platform(chainId: number): string {\n switch (chainId) {\n case 1:\n case 5:\n case 42:\n case 31337:\n return 'ethereum';\n case 100:\n return 'xdai';\n case 137:\n return 'polygon-pos';\n case 250:\n return 'fantom';\n case 1101:\n return 'polygon-zkevm';\n case 8453:\n return 'base';\n case 42161:\n return 'arbitrum-one';\n case 43114:\n return 'avalanche';\n }\n\n return '2';\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport {\n Price,\n Findable,\n TokenPrices,\n Network,\n HistoricalPrices,\n CoingeckoConfig,\n} from '@/types';\nimport axios, { AxiosError } from 'axios';\nimport { tokenAddressForPricing } from '@/lib/utils';\nimport {\n getCoingeckoApiBaseUrl,\n getCoingeckoApiKeyHeaderName,\n} from '@/lib/utils/coingecko-api';\n\nconst HOUR = 60 * 60;\n\n/**\n * Simple coingecko price source implementation. Configurable by network and token addresses.\n */\nexport class CoingeckoHistoricalPriceRepository implements Findable {\n prices: TokenPrices = {};\n nativePrice?: Promise;\n private readonly urlBase: string;\n private readonly apiKey?: string;\n private readonly coingeckoApiKeyHeaderName: string;\n constructor(private chainId: Network = 1, coingecko?: CoingeckoConfig) {\n this.urlBase = `${getCoingeckoApiBaseUrl(\n coingecko?.isDemoApiKey\n )}coins/${this.platform(\n chainId\n )}/contract/%TOKEN_ADDRESS%/market_chart/range?vs_currency=usd`;\n this.apiKey = coingecko?.coingeckoApiKey;\n this.coingeckoApiKeyHeaderName = getCoingeckoApiKeyHeaderName(\n coingecko?.isDemoApiKey\n );\n }\n\n private async fetch(\n address: string,\n timestamp: number,\n { signal }: { signal?: AbortSignal } = {}\n ): Promise {\n const url = this.urlRange(address, timestamp);\n console.time(`fetching coingecko historical for ${address}`);\n try {\n const { data } = await axios.get(url, {\n signal,\n headers: { [this.coingeckoApiKeyHeaderName]: this.apiKey ?? '' },\n });\n console.timeEnd(`fetching coingecko historical for ${address}`);\n console.log(data);\n return data;\n } catch (error) {\n console.timeEnd(`fetching coingecko historical for ${address}`);\n if ((error as AxiosError).isAxiosError) {\n throw new Error(\n 'Error fetching historical token prices from coingecko - ' +\n (error as AxiosError).message +\n ' - ' +\n (error as AxiosError).response?.statusText\n );\n }\n throw new Error('Unknown Error: ' + error);\n }\n }\n\n /* eslint-disable @typescript-eslint/no-unused-vars */\n async find(address: string): Promise {\n throw `Historic price requires point-in-time timestamp, please use findBy(address, timestamp)`;\n }\n\n async findBy(\n inputAddress: string,\n timestamp: number\n ): Promise {\n const address = tokenAddressForPricing(inputAddress, this.chainId);\n const response = await this.fetch(address, timestamp);\n\n return {\n usd: `${response.prices[0][1]}`,\n };\n }\n\n private platform(chainId: number): string {\n switch (chainId) {\n case 1:\n case 5:\n case 42:\n case 31337:\n return 'ethereum';\n case 137:\n return 'polygon-pos';\n case 42161:\n return 'arbitrum-one';\n case 100:\n return 'xdai';\n }\n\n return '2';\n }\n\n private urlRange(address: string, timestamp: number): string {\n const range: { from: number; to: number } = {\n from: timestamp - HOUR,\n to: timestamp + HOUR,\n };\n return `${this.urlBase.replace('%TOKEN_ADDRESS%', address)}&from=${\n range.from\n }&to=${range.to}`;\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { Price, Findable, TokenPrices, Network } from '@/types';\nimport axios from 'axios';\nimport { Debouncer, tokenAddressForPricing } from '@/lib/utils';\n\ninterface SubgraphPricesResponse {\n data: {\n tokens: [\n {\n address: string;\n latestUSDPrice?: string;\n }\n ];\n };\n}\n\nexport class SubgraphPriceRepository implements Findable {\n prices: { [key: string]: Promise } = {};\n debouncer: Debouncer;\n\n constructor(private subgraphUrl: string, private chainId: Network = 1) {\n this.debouncer = new Debouncer(\n this.fetch.bind(this),\n 200\n );\n }\n\n private async fetch(\n addresses: string[],\n { signal }: { signal?: AbortSignal } = {}\n ): Promise {\n console.time(`fetching subgraph prices for ${addresses.length} tokens`);\n return axios\n .post(\n this.subgraphUrl,\n {\n variables: { addresses },\n query: `query($addresses: [String!]) {\n tokens(\n where: {\n id_in: $addresses\n }\n ) {\n address\n latestUSDPrice\n }\n }`,\n },\n { signal }\n )\n .then((response) => response.data.data)\n .then(({ tokens }) =>\n Object.fromEntries(\n tokens.map((token) => [\n token.address,\n { usd: token.latestUSDPrice || undefined },\n ])\n )\n )\n .finally(() => {\n console.timeEnd(\n `fetching subgraph prices for ${addresses.length} tokens`\n );\n });\n }\n\n async find(inputAddress: string): Promise {\n const address = tokenAddressForPricing(inputAddress, this.chainId);\n if (!this.prices[address]) {\n this.prices[address] = this.debouncer\n .fetch(address)\n .then((prices) => prices[address]);\n }\n\n return this.prices[address];\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute != 'address') {\n return undefined;\n }\n\n return this.find(value);\n }\n}\n","import type { Findable, Price } from '@/types';\nimport { IAaveRates } from './aave-rates';\nimport { Logger } from '@/lib/utils/logger';\n\nexport class TokenPriceProvider implements Findable {\n constructor(\n private coingeckoRepository: Findable,\n private subgraphRepository: Findable,\n private aaveRates: IAaveRates\n ) {}\n\n async find(address: string): Promise {\n let price;\n try {\n price = await this.coingeckoRepository.find(address);\n if (!price?.usd) {\n throw new Error('Price not found');\n }\n } catch (err) {\n const logger = Logger.getInstance();\n logger.warn(err as string);\n price = await this.subgraphRepository.find(address);\n }\n const rate = (await this.aaveRates.getRate(address)) || 1;\n if (price && price.usd) {\n return {\n ...price,\n usd: (parseFloat(price.usd) * rate).toString(),\n };\n } else {\n return price;\n }\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute === 'address') {\n return this.find(value);\n }\n throw `Token price search by ${attribute} not implemented`;\n }\n}\n","import type { Findable, Price } from '@/types';\nimport { IAaveRates } from './aave-rates';\n\nexport class HistoricalPriceProvider implements Findable {\n constructor(\n private coingeckoRepository: Findable,\n private aaveRates: IAaveRates\n ) {}\n\n /**\n * get the historical price at time of call\n *\n * @param address the token address\n */\n async find(address: string): Promise {\n return this.findBy(address, Math.floor(Date.now() / 1000));\n }\n\n /**\n * get the historical price at the given timestamp.\n *\n * @param address the token address\n * @param timestamp the UNIX timestamp\n * @private\n */\n async findBy(address: string, timestamp: number): Promise {\n const price = await this.coingeckoRepository.findBy(address, timestamp);\n const rate = (await this.aaveRates.getRate(address)) || 1;\n if (price && price.usd) {\n return {\n ...price,\n usd: (parseFloat(price.usd) * rate).toString(),\n };\n } else {\n return price;\n }\n }\n}\n","import { Contract } from '@ethersproject/contracts';\nimport { Provider } from '@ethersproject/providers';\n\nconst FeeDistributorAbi = [\n 'function claimTokens(address user, address[] tokens) returns (uint256[])',\n 'function claimToken(address user, address token) returns (uint256)',\n];\n\nexport const FeeDistributor = (address: string, provider: Provider): Contract =>\n new Contract(address, FeeDistributorAbi, provider);\n","import { TokenBalance } from '@/modules/claims/ClaimService';\nimport { FeeDistributor } from '@/modules/contracts/implementations/feeDistributor';\nimport { Multicall } from '@/contracts';\nimport { Interface } from '@ethersproject/abi';\nimport { getAddress } from '@ethersproject/address';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { Contract } from '@ethersproject/contracts';\nimport { Provider } from '@ethersproject/providers';\nimport { formatUnits } from '@ethersproject/units';\n\nexport interface FeeDistributorData {\n balAmount: number;\n bbAUsdAmount: number;\n veBalSupply: number;\n bbAUsdPrice: number;\n balAddress: string;\n}\n\nexport interface BaseFeeDistributor {\n multicallData: (ts: number) => Promise;\n getClaimableBalances(\n userAddress: string,\n claimableTokens: string[]\n ): Promise;\n claimBalances(userAddress: string, claimableTokens: string[]): string;\n}\n\nconst feeDistributorInterface = new Interface([\n 'function getTokensDistributedInWeek(address token, uint timestamp) view returns (uint)',\n 'function claimTokens(address user, address[] tokens) returns (uint256[])',\n 'function claimToken(address user, address token) returns (uint256)',\n]);\n\nconst veBalInterface = new Interface([\n 'function totalSupply() view returns (uint)',\n]);\n\n// const bbAUsdInterface = new Interface([\n// 'function getRate() view returns (uint)',\n// ]);\n\nexport class FeeDistributorRepository implements BaseFeeDistributor {\n feeDistributor: Contract;\n data?: FeeDistributorData;\n\n constructor(\n private multicall: Multicall,\n private feeDistributorAddress: string,\n private balAddress: string,\n private veBalAddress: string,\n private bbAUsdAddress: string,\n provider: Provider\n ) {\n this.feeDistributor = FeeDistributor(feeDistributorAddress, provider);\n }\n\n async fetch(timestamp: number): Promise {\n const previousWeek = this.getPreviousWeek(timestamp);\n const payload = [\n {\n target: this.feeDistributorAddress,\n callData: feeDistributorInterface.encodeFunctionData(\n 'getTokensDistributedInWeek',\n [getAddress(this.balAddress), previousWeek]\n ),\n },\n {\n target: this.feeDistributorAddress,\n callData: feeDistributorInterface.encodeFunctionData(\n 'getTokensDistributedInWeek',\n [getAddress(this.bbAUsdAddress), previousWeek]\n ),\n },\n {\n target: this.veBalAddress,\n callData: veBalInterface.encodeFunctionData('totalSupply', []),\n },\n // Removed while wrappers are broken\n // {\n // target: this.bbAUsdAddress,\n // callData: bbAUsdInterface.encodeFunctionData('getRate', []),\n // },\n ];\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const data = {\n balAmount: parseFloat(formatUnits(res[0], 18)),\n bbAUsdAmount: parseFloat(formatUnits(res[1], 18)),\n veBalSupply: parseFloat(formatUnits(res[2], 18)),\n // bbAUsdPrice: parseFloat(formatUnits(res[3], 18)),\n bbAUsdPrice: parseFloat('1.0'),\n balAddress: this.balAddress,\n };\n\n return data;\n }\n\n async multicallData(timestamp: number): Promise {\n if (!this.data) {\n this.data = await this.fetch(timestamp);\n }\n\n return this.data;\n }\n\n getPreviousWeek(fromTimestamp: number): number {\n const weeksToGoBack = 1;\n const midnight = new Date(fromTimestamp);\n midnight.setUTCHours(0);\n midnight.setUTCMinutes(0);\n midnight.setUTCSeconds(0);\n midnight.setUTCMilliseconds(0);\n\n let daysSinceThursday = midnight.getUTCDay() - 4;\n if (daysSinceThursday < 0) daysSinceThursday += 7;\n\n daysSinceThursday = daysSinceThursday + weeksToGoBack * 7;\n\n return Math.floor(midnight.getTime() / 1000) - daysSinceThursday * 86400;\n }\n\n async getClaimableBalances(\n userAddress: string,\n claimableTokens: string[]\n ): Promise {\n try {\n const amounts: BigNumber[] =\n await this.feeDistributor.callStatic.claimTokens(\n userAddress,\n claimableTokens\n );\n return this.extractTokenBalance(claimableTokens, amounts);\n } catch (e) {\n return {};\n }\n }\n\n claimBalances(userAddress: string, claimableTokens: string[]): string {\n return feeDistributorInterface.encodeFunctionData('claimTokens', [\n userAddress,\n claimableTokens,\n ]);\n }\n\n extractTokenBalance(\n claimableTokens: string[],\n amounts: (BigNumber | undefined | null)[]\n ): TokenBalance {\n return claimableTokens.reduce((tokens: TokenBalance, token, index) => {\n tokens[token] = (amounts[index] as BigNumber) ?? BigNumber.from(0);\n return tokens;\n }, {});\n }\n}\n","import { Interface } from '@ethersproject/abi';\nimport { Provider } from '@ethersproject/providers';\nimport { Contract } from '@ethersproject/contracts';\nimport { formatUnits } from '@ethersproject/units';\nimport { Findable } from '../types';\n\nconst vaultInterface = new Interface([\n 'function getProtocolFeesCollector() view returns (address)',\n]);\n\nconst protocolFeesCollectorInterface = new Interface([\n 'function getSwapFeePercentage() view returns (uint)',\n]);\n\n// Using singleton here, so subsequent calls will return the same promise\nlet swapFeePercentagePromise: Promise;\n\nexport class FeeCollectorRepository implements Findable {\n vault: Contract;\n swapFeePercentage?: number;\n\n constructor(vaultAddress: string, private provider: Provider) {\n this.vault = new Contract(vaultAddress, vaultInterface, this.provider);\n }\n\n async fetch(): Promise {\n const address = (await this.vault.getProtocolFeesCollector()) as string;\n\n const collector = new Contract(\n address,\n protocolFeesCollectorInterface,\n this.provider\n );\n const fees = (await collector.getSwapFeePercentage()) as string;\n\n return parseFloat(formatUnits(fees, 18));\n }\n\n async find(): Promise {\n if (!swapFeePercentagePromise) {\n swapFeePercentagePromise = this.fetch();\n }\n this.swapFeePercentage = await swapFeePercentagePromise;\n\n return this.swapFeePercentage;\n }\n\n async findBy(): Promise {\n return this.find();\n }\n}\n","// 0x97207B095e4D5C9a6e4cfbfcd2C3358E03B90c4A\n\nimport { Interface } from '@ethersproject/abi';\nimport { formatUnits } from '@ethersproject/units';\nimport { Multicall } from '@/contracts';\n\nconst iProtocolFeePercentagesProvider = new Interface([\n 'function getSwapFeePercentage() view returns (uint)',\n]);\n\nexport interface ProtocolFees {\n swapFee: number;\n yieldFee: number;\n}\n\n// Using singleton here, so subsequent calls will return the same promise\nlet feesPromise: Promise;\n\nexport class ProtocolFeesProvider {\n protocolFees?: ProtocolFees;\n\n constructor(\n private multicall: Multicall,\n private protocolFeePercentagesProviderAddress: string\n ) {}\n\n private async fetch(): Promise {\n const payload = [\n {\n target: this.protocolFeePercentagesProviderAddress,\n callData: iProtocolFeePercentagesProvider.encodeFunctionData(\n 'getFeeTypePercentage',\n [0]\n ),\n },\n {\n target: this.protocolFeePercentagesProviderAddress,\n callData: iProtocolFeePercentagesProvider.encodeFunctionData(\n 'getFeeTypePercentage',\n [2]\n ),\n },\n ];\n const [, res] = await this.multicall.callStatic.aggregate(payload);\n\n const fees = {\n swapFee: parseFloat(formatUnits(res[0], 18)),\n yieldFee: parseFloat(formatUnits(res[2], 18)),\n };\n\n return fees;\n }\n\n async getFees(): Promise {\n if (!feesPromise) {\n feesPromise = this.fetch();\n }\n this.protocolFees = await feesPromise;\n\n return this.protocolFees;\n }\n}\n","import axios from 'axios';\nimport { Findable } from '@/types';\nimport { Logger } from '@/lib/utils/logger';\n\nexport class TokenYieldsRepository implements Findable {\n private yields?: Promise<{ [address: string]: number }>;\n\n constructor(private url = 'https://yield-tokens.balancer.workers.dev/') {}\n\n async fetch(): Promise<{ [address: string]: number }> {\n let aprs = {};\n\n try {\n console.time(`fetching token yields`);\n const response = await axios.get(this.url);\n console.timeEnd(`fetching token yields`);\n\n aprs = response.data as {\n [key: string]: number;\n };\n } catch (error) {\n const logger = Logger.getInstance();\n logger.warn(`Failed to fetch yield tokens: ${error}`);\n }\n\n return aprs;\n }\n\n async find(address: string): Promise {\n const lc = address.toLocaleLowerCase();\n if (!this.yields) {\n this.yields = this.fetch();\n }\n\n return this.yields.then((r) => (r[lc] && r[lc] > 0 ? r[lc] : 0));\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute != 'address') {\n return 0;\n }\n\n return this.find(value);\n }\n}\n","import { Findable } from '../types';\nimport axios from 'axios';\n\nconst query = (timestamp: string) => `{\n blocks(first: 1, orderBy: timestamp, orderDirection: asc, where: { timestamp_gt: ${timestamp} }) {\n number\n }\n}`;\n\ninterface BlockNumberResponse {\n data: {\n blocks: [\n {\n number: string;\n }\n ];\n };\n}\n\nconst fetchBlockByTime = async (\n endpoint: string,\n timestamp: string\n): Promise => {\n const payload = {\n query: query(timestamp),\n };\n\n const response = await axios.post(endpoint, payload);\n\n const {\n data: { blocks },\n } = response.data as BlockNumberResponse;\n\n return parseInt(blocks[0].number);\n};\n\nexport class BlockNumberRepository implements Findable {\n blocks: { [ts: string]: Promise } = {};\n\n constructor(private endpoint: string) {}\n\n async find(from: string): Promise {\n if (from == 'dayAgo') {\n const dayAgo = `${Math.floor(Date.now() / 1000) - 86400}`;\n if (!this.blocks[dayAgo]) {\n this.blocks = {\n ...this.blocks,\n [dayAgo]: fetchBlockByTime(this.endpoint, dayAgo),\n };\n }\n return this.blocks[dayAgo];\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async findBy(attribute = '', value = ''): Promise {\n return;\n }\n}\n","import { GyroConfigRepositoryImpl } from '@/modules/data/gyro-config/repository';\n\nexport * as balEmissions from './bal/emissions';\nexport * from './gauge-controller/multicall';\nexport * from './gauge-shares';\nexport * from './liquidity-gauges';\nexport * from './pool';\nexport * from './pool-gauges';\nexport * from './pool-joinExit';\nexport * from './pool-shares';\nexport * from './token';\nexport * from './token-prices';\nexport * from './fee-distributor/repository';\nexport * from './fee-collector/repository';\nexport * from './protocol-fees/provider';\nexport * from './token-yields/repository';\nexport * from './block-number';\n\nimport {\n BalancerNetworkConfig,\n BalancerDataRepositories,\n GraphQLQuery,\n CoingeckoConfig,\n} from '@/types';\nimport { PoolsSubgraphRepository } from './pool/subgraph';\nimport { SubgraphPoolDataService } from '../sor/pool-data/subgraphPoolDataService';\nimport { PoolsSubgraphOnChainRepository } from './pool/subgraphOnChain';\nimport { PoolSharesRepository } from './pool-shares/repository';\nimport { PoolJoinExitRepository } from './pool-joinExit/repository';\nimport { PoolGaugesRepository } from './pool-gauges/repository';\nimport { GaugeSharesRepository } from './gauge-shares/repository';\nimport { BlockNumberRepository } from './block-number';\nimport {\n CoingeckoPriceRepository,\n AaveRates,\n TokenPriceProvider,\n HistoricalPriceProvider,\n CoingeckoHistoricalPriceRepository,\n} from './token-prices';\nimport { StaticTokenProvider } from './token/static';\nimport { LiquidityGaugeSubgraphRPCProvider } from './liquidity-gauges/provider';\nimport { FeeDistributorRepository } from './fee-distributor/repository';\nimport { FeeCollectorRepository } from './fee-collector/repository';\nimport { TokenYieldsRepository } from './token-yields/repository';\nimport { ProtocolFeesProvider } from './protocol-fees/provider';\nimport { Provider } from '@ethersproject/providers';\n\n// initialCoingeckoList are used to get the initial token list for coingecko\n// TODO: we might want to replace that with what frontend is using\nimport initialCoingeckoList from '@/modules/data/token-prices/initial-list.json';\nimport { SubgraphPriceRepository } from './token-prices/subgraph';\nimport { createSubgraphClient } from '../subgraph/subgraph';\nimport { Contracts } from '../contracts/contracts.module';\n\nexport class Data implements BalancerDataRepositories {\n pools;\n poolsForSimulations;\n poolsOnChain;\n yesterdaysPools;\n poolShares;\n poolGauges;\n gaugeShares;\n tokenPrices;\n tokenHistoricalPrices;\n tokenMeta;\n liquidityGauges;\n feeDistributor;\n feeCollector;\n protocolFees;\n tokenYields;\n blockNumbers;\n poolJoinExits;\n gyroConfigRepository;\n\n constructor(\n networkConfig: BalancerNetworkConfig,\n provider: Provider,\n contracts: Contracts,\n subgraphQuery?: GraphQLQuery,\n coingecko?: CoingeckoConfig\n ) {\n this.pools = new PoolsSubgraphRepository({\n url: networkConfig.urls.subgraph,\n chainId: networkConfig.chainId,\n query: subgraphQuery,\n });\n\n // Used for VaultModel and Simulations\n this.poolsForSimulations = new SubgraphPoolDataService(\n createSubgraphClient(networkConfig.urls.subgraph),\n provider,\n networkConfig,\n undefined,\n subgraphQuery\n );\n\n this.poolsOnChain = new PoolsSubgraphOnChainRepository(\n this.pools,\n {\n provider: provider,\n multicall: networkConfig.addresses.contracts.multicall,\n vault: networkConfig.addresses.contracts.vault,\n },\n networkConfig.poolsToIgnore,\n networkConfig.multicallBatchSize\n );\n\n this.poolShares = new PoolSharesRepository(\n networkConfig.urls.subgraph,\n networkConfig.chainId\n );\n\n this.poolJoinExits = new PoolJoinExitRepository(\n networkConfig.urls.subgraph,\n networkConfig.chainId\n );\n\n if (networkConfig.urls.gaugesSubgraph) {\n this.poolGauges = new PoolGaugesRepository(\n networkConfig.urls.gaugesSubgraph,\n networkConfig.chainId\n );\n\n this.gaugeShares = new GaugeSharesRepository(\n networkConfig.urls.gaugesSubgraph,\n networkConfig.chainId\n );\n }\n\n // 🚨 yesterdaysPools is used to calculate swapFees accumulated over last 24 hours\n // TODO: find a better data source for that, eg: maybe DUNE once API is available\n if (networkConfig.urls.blockNumberSubgraph) {\n this.blockNumbers = new BlockNumberRepository(\n networkConfig.urls.blockNumberSubgraph\n );\n\n const blockDayAgo = async () => {\n if (this.blockNumbers) {\n return await this.blockNumbers.find('dayAgo');\n }\n };\n\n this.yesterdaysPools = new PoolsSubgraphRepository({\n url: networkConfig.urls.subgraph,\n chainId: networkConfig.chainId,\n blockHeight: blockDayAgo,\n query: subgraphQuery,\n });\n } else if (networkConfig.averageBlockTime) {\n const blockDayAgo = async () => {\n const blockNumber = await provider.getBlockNumber();\n const blocksPerDay = Math.round(\n 86400 / (networkConfig.averageBlockTime || 2)\n );\n return blockNumber - blocksPerDay;\n };\n\n this.yesterdaysPools = new PoolsSubgraphRepository({\n url: networkConfig.urls.subgraph,\n chainId: networkConfig.chainId,\n blockHeight: blockDayAgo,\n query: subgraphQuery,\n });\n }\n\n const tokenAddresses = initialCoingeckoList\n .filter((t) => t.chainId == networkConfig.chainId)\n .map((t) => t.address);\n\n const coingeckoRepository = new CoingeckoPriceRepository(\n tokenAddresses,\n networkConfig.chainId,\n coingecko\n );\n\n const subgraphPriceRepository = new SubgraphPriceRepository(\n networkConfig.urls.subgraph,\n networkConfig.chainId\n );\n\n const aaveRates = new AaveRates(\n contracts.contracts.multicall,\n networkConfig.chainId\n );\n\n this.tokenPrices = new TokenPriceProvider(\n coingeckoRepository,\n subgraphPriceRepository,\n aaveRates\n );\n\n const coingeckoHistoricalRepository =\n new CoingeckoHistoricalPriceRepository(networkConfig.chainId, coingecko);\n\n this.tokenHistoricalPrices = new HistoricalPriceProvider(\n coingeckoHistoricalRepository,\n aaveRates\n );\n\n this.tokenMeta = new StaticTokenProvider([]);\n\n if (networkConfig.urls.gaugesSubgraph) {\n this.liquidityGauges = new LiquidityGaugeSubgraphRPCProvider(\n networkConfig.urls.gaugesSubgraph,\n contracts.contracts.multicall,\n networkConfig.addresses.contracts.gaugeController || '',\n networkConfig.chainId,\n networkConfig.addresses.contracts.gaugeControllerCheckpointer\n );\n }\n\n if (\n networkConfig.addresses.contracts.feeDistributor &&\n networkConfig.addresses.tokens.bal &&\n networkConfig.addresses.tokens.veBal &&\n networkConfig.addresses.tokens.bbaUsd\n ) {\n this.feeDistributor = new FeeDistributorRepository(\n contracts.contracts.multicall,\n networkConfig.addresses.contracts.feeDistributor,\n networkConfig.addresses.tokens.bal,\n networkConfig.addresses.tokens.veBal,\n networkConfig.addresses.tokens.bbaUsd,\n provider\n );\n }\n\n this.feeCollector = new FeeCollectorRepository(\n networkConfig.addresses.contracts.vault,\n provider\n );\n\n if (networkConfig.addresses.contracts.protocolFeePercentagesProvider) {\n this.protocolFees = new ProtocolFeesProvider(\n contracts.contracts.multicall,\n networkConfig.addresses.contracts.protocolFeePercentagesProvider\n );\n }\n\n this.tokenYields = new TokenYieldsRepository();\n\n if (networkConfig.addresses.contracts.gyroConfigProxy) {\n this.gyroConfigRepository = new GyroConfigRepositoryImpl(\n networkConfig.addresses.contracts.gyroConfigProxy,\n contracts.contracts.multicall,\n provider\n );\n }\n }\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { MaxInt256 } from '@ethersproject/constants';\nimport { BatchSwapStep, SwapType } from '../swaps/types';\nimport { Relayer } from './relayer.module';\nimport { OutputReference, PoolKind } from './types';\nimport { StablePoolEncoder } from '@/pool-stable';\nimport { ComposableStablePoolEncoder } from '@/pool-composable-stable';\n\n/**\n * Converts poolType and poolTypeVersion to PoolKind used by Relayer V5 defined in:\n * https://github.com/balancer/balancer-v2-monorepo/blob/9b78879ee3a0dcae57094bdfdae973873e4262cf/pkg/standalone-utils/contracts/relayer/VaultActions.sol#L105\n *\n * @internal\n * @param poolType\n * @param poolTypeVersion\n * @returns PoolKind\n */\nconst poolType2PoolKind = (\n poolType: string,\n poolTypeVersion: number\n): PoolKind => {\n if (poolType === 'Stable') {\n return PoolKind.LEGACY_STABLE;\n } else if (poolType === 'ComposableStable' && poolTypeVersion === 1) {\n return PoolKind.COMPOSABLE_STABLE;\n } else if (poolType === 'ComposableStable') {\n return PoolKind.COMPOSABLE_STABLE_V2;\n } else {\n return PoolKind.WEIGHTED;\n }\n};\n\nexport const setRelayerApproval = Relayer.encodeSetRelayerApproval;\nexport const gaugeWithdrawal = Relayer.encodeGaugeWithdraw;\nexport const gaugeDeposit = Relayer.encodeGaugeDeposit;\nexport const peekChainedReferenceValue =\n Relayer.encodePeekChainedReferenceValue;\n\n/**\n * Encodes exitPool callData.\n * Exit pool to underlying tokens and assigns output references to the exit amounts.\n *\n * @param poolId Pool ID.\n * @param poolType Pool type.\n * @param poolTypeVersion Pool type version.\n * @param assets Ordered pool tokens.\n * @param singleTokenExit When\n * @param outputReferences reference to exit amounts for the next transaction\n * @param amount Amount of BPT to exit with as a number with 18 digits of precision passed as a string.\n * @param sender Sender address.\n * @param recipient Recipient address.\n * @param isComposable Whether the poolType is ComposableStable or not.\n * @param toInternalBalance Use internal balance or not.\n * @returns Encoded exitPool call.\n */\nexport const exit = (\n poolId: string,\n poolType: string,\n poolTypeVersion: number,\n assets: string[],\n exitTokenIndex = -1,\n outputReferences: OutputReference[],\n amount: string,\n sender: string,\n recipient: string,\n toInternalBalance = true\n): string => {\n let userData: string;\n const isComposable = poolType === 'ComposableStable' && poolTypeVersion === 1;\n\n // Exit pool proportionally or to a singleToken\n if (exitTokenIndex > -1) {\n userData = StablePoolEncoder.exitExactBPTInForOneTokenOut(\n amount,\n exitTokenIndex\n );\n } else {\n const encoder = isComposable\n ? ComposableStablePoolEncoder.exitExactBPTInForAllTokensOut\n : StablePoolEncoder.exitExactBPTInForTokensOut;\n userData = encoder(amount);\n }\n\n // Relayer V5 introduces PoolKind\n const poolKind = poolType2PoolKind(poolType, poolTypeVersion);\n\n // Encode exit pool data\n const callData = Relayer.encodeExitPool({\n poolId,\n poolKind,\n sender,\n recipient,\n outputReferences,\n exitPoolRequest: {\n assets,\n minAmountsOut: new Array(assets.length).fill('0'),\n userData,\n toInternalBalance,\n },\n });\n\n return callData;\n};\n\n/**\n * Encodes joinPool callData.\n * Joins pool with underlying tokens and assigns output reference to the BPT amount.\n *\n * @param poolId Pool ID.\n * @param poolType Pool type.\n * @param poolTypeVersion Pool type version.\n * @param assets Ordered pool tokens.\n * @param amountsIn Amounts of tokens to join with as a number with 18 digits of precision passed as a string.\n * @param minimumBPT Minimum BPT amount to receive as a number with 18 digits of precision passed as a string.\n * @param outputReference reference to BPT amount for the next transaction\n * @param sender Sender address.\n * @param recipient Recipient address.\n * @param fromInternalBalance Use internal balance or not.\n * @returns Encoded joinPool call.\n */\nexport const join = (\n poolId: string,\n poolType: string,\n poolTypeVersion: number,\n assets: string[],\n amountsIn: string[],\n minimumBPT: string,\n outputReference: string,\n sender: string,\n recipient: string,\n fromInternalBalance = true\n): string => {\n const maxAmountsIn = assets.map(() => MaxInt256);\n\n // Encoding join pool data with the type exactTokensIn (1)\n // StablePoolEncoder.joinExactTokensInForBPTOut is the same for all pool types\n const userData = StablePoolEncoder.joinExactTokensInForBPTOut(\n amountsIn,\n minimumBPT\n );\n\n const kind = poolType2PoolKind(poolType, poolTypeVersion);\n\n const callData = Relayer.encodeJoinPool({\n poolId,\n kind,\n sender,\n recipient,\n joinPoolRequest: {\n assets,\n maxAmountsIn,\n userData,\n fromInternalBalance,\n },\n value: '0',\n outputReference,\n });\n\n return callData;\n};\n\n/**\n * Creates encoded batchSwap callData\n * outputReferences contain the output amount for swap's last token\n *\n * @param sender Sender address.\n * @param recipient Recipient address.\n * @param swaps List of swaps to execute.\n * @param deadline Deadline for the transaction.\n * @param toInternalBalance Use internal balance or not.\n * @returns Encoded batchSwap call\n */\nexport const swaps = (\n sender: string,\n recipient: string,\n swaps: {\n path: {\n poolId: string;\n assetIn: string;\n assetOut: string;\n }[];\n inputAmount: string;\n outputReference: BigNumber;\n }[],\n deadline?: string,\n toInternalBalance = true\n): string => {\n const assets: string[] = [];\n const limits: string[] = [];\n const outputReferences: { index: number; key: BigNumber }[] = [];\n const batchSwaps: BatchSwapStep[] = [];\n\n // Convert paths into batchSwap steps\n swaps.forEach((swap) => {\n const { path, inputAmount, outputReference } = swap;\n\n for (let i = 0; i < path.length; i++) {\n const { poolId, assetIn, assetOut } = path[i];\n\n assets.push(assetIn);\n assets.push(assetOut);\n\n limits.push(MaxInt256.toString());\n limits.push('0');\n\n const assetInIndex = i * 2;\n const assetOutIndex = i * 2 + 1;\n\n const swap: BatchSwapStep = {\n poolId,\n assetInIndex,\n assetOutIndex,\n amount: i === 0 ? inputAmount : '0',\n userData: '0x',\n };\n\n batchSwaps.push(swap);\n }\n\n // Add output reference for the last swap\n outputReferences.push({ index: path.length * 2 - 1, key: outputReference });\n });\n\n const funds = {\n sender,\n recipient,\n fromInternalBalance: true,\n toInternalBalance,\n };\n\n const encodedBatchSwap = Relayer.encodeBatchSwap({\n swapType: SwapType.SwapExactIn,\n swaps: batchSwaps,\n assets,\n funds,\n limits,\n deadline: deadline || BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value: '0',\n outputReferences,\n });\n\n return encodedBatchSwap;\n};\n","import { Findable, Pool, PoolAttribute } from '@/types';\nimport { BalancerRelayer__factory } from '@/contracts';\n\nexport const balancerRelayerInterface =\n BalancerRelayer__factory.createInterface();\n\n/**\n * Using array of objects to preserve the tokens order\n */\nexport interface MigrationPool {\n address: string;\n id?: string;\n poolType?: string;\n poolTypeVersion?: number;\n tokens?: MigrationPool[];\n mainIndex?: number;\n}\n\n/**\n * Foreach AaveLinear: AaveLinear > mainTokens > newAaveLinear\n *\n * @param fromTokens\n * @param toTokens\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const buildPaths = (\n fromTokens: MigrationPool[],\n toTokens: MigrationPool[],\n exitTokenIndex: number\n) => {\n // Get the main token address for each pool\n const getMainToken = ({ tokens, mainIndex }: MigrationPool) =>\n (tokens && mainIndex && tokens[mainIndex].address) || '';\n const mainFromTokens = fromTokens.flatMap(getMainToken);\n const mainToTokens = toTokens.flatMap(getMainToken);\n\n // Find the index of the main token in both from and to pools\n const pathIndexes = mainFromTokens.map(\n (token, idx) => (token && [idx, mainToTokens.indexOf(token)]) || [-1, -1]\n );\n\n // Build the paths from the indexes\n const exitSwaps = pathIndexes.map(([fromIdx, toIdx]) => {\n if (fromIdx === -1 || toIdx === -1) {\n return [];\n }\n const fromPool = fromTokens[fromIdx];\n const toPool = toTokens[toIdx];\n return buildPath(fromPool, toPool);\n });\n\n // If we want to exit a specific token, return only that path\n if (exitTokenIndex > -1) {\n return [exitSwaps[exitTokenIndex]];\n }\n\n return exitSwaps;\n};\n\nconst buildPath = (from: MigrationPool, to: MigrationPool) => {\n if (from.poolType?.match(/.*Linear.*/)) {\n return buildLinearPath(from, to);\n }\n\n return [];\n};\n\nconst buildLinearPath = (from: MigrationPool, to: MigrationPool) => {\n if (\n !from.id ||\n !to.id ||\n !from.tokens ||\n !to.tokens ||\n !from.mainIndex ||\n !to.mainIndex\n ) {\n throw 'Missing tokens';\n }\n const mainToken = from.tokens[from.mainIndex];\n\n const path = [\n {\n poolId: from.id,\n assetIn: from.address,\n assetOut: mainToken.address,\n },\n {\n poolId: to.id,\n assetIn: mainToken.address,\n assetOut: to.address,\n },\n ];\n\n return path;\n};\n\n/**\n * Converts Subgraph Pool to MigrationPool\n * Recursively builds tokens\n *\n * @param id\n * @param repository\n * @returns\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const buildMigrationPool = async (\n id: string,\n repository: Findable\n) => {\n const pool = await repository.find(id);\n if (!pool) throw `Pool ${id} not found`;\n\n const findTokens = async (token: string, parentPool: string) => {\n let tokens: Array = [{ address: token }];\n const pool = await repository.findBy('address', token);\n if (pool && token != parentPool) {\n const sortedTokens = pool.tokens.sort(cmpTokens);\n const nestedTokens = await Promise.all(\n sortedTokens.map(({ address }) => findTokens(address, pool.address))\n );\n tokens = [\n {\n address: token,\n id: pool.id,\n poolType: pool.poolType,\n poolTypeVersion: pool.poolTypeVersion,\n mainIndex: pool.mainIndex,\n tokens: nestedTokens.flat(),\n },\n ];\n }\n return tokens;\n };\n\n // Sorts amounts out into ascending order (referenced to token addresses) to match the format expected by the Vault.\n const sortedTokens = pool.tokens.sort(cmpTokens);\n\n return {\n id,\n address: pool.address,\n tokens: (\n await Promise.all(\n sortedTokens.map(({ address }) => findTokens(address, pool.address))\n )\n ).flat(),\n poolType: pool.poolType,\n poolTypeVersion: pool.poolTypeVersion,\n mainIndex: pool.mainIndex,\n };\n};\n\nconst cmpTokens = (tokenA: MigrationPool, tokenB: MigrationPool): number =>\n tokenA.address.toLowerCase() > tokenB.address.toLowerCase() ? 1 : -1;\n","import { OutputReference, Relayer } from '@/modules/relayer/relayer.module';\nimport * as actions from '@/modules/relayer/actions';\nimport { buildPaths, MigrationPool, balancerRelayerInterface } from './helpers';\nimport { BigNumber } from '@ethersproject/bignumber';\n\n/**\n * Builds migration call data.\n *\n * @param account Address of the migrating account\n * @param relayer Address of the relayer\n * @param bptAmount Amount of BPT to migrate\n * @param minBptOut Minimal amount of BPT to receive\n * @param from Pool to migrate from\n * @param to Pool to migrate to\n * @param peek Add a peek call for the expected BPT amount, decodable by the `decodePeak` function\n * @param fromGauge Unstake from gauge before migrating\n * @param toGauge Restake to gauge after migrating\n * @param authorisation User's authorisation to approve relayer in the vault\n * @returns call data\n */\nexport const migrationBuilder = (\n account: string,\n relayer: string,\n bptAmount: string,\n minBptOut: string,\n from: MigrationPool,\n to: MigrationPool,\n peek = false,\n fromGauge?: string,\n toGauge?: string,\n authorisation?: string\n): string => {\n if (\n !from.id ||\n !to.id ||\n !from.tokens ||\n !to.tokens ||\n !from.poolType ||\n !to.poolType\n ) {\n throw 'Pool data is missing';\n }\n\n // Define tokens\n const fromTokens = from.tokens.flatMap(({ address }) => address);\n const toTokens = to.tokens.flatMap(({ address }) => address);\n\n // Prefer proportional exit, except for ComposableStableV1\n // Choose 0 as the exit token index\n // TODO: make default exit token dynamic\n const exitTokenIndex =\n from.poolType == 'ComposableStable' && from.poolTypeVersion == 1 ? 0 : -1;\n\n // Define output references\n let exitOutputReferences: OutputReference[];\n let swapOutputReferences: BigNumber[] = [];\n if (exitTokenIndex > -1) {\n exitOutputReferences = [\n {\n index: exitTokenIndex,\n key: Relayer.toChainedReference(`10${exitTokenIndex}`),\n },\n ];\n swapOutputReferences = [Relayer.toChainedReference(`20${exitTokenIndex}`)];\n } else {\n exitOutputReferences = fromTokens.map((_, idx) => ({\n index: idx,\n key: Relayer.toChainedReference(`10${idx}`),\n }));\n swapOutputReferences = fromTokens.map((_, idx) =>\n Relayer.toChainedReference(`20${idx}`)\n );\n }\n\n const joinAmount = Relayer.toChainedReference('999');\n\n // Configure migration steps\n const migrationSteps = [];\n let needsSwap = false; // only if from is ComposableStable\n\n if (from.poolType === 'ComposableStable') {\n needsSwap = true;\n }\n\n // 0. Set relayer approval\n if (authorisation) {\n migrationSteps.push(\n actions.setRelayerApproval(relayer, true, authorisation)\n );\n }\n\n // 1. Withdraw from old gauge\n if (fromGauge) {\n migrationSteps.push(\n actions.gaugeWithdrawal(fromGauge, account, relayer, bptAmount)\n );\n }\n\n // 2. Exit old pool\n migrationSteps.push(\n actions.exit(\n from.id,\n from.poolType,\n from.poolTypeVersion || 1,\n fromTokens,\n exitTokenIndex,\n exitOutputReferences,\n bptAmount,\n fromGauge ? relayer : account,\n relayer\n )\n );\n\n // 3. Swap\n const swapPaths = buildPaths(from.tokens, to.tokens, exitTokenIndex);\n if (swapPaths.flat().length > 0) {\n // Match exit to swap amounts\n const swaps = swapPaths\n .map((path, idx) => ({\n path,\n inputAmount: String(exitOutputReferences[idx].key),\n outputReference: swapOutputReferences[idx],\n }))\n .filter(({ path }) => path.length > 0);\n\n migrationSteps.push(actions.swaps(relayer, relayer, swaps));\n }\n\n // 3. Join\n // Match swap or exit references to the positions of join tokens\n // In case no reference is defined, the default is 0\n const references = toTokens\n .filter((address) => to.address != address)\n .map((to) => {\n const fromIdx = fromTokens.indexOf(to);\n return String(\n (needsSwap && swapOutputReferences[fromIdx]) ||\n exitOutputReferences[fromIdx]?.key ||\n 0\n );\n });\n\n migrationSteps.push(\n actions.join(\n to.id,\n to.poolType,\n to.poolTypeVersion || 1,\n toTokens,\n references,\n minBptOut,\n String(joinAmount),\n relayer,\n toGauge ? relayer : account,\n true\n )\n );\n\n // Peek the last join amount\n if (peek === true) {\n migrationSteps.push(actions.peekChainedReferenceValue(String(joinAmount)));\n }\n\n // 4. Deposit to the new gauge\n if (toGauge) {\n migrationSteps.push(\n actions.gaugeDeposit(toGauge, relayer, account, String(joinAmount))\n );\n }\n\n const callData = balancerRelayerInterface.encodeFunctionData('multicall', [\n migrationSteps,\n ]);\n\n return callData;\n};\n","import { Findable, Pool, PoolAttribute } from '@/types';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { SubgraphLiquidityGauge } from '../subgraph/subgraph';\nimport { migrationBuilder } from './migrations/builder';\nimport {\n balancerRelayerInterface,\n buildMigrationPool,\n} from './migrations/helpers';\nimport * as actions from '@/modules/relayer/actions';\n\n/**\n * @param user - user address\n * @param from - pool ID\n * @param to - pool ID\n * @param balance - amount of liquidity to migrate in WAL (wei-ether)\n * @param minBptOut - minimum amount of BPT to receive, when 0 it will include a peek for the amount\n * @param authorisation - signed user's authorisation to approve relayer in the vault\n */\ninterface MigrationParams {\n user: string;\n from: string;\n to: string;\n balance: string;\n minBptOut?: string;\n authorisation?: string;\n}\n\n/**\n * Class responsible for building liquidity migration transactions.\n */\nexport class Migrations {\n public relayerAddress: string;\n public poolsRepository: Findable;\n public gaugesRepository: Findable;\n public provider: JsonRpcProvider;\n\n /**\n * Instance of a class responsible for building liquidity migration transactions.\n *\n * @param relayerAddress Address of the relayer contract.\n * @param poolsRepository Repository of pools.\n * @param liquidityGaugesRepository Repository of liquidity gauges.\n * @param provider Provider to use for RPC data fetching.\n *\n * Available methods:\n * - `pool2pool` - Migrates liquidity from one pool to another.\n * - `pool2poolWithGauges` - Migrates liquidity from a pool's gauge to another gauge.\n * - `gauge2gauge` - Migrates liquidity from one gauge to another of the same pool.\n *\n * @example\n * ```typescript\n * const sdk = new BalancerSDK({\n * network: 1,\n * rpcUrl: 'https://rpc.ankr.com/eth',\n * })\n *\n * const migrations = new Migrations({\n * relayerAddress: sdk.networkConfig.addresses.contracts.relayerV4 as string,\n * poolsRepository: sdk.data.pools,\n * gaugesRepository: sdk.data.liquidityGauges.subgraph,\n * provider: sdk.provider\n * })\n *\n * const user = '0xfacec29Ae158B26e234B1a81Db2431F6Bd8F8cE8'\n * const from = '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080'\n * const to = '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080'\n * const balance = '1000000000000000000'\n * const { to, data } = await migrations.pool2pool({ user, from, to, balance })\n *\n * const tx = await sdk.provider.sendTransaction({ to, data })\n * ```\n */\n constructor({\n relayerAddress,\n poolsRepository,\n gaugesRepository,\n provider,\n }: {\n relayerAddress: string;\n poolsRepository: Findable;\n gaugesRepository: Findable;\n provider: JsonRpcProvider;\n }) {\n this.relayerAddress = relayerAddress;\n this.poolsRepository = poolsRepository;\n this.gaugesRepository = gaugesRepository;\n this.provider = provider;\n }\n\n /**\n * Takes user, from and to pool IDs as strings and returns the transaction data\n *\n * @returns transaction data\n */\n async pool2pool({\n user,\n from,\n to,\n balance,\n minBptOut = '0',\n authorisation,\n }: MigrationParams): Promise<{ to: string; data: string }> {\n const fromPool = await buildMigrationPool(from, this.poolsRepository);\n const toPool = await buildMigrationPool(to, this.poolsRepository);\n\n const data = migrationBuilder(\n user,\n this.relayerAddress,\n String(balance),\n minBptOut,\n fromPool,\n toPool,\n minBptOut == '0', // if minBptOut is 0, we peek for the join amount\n undefined,\n undefined,\n authorisation\n );\n\n return {\n to: this.relayerAddress,\n data,\n };\n }\n\n /**\n * Takes user, from and to pool IDs as strings and returns the transaction data\n * for a migration including unstaking and restaking\n *\n * @returns transaction data\n */\n async pool2poolWithGauges({\n user,\n from,\n to,\n balance,\n minBptOut = '0',\n authorisation,\n }: MigrationParams): Promise<{ to: string; data: string }> {\n const fromGauge = await this.gaugesRepository.findBy('poolId', from);\n const toGauge = await this.gaugesRepository.findBy('poolId', to);\n if (!fromGauge || !fromGauge.poolId || !toGauge || !toGauge.poolId) {\n throw new Error('Gauge not found');\n }\n const fromPool = await buildMigrationPool(\n fromGauge.poolId,\n this.poolsRepository\n );\n const toPool = await buildMigrationPool(\n toGauge.poolId,\n this.poolsRepository\n );\n\n const data = migrationBuilder(\n user,\n this.relayerAddress,\n String(balance),\n minBptOut,\n fromPool,\n toPool,\n minBptOut == '0', // if minBptOut is 0, we peek for the join amount\n fromGauge.id,\n toGauge.id,\n authorisation\n );\n\n return {\n to: this.relayerAddress,\n data,\n };\n }\n\n /**\n * Migrates staked liquidity for the same pool from one gauge to another.\n *\n * @returns transaction data\n */\n async gauge2gauge({\n user,\n from,\n to,\n balance,\n authorisation,\n }: MigrationParams): Promise<{ to: string; data: string }> {\n const steps = [\n actions.gaugeWithdrawal(from, user, this.relayerAddress, balance),\n actions.gaugeDeposit(to, this.relayerAddress, user, balance),\n ];\n\n if (authorisation) {\n steps.unshift(\n actions.setRelayerApproval(this.relayerAddress, true, authorisation)\n );\n }\n\n const data = balancerRelayerInterface.encodeFunctionData('multicall', [\n steps,\n ]);\n\n return {\n to: this.relayerAddress,\n data,\n };\n }\n\n /**\n * Decodes the relayer return value to get the expected BPT out.\n *\n * @param relayerReturnValue\n * @returns\n */\n static getExpectedBptOut = (relayerReturnValue: string): string => {\n // Get last two positions of the return value, bptOut is the last one or the second to last one in case there is a gauge deposit\n // join and gauge deposit are always 0x, so any other value means that's the bptOut\n const multicallResult = balancerRelayerInterface.decodeFunctionResult(\n 'multicall',\n relayerReturnValue\n );\n\n const expectedBptOut = multicallResult[0]\n .slice(-2)\n .filter((v: string) => v !== '0x');\n\n return String(BigInt(expectedBptOut));\n };\n\n getExpectedBptOut = Migrations.getExpectedBptOut;\n}\n","import { SubgraphPoolBase } from '@balancer-labs/sor';\nimport {\n EncodeJoinPoolInput,\n ExitPoolData,\n EncodeBatchSwapInput,\n} from '@/modules/relayer/relayer.module';\nimport { Join } from './join';\nimport { Exit } from './exit';\nimport { Swap } from './swap';\n\nexport enum ActionStep {\n Direct,\n TokenIn,\n TokenOut,\n Middle,\n}\n\nexport enum ActionType {\n BatchSwap,\n Join,\n Exit,\n}\n\nexport type Actions = Exit | Swap | Join;\n\nexport interface Action {\n type: ActionType.Join | ActionType.Exit | ActionType.BatchSwap;\n callData(pool: SubgraphPoolBase, wrappedNativeAsset: string): CallData;\n getAmountIn(): string;\n getAmountOut(): string;\n}\n\nexport interface CallData {\n params: EncodeJoinPoolInput | ExitPoolData | EncodeBatchSwapInput;\n encoded: string | string[];\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { ActionStep, ActionType } from './types';\nimport { Relayer, OutputReference } from '@/modules/relayer/relayer.module';\n\nexport class BaseAction {\n nextOpRefKey;\n hasTokenOut;\n hasTokenIn;\n sender;\n receiver;\n opRefStart;\n minOut;\n amountIn;\n\n constructor(\n mainTokenInIndex: number,\n mainTokenOutIndex: number,\n swapAssetInIndex: number,\n swapAssetOutIndex: number,\n swapAmount: string,\n swapReturn: string,\n opRefKey: number,\n slippage: string,\n user: string,\n relayer: string\n ) {\n const actionStep = this.getActionStep(\n mainTokenInIndex,\n mainTokenOutIndex,\n swapAssetInIndex,\n swapAssetOutIndex\n );\n // Will get actual amount if input or chain amount if part of chain\n this.amountIn = this.getActionAmount(\n swapAmount,\n ActionType.BatchSwap,\n actionStep,\n opRefKey\n );\n this.hasTokenIn = this.actionHasTokenIn(actionStep);\n this.hasTokenOut = this.actionHasTokenOut(actionStep);\n // This will be 0 if not a mainTokenOut action otherwise amount using slippage\n const amountOut = this.hasTokenOut ? swapReturn : '0';\n this.minOut = this.getActionMinOut(amountOut, slippage);\n // This will set opRef for next chained action if required\n const [opRef, nextOpRefKey] = this.getActionOutputRef(\n actionStep,\n swapAssetOutIndex,\n opRefKey\n );\n this.nextOpRefKey = nextOpRefKey;\n this.opRefStart = opRef;\n this.sender = this.getSender(this.hasTokenIn, user, relayer);\n this.receiver = this.getReceiver(this.hasTokenOut, user, relayer);\n }\n\n /**\n * If its not the first action then the amount will come from the previous output ref\n * @param amount\n * @param actionType\n * @param actionStep\n * @param opRefKey\n * @returns\n */\n getActionAmount(\n amount: string,\n actionType: ActionType,\n actionStep: ActionStep,\n opRefKey: number\n ): string {\n let amountIn = amount;\n if (\n actionStep === ActionStep.TokenOut ||\n (actionStep === ActionStep.Middle && actionType === ActionType.Join) ||\n (actionStep === ActionStep.Middle && actionType === ActionType.Exit)\n ) {\n amountIn = Relayer.toChainedReference(opRefKey - 1).toString();\n }\n return amountIn;\n }\n\n /**\n * If its not the final action then we need an outputReferece to chain to next action as input\n * @param actionStep\n * @param tokenOutIndex\n * @param opRefKey\n * @returns\n */\n getActionOutputRef(\n actionStep: ActionStep,\n tokenOutIndex: number,\n opRefKey: number\n ): [OutputReference, number] {\n let opRef: OutputReference = {} as OutputReference;\n if (actionStep === ActionStep.TokenIn || actionStep === ActionStep.Middle) {\n opRef = this.getOutputRef(opRefKey, tokenOutIndex);\n opRefKey++;\n }\n return [opRef, opRefKey];\n }\n\n /**\n * Use slippage to set min amount out\n * @param amountOut\n * @param slippage\n * @returns\n */\n getActionMinOut(amountOut: string, slippage: string): string {\n // Currently only handle ExactIn swap. ExactOut would add slippage\n // We should apply slippage to each swaps amountOut\n return subSlippage(\n BigNumber.from(amountOut),\n BigNumber.from(slippage)\n ).toString();\n }\n\n /**\n * Find if the Action is:\n * Direct: tokenIn > tokenOut\n * TokenIn: tokenIn > chain...\n * TokenOut: ...chain > tokenOut\n * Middle: ...chain > action > chain...\n * @param tokenInIndex\n * @param tokenOutIndex\n * @param tokenInIndexAction\n * @param tokenOutIndexAction\n * @returns\n */\n getActionStep(\n tokenInIndex: number,\n tokenOutIndex: number,\n tokenInIndexAction: number,\n tokenOutIndexAction: number\n ): ActionStep {\n let actionStep: ActionStep;\n if (\n tokenInIndexAction === tokenInIndex &&\n tokenOutIndexAction === tokenOutIndex\n ) {\n actionStep = ActionStep.Direct;\n } else if (tokenInIndexAction === tokenInIndex) {\n actionStep = ActionStep.TokenIn;\n } else if (tokenOutIndexAction === tokenOutIndex) {\n actionStep = ActionStep.TokenOut;\n } else {\n actionStep = ActionStep.Middle;\n }\n return actionStep;\n }\n\n getOutputRef(key: number, index: number): OutputReference {\n const keyRef = Relayer.toChainedReference(key);\n return { index: index, key: keyRef };\n }\n\n getFromInternal(hasTokenIn: boolean, isBptIn?: boolean): boolean {\n if (hasTokenIn || isBptIn) return false;\n else return true;\n }\n\n getToInternal(hasTokenOut: boolean, isBptOut?: boolean): boolean {\n // exits - can't exit using BPT from internal balances\n // Because of ^ we can assume that any tokenOut BPT is going to external (either to user or exit)\n if (hasTokenOut || isBptOut) return false;\n else return true;\n }\n\n actionHasTokenIn(actionStep: ActionStep): boolean {\n return actionStep === ActionStep.Direct || actionStep === ActionStep.TokenIn\n ? true\n : false;\n }\n\n actionHasTokenOut(actionStep: ActionStep): boolean {\n return actionStep === ActionStep.Direct ||\n actionStep === ActionStep.TokenOut\n ? true\n : false;\n }\n\n getSender(hasTokenIn: boolean, user: string, relayer: string): string {\n // tokenIn/Out will come from/go to the user. Any other tokens are intermediate and will be from/to Relayer\n if (hasTokenIn) return user;\n else return relayer;\n }\n\n getReceiver(hasTokenOut: boolean, user: string, relayer: string): string {\n // tokenIn/Out will come from/go to the user. Any other tokens are intermediate and will be from/to Relayer\n if (hasTokenOut) return user;\n else return relayer;\n }\n\n getPoolKind(poolType: string): number {\n // We have to use correct pool type based off following from Relayer:\n // enum PoolKind { WEIGHTED, LEGACY_STABLE, COMPOSABLE_STABLE, COMPOSABLE_STABLE_V2 }\n // (note only Weighted and COMPOSABLE_STABLE_V2 will support proportional exits)\n let kind = 0;\n if ([`MetaStable`, `Stable`, `StablePhantom`].includes(poolType)) {\n kind = 1;\n } else if (poolType === `ComposableStable`) {\n // In this case we are only doing BPT <> singleToken, not BPT <> tokens, so encoding matches and avoids need to check version so default to 3\n kind = 3;\n }\n return kind;\n }\n}\n","import { SubgraphPoolBase, SwapV2 } from '@balancer-labs/sor';\nimport {\n Relayer,\n ExitPoolData,\n OutputReference,\n} from '@/modules/relayer/relayer.module';\nimport { ExitPoolRequest } from '@/types';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { AssetHelpers } from '@/lib/utils';\nimport { ActionType, Action, CallData } from './types';\nimport { BaseAction } from './baseAction';\n\nexport class Exit extends BaseAction implements Action {\n type: ActionType.Exit;\n poolId: string;\n tokenOut: string;\n toInternalBalance: boolean;\n opRef: OutputReference;\n\n constructor(\n swap: SwapV2,\n mainTokenInIndex: number,\n mainTokenOutIndex: number,\n public opRefKey: number,\n assets: string[],\n slippage: string,\n user: string,\n relayerAddress: string\n ) {\n super(\n mainTokenInIndex,\n mainTokenOutIndex,\n swap.assetInIndex,\n swap.assetOutIndex,\n swap.amount,\n swap.returnAmount ?? '0',\n opRefKey,\n slippage,\n user,\n relayerAddress\n );\n this.type = ActionType.Exit;\n this.poolId = swap.poolId;\n this.tokenOut = assets[swap.assetOutIndex];\n this.toInternalBalance = this.getToInternal(this.hasTokenOut);\n this.opRef = this.opRefStart;\n }\n\n public callData(\n pool: SubgraphPoolBase,\n wrappedNativeAsset: string\n ): CallData {\n const assets = pool.tokensList;\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // tokens must have same order as pool getTokens\n const [sortedTokens] = assetHelpers.sortTokens(assets) as [string[]];\n const exitToken = this.tokenOut;\n const exitTokenIndex = sortedTokens.findIndex(\n (t) => t.toLowerCase() === exitToken.toLowerCase()\n );\n const minAmountsOut = Array(assets.length).fill('0');\n // Variable amount of token out (this has slippage applied)\n minAmountsOut[exitTokenIndex] = this.minOut;\n // Uses exact amount in\n const bptAmtIn = this.amountIn;\n const userData = WeightedPoolEncoder.exitExactBPTInForOneTokenOut(\n bptAmtIn,\n exitTokenIndex\n );\n const params: ExitPoolData = {\n assets: sortedTokens,\n minAmountsOut,\n userData,\n toInternalBalance: this.toInternalBalance,\n poolId: this.poolId,\n poolKind: this.getPoolKind(pool.poolType),\n sender: this.sender,\n recipient: this.receiver,\n outputReferences: this.opRef.key ? [this.opRef] : [],\n exitPoolRequest: {} as ExitPoolRequest,\n };\n const exitPoolInput = Relayer.formatExitPoolInput(params);\n const callData = Relayer.encodeExitPool(exitPoolInput);\n return {\n params,\n encoded: callData,\n };\n }\n\n public getAmountIn(): string {\n return this.hasTokenIn ? this.amountIn : '0';\n }\n\n public getAmountOut(): string {\n return this.hasTokenOut ? this.minOut : '0';\n }\n}\n","import { SubgraphPoolBase, SwapV2 } from '@balancer-labs/sor';\nimport {\n Relayer,\n EncodeJoinPoolInput,\n OutputReference,\n} from '@/modules/relayer/relayer.module';\nimport { WeightedPoolEncoder } from '@/pool-weighted';\nimport { AssetHelpers } from '@/lib/utils';\nimport { ActionType, Action, CallData } from './types';\nimport { BaseAction } from './baseAction';\n\nexport class Join extends BaseAction implements Action {\n type: ActionType.Join;\n poolId: string;\n tokenIn: string;\n opRef: OutputReference;\n fromInternal;\n\n constructor(\n swap: SwapV2,\n mainTokenInIndex: number,\n mainTokenOutIndex: number,\n public opRefKey: number,\n assets: string[],\n slippage: string,\n user: string,\n relayerAddress: string\n ) {\n super(\n mainTokenInIndex,\n mainTokenOutIndex,\n swap.assetInIndex,\n swap.assetOutIndex,\n swap.amount,\n swap.returnAmount ?? '0',\n opRefKey,\n slippage,\n user,\n relayerAddress\n );\n this.type = ActionType.Join;\n this.poolId = swap.poolId;\n this.tokenIn = assets[swap.assetInIndex];\n this.fromInternal = this.getFromInternal(this.hasTokenIn);\n this.opRef = this.opRefStart;\n }\n\n public callData(\n pool: SubgraphPoolBase,\n wrappedNativeAsset: string\n ): CallData {\n const assets = pool.tokensList;\n const assetHelpers = new AssetHelpers(wrappedNativeAsset);\n // tokens must have same order as pool getTokens\n const [sortedTokens] = assetHelpers.sortTokens(assets) as [string[]];\n const joinToken = this.tokenIn;\n const joinTokenIndex = sortedTokens.findIndex(\n (t) => t.toLowerCase() === joinToken.toLowerCase()\n );\n const maxAmountsIn = Array(assets.length).fill('0');\n // Uses exact amounts of tokens in\n maxAmountsIn[joinTokenIndex] = this.amountIn;\n // Variable amount of BPT out (this has slippage applied)\n const bptAmountOut = this.minOut;\n const userData = WeightedPoolEncoder.joinExactTokensInForBPTOut(\n maxAmountsIn,\n bptAmountOut\n );\n const params: EncodeJoinPoolInput = {\n poolId: this.poolId,\n sender: this.sender,\n recipient: this.receiver,\n kind: this.getPoolKind(pool.poolType),\n joinPoolRequest: {\n assets: sortedTokens,\n maxAmountsIn,\n userData,\n fromInternalBalance: this.fromInternal,\n },\n value: '0',\n outputReference: this.opRef.key ? this.opRef.key.toString() : '0',\n };\n const callData = Relayer.encodeJoinPool(params);\n\n return {\n params,\n encoded: callData,\n };\n }\n\n public getAmountIn(): string {\n return this.hasTokenIn ? this.amountIn : '0';\n }\n\n public getAmountOut(): string {\n return this.hasTokenOut ? this.minOut : '0';\n }\n}\n","import { BigNumber } from '@ethersproject/bignumber';\nimport { MaxUint256, MaxInt256 } from '@ethersproject/constants';\nimport { SubgraphPoolBase, SwapV2 } from '@balancer-labs/sor';\nimport {\n Relayer,\n EncodeBatchSwapInput,\n OutputReference,\n} from '@/modules/relayer/relayer.module';\nimport { FundManagement, SwapType } from '../../types';\nimport { ActionType, Action, CallData } from './types';\nimport { BaseAction } from './baseAction';\n\nexport class Swap extends BaseAction implements Action {\n type: ActionType.BatchSwap;\n swaps: SwapV2[];\n limits: BigNumber[];\n private approveTokens: string[] = [];\n opRef: OutputReference[] = [];\n fromInternal;\n toInternal;\n\n constructor(\n swap: SwapV2,\n private mainTokenInIndex: number,\n private mainTokenOutIndex: number,\n public opRefKey: number,\n private assets: string[],\n private slippage: string,\n private pools: SubgraphPoolBase[],\n private user: string,\n private relayer: string\n ) {\n super(\n mainTokenInIndex,\n mainTokenOutIndex,\n swap.assetInIndex,\n swap.assetOutIndex,\n swap.amount,\n swap.returnAmount ?? '0',\n opRefKey,\n slippage,\n user,\n relayer\n );\n this.type = ActionType.BatchSwap;\n // Updates swap data to use chainedRef if required\n this.swaps = [{ ...swap, amount: this.amountIn }];\n const isBptIn = this.isBpt(pools, assets[swap.assetInIndex]);\n if (isBptIn) {\n // Older pools don't have pre-approval so need to add this as a step\n this.approveTokens.push(assets[swap.assetInIndex]);\n }\n this.fromInternal = this.getFromInternal(this.hasTokenIn, isBptIn);\n const isBptOut = this.isBpt(pools, assets[swap.assetOutIndex]);\n this.toInternal = this.getToInternal(this.hasTokenOut, isBptOut);\n this.limits = this.getLimits(\n assets,\n swap.assetInIndex,\n swap.assetOutIndex,\n swap.amount,\n this.hasTokenIn,\n this.hasTokenOut,\n this.minOut\n );\n if (this.opRefStart.index) {\n this.opRef.push(this.opRefStart);\n }\n }\n\n private getLimits(\n assets: string[],\n assetInIndex: number,\n assetOutIndex: number,\n swapAmount: string,\n hasTokenIn: boolean,\n hasTokenOut: boolean,\n minOut: string\n ): BigNumber[] {\n const limits = assets.map(() => BigNumber.from(0));\n // tokenIn/Out will come from/go to the user. Any other tokens are intermediate and will be from/to Relayer\n if (hasTokenIn) {\n limits[assetInIndex] = BigNumber.from(swapAmount);\n } else {\n // This will be a chained swap/input amount\n limits[assetInIndex] = MaxInt256;\n }\n if (hasTokenOut) {\n limits[assetOutIndex] = BigNumber.from(minOut).mul(-1);\n }\n return limits;\n }\n\n private updateLimits(limits: BigNumber[], newSwap: Swap): void {\n if (newSwap.hasTokenIn) {\n // We need to add amount for each swap that uses tokenIn to get correct total\n limits[newSwap.swaps[0].assetInIndex] = limits[\n newSwap.swaps[0].assetInIndex\n ].add(newSwap.amountIn);\n }\n if (newSwap.hasTokenOut) {\n // We need to add amount for each swap that uses tokenOut to get correct total (should be negative)\n limits[newSwap.swaps[0].assetOutIndex] = limits[\n newSwap.swaps[0].assetOutIndex\n ].sub(newSwap.minOut);\n }\n }\n\n isChainedSwap(swap: Swap): boolean {\n return (\n this.opRef[this.swaps.length - 1] &&\n this.toInternal === swap.fromInternal &&\n this.receiver === swap.sender &&\n this.opRef[this.swaps.length - 1].key.toString() === swap.amountIn\n );\n }\n\n // If swap has different send/receive params than previous then it will need to be done separately\n canAddSwap(newSwap: Swap): boolean {\n if (this.isChainedSwap(newSwap)) return true;\n return (\n newSwap.fromInternal === this.fromInternal &&\n newSwap.toInternal === this.toInternal &&\n newSwap.receiver === this.receiver &&\n newSwap.sender === this.sender\n );\n }\n\n callData(): CallData {\n const calls: string[] = [];\n\n for (const token of this.approveTokens) {\n // If swap tokenIn is a BPT then:\n // new pools have automatic infinite vault allowance, but not old ones\n // const key = Relayer.fromChainedReference(action.swaps[0].amount);\n // const readOnlyRef = Relayer.toChainedReference(key, false);\n // const approval = Relayer.encodeApproveVault(token, readOnlyRef.toString());\n // TODO fix approval amount\n // TODO only approve once\n const approval = Relayer.encodeApproveVault(token, MaxUint256.toString());\n calls.push(approval);\n }\n\n const funds: FundManagement = {\n sender: this.sender,\n recipient: this.receiver,\n fromInternalBalance: this.fromInternal,\n toInternalBalance: this.toInternal,\n };\n const batchSwapInput: EncodeBatchSwapInput = {\n swapType: SwapType.SwapExactIn,\n swaps: this.swaps,\n assets: this.assets,\n funds,\n limits: this.limits.map((l) => l.toString()),\n deadline: BigNumber.from(Math.ceil(Date.now() / 1000) + 3600), // 1 hour from now\n value: '0',\n outputReferences: this.opRef,\n };\n\n const encodedBatchSwap = Relayer.encodeBatchSwap(batchSwapInput);\n calls.push(encodedBatchSwap);\n return {\n params: batchSwapInput,\n encoded: calls,\n };\n }\n getAmountIn(): string {\n return this.limits[this.mainTokenInIndex].toString();\n }\n getAmountOut(): string {\n return this.limits[this.mainTokenOutIndex].abs().toString();\n }\n\n copy(): Swap {\n return new Swap(\n this.swaps[0],\n this.mainTokenInIndex,\n this.mainTokenOutIndex,\n this.opRefKey,\n this.assets,\n this.slippage,\n this.pools,\n this.user,\n this.relayer\n );\n }\n\n addSwap(swap: Swap): void {\n const isChainedSwap = this.isChainedSwap(swap);\n this.swaps.push(swap.swaps[0]);\n // Merge approveTokens without any duplicates\n this.approveTokens = [\n ...new Set([...this.approveTokens, ...swap.approveTokens]),\n ];\n this.toInternal = swap.toInternal;\n this.receiver = swap.receiver;\n this.hasTokenOut = swap.hasTokenOut;\n this.minOut = swap.minOut;\n this.opRef = [...this.opRef, ...swap.opRef];\n if (!isChainedSwap) {\n this.amountIn = BigNumber.from(this.amountIn)\n .add(swap.amountIn)\n .toString();\n }\n this.updateLimits(this.limits, swap);\n }\n\n isBpt(pools: SubgraphPoolBase[], token: string): boolean {\n return pools.some((p) => p.address.toLowerCase() === token.toLowerCase());\n }\n}\n","import { ActionType, Actions } from './types';\nimport { Swap } from './swap';\n\n/**\n * Categorize each action into a Join, Middle or Exit.\n * @param actions\n * @returns\n */\nexport function categorizeActions(actions: Actions[]): Actions[] {\n const enterActions: Actions[] = [];\n const exitActions: Actions[] = [];\n const middleActions: Actions[] = [];\n for (const a of actions) {\n if (a.type === ActionType.Exit || a.type === ActionType.Join) {\n // joins/exits with tokenIn can always be done first\n if (a.hasTokenIn) enterActions.push(a);\n // joins/exits with tokenOut (and not tokenIn) can always be done last\n else if (a.hasTokenOut) exitActions.push(a);\n else middleActions.push(a);\n }\n // All other actions will be chained inbetween\n else middleActions.push(a);\n }\n const allActions: Actions[] = [\n ...enterActions,\n ...middleActions,\n ...exitActions,\n ];\n return allActions;\n}\n\n/**\n * This aims to minimise the number of Actions the Relayer multicall needs to call by batching sequential swaps together.\n * @param actions\n * @param assets\n * @returns\n */\nexport function batchSwapActions(allActions: Actions[]): Actions[] {\n /*\n batchSwaps are a collection of swaps that can all be called in a single batchSwap\n Can batch all swaps with same source\n Any swap without tokenIn && not BPT should be coming from internal balances\n Any swap with tokenIn or BPT should be coming from external balances\n */\n const orderedActions: Actions[] = [];\n let batchedSwaps: Swap | undefined = undefined;\n\n for (const a of allActions) {\n if (a.type === ActionType.BatchSwap) {\n if (!batchedSwaps) {\n batchedSwaps = a.copy();\n } else {\n if (batchedSwaps.canAddSwap(a)) {\n batchedSwaps.addSwap(a);\n } else {\n orderedActions.push(batchedSwaps);\n batchedSwaps = a.copy();\n }\n }\n } else {\n // Non swap action\n if (batchedSwaps) {\n orderedActions.push(batchedSwaps);\n // new batchSwap collection as there is a chained join/exit inbetween\n batchedSwaps = undefined;\n }\n orderedActions.push(a);\n }\n }\n if (batchedSwaps) orderedActions.push(batchedSwaps);\n\n return orderedActions;\n}\n\n/**\n * Organise Actions into order with least amount of calls.\n * @param actions\n * @param assets\n * @returns\n */\nexport function orderActions(actions: Actions[]): Actions[] {\n const categorizedActions = categorizeActions(actions);\n const orderedActions = batchSwapActions(categorizedActions);\n return orderedActions;\n}\n","import { Interface } from '@ethersproject/abi';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { AddressZero } from '@ethersproject/constants';\nimport {\n SubgraphPoolBase,\n SwapInfo,\n SwapTypes,\n SwapV2,\n} from '@balancer-labs/sor';\nimport {\n Relayer,\n EncodeJoinPoolInput,\n EncodeBatchSwapInput,\n ExitPoolData,\n} from '@/modules/relayer/relayer.module';\nimport { getPoolAddress } from '@/pool-utils';\nimport { subSlippage } from '@/lib/utils/slippageHelper';\nimport { BalancerError, BalancerErrorCode } from '@/balancerErrors';\nimport { orderActions, ActionType, Actions } from './actions';\n\nimport balancerRelayerAbi from '@/lib/abi/BalancerRelayer.json';\nimport { Join } from './actions/join';\nimport { Exit } from './actions/exit';\nimport { Swap } from './actions/swap';\nimport { Logger } from '@/lib/utils/logger';\n\nconst balancerRelayerInterface = new Interface(balancerRelayerAbi);\n\n// Quickly switch useful debug logs on/off\nconst DEBUG = false;\n\nfunction debugLog(log: string) {\n const logger = Logger.getInstance();\n if (DEBUG) logger.info(log);\n}\n\nexport function canUseJoinExit(\n swapType: SwapTypes,\n tokenIn: string,\n tokenOut: string\n): boolean {\n if (\n swapType === SwapTypes.SwapExactOut ||\n tokenIn.toLowerCase() === AddressZero.toLowerCase() ||\n tokenOut.toLowerCase() === AddressZero.toLowerCase()\n )\n return false;\n else return true;\n}\n\n/**\n * Currently SOR only supports join/exit paths through Weighted pools.\n * Weighted pools should not have preminted BPT so can assume if a swap token is pool address it is a join or exit.\n * @param pools\n * @param swap\n * @param assets\n * @returns\n */\nexport function hasJoinExit(\n pools: SubgraphPoolBase[],\n swap: SwapV2,\n assets: string[]\n): boolean {\n const pool = pools.find((p) => p.id === swap.poolId);\n if (pool?.poolType !== 'Weighted') return false;\n const tokenIn = assets[swap.assetInIndex];\n const tokenOut = assets[swap.assetOutIndex];\n return [tokenIn, tokenOut].includes(pool.address);\n}\n\n/**\n * Finds if a swap returned by SOR is a join by checking if tokenOut === poolAddress\n * @param swap\n * @param assets\n * @returns\n */\nexport function isJoin(\n swap: SwapV2,\n assets: string[],\n poolType: string | undefined\n): boolean {\n if (poolType !== 'Weighted') return false;\n // token[join]bpt\n const tokenOut = assets[swap.assetOutIndex];\n const poolAddress = getPoolAddress(swap.poolId);\n return tokenOut.toLowerCase() === poolAddress.toLowerCase();\n}\n\n/**\n * Finds if a swap returned by SOR is an exit by checking if tokenIn === poolAddress\n * @param swap\n * @param assets\n * @returns\n */\nexport function isExit(\n swap: SwapV2,\n assets: string[],\n poolType: string | undefined\n): boolean {\n if (poolType !== 'Weighted') return false;\n // bpt[exit]token\n const tokenIn = assets[swap.assetInIndex];\n const poolAddress = getPoolAddress(swap.poolId);\n return tokenIn.toLowerCase() === poolAddress.toLowerCase();\n}\n\n/**\n * Find if any of the swaps are join/exits. If yes these swaps should be routed via Relayer.\n * @param pools\n * @param swaps\n * @param assets\n * @returns\n */\nexport function someJoinExit(\n pools: SubgraphPoolBase[],\n swaps: SwapV2[],\n assets: string[]\n): boolean {\n return swaps.some((swap) => {\n return hasJoinExit(pools, swap, assets);\n });\n}\n\n/**\n * Translate each swap into an Action. An Action is a join/exit/swap with the chained output refs.\n * @param swapType\n * @param tokenIn\n * @param tokenOut\n * @param swaps\n * @param assets\n * @param slippage\n * @param pools\n * @param user\n * @param relayer\n * @returns\n */\nexport function getActions(\n tokenIn: string,\n tokenOut: string,\n swaps: SwapV2[],\n assets: string[],\n slippage: string,\n pools: SubgraphPoolBase[],\n user: string,\n relayer: string\n): Actions[] {\n const tokenInIndex = assets.findIndex(\n (t) => t.toLowerCase() === tokenIn.toLowerCase()\n );\n const tokenOutIndex = assets.findIndex(\n (t) => t.toLowerCase() === tokenOut.toLowerCase()\n );\n const actions: Actions[] = [];\n let opRefKey = 0;\n for (const swap of swaps) {\n const poolType = pools.find((p) => p.id === swap.poolId)?.poolType;\n if (isJoin(swap, assets, poolType)) {\n const newJoin = new Join(\n swap,\n tokenInIndex,\n tokenOutIndex,\n opRefKey,\n assets,\n slippage,\n user,\n relayer\n );\n opRefKey = newJoin.nextOpRefKey;\n actions.push(newJoin);\n continue;\n } else if (isExit(swap, assets, poolType)) {\n const newExit = new Exit(\n swap,\n tokenInIndex,\n tokenOutIndex,\n opRefKey,\n assets,\n slippage,\n user,\n relayer\n );\n opRefKey = newExit.nextOpRefKey;\n actions.push(newExit);\n continue;\n } else {\n const newSwap = new Swap(\n swap,\n tokenInIndex,\n tokenOutIndex,\n opRefKey,\n assets,\n slippage,\n pools,\n user,\n relayer\n );\n opRefKey = newSwap.nextOpRefKey;\n actions.push(newSwap);\n continue;\n }\n }\n return actions;\n}\n\n/**\n * Given swapInfo from the SOR construct the Relayer multicall to execture swaps/joins/exits.\n * @param swapInfo Returned from SOR\n * @param swapType Only supports ExactIn\n * @param pools Pool info from SOR\n * @param user Address of user\n * @param relayerAddress Address of Relayer (>=V4)\n * @param wrappedNativeAsset Address of Native asset\n * @param slippage [bps], eg: 1 === 0.01%, 100 === 1%\n * @param authorisation Encoded authorisation call.\n * @returns\n */\nexport function buildRelayerCalls(\n swapInfo: SwapInfo,\n pools: SubgraphPoolBase[],\n user: string,\n relayerAddress: string,\n wrappedNativeAsset: string,\n slippage: string,\n authorisation: string | undefined\n): {\n to: string;\n data: string;\n rawCalls: string[];\n inputs: (EncodeBatchSwapInput | ExitPoolData | EncodeJoinPoolInput)[];\n} {\n // For each 'swap' create a swap/join/exit action\n const actions = getActions(\n swapInfo.tokenIn,\n swapInfo.tokenOut,\n swapInfo.swaps,\n swapInfo.tokenAddresses,\n slippage,\n pools,\n user,\n relayerAddress\n );\n // Arrange action into order that will create minimal amount of calls\n const orderedActions = orderActions(actions);\n\n const calls: string[] = [];\n const inputs: (EncodeBatchSwapInput | ExitPoolData | EncodeJoinPoolInput)[] =\n [];\n if (authorisation)\n // Uses relayer to approve itself to act in behalf of the user\n calls.push(\n Relayer.encodeSetRelayerApproval(relayerAddress, true, authorisation)\n );\n\n // Create encoded call for each action\n for (const action of orderedActions) {\n if (action.type === ActionType.Exit || action.type === ActionType.Join) {\n const pool = pools.find((p) => p.id === action.poolId);\n if (pool === undefined)\n throw new BalancerError(BalancerErrorCode.NO_POOL_DATA);\n const { params, encoded } = action.callData(pool, wrappedNativeAsset);\n calls.push(encoded as string);\n inputs.push(params);\n }\n if (action.type === ActionType.BatchSwap) {\n const { params, encoded } = action.callData();\n calls.push(...encoded);\n inputs.push(params);\n }\n }\n\n // Safety check to make sure amounts/limits from calls match expected\n checkAmounts(\n orderedActions.map((a) => BigNumber.from(a.getAmountIn())),\n orderedActions.map((a) => BigNumber.from(a.getAmountOut())),\n swapInfo,\n slippage\n );\n // encode relayer multicall\n const callData = balancerRelayerInterface.encodeFunctionData('multicall', [\n calls,\n ]);\n\n return {\n to: relayerAddress,\n data: callData,\n rawCalls: calls,\n inputs,\n };\n}\n\nfunction checkAmounts(\n amountsIn: BigNumber[],\n amountsOut: BigNumber[],\n swapInfo: SwapInfo,\n slippage: string\n): void {\n const totalIn = amountsIn.reduce(\n (total = BigNumber.from(0), amount) => (total = total.add(amount))\n );\n const totalOut = amountsOut.reduce(\n (total = BigNumber.from(0), amount) => (total = total.add(amount))\n );\n // totalIn should equal the original input swap amount\n // totalOut should equal the return amount from SOR minus any slippage allowance\n debugLog(`${totalIn.toString()} totalIn`);\n debugLog(`${swapInfo.swapAmount.toString()} swapInfo.swapAmount`);\n debugLog(`${totalOut.toString()} totalOut`);\n debugLog(\n `${subSlippage(\n swapInfo.returnAmount,\n BigNumber.from(slippage)\n ).toString()} slippage`\n );\n debugLog(`${swapInfo.returnAmount.toString()} swapInfo.returnAmount`);\n const diffOut = totalOut.sub(\n subSlippage(swapInfo.returnAmount, BigNumber.from(slippage))\n );\n if (!totalIn.eq(swapInfo.swapAmount) || !diffOut.lt(`3`))\n throw new BalancerError(BalancerErrorCode.RELAY_SWAP_AMOUNTS);\n /* ExactOut case\n // totalIn should equal the return amount from SOR (this is the amount in) plus any slippage allowance\n // totalOut should equal the original input swap amount (the exact amount out)\n if (\n !totalIn.eq(\n addSlippage(swapInfo.returnAmount, BigNumber.from(slippage))\n ) ||\n !totalOut.eq(swapInfo.swapAmount)\n )\n throw new BalancerError(BalancerErrorCode.RELAY_SWAP_AMOUNTS);\n */\n}\n","import { ClaimService, IClaimService } from '@/modules/claims/ClaimService';\nimport { BalancerSdkConfig, BalancerNetworkConfig } from '@/types';\nimport { Swaps } from './swaps/swaps.module';\nimport { Relayer } from './relayer/relayer.module';\nimport { Subgraph } from './subgraph/subgraph.module';\nimport { Sor } from './sor/sor.module';\nimport { getNetworkConfig } from './sdk.helpers';\nimport { Pricing } from './pricing/pricing.module';\nimport { ContractInstances, Contracts } from './contracts/contracts.module';\nimport { Pools } from './pools';\nimport { Data } from './data';\nimport { VaultModel } from './vaultModel/vaultModel.module';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { Migrations } from './liquidity-managment/migrations';\nimport { Logger } from '@/lib/utils/logger';\n\nexport interface BalancerSDKRoot {\n config: BalancerSdkConfig;\n sor: Sor;\n subgraph: Subgraph;\n pools: Pools;\n data: Data;\n swaps: Swaps;\n relayer: Relayer;\n networkConfig: BalancerNetworkConfig;\n provider: JsonRpcProvider;\n claimService?: IClaimService;\n}\n\nexport class BalancerSDK implements BalancerSDKRoot {\n readonly swaps: Swaps;\n readonly relayer: Relayer;\n readonly pricing: Pricing;\n readonly pools: Pools;\n readonly data: Data;\n balancerContracts: Contracts;\n vaultModel: VaultModel;\n readonly networkConfig: BalancerNetworkConfig;\n readonly provider: JsonRpcProvider;\n readonly claimService?: IClaimService;\n readonly migrationService?: Migrations;\n\n constructor(\n public config: BalancerSdkConfig,\n public sor = new Sor(config),\n public subgraph = new Subgraph(config)\n ) {\n const logger = Logger.getInstance();\n logger.setLoggingEnabled(!!config.enableLogging);\n this.networkConfig = getNetworkConfig(config);\n this.provider = sor.provider as JsonRpcProvider;\n\n this.balancerContracts = new Contracts(\n this.networkConfig.addresses.contracts,\n sor.provider\n );\n\n this.data = new Data(\n this.networkConfig,\n sor.provider,\n this.balancerContracts,\n config.subgraphQuery,\n config.coingecko\n );\n\n this.swaps = new Swaps(this.config);\n this.relayer = new Relayer();\n this.pricing = new Pricing(config, this.swaps);\n\n this.pools = new Pools(\n this.networkConfig,\n this.data,\n this.balancerContracts\n );\n\n if (this.data.liquidityGauges) {\n this.claimService = new ClaimService(\n this.data.liquidityGauges,\n this.data.feeDistributor,\n this.networkConfig.chainId,\n this.contracts.multicall,\n this.networkConfig.addresses.contracts.gaugeClaimHelper,\n this.networkConfig.addresses.contracts.balancerMinter\n );\n this.migrationService = new Migrations({\n relayerAddress: this.networkConfig.addresses.contracts.balancerRelayer,\n poolsRepository: this.data.pools,\n gaugesRepository: this.data.liquidityGauges.subgraph,\n provider: this.provider,\n });\n }\n this.vaultModel = new VaultModel(\n this.data.poolsForSimulations,\n this.networkConfig.addresses.tokens.wrappedNativeAsset\n );\n }\n\n /**\n * Expose balancer contracts, e.g. Vault, LidoRelayer.\n */\n get contracts(): ContractInstances {\n return this.balancerContracts.contracts;\n }\n}\n","import { Findable } from '../types';\nimport { Pool } from '@/types';\nimport {\n PoolAttribute,\n PoolRepository,\n PoolsFallbackRepositoryOptions,\n PoolsRepositoryFetchOptions,\n} from './types';\nimport { Logger } from '@/lib/utils/logger';\n\n/**\n * The fallback provider takes multiple PoolRepository's in an array and uses them in order\n * falling back to the next one if a request times out.\n *\n * This is useful for using the Balancer API while being able to fall back to the graph if it is down\n * to ensure Balancer is maximally decentralized.\n **/\nexport class PoolsFallbackRepository implements Findable {\n currentProviderIdx: number;\n timeout: number;\n\n constructor(\n private readonly providers: PoolRepository[],\n options: PoolsFallbackRepositoryOptions = {}\n ) {\n this.currentProviderIdx = 0;\n this.timeout = options.timeout || 10000;\n }\n\n async fetch(options?: PoolsRepositoryFetchOptions): Promise {\n return this.fallbackQuery('fetch', [options]);\n }\n\n get currentProvider(): PoolRepository | undefined {\n if (\n !this.providers.length ||\n this.currentProviderIdx >= this.providers.length\n ) {\n return;\n }\n\n return this.providers[this.currentProviderIdx];\n }\n\n async find(id: string): Promise {\n return this.fallbackQuery('find', [id]);\n }\n\n async findBy(\n attribute: PoolAttribute,\n value: string\n ): Promise {\n return this.fallbackQuery('findBy', [attribute, value]);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async fallbackQuery(func: string, args: unknown[]): Promise {\n if (this.currentProviderIdx >= this.providers.length) {\n throw new Error('No working providers found');\n }\n\n let result;\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const currentProvider = this.providers[this.currentProviderIdx] as any;\n result = await Promise.race([\n // eslint-disable-next-line prefer-spread\n currentProvider[func].apply(currentProvider, args),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error('timeout')), this.timeout)\n ),\n ]);\n } catch (e: unknown) {\n const message = (e as Error).message;\n if (message === 'timeout') {\n const logger = Logger.getInstance();\n logger.warn(\n 'Provider ' +\n this.currentProviderIdx +\n ' timed out, falling back to next provider'\n );\n } else {\n const logger = Logger.getInstance();\n logger.warn(\n `Provider ${this.currentProviderIdx} failed with error, falling back to next provider.`\n );\n logger.warn(message);\n }\n this.currentProviderIdx++;\n result = await this.fallbackQuery.call(this, func, args);\n }\n\n return result;\n }\n}\n","import { Findable, Pool, Searchable } from '@/types';\nimport { PoolAttribute } from './types';\n\nexport class PoolsStaticRepository\n implements Findable, Searchable\n{\n constructor(private pools: Pool[]) {}\n\n async find(id: string): Promise {\n return this.pools.find((pool) => {\n return pool.id.toLowerCase() === id.toLowerCase();\n });\n }\n\n async findBy(\n attribute: PoolAttribute,\n value: string\n ): Promise {\n return this.pools.find((pool) => {\n return pool[attribute] === value;\n });\n }\n\n async all(): Promise {\n return this.pools;\n }\n\n async where(filter: (pool: Pool) => boolean): Promise {\n return (await this.all()).filter(filter);\n }\n}\n","import { Findable, Price, TokenPrices } from '@/types';\n\nexport class StaticTokenPriceProvider implements Findable {\n tokenPrices: TokenPrices;\n constructor(tokenPrices: TokenPrices) {\n this.tokenPrices = Object.fromEntries(\n Object.entries(tokenPrices).map(([address, price]) => {\n return [address.toLowerCase(), price];\n })\n );\n }\n\n async find(address: string): Promise {\n const lowercaseAddress = address.toLowerCase();\n const price = this.tokenPrices[lowercaseAddress];\n if (!price) return;\n return price;\n }\n\n async findBy(attribute: string, value: string): Promise {\n if (attribute != 'address') {\n return undefined;\n }\n\n return this.find(value);\n }\n}\n","import { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport { Zero, WeiPerEther as ONE } from '@ethersproject/constants';\n\n// Should match MAX_WEIGHTED_TOKENS from v2-helpers/constants\n// Including would introduce a dependency\nconst MaxWeightedTokens = 100;\n\n/**\n * Normalize an array of token weights to ensure they sum to `1e18`\n * @param weights - an array of token weights to be normalized\n * @returns an equivalent set of normalized weights\n */\nexport function toNormalizedWeights(weights: BigNumber[]): BigNumber[] {\n // When the number is exactly equal to the max, normalizing with common inputs\n // leads to a value < 0.01, which reverts. In this case fill in the weights exactly.\n if (weights.length == MaxWeightedTokens) {\n return Array(MaxWeightedTokens).fill(ONE.div(MaxWeightedTokens));\n }\n\n const sum = weights.reduce((total, weight) => total.add(weight), Zero);\n if (sum.eq(ONE)) return weights;\n\n const normalizedWeights = [];\n let normalizedSum = Zero;\n for (let index = 0; index < weights.length; index++) {\n if (index < weights.length - 1) {\n normalizedWeights[index] = weights[index].mul(ONE).div(sum);\n normalizedSum = normalizedSum.add(normalizedWeights[index]);\n } else {\n normalizedWeights[index] = ONE.sub(normalizedSum);\n }\n }\n\n return normalizedWeights;\n}\n\n/**\n * Check whether a set of weights are normalized\n * @param weights - an array of potentially unnormalized weights\n * @returns a boolean of whether the weights are normalized\n */\nexport const isNormalizedWeights = (weights: BigNumberish[]): boolean => {\n const totalWeight = weights.reduce(\n (total: BigNumber, weight) => total.add(weight),\n Zero\n );\n return totalWeight.eq(ONE);\n};\n"],"names":["BasePoolExitKind","StablePoolJoinKind","StablePhantomPoolJoinKind","StablePoolExitKind","WeightedPoolJoinKind","WeightedPoolExitKind","BasePoolEncoder","recoveryModeExit","bptAmountIn","defaultAbiCoder","encode","RECOVERY_MODE","exports","StablePoolEncoder","constructor","joinInit","amountsIn","INIT","joinCollectProtocolFees","COLLECT_PROTOCOL_FEES","joinExactTokensInForBPTOut","minimumBPT","EXACT_TOKENS_IN_FOR_BPT_OUT","joinTokenInForExactBPTOut","bptAmountOut","enterTokenIndex","TOKEN_IN_FOR_EXACT_BPT_OUT","exitExactBPTInForOneTokenOut","exitTokenIndex","EXACT_BPT_IN_FOR_ONE_TOKEN_OUT","exitExactBPTInForTokensOut","EXACT_BPT_IN_FOR_TOKENS_OUT","exitBPTInForExactTokensOut","amountsOut","maxBPTAmountIn","BPT_IN_FOR_EXACT_TOKENS_OUT","WeightedPoolEncoder","joinAllTokensInForExactBPTOut","ALL_TOKENS_IN_FOR_EXACT_BPT_OUT","ManagedPoolEncoder","exitForManagementFees","MANAGEMENT_FEE_TOKENS_OUT","ComposableStablePoolJoinKind","ComposableStablePoolExitKind","ComposableStablePoolEncoder","exitExactBPTInForAllTokensOut","EXACT_BPT_IN_FOR_ALL_TOKENS_OUT","isProduction","process","env","NODE_ENV","prefix","invariant","condition","message","Error","provided","value","concat","getPoolAddress","poolId","length","slice","getPoolSpecialization","specializationCode","parseInt","getPoolNonce","BigNumber","from","Network","POOLS_GENERIC","IdsMap","Pagination","PerPage","PerPool","PerPoolInitial","DelegateOwner","ZeroAddress","DynamicFees","Gauntlet","BlockList","ExcludedPoolTypes","Stable","AllowList","Investment","Factories","Stakable","Metadata","name","hasIcon","POOLS_MAP","GOERLI","staBAL","bbAaveUSD","v1","v2","veBAL","MAINNET","POLYGON","xMatic","stMatic","mai4","maiBbaUsd","ARBITRUM","GNOSIS","PoolGaugesAttributes","PoolShareAttributes","GaugeShareAttributes","PoolSpecialization","UserBalanceOpKind","PoolBalanceOpKind","PoolType","Logger","this","enableLogging","static","instance","setLoggingEnabled","enabled","info","warn","console","error","time","timeEnd","transposeMatrix","matrix","map","_","columnIndex","row","AssetHelpers","wethAddress","ETH","AddressZero","isETH","token","isEqual","isWETH","WETH","translateToERC20","getAddress","sortTokens","tokens","others","forEach","array","erc20Tokens","sortedTranspose","sort","tokenA","tokenB","toLowerCase","cmpTokens","sortedErc20s","sortedOthers","includes","addressA","addressB","balancerErrorCodes","BalancerErrors","async","accountToAddress","account","Signer","isSigner","address","RelayerAction","isErrorCode","errorCode","replace","Object","keys","parseErrorCode","actualError","tryParseErrorCode","isBalancerError","values","encodeError","encodedError","entries","find","RelayerAuthorization","encodeCalldataAuthorization","calldata","deadline","signature","encodedDeadline","hexZeroPad","hexValue","v","r","s","splitSignature","signJoinAuthorization","validator","user","allowedSender","allowedCalldata","nonce","signAuthorizationFor","JoinPool","signExitAuthorization","ExitPool","signSwapAuthorization","Swap","signBatchSwapAuthorization","BatchSwap","signSetRelayerApprovalAuthorization","SetRelayerApproval","type","MAX_DEADLINE","MaxUint256","chainId","provider","getNetwork","userAddress","getNextNonce","domain","version","verifyingContract","types","sender","toString","_signTypedData","BalancerMinterAuthorization","signSetMinterApproval","minterContract","minter","approval","SetMinterApproval","BZERO","BigInt","BONE","ONE","_require","b","_computeScalingFactor","tokenDecimals","decimalsDifference","_upscale","amount","scalingFactor","SolidityMaths","mulDownFixed","_upscaleArray","amounts","scalingFactors","upscaledAmounts","Array","i","_downscaleDown","divDownFixed","_downscaleDownArray","downscaledAmounts","a","c","args","reduce","previous","current","roundUp","divUp","divDown","product","aInflated","x","y","raw","LogExpMath","pow","maxError","add","mulUpFixed","MAX_POW_RELATIVE_ERROR","ONE_18","x_int256","MILD_EXPONENT_BOUND","y_int256","logx_times_y","LN_36_LOWER_BOUND","LN_36_UPPER_BOUND","ln_36_x","_ln_36","_ln","MIN_NATURAL_EXPONENT","MAX_NATURAL_EXPONENT","exp","firstAN","x0","a0","x1","a1","ONE_20","x2","a2","x3","a3","x4","a4","x5","a5","x6","a6","x7","a7","x8","a8","x9","a9","term","seriesSum","z","ONE_36","z_squared","num","sum","a10","x10","a11","x11","AMP_PRECISION","parsePoolInfo","pool","wrappedNativeAsset","unwrapNativeAsset","poolTokens","decimals","_a","balancesEvm","parseFixed","balance","toBigInt","weights","weight","priceRates","priceRate","scalingFactorsRaw","d","sf","upScaledBalances","assetHelpers","ampWithPrecision","amp","higherBalanceTokenIndex","indexOf","max","scalingFactorsWithoutBpt","scalingFactorsRawWithoutBpt","poolTokensWithoutBpt","balancesEvmWithoutBpt","priceRatesWithoutBpt","upScaledBalancesWithoutBpt","bptIndex","splice","swapFeeEvm","swapFee","totalSharesEvm","totalShares","TOKENS_GENERIC","Popular","Symbols","Addresses","nativeAsset","wNativeAsset","BAL","TOKENS_MAP","bbaUSD","PriceChainMap","bbaUSDv2","TOKENS","networkId","_permanentCensorErrors","_censorErrors","LogLevels","debug","default","warning","off","_logLevel","_globalLogger","_normalizeError","missing","form","normalize","push","join","String","fromCharCode","_checkNormalize","LogLevel","ErrorCode","HEX","defineProperty","enumerable","writable","_log","logLevel","level","throwArgumentError","log","apply","levels","DEBUG","INFO","WARNING","makeError","code","params","errors","UNKNOWN_ERROR","messageDetails","key","Uint8Array","hex","JSON","stringify","reason","url","NUMERIC_FAULT","fault","CALL_EXCEPTION","INSUFFICIENT_FUNDS","MISSING_NEW","NONCE_EXPIRED","REPLACEMENT_UNDERPRICED","TRANSACTION_REPLACED","UNPREDICTABLE_GAS_LIMIT","throwError","INVALID_ARGUMENT","argument","assert","assertArgument","checkNormalize","UNSUPPORTED_OPERATION","operation","checkSafeUint53","checkArgumentCount","count","expectedCount","MISSING_ARGUMENT","UNEXPECTED_ARGUMENT","checkNew","target","kind","checkAbstract","censorship","permanent","globalLogger","logger","names","formatUnits","unitName","index","formatFixed","parseUnits","yieldTokens","waUSDT","waUSDC","waDAI","wamDAI","wamUSDC","wamUSDT","wrappedTokensMap","aToken","underlying","wrappedATokenInterface","Interface","AaveRates","multicall","network","addresses","payload","wrappedATokenAddress","callData","encodeFunctionData","res","callStatic","aggregate","p","parseFloat","wrappedAToken","tokenAddressForPricing","addressMapIn","unwrapToken","addressMap","wrappedAddress","lowercase","toLocaleLowerCase","aaveChain","undefined","aaveWrappedMap","getEthValue","filter","Debouncer","fn","wait","limit","requestSets","promisedCalls","promisedCount","debounceCancel","fetch","attr","_b","Set","size","execute","promise","timeout","resolve","reject","Promise","rej","makePromise","clearTimeout","call","requestAttrs","then","results","catch","response","data","setTimeout","bind","valueWithTrimmedDecimals","RegExp","result","match","parsedValue","_parseFixed","_formatFixed","bpsPerOne","mulSlippage","slippage","mul","div","subSlippage","delta","sub","addSlippage","isSameAddress","address1","address2","insert","arr","newItem","removeItem","newArray","reorderArrays","reference","original","some","indexesOfOriginal","othersResorted","indexOfOriginal","arrIndex","isLinearish","poolType","supportedPoolTypes","findEventInReceiptLogs","receipt","to","contractInterface","logName","event","logs","parseLog","getInstance","parsedLog","getRandomBytes32","fill","Math","random","BalancerAPIArgsFormatter","format","SubgraphArgsFormatter","operatorMap","gt","lt","eq","in","not_in","contains","whereQuery","where","operator","GraphQLArgsBuilder","merge","other","mergedArgs","mergeWith","objValue","srcValue","isArray","formatter","_abi","inputs","components","internalType","stateMutability","anonymous","indexed","outputs","AaveLinearPool__factory","utils","signerOrProvider","Contract","abi","AaveLinearPoolFactory__factory","AaveWrapping__factory","Authoriser__factory","BalancerHelpers__factory","BalancerMinter__factory","BalancerPoolDataQueries__factory","BalancerRelayer__factory","BatchRelayerLibrary__factory","ComposableStablePool__factory","ComposableStablePoolFactory__factory","ConvergentCurvePool__factory","constant","payable","ERC20__factory","ERC4626LinearPool__factory","ERC4626LinearPoolFactory__factory","EulerLinearPool__factory","EulerLinearPoolFactory__factory","FXPool__factory","GaugeClaimHelper__factory","GearboxLinearPool__factory","GearboxLinearPoolFactory__factory","GyroConfig__factory","LidoRelayer__factory","LinearPool__factory","LiquidityGaugeV5__factory","Multicall__factory","Multicall3__factory","StablePool__factory","StaticATokenRateProvider__factory","Vault__factory","WeightedPool__factory","WeightedPoolFactory__factory","YearnLinearPool__factory","YearnLinearPoolFactory__factory","GyroEV2__factory","VeBal__factory","VeDelegationProxy__factory","SwapType","getLimitsForSlippage","tokensIn","tokensOut","swapType","deltas","assets","limits","Zero","tokenIn","slippageAmount","WeiPerEther","SwapExactOut","tokenOut","SwapExactIn","balancerVault","BALANCER_NETWORK_CONFIG","contracts","poolDataQueries","lidoRelayer","veBal","gaugeControllerCheckpointer","veBalProxy","gyroConfigProxy","addressesByNetwork","bal","weth","bbaUsd","bb_a_usd","lbpRaisingTokens","stETH","wstETH","urls","subgraph","gaugesSubgraph","blockNumberSubgraph","thirdParty","coingecko","nativeAssetId","platformId","pools","wETHwstETH","id","poolsToIgnore","sorConnectingTokens","symbol","sorTriPathMidPoolIds","gaugeClaimHelper","erc4626LinearPoolFactory","aaveLinearPoolFactory","OPTIMISM","averageBlockTime","FANTOM","vault","balancerRelayer","balancerHelpers","weightedPoolFactory","composableStablePoolFactory","yearnLinearPoolFactory","SEPOLIA","ZKEVM","balancerMinter","multicallBatchSize","AVALANCHE","BASE","networkAddresses","BalancerErrorCode","BalancerError","super","getMessage","ABOVE_MAX_TOKENS","BELOW_MIN_TOKENS","EXIT_DELTA_AMOUNTS","FEE_PROVIDER_NOT_PROVIDED","GAUGES_HELPER_ADDRESS_NOT_PROVIDED","GAUGES_NOT_FOUND","GAUGES_REWARD_MINTER_ADDRESS_NOT_PROVIDED","GAUGES_REWARD_TOKEN_EMPTY","INPUT_LENGTH_MISMATCH","INPUT_OUT_OF_BOUNDS","INPUT_TOKEN_INVALID","INVALID_PROTOCOL_ID","INVALID_SWAP_FEE_PERCENTAGE","INVALID_WEIGHTS","JOIN_DELTA_AMOUNTS","JOIN_WITH_ZERO_AMOUNT","MISSING_AMP","MISSING_DECIMALS","MISSING_PRICE_RATE","MISSING_TOKENS","MISSING_WEIGHT","NO_POOL_DATA","NO_VALUE_PARAMETER","POOL_DOESNT_EXIST","RELAY_SWAP_AMOUNTS","REWARD_TOKEN_ZERO","TIMESTAMP_IN_THE_FUTURE","TOKEN_MISMATCH","UNSUPPORTED_PAIR","UNSUPPORTED_POOL_TYPE","calcPriceImpact","bptAmount","bptZeroPriceImpact","isJoin","pi","calcPriceImpactJoin","calcPriceImpactExit","bptSpotPrice","balances","bptSupply","tokenIndexIn","totalCoins","D","numTokens","prevInvariant","ampTimesTotal","P_D","j","_calculateInvariant","S","D_P","alpha","beta","gamma","partial_x","minus_partial_D","divUpFixed","StablePoolPriceImpact","tokenAmounts","StablePoolExit","buildExitExactBPTIn","exiter","bptIn","shouldUnwrapNativeAsset","singleTokenOut","toInternalBalance","checkInputsExactBPTIn","sortedValues","sortValuesExitExactBptIn","minAmountsOut","expectedAmountsOut","singleTokenOutIndex","calcTokenOutGivenExactBptIn","calcTokensOutGivenExactBptIn","userData","encodedData","encodeExitPool","priceImpact","buildExitExactTokensOut","checkInputsExactTokensOut","sortValuesExitExactTokensOut","expectedBPTIn","maxBPTIn","calcBptInGivenExactTokensOut","downScaledAmountsOut","buildRecoveryExit","isNegative","t","tokensList","parsedPoolInfo","upScaledAmountsOut","amountOut","SOR","StableMathBigInt","_calcTokenOutGivenExactBptIn","downscaledAmountOut","amountsOutScaledDown","_calcTokensOutGivenExactBptIn","_calcBptInGivenExactTokensOut","functionName","attributes","recipient","exitPoolRequest","createInterface","StablePoolJoin","buildJoin","joiner","checkInputs","sortValues","expectedBPTOut","minBPTOut","calcBptOutGivenExactTokensIn","encodeJoinPool","sortedAmountsIn","upScaledAmountsIn","_calcBptOutGivenExactTokensIn","joinPoolRequest","maxAmountsIn","fromInternalBalance","StablePoolLiquidity","calcTotal","sumBalance","sumValue","price","usd","avgPrice","SCALING_FACTOR","StablePoolSpotPrice","calcPoolSpotPrice","stablePool","StablePool","fromPool","poolPairData","parsePoolPairData","_spotPriceAfterSwapExactTokenInForTokenOut","ZERO","exit","liquidity","spotPriceCalculator","priceImpactCalculator","PhantomStablePoolSpotPrice","metaStablePool","PhantomStablePool","ComposableStablePoolJoin","sortValuesBasedOnPoolVersion","buildExactTokensInForBPTOut","sortV1","encodeUserDataExactTokensInForBPTOut","assetsWithBpt","encodedUserData","maxAmountsInWithBpt","sortV4","ComposableStablePoolExit","singleTokenOutIndexWithoutBpt","minAmountsOutWithBpt","downscaledAmountsOutWithoutBpt","downscaledAmountsOutWithBpt","checkInputsRecoveryExit","lte","poolTypeVersion","isInRecoveryMode","parsedValues","downscaledAmountsOutWithBptWithRounding","isZero","upScaledAmountsOutWithoutBpt","ComposableStable","WeightedPoolPriceImpact","WeightedPoolExit","WeightedMaths","WeightedPoolJoin","WeightedPoolLiquidity","sumWeight","toFixed","totalWeight","total","WeightedPoolSpotPrice","isBPTAsToken","bptAsToken","weightedPool","WeightedPool","spotPrice","pop","Weighted","MetaStablePoolLiquidity","MetaStablePoolSpotPrice","MetaStablePool","MetaStable","StablePhantomPoolExit","StablePhantomPoolJoin","StablePhantom","LinearPriceImpact","LinearPoolExit","LinearMaths","LinearPoolJoin","LinearPoolLiquidity","LinearPoolSpotPrice","linearPool","LinearPool","Linear","FXExitConcern","FXLiquidityConcern","FXSpotPriceConcern","FXPriceImpactConcern","FXJoinConcern","FX","GyroExitConcern","GyroLiquidityConcern","GyroSpotPriceConcern","GyroPriceImpactConcern","GyroJoinConcern","Gyro","PoolTypeConcerns","config","weighted","stable","composableStable","metaStable","stablePhantom","linear","Liquidity","tokenPrices","parsedTokens","subPoolLiquidity","all","findBy","getLiquidity","totalBPT","bptInParentPool","liquidityInParentPool","totalSubPoolLiquidity","totalLiquidity","subPool","nonPoolTokens","nonPoolTokensWithUpdatedPrice","tokenPrice","latestUSDPrice","parsedTokenLiquidity","filterTokens","obj","populateGauges","gauges","claimableRewards","claimableTokens","gauge","rewards","populateGauge","it","reduceRewardTokens","rewardTokens","liquidityGaugeV5Interface","balancerMinterInterface","gaugeClaimHelperInterface","ClaimService","liquidityGauges","feeDistributor","gaugeClaimHelperAddress","balancerMinterAddress","getGauges","gaugeAddresses","getRewardTokens","retrieveClaimableTokens","retrieveClaimableRewards","getClaimableRewardTokens","flatMap","expectedValues","tokenAddress","every","expectedTokensValue","getClaimableBalances","tokenBalance","claimBalances","paths","getPayload","res0x","path","reduceClaimableRewards","gaugeAddress","getArguments","balAddress","reduceClaimableTokens","queryBatchSwap","vaultContract","swaps","funds","err","__assign","assign","n","arguments","prototype","hasOwnProperty","docCache","Map","fragmentSourceMap","printFragmentWarnings","experimentalFragmentVariables","string","trim","processFragments","ast","seenKeys","definitions","fragmentDefinition","fragmentName","sourceKey","loc","source","body","substring","start","end","sourceKeySet","get","has","set","parseDocument","cacheKey","parsed","parse","allowLegacyFragmentVariables","doc","workSet","node","startToken","endToken","stripLoc","gql","literals","_i","arg","gql_1","extras","clear","resetCaches","disableFragmentWarnings","enableExperimentalFragmentVariables","disableExperimentalFragmentVariables","AmpUpdate_OrderBy","BalancerSnapshot_OrderBy","Balancer_OrderBy","CircuitBreaker_OrderBy","GradualWeightUpdate_OrderBy","InvestType","JoinExit_OrderBy","LatestPrice_OrderBy","ManagementOperation_OrderBy","OperationType","OrderDirection","PoolContract_OrderBy","PoolHistoricalLiquidity_OrderBy","PoolShare_OrderBy","PoolSnapshot_OrderBy","PoolToken_OrderBy","Pool_OrderBy","PriceRateProvider_OrderBy","ProtocolIdData_OrderBy","SwapFeeUpdate_OrderBy","Swap_OrderBy","TokenPrice_OrderBy","TokenSnapshot_OrderBy","Token_OrderBy","TradePairSnapshot_OrderBy","TradePair_OrderBy","UserInternalBalance_OrderBy","User_OrderBy","_SubgraphErrorPolicy_","gql$1","SubgraphPoolShareFragmentDoc","SubgraphPoolFragmentDoc","SubgraphPoolSnapshotFragmentDoc","SubgraphJoinExitFragmentDoc","SubgraphBalancerFragmentDoc","SubgraphTokenPriceFragmentDoc","SubgraphTokenLatestPriceFragmentDoc","SubgraphUserFragmentDoc","PoolShareDocument","PoolSharesDocument","PoolsDocument","AllPoolsDocument","PoolDocument","PoolHistoricalLiquiditiesDocument","PoolSnapshotsDocument","JoinExitsDocument","BalancersDocument","TokenPricesDocument","TokenLatestPricesDocument","TokenLatestPriceDocument","UserDocument","UsersDocument","defaultWrapper","action","_operationName","_operationType","getSdk","client","withWrapper","PoolShare","variables","requestHeaders","wrappedRequestHeaders","request","PoolShares","Pools","AllPools","Pool","PoolHistoricalLiquidities","PoolSnapshots","JoinExits","Balancers","TokenPrices","TokenLatestPrices","TokenLatestPrice","User","Users","Chain","GaugeFactory_OrderBy","GaugeShare_OrderBy","GaugeType_OrderBy","GaugeVote_OrderBy","Gauge_OrderBy","LiquidityGauge_OrderBy","LockSnapshot_OrderBy","OmniVotingEscrowLock_OrderBy","RewardToken_OrderBy","RootGauge_OrderBy","SingleRecipientGauge_OrderBy","VotingEscrowLock_OrderBy","VotingEscrow_OrderBy","SubgraphGaugeShareFragmentDoc","SubgraphLiquidityGaugeFragmentDoc","SubgraphPoolWithPreferentialGaugeFragmentDoc","GaugeShareDocument","GaugeSharesDocument","LiquidityGaugesDocument","PoolGaugesDocument","createSubgraphClient","subgraphUrl","GraphQLClient","createGaugesClient","GaugeShare","GaugeShares","LiquidityGauges","PoolGauges","Gauges.getSdk","Multicaller3","options","calls","interface","connect","batchSize","executeMulticall","numBatches","ceil","batchPromises","batchIndex","batchRequests","allowFailure","aggregate3","offset","callIndex","success","returnData","decodeFunctionResult","e","weightedCalls","multicaller","linearCalls","stableCalls","gyroECalls","fetchOnChainPoolData","vaultAddress","getTotalSupplyFn","getSwapFeeFn","defaultCalls","do_nothing","poolTypeCalls","getOnChainBalances","subgraphPoolsOriginal","_multiAddress","poolsWithOnchainData","onchainData","idx","wrappedToken","wrappedIndex","wrappedTokenRate","lowerTarget","targets","upperTarget","tokenRates","rate","SubgraphPoolDataService","sorConfig","query","defaultArgs","orderBy","TotalLiquidity","orderDirection","Desc","swapEnabled","queryArgs","mapped","expiryTime","unitSeconds","principalToken","baseToken","mapPools","getSubgraphPools","findIndex","fetchOnChainBalances","onChainBalances","formattedQuery","first","pool0","pool1000","pool2000","SubgraphTokenPriceService","ethPerToken","getLatestPriceInEthFromSubgraph","latestPrices","asset_in","pricesKeyedOnId","keyBy","matchingLatestPrices","asset","pricingAssetPricedInEth","pricingAsset","getNetworkConfig","networkConfig","customSubgraphUrl","tenderly","POOLS_TO_IGNORE","ApiTokenPriceService","balancerApiUrl","tokenPriceQuery","chainKey","tokenGetCurrentPrices","tokenPriceUsd","nativeAssetPriceUsd","NativeAssetAddress","tokenPriceInNativeAsset","getCoingeckoApiBaseUrl","isDemoApi","getCoingeckoApiKeyHeaderName","CoingeckoTokenPriceService","urlBase","isDemoApiKey","coingeckoApiKeyHeaderName","apiKey","coingeckoApiKey","getTokenPriceInNativeAsset","endpoint","axios","headers","Accept","Sor","sdkConfig","getSorConfig","sorNetworkConfig","getSorNetworkConfig","JsonRpcProvider","rpcUrl","subgraphClient","getPoolDataService","getTokenPriceService","tokenPriceService","poolDataService","sor","connectingTokens","triPathMidPoolIds","allPoolsToIgnore","coingeckoConfig","checkSimpleFlashSwapParams","poolIds","createSwaps","assetInIndex","assetOutIndex","deltaToExpectedProfit","Number","calcProfit","profits","underlyingToWrappedMap","tokenForSwaps","wrapped","Relayers","relayerResolver","assetIn","assetOut","lido","swapFragment","relayer","f","amountForLimit","maxSlippage","min","decorateSorSwapInfo","swapInfo","amountIn","swapAmount","returnAmount","amountInForLimits","swapAmountForSwaps","returnAmountFromSwaps","amountOutForLimits","tokenInForSwaps","tokenOutFromSwaps","SingleSwapBuilder","setFunds","setDeadline","setLimits","singleSwap","attrs","fragment","outputReference","BatchSwapBuilder","minAmountOut","maxAmountIn","tokenAddresses","split","outputReferences","buildRouteDefaultOptions","maxPools","gasPrice","Swaps","sorOrConfig","l","getSwaps","SwapTypes","buildSwap","builder","opts","findRouteGivenIn","batchSwap","encodeBatchSwap","flashLoanAmount","walletAddress","convertSimpleFlashSwapToBatchSwapParameters","fetchPools","getPools","tokenAddress0","tokenAddress1","isProfitable","querySimpleFlashSwap","swapInput","swapTypeSOR","getSorSwapInfo","swap","assetDeltas","fromEntries","PoolKind","relayerLibrary","Relayer","maxAmount","relayerAdress","approved","authorisation","poolKind","staticToken","fromUnderlying","toUnderlying","linearPoolType","unwrapType","encodeUnwrapAaveStaticToken","isTemporary","CHAINED_REFERENCE_TEMP_PREFIX","CHAINED_REFERENCE_READONLY_PREFIX","paddedPrefix","repeat","ref","amountBn","mask","check","_hex","signRelayerApproval","relayerAddress","signerAddress","signer","Subgraph","initClient","Pricing","poolsDict","parseToPoolsDict","routeProposer","getCandidatePathsFromDict","getSpotPriceAfterSwapForPath","Multicaller","isLessThan24Hours","incomingDateInSec","round","Date","now","VeBal","veBalAddress","formatLockInfo","lockInfo","lockedAmount","lockedEndDate","locked","hasExistingLock","lockedEndDateNormalised","toNumber","isExpired","totalSupply","epoch","VeBalProxy","adjustedBalanceOf","Contracts","networkOrAddresses","getLiquidityGauge","contractAddresses","eulerLinearPoolFactory","gearboxLinearPoolFactory","gyroConfig","instances","BasePool","getBasePool","ERC20","getErc20","liquidityGauge","ImpermanentLossService","tokenHistoricalPrices","timestamp","prepareData","poolValueDelta","getPoolValueDelta","holdValueDelta","getHoldValueDelta","calculateImpermanentLoss","floor","abs","priceDelta","entryTimestamp","getWeights","entryPrices","getEntryPrices","exitPrices","getExitPrices","getAssets","getDelta","entryPrice","exitPrice","ILLEGAL_PARAMETER","noWeights","uniformWeight","w","prices","tokensWithPrice","INITIAL_RATE","START_EPOCH_TIME","RATE_REDUCTION_TIME","RATE_REDUCTION_COEFFICIENT","weekly","currentTimestamp","getTime","miningEpoch","totalEmissions","startingEpoch","endingEpoch","currentEpoch","secondsInStartingEpoch","secondsInEndingEpoch","ProtocolRevenue","repository","multicallData","balPrice","lastWeekBalRevenue","balAmount","lastWeekBBAUsdRevenue","bbAUsdAmount","bbAUsdPrice","veBalSupply","PoolFees","yesterdaysPools","yesterdaysPool","totalSwapFee","createTime","PoolApr","tokenMeta","tokenYields","feeCollector","gyroConfigRepository","last24hFees","feesDailyBsp","protocolSwapFeePercentage","breakdown","bptFreeTokens","aprs","apr","tokenYield","isExemptFromYieldProtocolFee","protocolYieldFeeCache","subSwapFees","swapFees","subApr","tokenAprs","getWeight","poolToken","bptPrice","_c","_d","_e","weightedAprs","pickBy","zipObject","identity","boost","workingSupply","balInflationRate","bptPriceUsd","gaugeSupplyUsd","reward","balReward","rewardTokenApr","totalSupplyUsd","rewardValue","balPriceUsd","gaugeBalEmissionsUsd","emissions.weekly","relativeWeight","tAddress","rewardTokensBreakdown","rewardValueScaled","revenue","dailyRevenue","stakingApr","rewardAprs","protocolApr","minStakingApr","maxStakingApr","last24h","liquidityService","fee","getGyroProtocolFee","protocolSwapFeeCache","rewardData","period_finish","yearlyReward","meta","joinActions","Element","LiquidityBootstrapping","exitActions","PoolGraph","getGraphNodes","tokensToUnwrap","rootNode","buildGraphFromRootPool","orderByBfs","reverse","rootPool","buildGraphFromPool","getTokenTotal","nodeIndex","parent","proportionOfParent","parentPool","tokenIndex","leafTokenDecimals","createInputTokenNode","joinAction","exitAction","tokenTotal","spotPrices","sp","poolNode","isProportionalExit","children","marked","isLeaf","updateNodeIfProportionalExit","createLinearNodeChildren","proportion","tokenWeight","finalProportion","childNode","linearPoolNode","mainIndex","wrappedNodeInfo","createWrappedTokenNode","mainTokenDecimals","nodeInfo","wrappedTokenNode","unwrappedBalance","inputNode","root","nodes","orderedNodes","currentNode","shift","WeightedPoolDecoder","decode","JoinModel","relayerModel","joinKind","decodeJoinData","allTokensInForExactBPTOut","amountsInWithRef","doChainedRefReplacements","SubgraphType","bptAsPoolToken","bptBalanceEVM","updateTokenBalanceForPool","tokensWithoutBpt","balanceEvm","bptAmountOutWithRef","tokenInIndex","doChainedRefReplacement","pairData","bptAmountOutHuman","amountInHuman","_tokenInForExactTokenOut","bnum","dp","decimalsIn","amountInEvm","balanceIn","balanceOut","bptOut","isChainedReference","setChainedReferenceValue","ExitModel","exitKind","decodeExitData","exactBptInForTokensOut","bptInWithRef","exactBptInForOneTokenOut","amountOutHuman","_exactTokenInForTokenOut","decimalsOut","amountOutEvm","poolBalances","pt","getBalancesForTokens","tokenOutIndex","SwapModel","swapRequest","doSwap","batchSwapRequest","previousAmount","getChainedReferenceValue","isExactIn","UnwrapModel","unwrapRequest","underlyingToken","PoolModel","joinModel","exitModel","swapModel","unwrapModel","doJoinPool","doExitPool","doBatchSwap","doSingleSwap","doUnwrap","RelayerModel","chainedRefs","PoolsSource","poolsArray","dataSource","refresh","list","cloneDeep","BptAsToken","parseNewPool","subgraphPool","ComposableStablePool","ActionType","VaultModel","poolsSource","updateDeltas","rawCalls","poolModel","poolsDictionary","actionType","Join","doJoin","Exit","doExit","Unwrap","balancerRelayerInterface","debugLog","poolGraph","simulationService","createCalls","joinPaths","isNativeAssetJoin","multiRequests","encodedCalls","outputIndexes","createActionCalls","unshift","createSetRelayerApproval","encodedCall","amountsOutByJoinPath","simulationType","simulateGeneralisedJoin","totalAmountOut","minAmountsOutByJoinPath","totalMinAmountOut","isSimulation","joinPath","isLeafJoin","modelRequests","shouldBeConsidered","isLastChainedCall","hasSiblingInput","minOut","modelRequest","createSwap","minBptOut","createJoinPool","outputRef","encodedPeekCall","encodePeekChainedReferenceValue","toChainedReference","encodeSetRelayerApproval","joinPathIndex","expectedOut","getOutputRefValue","replaceWrappedNativeAsset","allImmediateChildrenSendToInternal","allSiblingsSendToInternal","encodeSwap","mapSwapRequest","userTokenIn","userBptOut","inputTokens","inputAmts","child","sortedTokens","sortedAmounts","userDataAmounts","formatJoinPoolInput","mapJoinPoolRequest","userAmountsTokenIn","userAmountOut","hasChildInput","isRef","sendsToInternalBalance","siblings","wrappedNativeAssetIndex","nativeAssetIndex","tokensInWithoutNativeAsset","getJoinPaths","totalBptZeroPi","totalBptZeroPriceImpact","queryData","assertDeltas","poolAddress","Join$1","inputNodes","nonLeafInputNodes","nonLeafInputNode","nonLeafAmountIn","totalProportions","proportionalNonLeafAmountIn","inputTokenNode","nonLeafJoinPath","currentChild","parentCopy","updateInputAmounts","ajdustAmountInDiff","tokenInInputNodes","amountsInSumforTokenIn","diff","leafJoinPath","updateTotalProportions","updateNodeAmount","nonLeafJoinPaths","leafNode","bptOutZeroPiForInputNode","spProduct","parentNode","childAddress","spPriceScaled","inputAmountScaled","totalProportion","inputAmount","TenderlyHelper","tenderlyConfig","simulateMulticall","encodedStateOverrides","encodeBalanceAndAllowanceOverrides","encodeRelayerApprovalOverride","simulateTransaction","stateOverrides","storage","state_objects","toHexString","network_id","block_number","blockNumber","input","save_if_fails","simulation_type","SIMULATE_URL","tenderlyUrl","post","transaction","transaction_info","call_trace","output","requestStateOverrides","tokensWithoutNativeAsset","MaxInt256","k","ENCODE_STATES_URL","networkID","project","accessKey","SimulationType","Simulation","Tenderly","tenderlyHelper","simulationResult","decodeResult","requestResult","simulateRequests","Static","staticResult","decodedResponse","Buffer","simulateGeneralisedExit","multicallResult","outputIndex","vaultModel","requests","tokenOutDeltas","amountsOutByExitPath","amountsOutByTokenOut","tokensOutByExitPath","expectedAmountsOutByExitPath","expectedAmountsOutMap","expectedAmountsOutByTokenOut","minAmountsOutByExitPath","expectedAmountOut","minAmountsOutByTokenOut","getExitPaths","outputNodes","exitPaths","outputNode","exitPath","amountsInSum","accumulator","currentExitPath","amountInForCurrentExitPath","amountsInDiff","createUnwrap","exitChild","exitPathIndex","getOutputRef","encodeUnwrap","mapUnwrapRequest","receivesFromInternal","amountBptIn","getExit","estimatedAmountsOut","isProportional","isProportionalPools","tokensWithInsufficientBalance","calculatePriceImpact","orderedNodesForJoin","isPeek","getRecipientAddress","getSenderAddress","isLastActionWithLimits","minAmountsOutProportional","outputChildIndex","createExitPoolProportional","createExitPool","isRootNode","createBatchSwap","exitChildren","batchSwapSteps","swapStep","acc","dust","mapBatchSwapRequest","userDataTokens","formatExitPoolInput","mapExitPoolRequest","userAmountTokensOut","userBptIn","allChildrenReceiveFromInternal","deltaBptIn","deltaTokensOut","deltaAmountsOut","PoolVolume","totalSwapVolume","ComposableStableFactory","checkCreateInputs","tokenRateCacheDurations","exemptFromYieldProtocolFeeFlags","rateProviders","parseCreateParamsForEncoding","amplificationParameter","owner","salt","sortedRateProviders","sortedTokenRateCacheDurations","sortedExemptFromYieldProtocols","encodeCreateFunctionData","checkInitJoinInputs","parseParamsForInitJoin","tokensWithBpt","amountsWithBpt","maxAmountsWithBpt","asUintN","sortedMaxAmounts","encodeInitJoinFunctionData","getPoolAddressAndIdWithReceipt","composableStablePoolInterface","getPoolInterface","getPoolId","create","encodedFunctionData","buildInitJoin","WeightedFactory","normalizedWeights","sortedNormalizedWeights","cur","weightedPoolInterface","ProtocolId","LinearFactory","getPoolFactoryInterface","AaveLinear","ERC4626Linear","EulerLinear","GearboxLinear","YearnLinear","protocolId","getFactoryAddress","mainToken","upperTargetEvm","linearPoolInterface","PoolFactory__factory","balancerContracts","of","ParamsBuilder","encoder","Gyro2","Gyro3","getEncoder","buildQueryJoinExactIn","maxAmountsInByToken","maxInWithoutBpt","buildQueryJoinExactOut","buildQueryExitToSingleToken","buildQueryExitProportionally","buildQueryExitExactOut","maxBptIn","minAmountsOutWithoutBpt","EmissionsService","liquidityGaugesRepository","proportionalAmounts","referenceTokenIndex","notImplemented","repositories","aprService","poolsForSimulations","graphService","poolsOnChain","joinService","exitService","feesService","volumeService","poolFactory","impermanentLossService","emissionsService","concerns","queries","methods","calcSpotPrice","calcProportionalAmounts","Queries.ParamsBuilder","calcImpLoss","getBptPrice","joinPool","buildExitCall","getExitInfo","wrap","param","UnicodeNormalizationForm","Utf8ErrorReason","ignoreFunc","bytes","badCodepoint","BAD_PREFIX","UNEXPECTED_CONTINUE","o","OVERRUN","toUtf8Bytes","str","charCodeAt","c2","pair","arrayify","formatBytes32String","text","hexlify","HashZero","freeze","ignore","OVERLONG","INPUT_ERROR","WINDOW","window","JS_SHA3_NO_WINDOW","WEB_WORKER","self","JS_SHA3_NO_NODE_JS","versions","global","COMMON_JS","JS_SHA3_NO_COMMON_JS","module","ARRAY_BUFFER","JS_SHA3_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","CSHAKE_PADDING","SHIFT","RC","BITS","SHAKE_BITS","OUTPUT_TYPES","CSHAKE_BYTEPAD","JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW","isView","buffer","createOutputMethod","bits","padding","outputType","Keccak","update","createShakeOutputMethod","outputBits","createCshakeOutputMethod","createKmacOutputMethod","createOutputMethods","method","createMethod","algorithms","bytepad","Kmac","methodNames","algorithm","methodName","newMethodName","blocks","reset","finalized","block","blockCount","byteCount","outputBlocks","extraBytes","notString","lastByteIndex","right","encodeString","strs","paddingBytes","zeros","finalize","arrayBuffer","Uint32Array","digest","h","c0","c1","c3","c4","c5","c6","c7","c8","c9","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","b16","b17","b18","b19","b20","b21","b22","b23","b24","b25","b26","b27","b28","b29","b30","b31","b32","b33","b34","b35","b36","b37","b38","b39","b40","b41","b42","b43","b44","b45","b46","b47","b48","b49","regexBytes","regexNumber","regexArray","_pack","zeroPad","toTwos","byteLength","baseType","pack","tight","keccak256","sha3","keccak_256","protocolFeePercKey","gyroPoolTypeKey","encodedPoolTypeKey","GyroConfigRepositoryImpl","gyroConfigAddress","gyroConfigInterface","encodedPoolSpecificKey","hasSpecificKeyHex","hasPoolTypeKeyHex","hasDefaultKeyHex","hasSpecificKey","hasPoolTypeKey","hasDefaultKey","getUint","gaugeControllerInterface","gaugeControllerCheckpointerInterface","GaugeControllerMulticallRepository","gaugeControllerAddress","gaugeControllerCheckpointerAddress","AbstractSubgraphRepository","attribute","skip","BalancerSubgraphRepository","blockHeight","GaugesSubgraphRepository","GaugeSharesRepository","desc","number","gaugeShares","mapType","subgraphGaugeShare","isKilled","findAllBy","UserAddress","gaugeId","GaugeId","childLiquidityGaugeInterface","LiquidityGaugesMulticallRepository","currentWeek","rewardCounts","passingRewardCounts","getRewardCounts","gaugesWithRewards","startIndexes","gaugeIndex","flat","passingRewardTokens","decoded","LiquidityGaugesSubgraphRepository","qauges","preferentialGauge_not","preferentialGauge","LiquidityGaugeSubgraphRPCProvider","workingSupplies","relativeWeights","inflationRates","gaugeController","g","getWorkingSupplies","oldFactories","childGaugeAddresses","factory","getInflationRates","getRelativeWeights","distributor","last_update","integral","periodFinish","compose","subgraphGauge","BalancerAPIClient","toPayload","jsonToGraphQLQuery","ms","mapToken","priceRateProviders","_f","_g","_h","_j","_k","isPaused","_l","subgraphToken","subPoolInfo","mapSubPools","metadata","mapSubPoolToken","PoolsSubgraphRepository","fetchAllPools","PoolsSubgraphOnChainRepository","poolsSubgraph","filterPools","filteredPools","onchainPools","forceRefresh","fetchDefault","onchainPool","PoolGaugesRepository","PoolJoinExitAttributes","PoolJoinExitRepository","Timestamp","Asc","joinExits","item","Sender","PoolSharesRepository","Balance","poolShares","subgraphPoolShare","PoolId","StaticTokenProvider","CoingeckoPriceRepository","baseTokenAddresses","platform","urlNative","debouncer","tokensPerPriceRequest","signal","isAxiosError","status","fetchNative","Assets","assetId","MATIC","XDAI","finally","inputAddress","baseAddress","nativePrice","CoingeckoHistoricalPriceRepository","urlRange","statusText","range","SubgraphPriceRepository","TokenPriceProvider","coingeckoRepository","subgraphRepository","aaveRates","getRate","HistoricalPriceProvider","FeeDistributorAbi","feeDistributorInterface","veBalInterface","FeeDistributorRepository","feeDistributorAddress","bbAUsdAddress","FeeDistributor","previousWeek","getPreviousWeek","fromTimestamp","midnight","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","daysSinceThursday","getUTCDay","weeksToGoBack","claimTokens","extractTokenBalance","vaultInterface","protocolFeesCollectorInterface","swapFeePercentagePromise","FeeCollectorRepository","getProtocolFeesCollector","collector","fees","getSwapFeePercentage","swapFeePercentage","iProtocolFeePercentagesProvider","feesPromise","ProtocolFeesProvider","protocolFeePercentagesProviderAddress","yieldFee","protocolFees","TokenYieldsRepository","lc","yields","fetchBlockByTime","BlockNumberRepository","dayAgo","Data","subgraphQuery","poolJoinExits","poolGauges","blockNumbers","blockDayAgo","getBlockNumber","initialCoingeckoList","subgraphPriceRepository","coingeckoHistoricalRepository","protocolFeePercentagesProvider","poolType2PoolKind","LEGACY_STABLE","COMPOSABLE_STABLE","COMPOSABLE_STABLE_V2","WEIGHTED","setRelayerApproval","gaugeWithdrawal","encodeGaugeWithdraw","gaugeDeposit","encodeGaugeDeposit","peekChainedReferenceValue","buildPath","buildLinearPath","buildMigrationPool","findTokens","nestedTokens","migrationBuilder","peek","fromGauge","toGauge","fromTokens","toTokens","exitOutputReferences","swapOutputReferences","joinAmount","migrationSteps","needsSwap","actions.setRelayerApproval","actions.gaugeWithdrawal","isComposable","actions.exit","swapPaths","getMainToken","mainFromTokens","mainToTokens","exitSwaps","fromIdx","toIdx","toPool","buildPaths","batchSwaps","actions.swaps","references","actions.join","actions.peekChainedReferenceValue","actions.gaugeDeposit","Migrations","poolsRepository","gaugesRepository","getExpectedBptOut","steps","relayerReturnValue","expectedBptOut","ActionStep","BaseAction","mainTokenInIndex","mainTokenOutIndex","swapAssetInIndex","swapAssetOutIndex","swapReturn","opRefKey","actionStep","getActionStep","getActionAmount","hasTokenIn","actionHasTokenIn","hasTokenOut","actionHasTokenOut","getActionMinOut","opRef","nextOpRefKey","getActionOutputRef","opRefStart","getSender","receiver","getReceiver","TokenOut","Middle","TokenIn","tokenInIndexAction","tokenOutIndexAction","Direct","getFromInternal","isBptIn","getToInternal","isBptOut","getPoolKind","exitToken","bptAmtIn","exitPoolInput","encoded","getAmountIn","getAmountOut","fromInternal","joinToken","joinTokenIndex","approveTokens","isBpt","toInternal","getLimits","updateLimits","newSwap","isChainedSwap","canAddSwap","encodeApproveVault","batchSwapInput","encodedBatchSwap","copy","addSwap","orderActions","actions","categorizedActions","enterActions","middleActions","categorizeActions","allActions","orderedActions","batchedSwaps","batchSwapActions","isExit","pricing","claimService","migrationService","hasFetched","isFetching","fetchFromCache","fetchAll","awaitEnoughPoolsFetched","nextToken","formattedArgs","__args","apiResponseData","totalChecks","rewardsBreakdown","tokenAprsBreakdown","providers","currentProviderIdx","fallbackQuery","currentProvider","func","race","lowercaseAddress","newJoin","newExit","getActions","totalIn","totalOut","diffOut","checkAmounts","spender","ownerAddress","nonces","Permit","hasJoinExit","specialization","normalizedSum"],"mappings":"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A,QACA,MAEFC,OAAQ,CACNC,UAAW,CACT,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,uEAGJC,WAAY,CACVD,UAAW,CACT,qEACA,qEACA,uEAGJE,UAAW,CACT,6CAA8C,qBAC9C,6CAA8C,eAC9C,6CAA8C,aAC9C,6CAA8C,aAC9C,6CAA8C,6BAC9C,6CAA8C,6BAC9C,6CAA8C,cAC9C,6CAA8C,cAC9C,6CAA8C,aAC9C,6CAA8C,uBAC9C,6CAA8C,gBAEhDC,SAAU,CACRH,UAAW,CACT,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,uEAGJI,SAAU,CACR,qEAAsE,CACpEC,KAAM,4BACNC,SAAS,GAEX,qEAAsE,CACpED,KAAM,4BACNC,SAAS,GAEX,qEAAsE,CACpED,KAAM,sBACNC,SAAS,GAEX,qEAAsE,CACpED,KAAM,sBACNC,SAAS,KAkTb,CAACpB,EAAAA,QAAQ6B,SA7SkB,CAC3B3B,OAAQ,CACN4B,OAAQ,CACNL,GAAI,qEACJC,GAAI,sEAENK,QAAS,CACPN,GAAI,qEACJC,GAAI,sEAENM,KAAM,CACJA,KAAM,qEACNC,UACE,uEAGN9B,WAAY,CACVC,QAAS,GACTC,QAAS,GACTC,eAAgB,GAElBC,cAAe,6CACfC,YAAa,6CACbC,YAAa,CACXC,SAAU,IAEZC,UAAW,CAAC,IACZC,kBAAmB,CACjB,UACA,aACA,SACA,gBACA,QACA,QACA,QACA,MAEFC,OAAQ,CACNC,UAAW,CACT,qEACA,qEACA,qEACA,qE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WAAWyvB,EAAwBjZ,MAGxC,CAED,OAAO,IACR,EC9DG,SAAUmZ,GACd1T,WAEA,GAA8B,iBAAnBA,EAAO3c,QAAsB,CACtC,MAAMswB,EAAgBrkB,GAAwB0Q,EAAO3c,SAErD,MAAO,IACFswB,EACHrjB,KAAM,IACDqjB,EAAcrjB,KACjBC,iBAAUhW,EAAAylB,EAAO4T,iCAAqBD,EAAcrjB,KAAKC,UAE3DsjB,SAAU7T,EAAO6T,SAEpB,CAED,MAAO,IACF7T,EAAO3c,QACViN,KAAM,IACD0P,EAAO3c,QAAQiN,KAClBC,SAAkC,QAAxBhL,EAAAya,EAAO4T,yBAAiB,IAAAruB,EAAAA,EAAIya,EAAO3c,QAAQiN,KAAKC,UAE5DsjB,SAAU7T,EAAO3c,QAAQwwB,SAE7B,CC1BO,MAAMC,GAAkB,CAC7B,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA,qEACA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"} \ No newline at end of file diff --git a/package/package.json b/package/package.json new file mode 100644 index 000000000..2435426fa --- /dev/null +++ b/package/package.json @@ -0,0 +1,107 @@ +{ + "name": "@balancer-labs/sdk", + "version": "1.1.6-beta.16", + "description": "JavaScript SDK for interacting with the Balancer Protocol V2", + "license": "GPL-3.0-only", + "homepage": "https://github.com/balancer-labs/balancer-sdk#readme", + "repository": { + "type": "git", + "url": "https://github.com/balancer-labs/balancer-sdk", + "directory": "balancer-js" + }, + "bugs": { + "url": "https://github.com/balancer-labs/balancer-sdk/issues" + }, + "main": "dist/index.js", + "module": "dist/index.esm.js", + "browser": "dist/index.umd.js", + "typings": "dist/index.d.ts", + "files": [ + "dist/" + ], + "scripts": { + "address-book:generate": "npx ts-node -P tsconfig.testing.json -r tsconfig-paths/register ./src/lib/utils/generate-address-books.ts", + "build": "rimraf dist && rollup -c", + "dev": "rollup -c -w", + "test": "ts-mocha --paths --recursive -p tsconfig.testing.json 'src/**/*.spec.ts' --timeout 20000", + "test:only": "ts-mocha --paths --recursive -p tsconfig.testing.json --timeout 20000", + "lint": "eslint ./src --ext .ts --max-warnings 0", + "lint:fix": "eslint ./src --ext .ts --max-warnings 0 --fix", + "subgraph:generate": "graphql-codegen --config src/modules/subgraph/codegen.yml -r dotenv/config", + "example": "npx ts-node -P tsconfig.examples.json -r tsconfig-paths/register", + "node": "npx hardhat node --tsconfig tsconfig.testing.json --fork $(. ./.env && echo $ALCHEMY_URL)", + "node:goerli": "npx hardhat --tsconfig tsconfig.testing.json --config hardhat.config.goerli.ts node --fork $(. ./.env && echo $ALCHEMY_URL_GOERLI) --port 8000", + "node:polygon": "npx hardhat --tsconfig tsconfig.testing.json --config hardhat.config.polygon.ts node --fork $(. ./.env && echo $ALCHEMY_URL_POLYGON) --port 8137", + "node:arbitrum": "npx hardhat --tsconfig tsconfig.testing.json --config hardhat.config.arbitrum.ts node --fork $(. ./.env && echo $ALCHEMY_URL_ARBITRUM) --port 8161", + "node:gnosis": "npx hardhat --tsconfig tsconfig.testing.json --config hardhat.config.gnosis.ts node --fork $(. ./.env && echo $RPC_URL_GNOSIS) --port 8100", + "node:zkevm": "npx hardhat --tsconfig tsconfig.testing.json --config hardhat.config.zkevm.ts node --fork $(. ./.env && echo $ALCHEMY_URL_ZKEVM) --port 8101", + "node:avalanche": "npx hardhat --tsconfig tsconfig.testing.json --config hardhat.config.avalanche.ts node --fork $(. ./.env && echo $RPC_URL_AVALANCHE) --port 8114", + "typechain:generate": "npx typechain --target ethers-v5 --out-dir src/contracts './src/lib/abi/*.json'" + }, + "devDependencies": { + "@ethersproject/solidity": "^5.6.1", + "@ethersproject/units": "^5.7.0", + "@ethersproject/wallet": "^5.5.0", + "@graphql-codegen/add": "^3.1.0", + "@graphql-codegen/cli": "^2.3.0", + "@graphql-codegen/introspection": "^2.1.0", + "@graphql-codegen/schema-ast": "^2.4.0", + "@graphql-codegen/typescript": "2.4.0", + "@graphql-codegen/typescript-document-nodes": "^2.2.0", + "@graphql-codegen/typescript-graphql-request": "^4.3.0", + "@graphql-codegen/typescript-operations": "^2.2.0", + "@graphql-codegen/typescript-resolvers": "2.4.1", + "@nomicfoundation/hardhat-network-helpers": "^1.0.4", + "@nomiclabs/hardhat-ethers": "^2.0.5", + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.0.0", + "@rollup/plugin-typescript": "^8.2.1", + "@typechain/ethers-v5": "^10.2.0", + "@types/chai": "^4.2.12", + "@types/lodash": "^4.14.177", + "@types/mocha": "^8.0.3", + "@types/node": "^15.12.4", + "@typescript-eslint/eslint-plugin": "^4.1.1", + "@typescript-eslint/parser": "^4.1.1", + "axios-mock-adapter": "^1.21.2", + "chai": "^4.2.0", + "dotenv": "^10.0.0", + "eslint": "^7.9.0", + "eslint-plugin-mocha-no-only": "^1.1.1", + "eslint-plugin-prettier": "^3.1.4", + "fishery": "^2.2.2", + "hardhat": "^2.9.3", + "mocha": "^8.2.1", + "mockdate": "^3.0.5", + "prettier": "^2.1.2", + "rimraf": "^3.0.2", + "rollup": "^2.52.8", + "rollup-plugin-dts": "^3.0.2", + "rollup-plugin-terser": "^7.0.2", + "tiny-invariant": "^1.1.0", + "ts-mocha": "^9.0.2", + "ts-node": "^10.9.1", + "tsconfig-paths": "^3.14.1", + "typechain": "^8.1.1", + "typescript": "^4.0.2" + }, + "dependencies": { + "@balancer-labs/sor": "^4.1.1-beta.17", + "@ethersproject/abi": "^5.4.0", + "@ethersproject/abstract-signer": "^5.4.0", + "@ethersproject/address": "^5.4.0", + "@ethersproject/base64": "5.5.0", + "@ethersproject/bignumber": "^5.4.0", + "@ethersproject/bytes": "^5.4.0", + "@ethersproject/constants": "^5.4.0", + "@ethersproject/contracts": "^5.4.0", + "@ethersproject/providers": "^5.4.5", + "axios": "^0.24.0", + "ethers": "^5", + "graphql": "^15.6.1", + "graphql-request": "^3.5.0", + "json-to-graphql-query": "^2.2.4", + "lodash": "^4.17.21" + } +}