From df381276cb734858e62fd8e3768f788c8d60292f Mon Sep 17 00:00:00 2001 From: jpsains <32621022+jpsains@users.noreply.github.com> Date: Tue, 12 Nov 2024 15:04:35 +0000 Subject: [PATCH] feat: pendle (#364) * feat: pendle * fix token name issue * db update * db updates * correct snapshot names * fix snapshot * update more snapshots * stop expiry from showing on result * fix expiry check and update snapshots --------- Co-authored-by: Bernardo Garces Chapero --- arb.db | Bin 1179648 -> 1179648 bytes ethereum.db | Bin 8953856 -> 8953856 bytes op.db | Bin 516096 -> 516096 bytes .../aave-v2/common/aaveBasePoolAdapter.ts | 12 - .../tests/snapshots/ethereum.profits.json | 2 +- .../ethereum.deposits.moo-token.json | 4 +- .../ethereum.positions.moo-token.json | 4 +- .../ethereum.withdrawals.moo-token.json | 2 +- .../ethereum.positions.lp-staking.json | 2 +- .../tests/snapshots/ethereum.tvl.json | 2 +- .../snapshots/ethereum.positions.sena.json | 2 +- .../tests/snapshots/ethereum.tvl.json | 2 +- .../tests/snapshots/ethereum.deposits.json | 4 +- .../snapshots/ethereum.positions.susde.json | 2 +- .../tests/snapshots/ethereum.prices.json | 2 +- .../tests/snapshots/ethereum.profits.json | 2 +- .../tests/snapshots/ethereum.tvl.json | 2 +- .../snapshots/ethereum.positions.user-2.json | 2 +- .../snapshots/ethereum.profits.user-2.json | 2 +- .../snapshots/ethereum.positions.user-1.json | 2 +- .../snapshots/ethereum.profits.user-1.json | 2 +- .../tests/snapshots/ethereum.borrows.json | 10 +- .../tests/snapshots/ethereum.positions.json | 2 +- .../tests/snapshots/ethereum.profits.json | 2 +- .../tests/snapshots/ethereum.repays.json | 8 +- .../tests/snapshots/ethereum.deposits.json | 48 +- .../tests/snapshots/ethereum.positions.json | 2 +- .../tests/snapshots/ethereum.profits.json | 2 +- .../tests/snapshots/ethereum.tvl.json | 2 +- .../tests/snapshots/ethereum.withdrawals.json | 16 +- .../tests/snapshots/ethereum.positions.json | 2 +- .../tests/snapshots/ethereum.prices.json | 2 +- .../tests/snapshots/ethereum.profits.json | 2 +- .../products/lp-token/pendleLpTokenAdapter.ts | 38 +- .../ethereum.positions.lp-pump-bts.json | 2 +- .../snapshots/ethereum.positions.yt-lp.json | 4 +- .../snapshots/ethereum.prices.lp-price.json | 2 +- .../pendlePrincipleTokenAdapter.ts | 39 +- .../tests/snapshots/ethereum.deposits.json | 8 +- .../snapshots/ethereum.positions.pt-sy.json | 4 +- .../tests/snapshots/ethereum.prices.pt.json | 4 +- .../tests/snapshots/ethereum.profits.json | 2 +- .../pendleStandardisedYieldTokenAdapter.ts | 38 +- .../snapshots/ethereum.positions.pt-sy.json | 10 +- .../snapshots/ethereum.positions.yt-lp.json | 6 +- .../tests/snapshots/ethereum.prices.sy.json | 2 +- .../yield-token/pendleYieldTokenAdapter.ts | 85 +++- .../snapshots/ethereum.positions.pt-sy.json | 452 +++++++++--------- .../snapshots/ethereum.positions.yt-lp.json | 300 +++++++++--- .../tests/snapshots/ethereum.prices.yt.json | 4 +- .../tests/snapshots/ethereum.deposits.json | 4 +- .../tests/snapshots/ethereum.positions.json | 2 +- .../tests/snapshots/ethereum.prices.json | 2 +- .../tests/snapshots/ethereum.profits.json | 2 +- .../ez-eth/tests/snapshots/ethereum.tvl.json | 2 +- .../tests/snapshots/ethereum.withdrawals.json | 4 +- .../snapshots/ethereum.positions.user-2.json | 2 +- .../snapshots/ethereum.profits.user-2.json | 2 +- .../snapshots/ethereum.positions.farm-v1.json | 2 +- .../ethereum.withdrawals.farm-v1.json | 2 +- 60 files changed, 687 insertions(+), 487 deletions(-) diff --git a/arb.db b/arb.db index e0b1cd1f48262ab3c951f1d32724a481d3e8972f..f95336106115673c1ec6129f8266d1824934565d 100644 GIT binary patch delta 30228 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 delta 47880 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�hz*lf-V>inQnXrEj-P!!}~&*&F`_2c9)Vd%`DcNARhRhpn`NfoKe z2lQsqB7C@X3xW!9lCTsGzY^5I)P4+EuLiYodRkEMf(MTBiLV9yu3-!~7+(ph#aXSM z=48-bKXj;l9aN1C=Q4$C9O8=4-?u?U3dZoU@Y~IxTPn^Vh+;2~!m2gS5uASwx`ean zObXSjhGN(CXOOu)XShirxpCYGZf<##gDRplY{v%czrM*DGi48 zhq>?r@jQpkVk@Pq5U^mPHM|j3*9-3r;XQG3yb&&>^9_vtTcJFI|1E;4y(mmJ@P`zf zQGBE~)>QMt=;wJ$3(hE-Hw))`;ymbO%oS%?Mm4Hw#OcrVMw(AOSgk>R#@WJ#HT*p% zrgon2@*e&anpZ%T@IHeT*Z4O7!(7fFcIlNzs&Vv+436aVuTqjzeciE-j|yI)P7LnAcDh(-nL<$;X{tTm^LUt25&S!2o-UMD z2A6YkQ9o@lWmgl5)xOlf59)<^pG10cd&bh&IsiIcWmu5ivEe^=v z%nR<%NUOkoesF{mi7P28VHJ)5`uV{h;3)e7W#?U9$qUmL2Y)YR-r69HeLi?FK07lO zuU{FApAh`0@e_)lF#LoI>sLm+wiE*9YeSeX-xnsiMBb4~ufm4V>AXU68a>vhtXS~&Nj%B#T zb@YtqS=g9=Y_2!&Z*~X$;zedos&>^9RlM?nvPC&b>7_WUXiyAONVvDTO0JK*Q)a__ z%;=f^(mT>^(juvoq+PNEM~SXK+wLF9rp4*R3oZpRg$1waDZNz)8zI7Wht!HN1;Wx0 z29F=$LWKA96njE7T%;5RSJBnyYuCOF!1;|`e}(ci&Qqdu`lb^&Pjxk1t)0TSLp-|`zn<%BcQg= z6Ots6M0&SN2~uc@g!!#MdSpF;QZ<(J&^}&F7@yNa)4?LF$^xJBZXE`7(cSBj%Qz8M zG_i{x5jqfIu=~#*LeVWnTgRjxQU{1Isi8;8Sdy~gQCCXBt3QE!)eRvv93!T?Go?qm zXhK!>xQE1kB2`3QSDpy3zJyBO+M}eSx~LxX$Wf#STbkb^CA!MJLD$wJWw=O{aMtH( z`GkqEw%>YG0D9ED!S;TS9H|Lp#Roljp)-z@PSqcap7IJ7VJ){kL>SSZCn?K6?2$4^ zq}u(khyHy;*n*7VHT2IHG>5^5WRl1d#JXdbVo?w@=@vOvhsb#XI z#NwdEY>N={Yvyasv&}8cj+xb&4N^T&?Nt@4oRl9c%ay$1y5dzus)FNMxpIu#IWJ!$ z+b64(^<;fLzb-fA%(C?~(`2fia-Baqg~MMf;FX9NUopL04Q<7;UQGRDn0S+pa}0#m%l z%R-&hG*Ae!V!#mcoG9|NF|Xp?3A{UOsON8Pps79uyeni8aBgIwxeAkEr%Y672rcGe z^r%8-77Hg48hYmpVo_iMgpV#v;7s+{=eWYgqS#Ov>X2ipLKOBmByh%N4+hRGcF3_+ zV8T*D)le!6wN;adAtIW@C8e9{OJL=#>WBammN0d4`9x9{IRxF~mQ>3Gv04V<1iBZZ zNt{yGMTtztL)AoCgr8VmPYZ|^Uw0{C!55Qi(ci8Ph59~PTcWE@)YbNF?4i%u=Gdyz zO!Y-#Jcm9AGp-n0=&njN)sMpf4Ro_tnW63M@1u1kg)tUx+lqxT2Ey%f;z^^#D61$~ zF&dL6LvXi=n1Yb0FPcdLx=>7t|Ad5k3YlUlj<=j0d>nm-8`}8gHh^l zf!baKhQS30Ykbj*2j6jpy;uZ|f|{vVN$(e6_z~WY6jSLx$>pJmkf2_)YfwHqnC{;@t>J=BF?Ts-&^;u#JkWCv&nN{dW=rciYpOZ**&43rO3x^O`I_SN$ zi5UD;kFx-GDAFO1&qA~|GE;pTbcSf-3DIz{@zy4iU#W1@AIb6gz+s^myoWI@W|^9V zObvzw)yIKNA8kDLfc0d|Xe`D?^JyP#FZ71j_lH65ImtvZ92Q7$QtMvQe6*+-!lI#5 zTR2o{s>jg)k&Vl1dB`s;bV4P)X-0T=iO_ zgCkRWN_c*6B8k2F5q7?n7{(ahg;QQb!UW5Gi3iY$C5DT?z69g1?(I*kN8j~s(GRr+ z9jn`f#8FDdu=YS};z!Fl{W0pH$&{s{(=IKk9DRTDMK8`ICmvoJnN%z{kdP(tKEnkI z0i%-6qUW{pKvB|937q~erOfn3_nFV8q>mMh;XUDIQ<67&2Nw(0JCa_NamEFdf9GoS z6rbCb+}WUU5oBPrLrK zaLP3~2eWpBiYzN}!f-M7W`6jBy=CI3&--h>deXDy!LyPV)-*k<(y= zW4qv`&}>6TU72vqLQ{c1_QP{_nj*%q0A9C43jJ>3gq>!4Kdx4E_r<4Zu$G2t=Ergd zF^pi9TO_)YYene|k1*h+u2w^Qum^?hMootgSG$WU*7kfYp<7S$_R2JW9up4 zFsynkdYIqTysBV~9|@OsX}quj%|6hgk$Ux0O_w-HHc3>D$`6&}l$@ejF^c<>dxJ}t z-rhO4CtBIMVLI^I{ zlC3IxzQ?U9uWZorigw(b^&BoSYR3d)NZbZ(0MkAn+%{^nnf7^5iC0BCuI4VptvNdw z4D7zQQJc!N&w;_4v@;a#xK2y9&&1tCZr^Ou_F>v*gXL!JXhl12rW%b4NNoi3@@8!m z(>@c9ZPpeu?K2?s4Q;WaeL8M|!L&A|BzW)*ZJ?qZ_dO9v!v~ngc?*G5qHf6LQ7b~K zwrKsC_6k_DMLU{lFNeE$RkTl&>tZlJSB&^j%-u>T%3#A*Z64D;6@K4JC~!5GXcFIs zJZj(6Mk(4SR1->eN}+6zI~ti>AB!a;g10LPu$YNkCO8g`NtxI#&`I%RG5 zyxAo+>Vhl+C?-T1+VSWjy%w*x!aG^|4iH5*@w8v%iCdyBf}U>!T_fs zn=#0)T)6BzWcf^{&Ow;AX2``C7~@4DEpX^M^muQh%~tw&2rsyV4n2fk;akG_zC&~I zIr=~dj~yBp!sx#iDoTb1r7;Eryt-#7K2Y_-r+bF}%5rs5D)aSQ-n{VBfuVLP=@1P1 z9hwL!twYnL254*@`Xy`eu_ORi1!wyR4Q)gF<6icq809+{_X;bdjvrI$;d3wuC-AeO zc8-j3CY<^KMHuEo*;TyiUlU%xI`lS1`*sK`dJn_+Ji{X4W2a%*!RdDiKR6Hb#8|1* zf`#X>s=kczHK8VF*gF{FSx@5dnlTT4%AO46I^x?0upq)ZfZrZZ$k}?cVZ%K0* zrRdKc;WFhH-kEOYiPDz>UtH1qUCrg$ok!}iOBRwIVDYcjE ztu!2pS4gBfi9rMk}4=A&)@>NAYMP%?O?Pi)iEV_}VR`q*= zXmdq1QiU!~eV@RK`eb3~f)Dw98uT?z6?M;iLI!1QEVaMJs9V4DnhNbebs3k2< z*de6lD*+vMYlO9#DGCfi6raG*e~ssbFD9gn#1Ub=z?Y_^VIa--!kqGy=cO2MA@OHA zCDz-lldW!AHCTmMerdVD($C@;I{iG%KQga0w=;X&tU&cpwMjKh`IE9yIY@C$@uFe? z_cgbain^}QMwYZa74eqzH+!X~T zBRZ91AmLV4DEOSw^n&MaWjUxunT+UJ#;v@Kg?c_bGgqBm5|fsltB&lKIx;OXJhJcK zfN(3V5xop#EA4ytgLn%hnK83OH~+r3Cr(9Bl&RMblp_yt}9W)u{+U79szd{WzmH~mzYKk>bue2B)jOaCOemZD`aVY zXO&MT`*xwVV2Ol9T9;eRi8Ru zg=pN-Pp}z3MY|C!db$ZV;g_itOFWCH&@RL(3Qb1zddI@4pQ1y-_g=I;c;Ab5B&CFo zZ|qg?MPn(I%%kk)-4ofN`FGPhdAtQbfg`kH#0xA&`f>n=O z+traVsUy?7%I_J7D$is@?|Hv|Qn*;ZfH%kTnKy&@DY3fT?niqlvQ0+xrH4Vn{pe7x z3$fsSG=}y0z-#xTBSNt}t7#?m5b`XDRFbz?N!As?ygf?kuE!^-;K~NBmkL|2m)Lr} zUy$+AOz3Q>w1;iKMmrFcr-=HqB!xC?)U+$><`1H2!^W_eD2R9vjSX8@Nj7+^Vcvsi z`hdBU2W%ap>`4yA@_kw`@WLj}QDMYz7_vb=-MN-mqLMRk%fA}pek0j+g~H#WBSO?V zEF63Udo;;sARJZ>hRcxJtjciVLkS<+s3Q9%WM+3)!(SnGnI@yNT&Gq`;ouM%l`Ymm z*6-2I;-8L5f-_XvqMs`g0Y83Qnql6p;L(aGzDYN4NDHRr|fWL4A+I7KcpN=V)UKDw6N4n z+<}xM9F9mWG3N|TbnMUinZaq0aUZ>@>_3wi>f=&};Y?zcaB^^}E6*5ThntgA+Ze+k zVfU0&8{8)Hj?h-0x(jDLn}w=nsrI$qlI*=~-b( zL+S@8ISFm-)} zTTQ9BFQHc4^HNidlc3ejsn>8b(ip1ool_Wz-LxxpInsz>&FiOQoMFkH)bD*5!#N@A z%hVkM8GV!R$YyxE6=S#{w0jO88OPP$pvl+e59fuEV}`flrjbu5WaT1^ywn(n|AVQQo)J8hZXAAuseMTZ*)%*4-1=+jk$tD;!he4IzGl3ms*xU!&P9zRu^9-8< z!L9$aJkXy?8)Or2*o?!0uOn`-*Nif3c7;*zl#OEh8#X(`;IV1_S%f*kn)I?!szk$P ze8~NsrJz4L3d1EHS71kJ*o@C=9Ck8$4skq;>|YqnCL1=}gYNvWWH#5Z*$(FPpO(wU z88+KM`u?eLsyM?Yj8yT&b8^CtkK%(9Gt!6WW(?P)lOJ|+ONl)Wb!t?mZ&J+o=m_0} z=)V&?*suu=H2+>wxOEOAH)bswYQxGmO57kks=w1yyTqP2c{dvHg-Lg=nx8Wj?mVUBI_1dm=g zy}of~m_;vTfut9XcR`rZev#p^ku{C_X#PjufK;Jg*K(W|a>xXGPL! zPB8FP+E6JAp~EuAiSXyV;p?y%HZ6h?&LjFe zn;nv1Ez#^oCdNcZ#zdAzMPu8*P?ZBo394wrrui62g1LRT%AfZdU0N}ENQRwxAxT8} z>n4PUmqx_I_KO^B*c<`#-A4>&6Ahc@z=B1ZMArPigoVxXh8GZtvtY3Mi2kg_OOgVx zn3^<76>r#tYXSaP--XApD8J!H*s3f;B?VL;u(^uSKC@1w1+oJTn<~Ke*R()5WT;U( z46m3z*(;@d*6@t%6qV(%Zu+!djyz~$3Inl0Zz_Wkza|Y*SxqE|Mm>iEW^kD(1t#e7Dz(Ntgy|K6R4v5Cg&P96@u5qq+G1dO$E?; zF3kx#y+`7JG4tk*l57>9_Ebr zaHxz|Yym~rP2w7i@_!gI(whR4Fk2sC{{k{{dzZ&t5JELzFjy)JL zU?|$1*l6R^C&Tpk^p~I7oiP4(ZXcmEA$^M_W2_e}Gt#e2V~mG{I|tL9ab(C9%nzr( zk0Jf7REx{@Q_yPGe-3{fNk`y~A+XFN>-HV!yMKKLYEHHsX;<|j)fhD@f_1FLmbsg^%kzG|6laSe|S2{msw zpKb1D_L12XGdnD6-&bN9KmT%x>FzCiB8?qdsCM)rm*mAT2h$n=$V zK%Q4tCS-l7abpY`sQ6M70dIY&v4uTfYV2`7X-F35lc(Nhc=P-o^GTc28V{Vs8IrJZ zqj^$swwAXL@!fOi(;82-g$#*E02@wgLgDUdw1s{=t#KgW1Om3`(1e#cPLJSyOOlE}dY;xv9 zk)b$m?Wx`~5W6Ci0Rze6;-nCgT+3Tyn!lJ{w&yf{j3E|c&SCLW(`(T=4Nijk!)pk6 z#_&2viDTd~qW)@l4Lq+QhL?d@gqYvY<^)ppx@YIzvs{$^EC}cHhJGZ!ADt)p?V6P~ zekEoXqnJr{!-jbADoor}S!2J_5HrYt5zP@`_)3FQ)-E&XeS#@888EIn7CI3Fkry=f z5Pm^J>@7nCNsxYlBJJu*e;`R z{r5(S?c)08MU98TfF>cCiHDAN5^A?Nz{begf)oy zH?s?Q{JYs@KueLBUExR5c{pHG9fYQq0Vf1uka-!iZ*N=e&0-Pvf$f(yXm&hnQqe;F ztKmgz1Y@Y9Z~>ab8tJMqII{syeZn>y04*(*TA9h<4_13BwMvr#4L?%p?vMOwBk#7D zTsLvFk)z!ggA3A}_`G$MP~9fZTVe1K?WBa4Yj`Ee9kr7#VLHa(4S#Op{@qSOs(-hW z3~1}oX3{jAHoIr+B*OXM>?8vkfuwd$E^*;`q@Z?E-!9AQ*?UqX#3saCj(x|6=Ca#- zN_zuyi4}@=AzI6Ca8H}ojyE{kfY2Bu%AGntsb?EjZV|DrBDV7CP>Stp43iOS3ePwY zp2^bkVJzK)o8LmP4ia(o|$JD zC$^G--v-fEGNY6nmZ%07o-WTB#*$}Y5Rc1qMm`G<)Z?@0kc4wp90v&a9s%DaU}T1~ zA{+;T$@*INI^XbMk&%|9s6dpNS~sn75a+y&b znT_W<&YYx%)X*$1GGgYCd{>1&$v0h(+!2Z@AQB_EaS0re5P1!Y(K!qkKM|aTV4NsC zK9bH$^I_w)EPHsKpfEp~qS_H7Iofe_5BELBt7k!^E65NJB~& z8`7yc4DIN;7G+LpTuIk40*f4eL3U4uu?T;x3`~|LCcBASiAet_CR^#BMUxFD$@cj7 zNOlX8ky=V6`q>0LsimoENDrXvvW66r=+5V4+^G~-9CrnXiEuAN6r7@o#B)s5U>PVT z8cGuF{(>aJ5tytV-uOb}b|5^9ZISu2R-h<~?K5(_vQ+7y_*}6R_tdetUu6;3ADy7P z6g+MrRh=&NvlLJdGX0V&Njur|BKr#$nK2) zdx7?3OG7AZA0Hb5Hwp_~iLgLu9ak7nc2nT0D%ttba3Ys?!QB~jIPAWX_vc;6K+q5 z^;6VK zx_Q_>(A#c3ua@^9oW%o8pZ>xn&4Vn!=Y)&tDCgm)#Ztw4I4 zAF7?;+lpA%19!5dULcKUUxPxM(SwBZHlrhz%I0)(qMOHjK%a349z@toPqOov2lPx| zy~Aj^G!4oJX7}ZqhZ9Q3QWc0t>owDp>^!Pr4<4xuow0b1UULfA#AWwYHV>mrXF-F< z=uobi9%TpKW(6TY7%GNP>K{VM^u<_)1dI(@MJ;lyr3Xp?)=_z~7 z1L4HrY;tN{^K-B+vj9^Kps6O3qk2(TESO~#pfEhM6tBwW7>b=hPTxgrG&Cbr(cF(h z;nd-Y!O)&tz;exf2?S1AcV{IE(z8kWNJ=>lcd*IuTwSfTzTEz=whcaWBA z4x@Hp*H+^tHJGFow8abI>pwoXfs{8dL;*gYILg?SJ2jVLO#G&x88J>!r!((;iir*X_GCfV)GFbCg9`BbZ_K{Cc ziKabf*Bzb_zIbZ)&O2*y=N%q{J?a0vjkVV^+gPzOO5tu*N-}QGTU-LteU7nNll|&K+423 z5C<9KBJpSdGzz@II|S*EFA@(GKwE%NMO?$<2zu3sRA>U=Chohq6}zxTq{3-Gp-R}T zZ68 z>2QXQ8@KQENQcvMDmi8D)7r*4If2Em#J2==w*Z`s6Ii7J12no}IMpUF-O8?(av(li z+Av0bNa8CSB$1cOE!bUX5Z{-rl?}4qgn<^h6Qqn}9r3(`+ZWUyz@Z84hVVJz zv3-j*7>rN~hit2pVdGcX=!h(Vwy&}ypvXC=Hz+P-JK=QQI6<7Qx1{6FWOUb(&O!~k z3)!wDKwvyhqS3I5UtBKwClQN=;o%F}ZmKCJBla>whvI5Pr85s<7qi{Tmxl_4qR~ng z@A9r=p>MdD?L@wu(bzGfZ5jiu7qigFJ-$zQG0gT|HkkTH;nL;5DOWN zwa#Ka_03b`mKu30ub^>@`Noz?2*ToupNUF&ObF1&-DQd%SJ%?uk0%CPm)VXL^DKx2 zyI|ucY%hBZ!+61t?B3*y7~w{2;ZfkxksS(A-(=asgpO=`G}?^V%p;(NfRA)!+rS4M z*}X_DV_PS+T;(~AI?F}#`N@(2%6SlI@ykJB?6OT)eNsa6 zf$fEu)KBbXv4Q;sMBM-Qz>vAxw6JQPN0Pso*w5ah$!)~JgqYl+vz&QL#P=|{b>C)r zkpf5al$6Y>Y&}mRg`U*NUt$-?8U(4PCqPoBXui^vWYIq6zJY+TAgJB?K7yaFcl>@0O;ALk-HNsF9YJ-kXK24e6h3umxQ0OuqPpWs-u;dm z$VO_mUO>bXyV~hG+Pauz2ubqX^{mi7;zQcAg6LEG1VDlrG^DE6AT_SY(x>(bmK4}u zA*4QWbR+e-c9a-xMVIuZJ}ntc^el)-!SRo@oXdfJd4xf zi0HD}dnR}mM5LhegGebGQ`H^Jf#&>Q6OktK1Y(DQJ@MiS^Xs^NLIQj6^%;2Z0QPJL zzQ;8g<6tqjR_HN-t$QjR!Q+Q48xjvRNK9t!H2JUbKy!b{BK{j=oY*>S{dhhS**=Y? ziA)$dv@5>l-+`oEp?@R>R5!8tP{&T*%`68~XZC^49BF49%Sv2jTP3osW^2q6Ro7K7 zsQN0;D`zX66#EoIxZB(sE?WLMT|K>S^&-aPby&`}^sxBAqS!)dz6-+RW8InQl9xBS z^+q$Uj{7$=&J67zw85t1yNLd3$@!>QmO;n(-`jF5%SwNG)>cE9=|9%jY zBx}Xt@IPB?NP`{Lv(_3dZ{qy^k3B1E_LKC)Uky4h0xSG`lg{iX$<4o-bnZwk(G#Pt zzY2fhGeDOm{?>5)Uo)0^D~vcjBja!UjWiNQw!t;WQM|awjW|?A!Lm!)*e7*8(D2En zY}#Gn#4QSLQB=48B=~YR?sq7Jw9DB&qTRX|lkoxQcFlBy$ODd3JJOZd{E$W;*JszL zNv|MADL(0vaJA8hlfN)n*-3gtx3+wY&F<>PbJXz4 z*=!nBi4*= z8Sb0qOa_E0q{J?t%f=EDCsMBG3GrkYa2|<2bIfss+Vj~iWO{*S0;v-H4=FTCw0o`e zGA1AsfQe!UJNRYX>+-T~wZEx7_dxqdX*^xL;F@ZvJ=}(8v_bn3jMr~k1ZI1*eVL|( z5RX@7(*i=^Ifr0t`RiN zf%LuFzFbo^O}udi%F};DCtinMhgLmWxdBD1Br) z77|Y33zFj1#hADX;x`sX$&5{v@aQeVUVOhp!YoV_{xM-+4pa6K_S0Yky_P}xCdz&) zWp6vXI~P+Z_fg_;F`Yq#`(%8f1m!*ncI_wJC(<-mFb#BmLb#WL%K^f@1TyJ$0=_5F@7^b{IdFk-|5%fn9j1>seag@|Br;AkCG?r?TN|sQA<@l9h4CxykJQK-D zEul=)NN7ParYRT3zDd*NfZMyI(sB6-i+T`U6{TxDO<9fGC`Be5LJFoS1IiGfGB(jA zFV6u`xsPxh0Y&c-bQ)MSQTpLR7V*b0C_hL@hl1O7%89OIc}9ZmVO-X! z^d>c+0h{*;O)?xp8m#9eSbzX!QzBI`6e6a?b~UgBDB3|u;=$t(Ni!IZBLEu`UBZI9 zq!7G(3D-Dir4$39yqQuwM+>y=)2_w1Cc1p(834GeQ)+8N^B zUkFej&0{t%l#;B!2T=;Ixg4 z;OIIvE+%gyFgqwm7%%$QBm0YeGx2%OAP)B@0GuBhY(*_MMvKlt`YtdvJlw{4G6oxP zZ{o<}JYAx8-_DuA&@^*AV^Bd=GlFw=0 z-9-vf2EQSY=n)86yNL=6=yxMz)Ai~AIJ27zVi%YUQkZv#rJ3-9lXuu4#vp;;5yGiw z;5kuhh`7sQ1X&Ga-esTWf5~0egV8U7Z9RdV6u7YQCuFzodt6RW`H3W50LxnnQ_Z5n z#l{eo57s|a2QbnCn6_-ZAyJGY~7nTMWOsz(pTnD zK;ILGC!MNc&RcnrOh*Vb(`ztv;#Jkbiz!EeVRTV2(-8zV6dWjmbGyKOga!NZ-hRj# zF4E9B-P$UQe%_NGY0lN|r;t6*qXqoY!Te&*IG64TtD1!;$L77CzlY=W;u+czWAb<* z_DDXCM*0hQbawt!1)GBJ(gL&g{FmUR)=|+=gl&`YtNu5u{HtLijIvEEH!ctyvXNjjwB{Z{JnK>7<{_Bo+H4}(6>KgOKy6wJQJkB~B_ z&qCan1aStc@Txl9Atqc;87UA?l$iEa z>X1R9ci`gb{1V0K6Czd7YD)E)NYx0^>WRV3>EqDcfh;?$pcAjE)0af_YA_rq3RZP= zW$Z=R^U4yWz77k{5Cy)27Q8A>e;$=amt>Ai&Fg*zwcvYM}Br;vvSP+5*|Gs$Fig(EJApAgSKLpS7MBR5qRz?`; zpMeE``W@1`8E*ru`YJyd-Z`Hi#he!4Hl;lv($-Md3exTu?-!Dz6;X}1VCh%+CCur) zaQ7?1xUv0%5fqmR}&M?t)gls!s0|S z7VwY~n?v|zLTn}y&w{)Dl(|a0p9!rWQ07WFj&#gv#evTJtGFkkl|CCkT3|%D{Wtlz z0lS7iJq?FK@MQzvpf9HQrba>MEk|7g7 z-&q|5gVq(;z-GIgKy>}rPUt?(uy#B>%@DTZ0fTt%Uu_{dYS4?A8#r2q!QnrnL;ar_ z?a^Msq3o}tz0nH1A4Ox=FAnp0kH|J6OQ@zW;*Q2`W)x-tpCRnoVIEoj+c0l57YDf& zjXYh9?i%K`kE79+GlK<>qn`}(w|uphaQ1O@A2|;5Mio?iT^)h`>_GU}*VQ2kqf%tF zA*{0Jt{e3?)yPNz>EBdSUw05}`=%OC;pgBSLb_)VPgt{PH_1VF6^X~FwZ1q28d>o0 z)h?2mj51j7tF6Ny_$thAkzll+b~K@v;`$-p?pJI55GjERYHhyER9gem?+`pWRNEKt z7Gacwb`<_t2)~6AF0~6lAEwo#gxdM=*>$8`5u{B+_&gYK1Me((t&h@Fiwr z*^G|Y1|Y#4_=6C<$7}tNpjsU9I|pGjyKS&G8VP2@d*36${9tX0T;@TdDE|I%Q#|kc z?0-1i6j3i?sJ*{(?^jE7iN2$ zKB_b`_mU(_A4*;}D_8;z4J97?cNOTROos--nF1W12htA3qlgaUILJkb_oAyBN2f?Q zj&w}N)J9oBq@rUAMMF`q(KtADOcse>hEp$Sacsx+4kThaCPF)2RUM@wS{!E-9VKGg z7F(7KdlR6HCB)-l16~y!#Uj?GH|4Aoldga^eE&027r{U|p&kd7cvW?b74b{ySd5yC z5$~U;LoCu4f(1wDwGfY2MMr_iz14wo&ljody9U*cJh(uqNB=+VeR*_LRknB4tx63c zBozn<7&1VZk`NLIqYME7K_i67m;^EiAwUQfhJcWv5-_1@#h{SwfHByLbX5tVeNAaA zF(^1j2y|6Bpcu5DQzHgnw~dPM?cvrXUw^B+-?vu(^VWK>Zcd%Oe`lX_&%IUWoPG8_ z8*FBhzEJozfKiEYyj&pJY8hSq^TCZM#eWZUU~2YfifnrymOW3v6+G4|{tPI$5O^*$ zV`}x!5w;juV8id0{C#lrKbO&srbD`w@OOa&Q>*_@;g@mUR{w0tvS|guXF+5z!S8?! zOs)Qz!e1)GpFbJUJsQ~~;1Z^0e-geRsRk%X&BRgIzn;O+9KMJiNGa^>Mp!$%!s$Bb z#MJ695s@+j!4|KT{9`hE@E5}aAyjNSv|?)Z-!4LTPtK$_WSW3W)Y*f7D&%x0bQ;uS zYV}VMzF2D@ezN4*Rs-LtNst&yaNH%t)at)Y*lebO6FC0_&O_)to=J^|Ym6QT$zjx# zvBGUeu2ttBBW1~4BT?~>hBm~Y3&nv>$AtgCqxb*$={%1Z8f@E5`%I-XJ?S0kxE4G9 zex}*8dUjTW$&>z7dXvG3e*Lqd^Uvw_5d4Iv=c@+~P^cityfX{k^R1=BEq4Um>chTO z-Rfs*&@(Z(y!+#~s$>2Pjou!MBC0-99rLFLBuu@mO1ND^)(=2r(08f?JV{q=#3iCP z2Ix~Y`jsD1gVpDAJQd-_6yuX7CtLVH_h(f@7v~+&vNa3U9nP817*mj{IA=ioHYQAm zJo#`tq{R|v8ng*vD!7qgak3>()Vo0OgIIOroB}1~TzE3f89-$w!AC-v2(}95+yTTfG2Fm(P+Np97ijosMq00v8rWpj)ka7E-?nu!i^|vH0%;WDzwT6beoT(T1G-* z6+=@XWDvD1nWeqV>nv&62smApMcNc+5*%jCaK^j@WPZiwM$Sa0c;Eo8&V-Ucl-$`6 zTDMuH#4}|U9{RCaz2{-DYzWmklsPk@_!2IK>z_c&AmGIPPRSP)`fN2RIL1g!`&IfIxn$m-68nI{8Ysi0%@39 zT-+Vey>F_mO)l;cn0iXpH@d9c@CZ17YaZ4tTU^pJJt50Hv>OL6|njw%6FDS6Q&j?tN)`-bXGh*v#pG-ehY8kel*)?af<5S2o!-+UbQV; zkpcG9h&I)^84jPqJ8_nA*?DiP-Qe8BKppJK%2A)+M#y-B>fAt_sOzk@HaXXGx!89| zJ@W$9S<38dc*J;u6}2-?I|KH#QKN9{Kyj{vWp9$45(fUrZ-_K*EmN*?pD51ahPMc| zhKWCjPTRQ}ijit^u41Xbyhl$OzkDWV5ff5Q2YPBHguYG13%U3eh&h-u+`Qenf?*e% z0~h`J0h$53~ zDbA%3|1LeF9LU4e;^ZBIs4uiF1ZNhsF=GiAlOR0O0gIXPd6!OK1SM@Gg!c-fE>f>{ zqh96c&ruz4U?hekq>fjd^TGBWbamq@Q>lrOWFAS%;4O4=qwBj zCvzd{G~sv?A?icGGx4!2?uK1RRh;S2imAzY7fUaFM(cz-A@K|qo6Q2f@acMb@EDL> zH(g0a4OLTCtyNu{`D1L^}cj2}VNmpl} z+-A~e%m&M|#GeHdIlTkyn3{bu^@OBttl^o#O@`1|R%=X$kb_hP=Kz?ReKIYCX5?ZE zrpoQf3;=6LgO3?K1#Hg|S|){Xp_~;`lLY;y*n8`I6Tyur#djNYFj}1x<_+YU$HS~c z#2p9aoQ{QNOwB%-4Z`k9mN{BvzDnv+y2n&V|1Fgo1rAKjzL9b_wn5z96hX_p0MW^~ zA4F($7{t`-OA`LG>Uv=dv_+4^No*NhBA9;@#JEtXf1?O>^yiuK1}P-3H3~(;LPROP zMW~D?q3W7MUS{kxby4yugyTa;{Cs%8P11h_t(aQ_-mMWii+(5JEm6OuY@h5 zAU>6y@B#DdAmk0g)j}GkR^R=C3**2iC{}tuTE;*uw;euad=1#%q!+N7@emrGiTCbv zz!sz`zAA8YS_vJPT74BF)eNOSETJC)>3bRZ=pESxW5|{stTo2)`aOFtz$h1^*5E;-K0$m-CSH z?tHq7rErPSc=EuzbdTA>ZAUK3mKA&SQ1-&W2lNWOf+)rNGIU~U_5Oj;(Sz9U0w4HG zl8+M~3!V2xc%Y5iVuw~tt-f{4kK&Ou!Rk|2wLFYc)7L`Idjv0rdQ8o}HPRUSTin#u zaFw~MAn`PziXabDt8b+Uy+XlL@cu;Mf#)Z&T6+atWAJiFK0_k!6_GLT@coItLxxRi zKt8k~O7DXMO?_YecP>c(`EvCialh0bi^;yVr&4{y(|=TU2%f{>@g$7Teh$z7`yJ0k z_bkH0Qk99>c6$5dT-n=TWd1g#QJKHxm56pb1l}_j_S4Wo5n9dquK2 zs&3!g2@^LF{5!B?YV}?g{t~!Rk)2@mek<9w(zD%8m${u9a1Vm~*;e+=pO5&k?lFtvI=68;S8I)r~H zS+wrP*%rb-fXJ-`e;+b1wR-)+M?;iyv?Tepr5EW z>Dq&wK^rxXr^j&#Dr=|%HE4@tPszm9av|(mhQ49070`;Q#kHKK^s$Gb^wE4&7K|fE z9-PjVHFqvFFCh>f+=3w4I%a1%lM9t0sKyC9w?x!9uEmhHhoEc$6?*{Ao?MPg>))b^ zz_k$Ed$L9bW9&{g4TzPUWTrzQux|2ZlFvuheR z9m0dkk__8jQ{nJFx*^sO#`4y(tkC~om4V`#3>gjdTqZ#+rxW27PDRV0xF*0*ApUq* zhN;QLK7H`&M}hty1Me_@bi<=mC%uW`vAmCrYsY)=X}Ly1F|$}L7`v6WOi(Mq{(7;f zRzjyKRua0BAoMX3!K%U7&2W6kTr>~cGskFgv3@dk6HKkqC!!Y76%Wk_HMxfI%aH#` zpfN+C<#7@*gy^~XtS4k!M%Q3Qmi{H6-x&mXPmqK-rl0*ZKpzNgOdr7XlnViRER5Sv z-4FvMm|9%XT*DI95lRhFTq6IIK#BffdyKWtO@`MDTZ7tzcA58^=UX!WrQ@RmW7+;U{_76@)BienroDKud17tt zDhlwJR%ssIYsTz5X3UW&j6IB*%3g7@tDm$i9&TBX)7?C-wifMLd%@|A=HcPE8%aBo zmdUlXXzxzW+%XGL)7W=!ei%lBtX&~)bSDNbi|;|s5%=&P6svy}H}@L+3lk%?O-Jp6 z3EAj6(+f`-vqxlNL3Bc(i;AJ)9MNMApr>x~W7)6oRQuS>TPV`rzax(1Ki*w6Me4_)!zhf{ zn?EWdY1*_o_pB=}!{*b+9;Qg$W!Snmf1(vX9abO2GVI^6OYuSAQ$t6kzF=?2PlREM zkz(4fOCn1CCkuyAaKZmx;LLx#w`~3lk0W#JzCAe{4=$nqJy) z>u1KMqt*65+BCO3uCqhOJvkH1_-Q2F?~SJm6VOGn79BZBP{%Ix+v-I36Giy~9E%Z% zo8*Vc$@2i@4-cD>gvh|kW>>1GUGsM`rSd-5k(@e?{A{VP9Se8VF} z25zs$NAP(I{0E)ag1(U+pd-xT?LGNnW*m_D<)!`69%P0=7aku_+e7+e@;im`{qkpQ zEW&qsejqiWqVp zq2@lKmZQh8Nl?|NR20!R3N2l}z5-rQ~`+9o;}@r%5pF+ESr~zuBcu z^clbqyZgGdbsbU8e4w_Kq~p_#g?=A)Y5iJ}bSAD#8}L0tU)KPtwl(`$YmPC-GDmOJ z>5XCS5ZaM*O3vYH@3_MZHLqYzZmFmNuT@ksPEc&&_`sZ2|(~dj1Abmd!`t7S>ZFDYL!k&XhPM5+&N^88HGts#} zhL{`@d*jHf7{mT*Vy?-cY;Ql7ockf}w9NFJAC-G1SaF>9xF_ds8fdDPV_Y2%;yuhO z$h~Y)svA91*W{vpdHasK#&x-P<#`&{(oMZhmxDSijiwjFmW2%sd&g8mb5ToCXg|xy?jh#-pvf4t z{hV>XvCw?Y{6_b~-M2uRZDB0NEyii8TeczD8WWFP;4Mg~cww=6q(TB*zXu0XH*Y&e zE$T8Oar4Y0YGGhT;vNc3^9jl`kEjJ~^#&b};rz!v7(x~hi#H&1*F*S>?Kng2ixXCN z92`cL$<2F^aOEdE?l?p(!eb6(`k}v}P6ynvkgGP5F*wO)m}Wg(_V@j0`4FP zr8&Kux2_$$rx-Mb;@5$roxI(KVB z*G0}u@YB7!WPNNb&w1=pVopnk<*LKnr2rycHVD z>r-`RUIy{m)W7KAjj6@Wlh@c5p!p26r_$PO1GF)Vw~@Q9v@9;(w8MpVmz9|vI(f;p zj+-S*F6xmIUWzGhE7FrT|Hbsl4J51oASG@ zRva&Q!h;Kbr#Cqy64MEN90peERxk-qEfpPG^O_Cup1kma1U%{a5qPj~!S_nF%TwL2 zz!6jx+^LI1qwe5C=(*p=+HT!xO|x9JG~*ID#{2;;fzkE^m%w(@P&{As(Vz_cd1*Cn z!6R9}GBg<$8*Iv3=+i$=--%1)JbfQsyKW~gwg2wlKf{Cvuz1J;&JJk^?7UMQMCfRS zXraB=qYDkK{s@=WvkR@i(Dr;Cmprmwm zA2{*_daeZI^%Pu6pDuTS(-kV)I$ovG(GTHBgA?y`X`M|_w)1Gf8<2*ku2iyfLKkVF zLbLblLhCNH6JK}frx2kXD8U#+0eNV-%JPQIzS&Q~NQ2XDU0Q-CJrU|iWS1JyRF!B4 z9!JkSl1BG{&K|LFO@i9Jp-V~h@1TIx4lO*Pc<}Vk zeR@xG#sCE)RwWfasc(euk_uDM`Nz1=6E~vpu9_zS3>bXVQ@^ zbHM)jN~>q1api;OjfQ7*aS+t8ax_frSUK2}*RgWCK{49lZ1ET)P-D0cZ zL)|b`vM3)xh^@H5Q*0|Uu{MCic z=n3Yes$|QKR{WX3TKm*PJ1|OJ$BcMHZGyJ^SqrVE<)jy&a02u6 z7~UZz*3c6+&KTFniV|_@M@_IlSQHO+v1^9hf|79Yhmw-F%v_$5GIi9rvH68FM%Jy_ zw9d0;lf5C!7}lnn<_T)I|EMUw#~S`joVyxH)GlofRxD)}FVVlSchKoh1`U%l|f)Dd@a6C^K&j);$ki9W&)13RW> z-%yc$dI%d<3=#BnAlrIGsJ%29AgyfS&b)j|JQNBt1r? zR}N$8(Sn}H4%3K^0ym-*Uw`Pp)ar{AzF0P*^jjq_c8!Sd2jw3SzArRmYWDRJ=}8GJ z{T4x|(qt$YNtLBs(%9Lc`j^9>p*k$)VRm-wNIPNLtfqLzB@9 z_Kf@ph_TI!d#IuGkRPxb|5K2L zsoCEsjX3?BLe}SUzfclECJp}m@G)bb0NdXP`?z3jz1YI!F}3-(vZeZ?;6{w%2k5}m z>Th6fE`Dcm3kHqI_es7&wZGX5oakp3fK9|8xa zR{w4hRmOe@C|b-xa?v*oeFCxB4?yHkg#R^UU~2X661=R9k&oK>vqbMN^i{0rMS3JW zaE;2{02p4_iCD{vx{zB{s$lm)hQaSQt zArZSs@uTSu@)dtHbYkkce#36E8E?bWSisi4A_>wQ=5b)}Tx9bct>0K{5LeFJ-@)0l zhWNVC5v88d5$n%95i(AHK&SU9rOG5@DfDPwzsvJ@^ZH_o((Oq&yS8MEXYxzya}_w7 zz2>&M4_;o6*9N>c;KWBih#O1S=revasZ5aNvFPK06FP=@Amz!_G)YG8xR$$z)OiPO z#cP|#JE%PQPJJo_*~=F|j=g+>XRp1y14rEDTMqSm-HFu6Wg~SiDd=u5=u18ds641Y7W^_D$pK!p2wNRf$)XCv3dq zO7CYj+G_J0$MUL;tzhh^_IO^-aLfp6=%{`@9()gJ2(B zLopFs0^tV7LjOaE8#P97ftZ8PG^(bE3ML1yF-c- zMcKT#PEO9u#g zs76jZh~YzK4iWMYjr)DV$#BJO^qff_jl z2Pr&6UC;wG^7X?g#IKTLHS*7ik?~NHAm|v4T-9le2UDVuqc!pkA`glaa+F4X=nLGR zKCY7cYvkvzAbPvl4oUN&Ep2pcU1o&xMiWn zAFbRP4^cBk+5(MC!8D-vY$4Cr$Zvf#BOVT`2gewK%Qzky89-nART#oAJvt zS&H9`(mLlL-l}PekZ;Clbxp@7-l&pqMrfrYPhiw2eD80}tx;_J-dkI?sCN!`=Si)b zwXUGx17OP+@nsshGZEdp4k4Kuy(v)q=K?9dQNtY_j<}Y41-Bu9OIR+r^&0NLb?lqV z%cYu9jZC4Gpmv3j?HZZF2S8Mzkk@Hs3LOB)RC0+%9v_Eon6pyQYc(JA`>BFk62K))7u;eEN5RA3@^q6=iQH diff --git a/op.db b/op.db index 054ec67daa6a0254880cf0a1d0e09c0eb6d6ecc1..07c27e63fbf94b331cc8194c9406a311cde9290f 100644 GIT binary patch delta 898 zcmZ{eOH30{6o%*Cx%UjV&{D)$td*hhSt!g*5v&o5KtYWf&}zUKV~H36ABYdYC{i`D z5rs74i7!C$u`x;|W}*v&Q5PB z8TfclOaxww>6Coxj*f{&bc{tGk(VeA@=!W|B~5`LXc0@rG$;X!Q9H=rQ*r@Ihq#t< zUSl*u=>ptygXbDohxj5&M$mDM=fWlP6pJ?IQ5ZzaHLj5XEJ==jY)K5bm{uhCDaz9! zPl9u1+FU4HHkMrHk87#roi0KsGu3Z>WBF;{Y&~nOwLP;PXU(>ycQ%2YvGw{9j=LF5 ziw$qfid|Vb*LcXl1Mbw5!i-2TK$LdB5(p^j!g_6Cy}wc`R5s}Q@s`nI#Vsf7yW!T zD?cM}+}T9Spi1xLk$Lzu6@2c7U0ZiF$g3l*%?fj;bbH`Onq7Z zi3kEVH_-}lt$qM|rh*ESAMdk)%NVi4c8PizmWGHbYCSnvGaU-4%wnC5D${zh8NU5} znH8&Pa-w1bC(2G>)Xi{3B}ryxGVDyK1nufR?F8erQ))v}htjZAz=a8+j>J@XmNlAr zY>_08h!CwoIWBEi^E?ghEsd=mp2Z$b(F%P^kxwfQE6QT?lExX9}he)vIWmkxGtjrQIu9B3-mDs`Y`Bkdjh14Tg}p zSZ}8fNM)2aVh)i%bv3By)^3XMA`C1OD!b^ao7QV|b&758 zRcf5B{t{a@SbPp9Cau#@PU<5 z@+qBKV=A@AQ?E!4*{tX)l}>mE2?((W)4?U)tNvN>g_64%$%&vN8{{-b=>Z&C5Dn@{ zPPEbNc)WqaeGEMnL4uel4#zz^MpkgH1WXB*epqXvxTg{tCDhoSEu8RhC%BxQdt_30 zpgQKo>wd~FS`4~;o&k?A7L1enTRo#2?l=6V`_{@S@Nn+h(5i5dLpgLGU((+g?8jGYQ>BWQGV2l z3-r#2DAzPCimQ)B2zzG4BI~iv;CcxJ@RASesTISF4^F6M51f~DH^)d939#T)6?Rv` zA?oMZv3P(7rz$yq+;J+h-530L&;SFIelTQt@r&Mn?}6*1!6_fdvE%lUUFm5*sA<2v zip5Igl57StNh-8lHd=ZPC-ZXH*(Nm-(^AfAjQEP>PcO-kdo(f8`XB%7qbBal%aHn= Hm!jzpn$x*U diff --git a/packages/adapters-library/src/adapters/aave-v2/common/aaveBasePoolAdapter.ts b/packages/adapters-library/src/adapters/aave-v2/common/aaveBasePoolAdapter.ts index 72ab4457e..a4b53aede 100644 --- a/packages/adapters-library/src/adapters/aave-v2/common/aaveBasePoolAdapter.ts +++ b/packages/adapters-library/src/adapters/aave-v2/common/aaveBasePoolAdapter.ts @@ -176,18 +176,6 @@ export abstract class AaveBasePoolAdapter implements IProtocolAdapter { const metadataObject: ProtocolToken[] = [] const promises = reserveTokens.map(async ({ tokenAddress }) => { - const reserveConfigurationData = - await protocolDataProviderContract.getReserveConfigurationData( - tokenAddress, - ) - - if ( - !reserveConfigurationData.isActive || - reserveConfigurationData.isFrozen - ) { - return - } - const reserveTokenAddresses = await protocolDataProviderContract.getReserveTokensAddresses( tokenAddress, diff --git a/packages/adapters-library/src/adapters/aave-v3/products/a-token/tests/snapshots/ethereum.profits.json b/packages/adapters-library/src/adapters/aave-v3/products/a-token/tests/snapshots/ethereum.profits.json index 166fef470..266b63727 100644 --- a/packages/adapters-library/src/adapters/aave-v3/products/a-token/tests/snapshots/ethereum.profits.json +++ b/packages/adapters-library/src/adapters/aave-v3/products/a-token/tests/snapshots/ethereum.profits.json @@ -82,7 +82,7 @@ }, { "address": "0x23878914EFE38d27C4D67Ab83ed1b93A74D4086a", - "name": "aEthUSDT", + "name": "Aave Ethereum USDT", "symbol": "aEthUSDT", "decimals": 6, "type": "protocol", diff --git a/packages/adapters-library/src/adapters/beefy/products/moo-token/tests/snapshots/ethereum.deposits.moo-token.json b/packages/adapters-library/src/adapters/beefy/products/moo-token/tests/snapshots/ethereum.deposits.moo-token.json index 17b0dbc6e..fdae16dd7 100644 --- a/packages/adapters-library/src/adapters/beefy/products/moo-token/tests/snapshots/ethereum.deposits.moo-token.json +++ b/packages/adapters-library/src/adapters/beefy/products/moo-token/tests/snapshots/ethereum.deposits.moo-token.json @@ -44,7 +44,7 @@ }, { "address": "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497", - "name": "sUSDe", + "name": "Staked USDe", "symbol": "sUSDe", "decimals": 18, "type": "underlying", @@ -102,7 +102,7 @@ }, { "address": "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497", - "name": "sUSDe", + "name": "Staked USDe", "symbol": "sUSDe", "decimals": 18, "type": "underlying", diff --git a/packages/adapters-library/src/adapters/beefy/products/moo-token/tests/snapshots/ethereum.positions.moo-token.json b/packages/adapters-library/src/adapters/beefy/products/moo-token/tests/snapshots/ethereum.positions.moo-token.json index 1f7067431..dfc0956bb 100644 --- a/packages/adapters-library/src/adapters/beefy/products/moo-token/tests/snapshots/ethereum.positions.moo-token.json +++ b/packages/adapters-library/src/adapters/beefy/products/moo-token/tests/snapshots/ethereum.positions.moo-token.json @@ -35,7 +35,7 @@ }, { "address": "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110", - "name": "ezETH", + "name": "Renzo Restaked ETH", "symbol": "ezETH", "decimals": 18, "type": "underlying", @@ -59,7 +59,7 @@ }, { "address": "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", - "name": "weETH", + "name": "Wrapped eETH", "symbol": "weETH", "decimals": 18, "type": "underlying", diff --git a/packages/adapters-library/src/adapters/beefy/products/moo-token/tests/snapshots/ethereum.withdrawals.moo-token.json b/packages/adapters-library/src/adapters/beefy/products/moo-token/tests/snapshots/ethereum.withdrawals.moo-token.json index b678779dd..e5196d214 100644 --- a/packages/adapters-library/src/adapters/beefy/products/moo-token/tests/snapshots/ethereum.withdrawals.moo-token.json +++ b/packages/adapters-library/src/adapters/beefy/products/moo-token/tests/snapshots/ethereum.withdrawals.moo-token.json @@ -44,7 +44,7 @@ }, { "address": "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497", - "name": "sUSDe", + "name": "Staked USDe", "symbol": "sUSDe", "decimals": 18, "type": "underlying", diff --git a/packages/adapters-library/src/adapters/ethena/products/lp-staking/tests/snapshots/ethereum.positions.lp-staking.json b/packages/adapters-library/src/adapters/ethena/products/lp-staking/tests/snapshots/ethereum.positions.lp-staking.json index 453a0325e..4f6867790 100644 --- a/packages/adapters-library/src/adapters/ethena/products/lp-staking/tests/snapshots/ethereum.positions.lp-staking.json +++ b/packages/adapters-library/src/adapters/ethena/products/lp-staking/tests/snapshots/ethereum.positions.lp-staking.json @@ -28,7 +28,7 @@ { "type": "protocol", "address": "0x8bE3460A480c80728a8C4D7a5D5303c85ba7B3b9", - "name": "sENA", + "name": "Staked ENA", "symbol": "sENA", "decimals": 18, "balanceRaw": "94650000000000000000n", diff --git a/packages/adapters-library/src/adapters/ethena/products/lp-staking/tests/snapshots/ethereum.tvl.json b/packages/adapters-library/src/adapters/ethena/products/lp-staking/tests/snapshots/ethereum.tvl.json index da30d10ea..e04f2a9bd 100644 --- a/packages/adapters-library/src/adapters/ethena/products/lp-staking/tests/snapshots/ethereum.tvl.json +++ b/packages/adapters-library/src/adapters/ethena/products/lp-staking/tests/snapshots/ethereum.tvl.json @@ -17,7 +17,7 @@ { "type": "protocol", "address": "0x8bE3460A480c80728a8C4D7a5D5303c85ba7B3b9", - "name": "sENA", + "name": "Staked ENA", "symbol": "sENA", "decimals": 18, "totalSupplyRaw": "387294739423437047879124231n", diff --git a/packages/adapters-library/src/adapters/ethena/products/staked-ena/tests/snapshots/ethereum.positions.sena.json b/packages/adapters-library/src/adapters/ethena/products/staked-ena/tests/snapshots/ethereum.positions.sena.json index 57a7a2740..b0e12dc7a 100644 --- a/packages/adapters-library/src/adapters/ethena/products/staked-ena/tests/snapshots/ethereum.positions.sena.json +++ b/packages/adapters-library/src/adapters/ethena/products/staked-ena/tests/snapshots/ethereum.positions.sena.json @@ -17,7 +17,7 @@ "tokens": [ { "address": "0x8bE3460A480c80728a8C4D7a5D5303c85ba7B3b9", - "name": "sENA", + "name": "Staked ENA", "symbol": "sENA", "decimals": 18, "balanceRaw": "148345860000000000000000n", diff --git a/packages/adapters-library/src/adapters/ethena/products/staked-ena/tests/snapshots/ethereum.tvl.json b/packages/adapters-library/src/adapters/ethena/products/staked-ena/tests/snapshots/ethereum.tvl.json index 966c2e767..c48b7ec6a 100644 --- a/packages/adapters-library/src/adapters/ethena/products/staked-ena/tests/snapshots/ethereum.tvl.json +++ b/packages/adapters-library/src/adapters/ethena/products/staked-ena/tests/snapshots/ethereum.tvl.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0x8bE3460A480c80728a8C4D7a5D5303c85ba7B3b9", - "name": "sENA", + "name": "Staked ENA", "symbol": "sENA", "decimals": 18, "type": "protocol", diff --git a/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.deposits.json b/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.deposits.json index 9f17cb8ff..7e86d43f3 100644 --- a/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.deposits.json +++ b/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.deposits.json @@ -17,14 +17,14 @@ "transactionHash": "0xdc1441a209ae39844cd1930093f2be0231e0c8f10ca6c66fb409cda8be0db7ba", "protocolToken": { "address": "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497", - "name": "sUSDe", + "name": "Staked USDe", "symbol": "sUSDe", "decimals": 18 }, "tokens": [ { "address": "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497", - "name": "sUSDe", + "name": "Staked USDe", "symbol": "sUSDe", "decimals": 18, "balanceRaw": "2100862289939429413866n", diff --git a/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.positions.susde.json b/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.positions.susde.json index 688045a49..24c89565e 100644 --- a/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.positions.susde.json +++ b/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.positions.susde.json @@ -17,7 +17,7 @@ "tokens": [ { "address": "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497", - "name": "sUSDe", + "name": "Staked USDe", "symbol": "sUSDe", "decimals": 18, "balanceRaw": "7870541785346265726254504n", diff --git a/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.prices.json b/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.prices.json index 7425caf1e..5ab6934c9 100644 --- a/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.prices.json +++ b/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.prices.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497", - "name": "sUSDe", + "name": "Staked USDe", "symbol": "sUSDe", "decimals": 18, "baseRate": 1, diff --git a/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.profits.json b/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.profits.json index 0e1a8bf86..a4f517fd6 100644 --- a/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.profits.json +++ b/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.profits.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497", - "name": "sUSDe", + "name": "Staked USDe", "symbol": "sUSDe", "decimals": 18, "type": "protocol", diff --git a/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.tvl.json b/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.tvl.json index 3dbbb11fc..6fdf14ccc 100644 --- a/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.tvl.json +++ b/packages/adapters-library/src/adapters/ethena/products/staked-usde/tests/snapshots/ethereum.tvl.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497", - "name": "sUSDe", + "name": "Staked USDe", "symbol": "sUSDe", "decimals": 18, "type": "protocol", diff --git a/packages/adapters-library/src/adapters/etherfi/products/liquid/tests/snapshots/ethereum.positions.user-2.json b/packages/adapters-library/src/adapters/etherfi/products/liquid/tests/snapshots/ethereum.positions.user-2.json index 08abda438..7b29930ef 100644 --- a/packages/adapters-library/src/adapters/etherfi/products/liquid/tests/snapshots/ethereum.positions.user-2.json +++ b/packages/adapters-library/src/adapters/etherfi/products/liquid/tests/snapshots/ethereum.positions.user-2.json @@ -17,7 +17,7 @@ "tokens": [ { "address": "0x7223442cad8e9cA474fC40109ab981608F8c4273", - "name": "weETHk", + "name": "King Karak LRT", "symbol": "weETHk", "decimals": 18, "balanceRaw": "440147724479119600782n", diff --git a/packages/adapters-library/src/adapters/etherfi/products/liquid/tests/snapshots/ethereum.profits.user-2.json b/packages/adapters-library/src/adapters/etherfi/products/liquid/tests/snapshots/ethereum.profits.user-2.json index a4b4775f5..76051d120 100644 --- a/packages/adapters-library/src/adapters/etherfi/products/liquid/tests/snapshots/ethereum.profits.user-2.json +++ b/packages/adapters-library/src/adapters/etherfi/products/liquid/tests/snapshots/ethereum.profits.user-2.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0x7223442cad8e9cA474fC40109ab981608F8c4273", - "name": "weETHk", + "name": "King Karak LRT", "symbol": "weETHk", "decimals": 18, "type": "protocol", diff --git a/packages/adapters-library/src/adapters/etherfi/products/we-eth/tests/snapshots/ethereum.positions.user-1.json b/packages/adapters-library/src/adapters/etherfi/products/we-eth/tests/snapshots/ethereum.positions.user-1.json index 2a9a61982..24f993248 100644 --- a/packages/adapters-library/src/adapters/etherfi/products/we-eth/tests/snapshots/ethereum.positions.user-1.json +++ b/packages/adapters-library/src/adapters/etherfi/products/we-eth/tests/snapshots/ethereum.positions.user-1.json @@ -17,7 +17,7 @@ "tokens": [ { "address": "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", - "name": "weETH", + "name": "Wrapped eETH", "symbol": "weETH", "decimals": 18, "balanceRaw": "3818222812111817n", diff --git a/packages/adapters-library/src/adapters/etherfi/products/we-eth/tests/snapshots/ethereum.profits.user-1.json b/packages/adapters-library/src/adapters/etherfi/products/we-eth/tests/snapshots/ethereum.profits.user-1.json index 5eb2072aa..3e8e83498 100644 --- a/packages/adapters-library/src/adapters/etherfi/products/we-eth/tests/snapshots/ethereum.profits.user-1.json +++ b/packages/adapters-library/src/adapters/etherfi/products/we-eth/tests/snapshots/ethereum.profits.user-1.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", - "name": "weETH", + "name": "Wrapped eETH", "symbol": "weETH", "decimals": 18, "type": "protocol", diff --git a/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.borrows.json b/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.borrows.json index ae620c8f1..f24f60c14 100644 --- a/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.borrows.json +++ b/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.borrows.json @@ -16,7 +16,7 @@ "transactionHash": "0x635de742e30c1db4ba80730667e99d9dc276fc072afc6cf3e1b7b76c2d2cbe8e", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, @@ -39,7 +39,7 @@ "transactionHash": "0x3cbad0364620c2591fd908a4b0fe9bbf7dda877f82829e7ee4ea992abfd0e2c3", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, @@ -62,7 +62,7 @@ "transactionHash": "0xf8607128306c74d91b9f6497dc774e1066b0751de459db1cca353816b09f63a3", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, @@ -85,7 +85,7 @@ "transactionHash": "0x18bcfaa29194f4b27048d4abd4f54d4e42d5d90cc57d1be3f7e07addb38513af", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, @@ -108,7 +108,7 @@ "transactionHash": "0xfdf55791033e15c53be84a6639f385b458c1418fcc436358726bde3352079cdf", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, diff --git a/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.positions.json b/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.positions.json index 25a938643..f1e0ddee1 100644 --- a/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.positions.json +++ b/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.positions.json @@ -17,7 +17,7 @@ "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "1n", diff --git a/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.profits.json b/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.profits.json index 14ac07f23..e07442507 100644 --- a/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.profits.json +++ b/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.profits.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "type": "protocol", diff --git a/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.repays.json b/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.repays.json index caffe0ff2..5afed7126 100644 --- a/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.repays.json +++ b/packages/adapters-library/src/adapters/flux/products/borrow-market/tests/snapshots/ethereum.repays.json @@ -16,7 +16,7 @@ "transactionHash": "0x773ee4439f7fd9660b54d8f2a6e185468bb7166ff8af41f26dded47a25143299", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, @@ -39,7 +39,7 @@ "transactionHash": "0x7b5c05754cedcbb033aeb06819b6d58b88441d17017a58ac27ba021d1bb1f767", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, @@ -62,7 +62,7 @@ "transactionHash": "0x01b2bfabe0ffdce94cb3df75a4276d908d7dba615f1ff541e4e62c5530b1ccda", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, @@ -85,7 +85,7 @@ "transactionHash": "0x9232de8bcb8c7b3b78484d108abc445b30e5d3b1818dff39e1cb0cbdd1eaef87", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, diff --git a/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.deposits.json b/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.deposits.json index 254e39834..59781c2e0 100644 --- a/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.deposits.json +++ b/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.deposits.json @@ -30,14 +30,14 @@ "transactionHash": "0x56f839e092fc8c5fd33ba57e7209406344f2aec4d83650cf3176e5deb0d8c60f", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "24995800999n", @@ -64,14 +64,14 @@ "transactionHash": "0xeb4e7ca1c2d4a86ccbf247481308a0f98659d7d3886665d39f5bf81df3eec97c", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "59568092n", @@ -98,14 +98,14 @@ "transactionHash": "0x3ad49dfa15fd0b061f7b7595176961a85e7e0543148c2d9e443f4ff4fbd93747", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "69992413n", @@ -132,14 +132,14 @@ "transactionHash": "0xc5b271fe8c6f5d9e7e3cc5fc884ee16d2d5bc1de662d27be1753196d97c55563", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "49609967n", @@ -166,14 +166,14 @@ "transactionHash": "0x4a86d1d6cbe553f6550a63e46aeed1a4f1c25056bedd6961b68876a44b34aea1", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "24666089270n", @@ -200,14 +200,14 @@ "transactionHash": "0x1c5c09b6fef002a8c25630061bf9f266a63ca49194ee6cad92414c4d2aba3528", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "5368495656n", @@ -235,14 +235,14 @@ "transactionHash": "0x8b3696d318e8f47390eefbe012c7a7d1d52638b7662181a1721724ad82093340", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "5855701227n", @@ -270,14 +270,14 @@ "transactionHash": "0x66b425cbd9de4f9ee1310ce91c586f8495306274766886f046635e161986376d", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "485651477n", @@ -305,14 +305,14 @@ "transactionHash": "0x45136c31e7e59cb6346ef73a142f2d51babb5a6edfdff3f5c2c5b0fab880ab16", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "48564179n", @@ -340,14 +340,14 @@ "transactionHash": "0xb2dc2b6301a2a7dd933217a757a31f391ae2c1b9dabbc66d3b4a9c84dbb64ecc", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "48564089n", @@ -375,14 +375,14 @@ "transactionHash": "0x8012ca1f732d8c510e598321e5c6c5c3f682928a7e2010ee1ee383e501deee37", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "970140809n", @@ -410,14 +410,14 @@ "transactionHash": "0x1ba8f6be599505e34eb2e0a6c8411cdaae5a6227c2796c4eb961f3fd28e90af5", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "48399929375n", diff --git a/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.positions.json b/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.positions.json index 07cdd090f..830f9a553 100644 --- a/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.positions.json +++ b/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.positions.json @@ -17,7 +17,7 @@ "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "49370070184n", diff --git a/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.profits.json b/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.profits.json index 23319b1a5..829640b26 100644 --- a/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.profits.json +++ b/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.profits.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "type": "protocol", diff --git a/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.tvl.json b/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.tvl.json index 52eaa89bf..a7b775f30 100644 --- a/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.tvl.json +++ b/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.tvl.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "type": "protocol", diff --git a/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.withdrawals.json b/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.withdrawals.json index fbb9410e6..be3d52793 100644 --- a/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.withdrawals.json +++ b/packages/adapters-library/src/adapters/flux/products/supply-market/tests/snapshots/ethereum.withdrawals.json @@ -17,14 +17,14 @@ "transactionHash": "0xa964ede1f669c0fbf1c97ab79f9af3b66659920ab2d013134951364d8da109c6", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "5904626346n", @@ -52,14 +52,14 @@ "transactionHash": "0xe49ee57f19cd296f4499cf6206fe1cc347c00a24047560af49a11fc4ea5c473b", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "485651552n", @@ -87,14 +87,14 @@ "transactionHash": "0x83e7e74bc6c64cf45820e5f2a49b6f876a5e6b1d1c5fff4c7c7a891ce4b0010e", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "86159087n", @@ -122,14 +122,14 @@ "transactionHash": "0xf405b10a34955bdb995e29e90788356d2d5818abebcbfb6d5124fd12de77ff88", "protocolToken": { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8 }, "tokens": [ { "address": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", - "name": "fUSDC", + "name": "Flux USDC", "symbol": "fUSDC", "decimals": 8, "balanceRaw": "55171600384n", diff --git a/packages/adapters-library/src/adapters/maker/products/s-dai/tests/snapshots/ethereum.positions.json b/packages/adapters-library/src/adapters/maker/products/s-dai/tests/snapshots/ethereum.positions.json index 685dedcdd..2ef799bdb 100644 --- a/packages/adapters-library/src/adapters/maker/products/s-dai/tests/snapshots/ethereum.positions.json +++ b/packages/adapters-library/src/adapters/maker/products/s-dai/tests/snapshots/ethereum.positions.json @@ -17,7 +17,7 @@ "tokens": [ { "address": "0x83F20F44975D03b1b09e64809B757c47f942BEeA", - "name": "sDAI", + "name": "Savings Dai", "symbol": "sDAI", "decimals": 18, "balanceRaw": "5382590015585050100580212n", diff --git a/packages/adapters-library/src/adapters/maker/products/s-dai/tests/snapshots/ethereum.prices.json b/packages/adapters-library/src/adapters/maker/products/s-dai/tests/snapshots/ethereum.prices.json index 98ad56923..33eed98bb 100644 --- a/packages/adapters-library/src/adapters/maker/products/s-dai/tests/snapshots/ethereum.prices.json +++ b/packages/adapters-library/src/adapters/maker/products/s-dai/tests/snapshots/ethereum.prices.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0x83F20F44975D03b1b09e64809B757c47f942BEeA", - "name": "sDAI", + "name": "Savings Dai", "decimals": 18, "symbol": "sDAI", "baseRate": 1, diff --git a/packages/adapters-library/src/adapters/maker/products/s-dai/tests/snapshots/ethereum.profits.json b/packages/adapters-library/src/adapters/maker/products/s-dai/tests/snapshots/ethereum.profits.json index 48e0baedc..6b6d28397 100644 --- a/packages/adapters-library/src/adapters/maker/products/s-dai/tests/snapshots/ethereum.profits.json +++ b/packages/adapters-library/src/adapters/maker/products/s-dai/tests/snapshots/ethereum.profits.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0x83F20F44975D03b1b09e64809B757c47f942BEeA", - "name": "sDAI", + "name": "Savings Dai", "symbol": "sDAI", "decimals": 18, "type": "protocol", diff --git a/packages/adapters-library/src/adapters/pendle/products/lp-token/pendleLpTokenAdapter.ts b/packages/adapters-library/src/adapters/pendle/products/lp-token/pendleLpTokenAdapter.ts index e0e102caa..7fd0ae879 100644 --- a/packages/adapters-library/src/adapters/pendle/products/lp-token/pendleLpTokenAdapter.ts +++ b/packages/adapters-library/src/adapters/pendle/products/lp-token/pendleLpTokenAdapter.ts @@ -86,28 +86,22 @@ export class PendleLpTokenAdapter implements IProtocolAdapter { async getProtocolTokens(): Promise[]> { const resp = await fetchAllMarkets(this.chainId) - return resp.results.map((value) => { - const marketAddress = getAddress(value.address) - - const lp: Erc20Metadata = { - address: getAddress(value.lp.address), - name: value.lp.name, - symbol: value.lp.symbol, - decimals: value.lp.decimals, - } - const underlyingAsset: Erc20Metadata = { - address: getAddress(value.underlyingAsset.address), - name: value.underlyingAsset.name, - symbol: value.underlyingAsset.symbol, - decimals: value.underlyingAsset.decimals, - } - - return { - ...lp, - underlyingTokens: [underlyingAsset], - marketAddress, - } - }) + return await Promise.all( + resp.results.map(async (value) => { + const marketAddress = getAddress(value.address) + + const [lp, underlyingAsset] = await Promise.all([ + this.helpers.getTokenMetadata(value.lp.address), + this.helpers.getTokenMetadata(value.underlyingAsset.address), + ]) + + return { + ...lp, + underlyingTokens: [underlyingAsset], + marketAddress, + } + }), + ) } async getPositions(input: GetPositionsInput): Promise { diff --git a/packages/adapters-library/src/adapters/pendle/products/lp-token/tests/snapshots/ethereum.positions.lp-pump-bts.json b/packages/adapters-library/src/adapters/pendle/products/lp-token/tests/snapshots/ethereum.positions.lp-pump-bts.json index 2105ae39b..4a793ad62 100644 --- a/packages/adapters-library/src/adapters/pendle/products/lp-token/tests/snapshots/ethereum.positions.lp-pump-bts.json +++ b/packages/adapters-library/src/adapters/pendle/products/lp-token/tests/snapshots/ethereum.positions.lp-pump-bts.json @@ -17,7 +17,7 @@ "tokens": [ { "address": "0xf8208fB52BA80075aF09840A683143C22DC5B4dd", - "name": "PENDLE-LPT", + "name": "Pendle Market", "symbol": "PENDLE-LPT", "decimals": 18, "balanceRaw": "1851547n", diff --git a/packages/adapters-library/src/adapters/pendle/products/lp-token/tests/snapshots/ethereum.positions.yt-lp.json b/packages/adapters-library/src/adapters/pendle/products/lp-token/tests/snapshots/ethereum.positions.yt-lp.json index e80363f3c..961421f60 100644 --- a/packages/adapters-library/src/adapters/pendle/products/lp-token/tests/snapshots/ethereum.positions.yt-lp.json +++ b/packages/adapters-library/src/adapters/pendle/products/lp-token/tests/snapshots/ethereum.positions.yt-lp.json @@ -17,7 +17,7 @@ "tokens": [ { "address": "0xA54FC268101c8b97DE19eF3141d34751a11996B2", - "name": "PENDLE-LPT", + "name": "Pendle Market", "symbol": "PENDLE-LPT", "decimals": 18, "balanceRaw": "16820168574096565605n", @@ -50,7 +50,7 @@ }, { "address": "0x038C1b03daB3B891AfbCa4371ec807eDAa3e6eB6", - "name": "PENDLE-LPT", + "name": "Pendle Market", "symbol": "PENDLE-LPT", "decimals": 18, "balanceRaw": "60693468569135036750n", diff --git a/packages/adapters-library/src/adapters/pendle/products/lp-token/tests/snapshots/ethereum.prices.lp-price.json b/packages/adapters-library/src/adapters/pendle/products/lp-token/tests/snapshots/ethereum.prices.lp-price.json index 88611c58e..439b93420 100644 --- a/packages/adapters-library/src/adapters/pendle/products/lp-token/tests/snapshots/ethereum.prices.lp-price.json +++ b/packages/adapters-library/src/adapters/pendle/products/lp-token/tests/snapshots/ethereum.prices.lp-price.json @@ -18,7 +18,7 @@ "baseRate": 1, "type": "protocol", "address": "0xf8208fB52BA80075aF09840A683143C22DC5B4dd", - "name": "PENDLE-LPT", + "name": "Pendle Market", "symbol": "PENDLE-LPT", "decimals": 18, "tokens": [ diff --git a/packages/adapters-library/src/adapters/pendle/products/principle-token/pendlePrincipleTokenAdapter.ts b/packages/adapters-library/src/adapters/pendle/products/principle-token/pendlePrincipleTokenAdapter.ts index ad4f84f25..366976938 100644 --- a/packages/adapters-library/src/adapters/pendle/products/principle-token/pendlePrincipleTokenAdapter.ts +++ b/packages/adapters-library/src/adapters/pendle/products/principle-token/pendlePrincipleTokenAdapter.ts @@ -78,29 +78,22 @@ export class PendlePrincipleTokenAdapter implements IProtocolAdapter { async getProtocolTokens(): Promise[]> { const resp = await fetchAllMarkets(this.chainId) - return resp.results.map((value) => { - const marketAddress = getAddress(value.address) - - const pt: Erc20Metadata = { - address: getAddress(value.pt.address), - name: value.pt.name, - symbol: value.pt.symbol, - decimals: value.pt.decimals, - } - - const sy: Erc20Metadata = { - address: getAddress(value.sy.address), - name: value.sy.name, - symbol: value.sy.symbol, - decimals: value.underlyingAsset.decimals, - } - - return { - ...pt, - underlyingTokens: [sy], - marketAddress, - } - }) + return await Promise.all( + resp.results.map(async (value) => { + const marketAddress = getAddress(value.address) + + const [pt, sy] = await Promise.all([ + this.helpers.getTokenMetadata(value.pt.address), + this.helpers.getTokenMetadata(value.sy.address), // TODO: Check if decimals need to be underlyingAsset.decimals + ]) + + return { + ...pt, + underlyingTokens: [sy], + marketAddress, + } + }), + ) } async getPositions(input: GetPositionsInput): Promise { diff --git a/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.deposits.json b/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.deposits.json index e7a2e2267..fff73fa4a 100644 --- a/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.deposits.json +++ b/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.deposits.json @@ -17,14 +17,14 @@ "transactionHash": "0x1332461b414753d3daf1e1c7d5294a4684d0bb14da461bb1b03c0e06590810c1", "protocolToken": { "address": "0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966", - "name": "PT-weETH-27JUN2024", + "name": "PT ether.fi weETH 27JUN2024", "symbol": "PT-weETH-27JUN2024", "decimals": 18 }, "tokens": [ { "address": "0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966", - "name": "PT-weETH-27JUN2024", + "name": "PT ether.fi weETH 27JUN2024", "symbol": "PT-weETH-27JUN2024", "decimals": 18, "balanceRaw": "301719975687554067n", @@ -33,7 +33,7 @@ "tokens": [ { "address": "0xAC0047886a985071476a1186bE89222659970d65", - "name": "SY-weETH", + "name": "SY ether.fi weETH", "symbol": "SY-weETH", "decimals": 18, "type": "underlying", @@ -41,7 +41,7 @@ "tokens": [ { "address": "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", - "name": "weETH", + "name": "Wrapped eETH", "symbol": "weETH", "decimals": 18, "type": "underlying", diff --git a/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.positions.pt-sy.json b/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.positions.pt-sy.json index a553d8ef7..a174e516e 100644 --- a/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.positions.pt-sy.json +++ b/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.positions.pt-sy.json @@ -17,7 +17,7 @@ "tokens": [ { "address": "0xf99985822fb361117FCf3768D34a6353E6022F5F", - "name": "PT-stETH-25DEC2025", + "name": "PT stETH 25DEC2025", "symbol": "PT-stETH-25DEC2025", "decimals": 18, "balanceRaw": "4484888964612528795n", @@ -25,7 +25,7 @@ "tokens": [ { "address": "0xcbC72d92b2dc8187414F6734718563898740C0BC", - "name": "SY-stETH", + "name": "SY stETH", "symbol": "SY-stETH", "decimals": 18, "type": "underlying", diff --git a/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.prices.pt.json b/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.prices.pt.json index a81592d6e..97fe11eee 100644 --- a/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.prices.pt.json +++ b/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.prices.pt.json @@ -18,7 +18,7 @@ "baseRate": 1, "type": "protocol", "address": "0xF0574d8B9Dc3a9DE768eaa7DBB7bB0C68521b148", - "name": "PT-rswETH-26SEP2024", + "name": "PT rswETH 26SEP2024", "symbol": "PT-rswETH-26SEP2024", "decimals": 18, "tokens": [ @@ -26,7 +26,7 @@ "type": "underlying", "underlyingRateRaw": "975262482310168247n", "address": "0x7786729eEe8b9d30fE7d91fDFf23A0f1D0C615D9", - "name": "SY-rswETH", + "name": "SY rswETH", "symbol": "SY-rswETH", "decimals": 18, "underlyingRate": 0.9752624823101682, diff --git a/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.profits.json b/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.profits.json index 4016d9756..94ab5cccf 100644 --- a/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.profits.json +++ b/packages/adapters-library/src/adapters/pendle/products/principle-token/tests/snapshots/ethereum.profits.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0xc69Ad9baB1dEE23F4605a82b3354F8E40d1E5966", - "name": "PT-weETH-27JUN2024", + "name": "PT ether.fi weETH 27JUN2024", "symbol": "PT-weETH-27JUN2024", "decimals": 18, "type": "protocol", diff --git a/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/pendleStandardisedYieldTokenAdapter.ts b/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/pendleStandardisedYieldTokenAdapter.ts index 2bc392df0..f33ba3a17 100644 --- a/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/pendleStandardisedYieldTokenAdapter.ts +++ b/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/pendleStandardisedYieldTokenAdapter.ts @@ -81,28 +81,22 @@ export class PendleStandardisedYieldTokenAdapter implements IProtocolAdapter { async getProtocolTokens(): Promise[]> { const resp = await fetchAllMarkets(this.chainId) - return resp.results.map((value) => { - const marketAddress = getAddress(value.address) - - const underlyingAsset: Erc20Metadata = { - address: getAddress(value.underlyingAsset.address), - name: value.underlyingAsset.name, - symbol: value.underlyingAsset.symbol, - decimals: value.underlyingAsset.decimals, - } - const sy: Erc20Metadata = { - address: getAddress(value.sy.address), - name: value.sy.name, - symbol: value.sy.symbol, - decimals: value.underlyingAsset.decimals, - } - - return { - ...sy, - underlyingTokens: [underlyingAsset], - marketAddress, - } - }) + return await Promise.all( + resp.results.map(async (value) => { + const marketAddress = getAddress(value.address) + + const [underlyingAsset, sy] = await Promise.all([ + this.helpers.getTokenMetadata(value.underlyingAsset.address), + this.helpers.getTokenMetadata(value.sy.address), // TODO: Check if decimals need to be underlyingAsset.decimals + ]) + + return { + ...sy, + underlyingTokens: [underlyingAsset], + marketAddress, + } + }), + ) } async getPositions(input: GetPositionsInput): Promise { diff --git a/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/tests/snapshots/ethereum.positions.pt-sy.json b/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/tests/snapshots/ethereum.positions.pt-sy.json index 823e59291..62da05952 100644 --- a/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/tests/snapshots/ethereum.positions.pt-sy.json +++ b/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/tests/snapshots/ethereum.positions.pt-sy.json @@ -17,7 +17,7 @@ "tokens": [ { "address": "0xcbC72d92b2dc8187414F6734718563898740C0BC", - "name": "SY-stETH", + "name": "SY stETH", "symbol": "SY-stETH", "decimals": 18, "balanceRaw": "283748506312827456n", @@ -65,7 +65,7 @@ }, { "address": "0x253008ba4aE2f3E6488DC998a5321D4EB1a0c905", - "name": "SY pufETH", + "name": "SY Puffer ETH", "symbol": "SY pufETH", "decimals": 18, "balanceRaw": "618983117134711107n", @@ -87,7 +87,7 @@ }, { "address": "0xD7DF7E085214743530afF339aFC420c7c720BFa7", - "name": "SY-zs-weETH", + "name": "SY Zircuit Ether.fi weETH", "symbol": "SY-zs-weETH", "decimals": 18, "balanceRaw": "334265716886494658n", @@ -95,7 +95,7 @@ "tokens": [ { "address": "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee", - "name": "weETH", + "name": "Wrapped eETH", "symbol": "weETH", "decimals": 18, "type": "underlying", @@ -135,7 +135,7 @@ }, { "address": "0x7786729eEe8b9d30fE7d91fDFf23A0f1D0C615D9", - "name": "SY-rswETH", + "name": "SY rswETH", "symbol": "SY-rswETH", "decimals": 18, "balanceRaw": "237531096783559785n", diff --git a/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/tests/snapshots/ethereum.positions.yt-lp.json b/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/tests/snapshots/ethereum.positions.yt-lp.json index b32d13fe1..d1eed712b 100644 --- a/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/tests/snapshots/ethereum.positions.yt-lp.json +++ b/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/tests/snapshots/ethereum.positions.yt-lp.json @@ -17,7 +17,7 @@ "tokens": [ { "address": "0x730A5E2AcEbccAA5e9095723B3CB862739DA793c", - "name": "SY-rsETH", + "name": "SY Kelp rsETH", "symbol": "SY-rsETH", "decimals": 18, "balanceRaw": "889654725296176699n", @@ -39,7 +39,7 @@ }, { "address": "0x253008ba4aE2f3E6488DC998a5321D4EB1a0c905", - "name": "SY pufETH", + "name": "SY Puffer ETH", "symbol": "SY pufETH", "decimals": 18, "balanceRaw": "1638883915990475510n", @@ -61,7 +61,7 @@ }, { "address": "0x7786729eEe8b9d30fE7d91fDFf23A0f1D0C615D9", - "name": "SY-rswETH", + "name": "SY rswETH", "symbol": "SY-rswETH", "decimals": 18, "balanceRaw": "281149592989050119n", diff --git a/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/tests/snapshots/ethereum.prices.sy.json b/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/tests/snapshots/ethereum.prices.sy.json index 47cbf879f..df8058042 100644 --- a/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/tests/snapshots/ethereum.prices.sy.json +++ b/packages/adapters-library/src/adapters/pendle/products/standardised-yield-token/tests/snapshots/ethereum.prices.sy.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0x7786729eEe8b9d30fE7d91fDFf23A0f1D0C615D9", - "name": "SY-rswETH", + "name": "SY rswETH", "symbol": "SY-rswETH", "decimals": 18, "baseRate": 1, diff --git a/packages/adapters-library/src/adapters/pendle/products/yield-token/pendleYieldTokenAdapter.ts b/packages/adapters-library/src/adapters/pendle/products/yield-token/pendleYieldTokenAdapter.ts index 5d13b7ddd..d790faa22 100644 --- a/packages/adapters-library/src/adapters/pendle/products/yield-token/pendleYieldTokenAdapter.ts +++ b/packages/adapters-library/src/adapters/pendle/products/yield-token/pendleYieldTokenAdapter.ts @@ -1,9 +1,9 @@ -import { getAddress } from 'ethers' +import { Block, getAddress } from 'ethers' import { AdaptersController } from '../../../../core/adaptersController' import { Chain } from '../../../../core/constants/chains' import { CacheToDb } from '../../../../core/decorators/cacheToDb' import { CustomJsonRpcProvider } from '../../../../core/provider/CustomJsonRpcProvider' -import { filterMapAsync } from '../../../../core/utils/filters' +import { filterMapAsync, filterMapSync } from '../../../../core/utils/filters' import { getTokenMetadata } from '../../../../core/utils/getTokenMetadata' import { Helpers } from '../../../../scripts/helpers' import { @@ -34,6 +34,7 @@ import { RouterStatic__factory, YieldToken__factory } from '../../contracts' type AdditionalMetadata = { marketAddress: string + expiry: string } export class PendleYieldTokenAdapter implements IProtocolAdapter { @@ -78,39 +79,72 @@ export class PendleYieldTokenAdapter implements IProtocolAdapter { } } - @CacheToDb - async getProtocolTokens(): Promise[]> { - const resp = await fetchAllMarkets(this.chainId) + async isExpiredAtBlock( + expiry: string, + blockNumber: number | undefined, + ): Promise { + let comparisonDate: Date - return resp.results.map((value) => { - const marketAddress = getAddress(value.address) + if (blockNumber) { + // Get the block details if a block number is provided + const block = await this.provider.getBlock(blockNumber) - const yt: Erc20Metadata = { - address: getAddress(value.yt.address), - name: value.yt.name, - symbol: value.yt.symbol, - decimals: value.yt.decimals, + if (!block) { + throw new Error(`Block ${blockNumber} not found`) } - const sy: Erc20Metadata = { - address: getAddress(value.sy.address), - name: value.sy.name, - symbol: value.sy.symbol, - decimals: value.underlyingAsset.decimals, - } + comparisonDate = new Date(block.timestamp * 1000) // Convert seconds to milliseconds + } else { + // If no block number is provided, use today's date + comparisonDate = new Date() + } - return { - ...yt, - underlyingTokens: [sy], - marketAddress, - } - }) + const expiryDate = new Date(expiry) + + // Compare the expiry date with either the block date or today's date + return comparisonDate > expiryDate + } + + @CacheToDb + async getProtocolTokens(): Promise[]> { + const resp = await fetchAllMarkets(this.chainId) + + return await Promise.all( + resp.results.map(async (value) => { + const marketAddress = getAddress(value.address) + + const [yt, sy] = await Promise.all([ + this.helpers.getTokenMetadata(value.yt.address), + this.helpers.getTokenMetadata(value.sy.address), // TODO: Check if decimals need to be underlyingAsset.decimals + ]) + + return { + ...yt, + underlyingTokens: [sy], + marketAddress, + expiry: value.expiry, + } + }), + ) } async getPositions(input: GetPositionsInput): Promise { + const tokens = await filterMapAsync( + await this.getProtocolTokens(), + async (protocolToken) => { + if ( + await this.isExpiredAtBlock(protocolToken.expiry, input.blockNumber) + ) { + return undefined + } + + return protocolToken + }, + ) + return this.helpers.getBalanceOfTokens({ ...input, - protocolTokens: await this.getProtocolTokens(), + protocolTokens: tokens, }) } @@ -158,6 +192,7 @@ export class PendleYieldTokenAdapter implements IProtocolAdapter { const { underlyingTokens: [underlyingToken], marketAddress, + expiry, ...protocolToken } = await this.getProtocolTokenByAddress(protocolTokenAddress) diff --git a/packages/adapters-library/src/adapters/pendle/products/yield-token/tests/snapshots/ethereum.positions.pt-sy.json b/packages/adapters-library/src/adapters/pendle/products/yield-token/tests/snapshots/ethereum.positions.pt-sy.json index 70dc115f3..87f3e22e8 100644 --- a/packages/adapters-library/src/adapters/pendle/products/yield-token/tests/snapshots/ethereum.positions.pt-sy.json +++ b/packages/adapters-library/src/adapters/pendle/products/yield-token/tests/snapshots/ethereum.positions.pt-sy.json @@ -1,228 +1,238 @@ { "blockNumber": 20572021, "latency": "Latency: 1.699 seconds", - "aggregatedValues": ["USD0.00", "USD0.00", "USD0.00", "USD0.00"], - "snapshot": [ - { - "protocolId": "pendle", - "name": "Pendle", - "description": "Pendle Market adapter", - "siteUrl": "https://www.pendle.finance", - "iconUrl": "https://app.pendle.finance/favicon.ico", - "positionType": "supply", - "chainId": 1, - "productId": "yield-token", - "chainName": "ethereum", - "success": true, - "tokens": [ - { - "address": "0xED97f94dd94255637A054098604E0201C442a3FD", - "name": "YT-Silo crvUSD-28MAR2024", - "symbol": "YT-Silo crvUSD-28MAR2024", - "decimals": 18, - "balanceRaw": "202250048854396667027857n", - "type": "protocol", - "tokens": [ - { - "address": "0xE05082B184a34668CD8A904D85FA815802BBb04c", - "name": "SY-Silo crvUSD", - "symbol": "SY-Silo crvUSD", - "decimals": 18, - "type": "underlying", - "balanceRaw": "0n", - "tokens": [ - { - "address": "0xb27D1729489d04473631f0AFAca3c3A7389ac9F8", - "name": "scrvUSD-CRV", - "symbol": "scrvUSD-CRV", - "decimals": 18, - "type": "underlying", - "balanceRaw": "0n", - "balance": 0, - "iconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xb27D1729489d04473631f0AFAca3c3A7389ac9F8/logo.png" - } - ], - "balance": 0, - "iconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xE05082B184a34668CD8A904D85FA815802BBb04c/logo.png" - } - ], - "balance": 202250.04885439668 - }, - { - "address": "0x256Fb830945141f7927785c06b65dAbc3744213c", - "name": "YT-ezETH-25APR2024", - "symbol": "YT-ezETH-25APR2024", - "decimals": 18, - "balanceRaw": "70683206443933940248n", - "type": "protocol", - "tokens": [ - { - "address": "0x22E12A50e3ca49FB183074235cB1db84Fe4C716D", - "name": "SY-ezETH", - "symbol": "SY-ezETH", - "decimals": 18, - "type": "underlying", - "balanceRaw": "0n", - "tokens": [ - { - "address": "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110", - "name": "ezETH", - "symbol": "ezETH", - "decimals": 18, - "type": "underlying", - "balanceRaw": "0n", - "tokens": [ - { - "address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", - "name": "Ethereum", - "symbol": "ETH", - "decimals": 18, - "type": "underlying", - "balanceRaw": "0n", - "balance": 0, - "price": 2594.3492, - "iconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png" - } - ], - "balance": 0, - "price": 0, - "iconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xbf5495Efe5DB9ce00f80364C8B423567e58d2110/logo.png" - } - ], - "balance": 0, - "price": 0, - "iconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x22E12A50e3ca49FB183074235cB1db84Fe4C716D/logo.png" - } - ], - "balance": 70.68320644393394 - }, - { - "address": "0x391B570e81e354a85a496952b66ADc831715f54f", - "name": "YT-pufETH-27JUN2024", - "symbol": "YT-pufETH-27JUN2024", - "decimals": 18, - "balanceRaw": "75003262169582936158n", - "type": "protocol", - "tokens": [ - { - "address": "0x253008ba4aE2f3E6488DC998a5321D4EB1a0c905", - "name": "SY pufETH", - "symbol": "SY pufETH", - "decimals": 18, - "type": "underlying", - "balanceRaw": "0n", - "tokens": [ - { - "address": "0xD9A442856C234a39a81a089C06451EBAa4306a72", - "name": "pufETH", - "symbol": "pufETH", - "decimals": 18, - "type": "underlying", - "balanceRaw": "0n", - "balance": 0, - "price": 2575.3391066874897, - "iconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xD9A442856C234a39a81a089C06451EBAa4306a72/logo.png" - } - ], - "balance": 0, - "price": 0, - "iconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x253008ba4aE2f3E6488DC998a5321D4EB1a0c905/logo.png" - } - ], - "balance": 75.00326216958294 - }, - { - "address": "0x4AfdB1B0f9A56922e398D29239453e6A06148eD0", - "name": "YT-rswETH-27JUN2024", - "symbol": "YT-rswETH-27JUN2024", - "decimals": 18, - "balanceRaw": "31456466209142219237n", - "type": "protocol", - "tokens": [ - { - "address": "0x7786729eEe8b9d30fE7d91fDFf23A0f1D0C615D9", - "name": "SY-rswETH", - "symbol": "SY-rswETH", - "decimals": 18, - "type": "underlying", - "balanceRaw": "0n", - "tokens": [ - { - "address": "0xFAe103DC9cf190eD75350761e95403b7b8aFa6c0", - "name": "rswETH", - "symbol": "rswETH", - "decimals": 18, - "type": "underlying", - "balanceRaw": "0n", - "balance": 0, - "price": 2632.664790860908, - "iconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xFAe103DC9cf190eD75350761e95403b7b8aFa6c0/logo.png" - } - ], - "balance": 0, - "price": 0, - "iconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x7786729eEe8b9d30fE7d91fDFf23A0f1D0C615D9/logo.png" - } - ], - "balance": 31.45646620914222 - } - ] - } - ], + "aggregatedValues": [], + "snapshot": [], "rpcResponses": { - "b19558d669114c8d2156a456c82503a5": { - "result": "0x000000000000000000000000000000000000000000002ad3ff431a63c0f5e191" - }, - "b9b8ef28e8378278f2f5d01b2e741f2f": { - "result": "0x000000000000000000000000000000000000000000000003d4ed31c3dc48ba18" - }, - "255c6218b7876138a9e85bc847506c99": { - "result": "0x00000000000000000000000000000000000000000000000410e11d8f157c205e" - }, - "5813d407c332db4402b1183b89f77d17": { - "result": "0x000000000000000000000000000000000000000000000001b48bd15a8d0021e5" - }, - "8cf3488cd8428d604290b2dbf438662a": { - "result": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000" - }, - "c8db64a68a4f6f3ede0645ae4c9b6bc9": { - "result": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000" - }, - "34b4810939f0fc4a004546f6a17f87da": { - "result": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000" - }, - "525ee2668e9fa84f065c69043b005d7d": { - "result": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000" - }, - "14c97194d01f018dec47daaa1be8967c": { - "result": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd52" - }, - "820e93ad3fd7762ea1e4b39c7d95a6a9": { - "result": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - "bd97a58b6ccd0078608355515773c44f": { - "result": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - "0e54584116727afe4be9f40e592fdf78": { - "result": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - "9870468ac1fb47b67ec3d5321dc7fc50": { - "result": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - "d6512b66e4c47ef0e20cec2f6493bd0f": { - "result": "0x00000000000000000000000000000000000000000000000600000000000055be0000000000000000000000000000000000000000000000000000003c6786b8400000000000000000000000000000000000000000000000000000000066c4e6b30000000000000000000000000000000000000000000000000000000066c4e6b300000000000000000000000000000000000000000000000600000000000055be" - }, - "e6362d62f4829ef76a0d6c06083c968e": { - "result": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - "476e3b53535fcb664b36101fc61655d2": { - "result": "0x0000000000000000000000000000000000000000000000000dc6ae6127261bac" - }, - "7d4458fa03390d8ad42472bbff2bd8c7": { - "result": "0x0000000000000000000000000000000000000000000000000e152ee7cc0ffc9d" - }, - "e5c506d817e8e9b0fa57b379a013445c": { - "result": "0x0000000000000000000000000000000000000000000000000e1dfce350c16d6c" + "d15c7064d5dc0ab0fb33ea45145438e8": { + "result": { + "baseFeePerGas": "0x37ec5386", + "blobGasUsed": "0xc0000", + "difficulty": "0x0", + "excessBlobGas": "0x0", + "extraData": "0x4e65746865726d696e64", + "gasLimit": "0x1c9c380", + "gasUsed": "0x6a611e", + "hash": "0xb9e9c30b59927e779eacc8eb57c61652839320c96f70150fdf66548f9cffdaa3", + "logsBloom": "0x16e00620208c00033681007ce0a16100159082884e40444020006813ec70294204e50d05d62012108302780020b203066a01810208232e2015453ab100324a081f400108440008680826051c82441028e501d00182400d0222552604ddc000101000020022c803880dc642d20000084f32030ca882b086200320d05c8009300291000a18048101483008246206003600614ea449c3a4010ac22180424ab1a82ad28895200cc261000a9858d009018504128c9044403003881048c2514000096095142043219401a10608ce60a2009ec0000f2206108c8c545021c462a6a8a0a40073284c11206505780401a4a4885a166302962001223a4019258ad014091c51", + "miner": "0x067846f9276a59cbe290396bc8f2469bd71b1428", + "mixHash": "0x1466bd52e86877ef281306dc56ca26d9836f4a27d0d97d01ab7a711188c8244f", + "nonce": "0x0000000000000000", + "number": "0x139e775", + "parentBeaconBlockRoot": "0xcfa7a578a3d104d55212cca7fb94bb72dad8c1323c76ec597483cca140a3794f", + "parentHash": "0x077d1edb5ae8ae77573b78abe98e200e5f642831181a86deac729bce620053e6", + "receiptsRoot": "0x1e0a1dcb4571034198702b5b14001c8056ccb34857500936790855f0d74525dc", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x75e1", + "stateRoot": "0xb9664b0780e404ec911a109be1901fc1b7ad8ad0a1fcf1ce8a4de1574adbe655", + "timestamp": "0x66c4f313", + "totalDifficulty": "0xc70d815d562d3cfa955", + "transactions": [ + "0xf7fab140e49b2aaef70bf57c8e2c0b5448a660cff9de68f9a2557f861bac1271", + "0x8a822775c70d1b14ae34edd98aa114ff4beb9d65cd91e7f0b7e160f67216a694", + "0xb2f448975cb7c06d389ebcc918c557ae5207bd58a044f7e1314e0865864a28f7", + "0x2e48a510a02731a53cf9b5b29c6789fa5230e249a3d37a99ace044d88ad09940", + "0xa37905e0c86180d940cea5b03e45ef8f9489f54af1a06bb8ab7e9aed8e8c10e1", + "0x963be8af6cf3c0932b19f690907af7f5c71875815823cdd6537974f5aae1fcaf", + "0x0878133d17928e8d4e74d5831d944348a1a3fec3c640ea27c4fd3fab2c607985", + "0x83357b6908c5968ddedf420ec95a353f5ccb2c94970cb74ec310d9b46dffd063", + "0xa383fc07fbee6cfa1f9e14e7d5f5c87b99d189d52a7a9232ca76fdf9e623bfd0", + "0xe6701806fdcb75a009913ea59497540f96e45b4af324209938b8c1db84d8e41f", + "0x1554be065972b4b52f05617ef386fecacd1aa29a1dc761ffd5dcb7b559d1d598", + "0xdfef4e12b0ee1403a1bf0b63df9c3cd4b868adf62d2ef7a76331b68c2f2e27bd", + "0x189b48607e2f089034f2cd3251fa8eaee27cd86c9e82eff6429268994ee149db", + "0x7f33b80745c98fc4e0e3f95a595ef31738e0c5c5079ce3c28ee6192642692c8c", + "0x66339cfd03932488a06c07fb3b993cf28954b775f4a8b99374090fa1c1edc647", + "0xd06d556c8d07cb3f2b0b5e408cf4693768aa6d29747d135dc5de0692ec0dad82", + "0xeff64d14657371f21a4290408502e21621f9c7c496bec01129a7ab5de9fd9131", + "0xcb0bea63871ba4852df605faa86c52c192b12d179c59e4c827195cbf27a04388", + "0x43eaf8d15c0d38f6ed60be0a9736289d4d16927d0229dea84ed4ddf44d9bb993", + "0x998676fc72b447d6af1a95d0941c4ecb268138dc34bdd33aa23caea1a348eb3f", + "0xc9689e7672a7356f4f2d2b4bab12f1d41ed8e21e4fa6a5ccd1dbd102b4563740", + "0x5c1d05620f3e312964834cd3157d0d33bbbe0a910c80f7d0f40ea4c8b789d4d1", + "0xeae1ded9bb28a25eb8dbea4e7ca4d8047bcf66d4c03a377c4cb3e10e676edbc3", + "0x71182ea7459e2e45efaf1c2350115502432fca41d08bd3de527af9ff5062d2c3", + "0xe3787658a529954b04d28d138795340c9a68884a317a58626d42bb15b07cda0e", + "0xa67c056aab40d19f754445c877c119e115cc338f4dacec9f0ed0e7eac4c5a8bf", + "0x7b33c49232c3d71c96eda17e9eeab1949c4841961da221183cab1880b6468075", + "0x06a6b63b1e36dcc2484234d833cb4461f30d079abada214580a247d75556c3c1", + "0x325790ba091463b8495766847cf0d8816fdce297ddfa47e9618cbcd063a2b446", + "0x62880efe6bcee84eb49c3a4ae1277338f58810f29980b1577b8f9d2965a8d2cf", + "0x945fa2d7084df79739c0df9e414a1dae1040374ffcdf35dec889e9cb8bff0905", + "0x305d1d9fd31f1a6fe86ffa9ca7ccba04680a1fba31947bc70135ab428e4b9536", + "0xdfd8f8f16bf96c6a5080793d5220307bc9b132d2f92cc7cdf24a0a702f8bd314", + "0xbb5991d2d3eba8934cae1e37f463b504a5ce801a32832ce632dc6b8d851e65f2", + "0x1475e755e6af20e56be50c40489fb918fecc257038754c40c9bc8d1f2875b582", + "0x854c9215810de0b4f918b4a423bd8992e3feb4f7355f63e9cc5a9e1194c20acc", + "0xa352ba26167e3c394d624f4506fecc10c0ef05be99adcf4f8dda2b9ffee54b68", + "0xf4480783d31b35ff600c4f23910de2e93ed7ceed960270b35c34f9b0de627a2b", + "0xf406760286fc7c849313352dc2f0baa7afc637af46d32f79749548c32ef5e997", + "0x3a042bfabfe6255589355ed1159cce9213e9cd26f219ffbe20693b424f36aebc", + "0x2d2e2b39519109585657b9d7bc79fc6aafefe24c1c7b93173f8f75be753f8b6a", + "0x04401ec4445d40db411fd4230b743360668ebedeb456ee2ab09a378a540a6d45", + "0x119ca7b352742885dfcfc4f65d33c33cfedef413058d180b02dc543c45bda848", + "0xe3a1a969cee895c3142c5eb039bd89520252b37fcf260c15b437832973c7a6e3", + "0x0616905d46566e5c722a09c4b878fb443c42fb2dafec262264ba82a3d9c3832b", + "0xd9864fb38791042309f7bf85d37109c95c310e01a81f833c2f7e66b5fb329cde", + "0x09545ce0f998ffa10ff1475114bffa72dbd19f139fbe099e4af4445f817ff6bc", + "0x1dd41cd9935f9cd56d9b14c225b185377241090c9ea30678c75a87e6aff855f4", + "0xf473f2fb4a211ddb0072bf2be331b0d519fcc761862527e2c0ea428ae8fe09ab", + "0xe19f7f7df97027da13f8968ab5e7b37da166fdcc548009d4c58b7f673323d773", + "0x0465c368752cc776630b35aac91448c30245712a17351b3a856731febb18ca0e", + "0x3cd2674ec000e016f23c1020ad5897b1d23fcdf4f61516d07093964af76d1256", + "0xf1962ae20b3869e10e8c4b7f1a5223426de0595b378802fcfcee2c7f68b182ca", + "0xb25d4c4c0c0183adcabf7a9cc0e4ab3f43aa60ebf3593fc31b04110f7419865f", + "0x46539a53f46b27474f9247d771ffd99b81a30785a332b62cc2a0fd2458066cd8", + "0x5882621a91f79ff37d55b0f46004b1fca4fa515e35b0ab9064c25878a506d09e", + "0x696128fcb974b91aa1c9dd75ee07c9fed54b7d11826604683ac089ca5b1dedda", + "0xecb443a7284050f74120c2675f317e8af1ae2f4bf2f3428d5422b1916ac11654", + "0x8042bf593ae3efd5f880dc1319fbdbc2beced1b2b157d4aa0498d765547916eb", + "0x7edcd34d3a05d5af5c089e64bd71c3d7fb7670cadd9f7da45c1e7f8471b663f1", + "0x907aef5b351f1dcff2da04b16e66be2f3d3893ef707e1d45b81d3ece4f3c7130", + "0xf947ec294b014d059ea59ad1048db5a589fc557ec9f992112bd68f17b7e4c7db", + "0x7f8126b43b343588ba2ff665d7ea064e53087510fc097f76684c85f05fbefa78", + "0x36d237cbd57b953a95de438f1374c71ee35d77dc99f452020d4a733952e05783", + "0x09b50cbde88a77d04f097bad178894814f414e0bb223fa848cdfba68df9635c7", + "0x70b1270c82021f5eafebfda016356e33324f800f265a70e2802bedf5f3f51075", + "0x20fbb98a4d43edac7e3331dcb287499b570b87d240c88e7e8ac16dab01e8eb57", + "0x3bc8a88b6b9cb3e9bdc88abb12e74d97f8a434c974a2c9c6920b96e35514debc", + "0x2dc41489aeedb505c60ee70db40199a2fdadae998bd0ccb35bc28293084391c2", + "0x108ef6a20e2cb9ff215136472bda53e787626f9de555bbf886cb7170fb3fe987", + "0x17970bd875585716648e138529590f423516d784ca823332c34f6e92c58a0c4d", + "0xa49934191cc68689f95ea8180c2b4bffb9186044d17afa02b4bcc37823cc77f8", + "0x432e9d967ab071ed3ce49a061f6beb032c0ec51d3792fa81c6cfa74b62be4564", + "0xb7f88be511e356681c7ba320f3df38e0b97a05b080db3c5914323231f28c3cec", + "0x91193513e0d45623ca12b2f82573074e448dd98d1c4172f5836c0ab5a0c35c72", + "0x877b440fbd6e0780581fdb45dc0906108c0774407d8dd3fa76bd193dc68e689c", + "0x26696e12e94e2f95b5f93fe85504bf736d6f36e1b93d6b2efb7050904faac007", + "0xe460c314e98bb0561830e9707dab1a2abe8f6d2e0a6f54ef1c332dd00588b99a", + "0x1aa741df6bf5c0552edeb5f5cb3b8f1864723c3c3337055d5564b9097492d359", + "0xe7d7723cc8ffd7002d117daa692eb7b8698bf5dae62128800c546fd2983a4677", + "0xd2eb964a252e529c2b173e2b6db6f8530c87375c47527d9c7fb619d0c6f8ce49", + "0x5bed22385a4a783d8f266574fba67a73313351a9caa89be4948aed2e99122ee2", + "0xc63e6a241e943c09378279cbf6a752145b2798fb850c621de4258c2c624d06fa", + "0xa3eedbf40ae14110d5036b8e5d6211363a5c575d276916bf028213d456d36648", + "0x2c1b97c3c530fb25ebb262add0a285767f2b179a7a3c66108ed10602e56fa8a6", + "0xc1b1ea0b5b996f29774bb2985626e63ee123372364b39774abd3c9a5a6b336dd", + "0xe1e43691d4b12a54c94a7d002933bf886aadbdfea41185840b9fb4bc56a0b9b6", + "0x8d006b58ea28cd4be920b1a05428cda398479551a2c07f00427daccc8b5eaada", + "0x2729557b8cb247a21a201b9c84fdc88dbf9698985cbd9dea18d815ba94f20b70", + "0x10b8f9a1e05e8979b3cc0d25bd7f0dcb9bf7838e3c9e092f02990509eebad39b", + "0xf4d46eb6570a1fcd0a5cdfb6b4e980b5505f8daad17e17e3ef5cb3d71ee8e230", + "0xbe9205e46fe32323e2bc9e21b6405f764d83a4c22934fc4fdef1d1ef095db4b0", + "0x866cf21fd6c7ec93d3746224a090e939de83a973fa51ad78fa0d22bf9d49cb7d", + "0x9bf5b1d88ba309383672143508adf3a43a427e988b55251885340beaf5357959", + "0xd5a96fce15292a8a7ff0585724a4b2b99d7bdc911001ee1732799d244d57bae9", + "0x9b528f6a3e66c0e7b5b1b99a3621767fb59d35baf7df55f440119b76245e4054", + "0xa1c49585370a328e96ea6370c8b689a6c80277e12ea0d2154bd4284d77f57370", + "0x74fbf1a46416ba8ba903eae0987e10e1d1a50795cbd480c2ea574ef5f9ab91fe", + "0x08da92acebe106380e031b678e15eb848758a7c532f27fa6158b0fd5503bc7b9", + "0x0e0c7d8c282a68792a95f515dbcb24b65e423dafd1be3a80b4c3e49e1428eea7", + "0x1064fd21323fca93f368bf00ac2867194f6c585fd49c9280fdac1c3b7751e60f", + "0xefbf5700ef896d51dce0c82c605fb91324a3150ab6d47b6e1ddc13673087f623" + ], + "transactionsRoot": "0xe639c451de458f8dea21e11fe9959ad1aaff7c0f5db602c49525ab17137d1ca8", + "uncles": [], + "withdrawals": [ + { + "address": "0x94b1c625ef0fd077a7e4628639eb390e3fe9ddd4", + "amount": "0x1202ada", + "index": "0x35f8a3b", + "validatorIndex": "0x615a" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x116f384", + "index": "0x35f8a3c", + "validatorIndex": "0x615b" + }, + { + "address": "0x5675801e9346ea8165e7eb80dccd01dca65c0f3a", + "amount": "0x1257958", + "index": "0x35f8a3d", + "validatorIndex": "0x615c" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x116bf52", + "index": "0x35f8a3e", + "validatorIndex": "0x615d" + }, + { + "address": "0x94b1c625ef0fd077a7e4628639eb390e3fe9ddd4", + "amount": "0x11fcbe3", + "index": "0x35f8a3f", + "validatorIndex": "0x615e" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x116513a", + "index": "0x35f8a40", + "validatorIndex": "0x615f" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x1166b97", + "index": "0x35f8a41", + "validatorIndex": "0x6160" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x1167c0f", + "index": "0x35f8a42", + "validatorIndex": "0x6161" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x1167503", + "index": "0x35f8a43", + "validatorIndex": "0x6162" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x1164997", + "index": "0x35f8a44", + "validatorIndex": "0x6163" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x117291d", + "index": "0x35f8a45", + "validatorIndex": "0x6164" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x116002a", + "index": "0x35f8a46", + "validatorIndex": "0x6165" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x1166b17", + "index": "0x35f8a47", + "validatorIndex": "0x6166" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x115dbab", + "index": "0x35f8a48", + "validatorIndex": "0x6167" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x11631eb", + "index": "0x35f8a49", + "validatorIndex": "0x6168" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x116c52f", + "index": "0x35f8a4a", + "validatorIndex": "0x6169" + } + ], + "withdrawalsRoot": "0xd959101b1db825948d50dfd5cd1d608fe7f6129554031f2ff9fa355bef50a7f7" + } } } } diff --git a/packages/adapters-library/src/adapters/pendle/products/yield-token/tests/snapshots/ethereum.positions.yt-lp.json b/packages/adapters-library/src/adapters/pendle/products/yield-token/tests/snapshots/ethereum.positions.yt-lp.json index f67064f00..6e9416734 100644 --- a/packages/adapters-library/src/adapters/pendle/products/yield-token/tests/snapshots/ethereum.positions.yt-lp.json +++ b/packages/adapters-library/src/adapters/pendle/products/yield-token/tests/snapshots/ethereum.positions.yt-lp.json @@ -1,7 +1,7 @@ { "blockNumber": 20572021, "latency": "Latency: 1.179 seconds", - "aggregatedValues": ["USD0.00", "USD161.25", "USD785.23"], + "aggregatedValues": ["USD161.25", "USD785.23"], "snapshot": [ { "protocolId": "pendle", @@ -15,44 +15,9 @@ "chainName": "ethereum", "success": true, "tokens": [ - { - "address": "0x4AfdB1B0f9A56922e398D29239453e6A06148eD0", - "name": "YT-rswETH-27JUN2024", - "symbol": "YT-rswETH-27JUN2024", - "decimals": 18, - "balanceRaw": "55833719459134401463n", - "type": "protocol", - "tokens": [ - { - "address": "0x7786729eEe8b9d30fE7d91fDFf23A0f1D0C615D9", - "name": "SY-rswETH", - "symbol": "SY-rswETH", - "decimals": 18, - "type": "underlying", - "balanceRaw": "0n", - "tokens": [ - { - "address": "0xFAe103DC9cf190eD75350761e95403b7b8aFa6c0", - "name": "rswETH", - "symbol": "rswETH", - "decimals": 18, - "type": "underlying", - "balanceRaw": "0n", - "balance": 0, - "price": 2632.664790860908, - "iconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xFAe103DC9cf190eD75350761e95403b7b8aFa6c0/logo.png" - } - ], - "balance": 0, - "price": 0, - "iconUrl": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x7786729eEe8b9d30fE7d91fDFf23A0f1D0C615D9/logo.png" - } - ], - "balance": 55.8337194591344 - }, { "address": "0x1a65eB80a2ac3ea6E41D456DdD6E9cC5728BEf7C", - "name": "YT-pufETH-26SEP2024", + "name": "YT Puffer ETH 26SEP2024", "symbol": "YT-pufETH-26SEP2024", "decimals": 18, "balanceRaw": "4988698980780507707n", @@ -60,7 +25,7 @@ "tokens": [ { "address": "0x253008ba4aE2f3E6488DC998a5321D4EB1a0c905", - "name": "SY pufETH", + "name": "SY Puffer ETH", "symbol": "SY pufETH", "decimals": 18, "type": "underlying-claimable", @@ -84,7 +49,7 @@ }, { "address": "0x253008ba4aE2f3E6488DC998a5321D4EB1a0c905", - "name": "SY pufETH", + "name": "SY Puffer ETH", "symbol": "SY pufETH", "decimals": 18, "type": "underlying", @@ -111,7 +76,7 @@ }, { "address": "0xD66b560f4e3e85f22C192d91dA847886d5C5Fd00", - "name": "YT-rswETH-26SEP2024", + "name": "YT rswETH 26SEP2024", "symbol": "YT-rswETH-26SEP2024", "decimals": 18, "balanceRaw": "23841277552309606499n", @@ -119,7 +84,7 @@ "tokens": [ { "address": "0x7786729eEe8b9d30fE7d91fDFf23A0f1D0C615D9", - "name": "SY-rswETH", + "name": "SY rswETH", "symbol": "SY-rswETH", "decimals": 18, "type": "underlying-claimable", @@ -143,7 +108,7 @@ }, { "address": "0x7786729eEe8b9d30fE7d91fDFf23A0f1D0C615D9", - "name": "SY-rswETH", + "name": "SY rswETH", "symbol": "SY-rswETH", "decimals": 18, "type": "underlying", @@ -172,8 +137,235 @@ } ], "rpcResponses": { - "0c51e720ac676d9311c81cbbaca5b7a6": { - "result": "0x00000000000000000000000000000000000000000000000306d9380742856bb7" + "d15c7064d5dc0ab0fb33ea45145438e8": { + "result": { + "baseFeePerGas": "0x37ec5386", + "blobGasUsed": "0xc0000", + "difficulty": "0x0", + "excessBlobGas": "0x0", + "extraData": "0x4e65746865726d696e64", + "gasLimit": "0x1c9c380", + "gasUsed": "0x6a611e", + "hash": "0xb9e9c30b59927e779eacc8eb57c61652839320c96f70150fdf66548f9cffdaa3", + "logsBloom": "0x16e00620208c00033681007ce0a16100159082884e40444020006813ec70294204e50d05d62012108302780020b203066a01810208232e2015453ab100324a081f400108440008680826051c82441028e501d00182400d0222552604ddc000101000020022c803880dc642d20000084f32030ca882b086200320d05c8009300291000a18048101483008246206003600614ea449c3a4010ac22180424ab1a82ad28895200cc261000a9858d009018504128c9044403003881048c2514000096095142043219401a10608ce60a2009ec0000f2206108c8c545021c462a6a8a0a40073284c11206505780401a4a4885a166302962001223a4019258ad014091c51", + "miner": "0x067846f9276a59cbe290396bc8f2469bd71b1428", + "mixHash": "0x1466bd52e86877ef281306dc56ca26d9836f4a27d0d97d01ab7a711188c8244f", + "nonce": "0x0000000000000000", + "number": "0x139e775", + "parentBeaconBlockRoot": "0xcfa7a578a3d104d55212cca7fb94bb72dad8c1323c76ec597483cca140a3794f", + "parentHash": "0x077d1edb5ae8ae77573b78abe98e200e5f642831181a86deac729bce620053e6", + "receiptsRoot": "0x1e0a1dcb4571034198702b5b14001c8056ccb34857500936790855f0d74525dc", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x75e1", + "stateRoot": "0xb9664b0780e404ec911a109be1901fc1b7ad8ad0a1fcf1ce8a4de1574adbe655", + "timestamp": "0x66c4f313", + "totalDifficulty": "0xc70d815d562d3cfa955", + "transactions": [ + "0xf7fab140e49b2aaef70bf57c8e2c0b5448a660cff9de68f9a2557f861bac1271", + "0x8a822775c70d1b14ae34edd98aa114ff4beb9d65cd91e7f0b7e160f67216a694", + "0xb2f448975cb7c06d389ebcc918c557ae5207bd58a044f7e1314e0865864a28f7", + "0x2e48a510a02731a53cf9b5b29c6789fa5230e249a3d37a99ace044d88ad09940", + "0xa37905e0c86180d940cea5b03e45ef8f9489f54af1a06bb8ab7e9aed8e8c10e1", + "0x963be8af6cf3c0932b19f690907af7f5c71875815823cdd6537974f5aae1fcaf", + "0x0878133d17928e8d4e74d5831d944348a1a3fec3c640ea27c4fd3fab2c607985", + "0x83357b6908c5968ddedf420ec95a353f5ccb2c94970cb74ec310d9b46dffd063", + "0xa383fc07fbee6cfa1f9e14e7d5f5c87b99d189d52a7a9232ca76fdf9e623bfd0", + "0xe6701806fdcb75a009913ea59497540f96e45b4af324209938b8c1db84d8e41f", + "0x1554be065972b4b52f05617ef386fecacd1aa29a1dc761ffd5dcb7b559d1d598", + "0xdfef4e12b0ee1403a1bf0b63df9c3cd4b868adf62d2ef7a76331b68c2f2e27bd", + "0x189b48607e2f089034f2cd3251fa8eaee27cd86c9e82eff6429268994ee149db", + "0x7f33b80745c98fc4e0e3f95a595ef31738e0c5c5079ce3c28ee6192642692c8c", + "0x66339cfd03932488a06c07fb3b993cf28954b775f4a8b99374090fa1c1edc647", + "0xd06d556c8d07cb3f2b0b5e408cf4693768aa6d29747d135dc5de0692ec0dad82", + "0xeff64d14657371f21a4290408502e21621f9c7c496bec01129a7ab5de9fd9131", + "0xcb0bea63871ba4852df605faa86c52c192b12d179c59e4c827195cbf27a04388", + "0x43eaf8d15c0d38f6ed60be0a9736289d4d16927d0229dea84ed4ddf44d9bb993", + "0x998676fc72b447d6af1a95d0941c4ecb268138dc34bdd33aa23caea1a348eb3f", + "0xc9689e7672a7356f4f2d2b4bab12f1d41ed8e21e4fa6a5ccd1dbd102b4563740", + "0x5c1d05620f3e312964834cd3157d0d33bbbe0a910c80f7d0f40ea4c8b789d4d1", + "0xeae1ded9bb28a25eb8dbea4e7ca4d8047bcf66d4c03a377c4cb3e10e676edbc3", + "0x71182ea7459e2e45efaf1c2350115502432fca41d08bd3de527af9ff5062d2c3", + "0xe3787658a529954b04d28d138795340c9a68884a317a58626d42bb15b07cda0e", + "0xa67c056aab40d19f754445c877c119e115cc338f4dacec9f0ed0e7eac4c5a8bf", + "0x7b33c49232c3d71c96eda17e9eeab1949c4841961da221183cab1880b6468075", + "0x06a6b63b1e36dcc2484234d833cb4461f30d079abada214580a247d75556c3c1", + "0x325790ba091463b8495766847cf0d8816fdce297ddfa47e9618cbcd063a2b446", + "0x62880efe6bcee84eb49c3a4ae1277338f58810f29980b1577b8f9d2965a8d2cf", + "0x945fa2d7084df79739c0df9e414a1dae1040374ffcdf35dec889e9cb8bff0905", + "0x305d1d9fd31f1a6fe86ffa9ca7ccba04680a1fba31947bc70135ab428e4b9536", + "0xdfd8f8f16bf96c6a5080793d5220307bc9b132d2f92cc7cdf24a0a702f8bd314", + "0xbb5991d2d3eba8934cae1e37f463b504a5ce801a32832ce632dc6b8d851e65f2", + "0x1475e755e6af20e56be50c40489fb918fecc257038754c40c9bc8d1f2875b582", + "0x854c9215810de0b4f918b4a423bd8992e3feb4f7355f63e9cc5a9e1194c20acc", + "0xa352ba26167e3c394d624f4506fecc10c0ef05be99adcf4f8dda2b9ffee54b68", + "0xf4480783d31b35ff600c4f23910de2e93ed7ceed960270b35c34f9b0de627a2b", + "0xf406760286fc7c849313352dc2f0baa7afc637af46d32f79749548c32ef5e997", + "0x3a042bfabfe6255589355ed1159cce9213e9cd26f219ffbe20693b424f36aebc", + "0x2d2e2b39519109585657b9d7bc79fc6aafefe24c1c7b93173f8f75be753f8b6a", + "0x04401ec4445d40db411fd4230b743360668ebedeb456ee2ab09a378a540a6d45", + "0x119ca7b352742885dfcfc4f65d33c33cfedef413058d180b02dc543c45bda848", + "0xe3a1a969cee895c3142c5eb039bd89520252b37fcf260c15b437832973c7a6e3", + "0x0616905d46566e5c722a09c4b878fb443c42fb2dafec262264ba82a3d9c3832b", + "0xd9864fb38791042309f7bf85d37109c95c310e01a81f833c2f7e66b5fb329cde", + "0x09545ce0f998ffa10ff1475114bffa72dbd19f139fbe099e4af4445f817ff6bc", + "0x1dd41cd9935f9cd56d9b14c225b185377241090c9ea30678c75a87e6aff855f4", + "0xf473f2fb4a211ddb0072bf2be331b0d519fcc761862527e2c0ea428ae8fe09ab", + "0xe19f7f7df97027da13f8968ab5e7b37da166fdcc548009d4c58b7f673323d773", + "0x0465c368752cc776630b35aac91448c30245712a17351b3a856731febb18ca0e", + "0x3cd2674ec000e016f23c1020ad5897b1d23fcdf4f61516d07093964af76d1256", + "0xf1962ae20b3869e10e8c4b7f1a5223426de0595b378802fcfcee2c7f68b182ca", + "0xb25d4c4c0c0183adcabf7a9cc0e4ab3f43aa60ebf3593fc31b04110f7419865f", + "0x46539a53f46b27474f9247d771ffd99b81a30785a332b62cc2a0fd2458066cd8", + "0x5882621a91f79ff37d55b0f46004b1fca4fa515e35b0ab9064c25878a506d09e", + "0x696128fcb974b91aa1c9dd75ee07c9fed54b7d11826604683ac089ca5b1dedda", + "0xecb443a7284050f74120c2675f317e8af1ae2f4bf2f3428d5422b1916ac11654", + "0x8042bf593ae3efd5f880dc1319fbdbc2beced1b2b157d4aa0498d765547916eb", + "0x7edcd34d3a05d5af5c089e64bd71c3d7fb7670cadd9f7da45c1e7f8471b663f1", + "0x907aef5b351f1dcff2da04b16e66be2f3d3893ef707e1d45b81d3ece4f3c7130", + "0xf947ec294b014d059ea59ad1048db5a589fc557ec9f992112bd68f17b7e4c7db", + "0x7f8126b43b343588ba2ff665d7ea064e53087510fc097f76684c85f05fbefa78", + "0x36d237cbd57b953a95de438f1374c71ee35d77dc99f452020d4a733952e05783", + "0x09b50cbde88a77d04f097bad178894814f414e0bb223fa848cdfba68df9635c7", + "0x70b1270c82021f5eafebfda016356e33324f800f265a70e2802bedf5f3f51075", + "0x20fbb98a4d43edac7e3331dcb287499b570b87d240c88e7e8ac16dab01e8eb57", + "0x3bc8a88b6b9cb3e9bdc88abb12e74d97f8a434c974a2c9c6920b96e35514debc", + "0x2dc41489aeedb505c60ee70db40199a2fdadae998bd0ccb35bc28293084391c2", + "0x108ef6a20e2cb9ff215136472bda53e787626f9de555bbf886cb7170fb3fe987", + "0x17970bd875585716648e138529590f423516d784ca823332c34f6e92c58a0c4d", + "0xa49934191cc68689f95ea8180c2b4bffb9186044d17afa02b4bcc37823cc77f8", + "0x432e9d967ab071ed3ce49a061f6beb032c0ec51d3792fa81c6cfa74b62be4564", + "0xb7f88be511e356681c7ba320f3df38e0b97a05b080db3c5914323231f28c3cec", + "0x91193513e0d45623ca12b2f82573074e448dd98d1c4172f5836c0ab5a0c35c72", + "0x877b440fbd6e0780581fdb45dc0906108c0774407d8dd3fa76bd193dc68e689c", + "0x26696e12e94e2f95b5f93fe85504bf736d6f36e1b93d6b2efb7050904faac007", + "0xe460c314e98bb0561830e9707dab1a2abe8f6d2e0a6f54ef1c332dd00588b99a", + "0x1aa741df6bf5c0552edeb5f5cb3b8f1864723c3c3337055d5564b9097492d359", + "0xe7d7723cc8ffd7002d117daa692eb7b8698bf5dae62128800c546fd2983a4677", + "0xd2eb964a252e529c2b173e2b6db6f8530c87375c47527d9c7fb619d0c6f8ce49", + "0x5bed22385a4a783d8f266574fba67a73313351a9caa89be4948aed2e99122ee2", + "0xc63e6a241e943c09378279cbf6a752145b2798fb850c621de4258c2c624d06fa", + "0xa3eedbf40ae14110d5036b8e5d6211363a5c575d276916bf028213d456d36648", + "0x2c1b97c3c530fb25ebb262add0a285767f2b179a7a3c66108ed10602e56fa8a6", + "0xc1b1ea0b5b996f29774bb2985626e63ee123372364b39774abd3c9a5a6b336dd", + "0xe1e43691d4b12a54c94a7d002933bf886aadbdfea41185840b9fb4bc56a0b9b6", + "0x8d006b58ea28cd4be920b1a05428cda398479551a2c07f00427daccc8b5eaada", + "0x2729557b8cb247a21a201b9c84fdc88dbf9698985cbd9dea18d815ba94f20b70", + "0x10b8f9a1e05e8979b3cc0d25bd7f0dcb9bf7838e3c9e092f02990509eebad39b", + "0xf4d46eb6570a1fcd0a5cdfb6b4e980b5505f8daad17e17e3ef5cb3d71ee8e230", + "0xbe9205e46fe32323e2bc9e21b6405f764d83a4c22934fc4fdef1d1ef095db4b0", + "0x866cf21fd6c7ec93d3746224a090e939de83a973fa51ad78fa0d22bf9d49cb7d", + "0x9bf5b1d88ba309383672143508adf3a43a427e988b55251885340beaf5357959", + "0xd5a96fce15292a8a7ff0585724a4b2b99d7bdc911001ee1732799d244d57bae9", + "0x9b528f6a3e66c0e7b5b1b99a3621767fb59d35baf7df55f440119b76245e4054", + "0xa1c49585370a328e96ea6370c8b689a6c80277e12ea0d2154bd4284d77f57370", + "0x74fbf1a46416ba8ba903eae0987e10e1d1a50795cbd480c2ea574ef5f9ab91fe", + "0x08da92acebe106380e031b678e15eb848758a7c532f27fa6158b0fd5503bc7b9", + "0x0e0c7d8c282a68792a95f515dbcb24b65e423dafd1be3a80b4c3e49e1428eea7", + "0x1064fd21323fca93f368bf00ac2867194f6c585fd49c9280fdac1c3b7751e60f", + "0xefbf5700ef896d51dce0c82c605fb91324a3150ab6d47b6e1ddc13673087f623" + ], + "transactionsRoot": "0xe639c451de458f8dea21e11fe9959ad1aaff7c0f5db602c49525ab17137d1ca8", + "uncles": [], + "withdrawals": [ + { + "address": "0x94b1c625ef0fd077a7e4628639eb390e3fe9ddd4", + "amount": "0x1202ada", + "index": "0x35f8a3b", + "validatorIndex": "0x615a" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x116f384", + "index": "0x35f8a3c", + "validatorIndex": "0x615b" + }, + { + "address": "0x5675801e9346ea8165e7eb80dccd01dca65c0f3a", + "amount": "0x1257958", + "index": "0x35f8a3d", + "validatorIndex": "0x615c" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x116bf52", + "index": "0x35f8a3e", + "validatorIndex": "0x615d" + }, + { + "address": "0x94b1c625ef0fd077a7e4628639eb390e3fe9ddd4", + "amount": "0x11fcbe3", + "index": "0x35f8a3f", + "validatorIndex": "0x615e" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x116513a", + "index": "0x35f8a40", + "validatorIndex": "0x615f" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x1166b97", + "index": "0x35f8a41", + "validatorIndex": "0x6160" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x1167c0f", + "index": "0x35f8a42", + "validatorIndex": "0x6161" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x1167503", + "index": "0x35f8a43", + "validatorIndex": "0x6162" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x1164997", + "index": "0x35f8a44", + "validatorIndex": "0x6163" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x117291d", + "index": "0x35f8a45", + "validatorIndex": "0x6164" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x116002a", + "index": "0x35f8a46", + "validatorIndex": "0x6165" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x1166b17", + "index": "0x35f8a47", + "validatorIndex": "0x6166" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x115dbab", + "index": "0x35f8a48", + "validatorIndex": "0x6167" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x11631eb", + "index": "0x35f8a49", + "validatorIndex": "0x6168" + }, + { + "address": "0xc436eb8aed128275c8f224de2f1dd202c0ab5830", + "amount": "0x116c52f", + "index": "0x35f8a4a", + "validatorIndex": "0x6169" + } + ], + "withdrawalsRoot": "0xd959101b1db825948d50dfd5cd1d608fe7f6129554031f2ff9fa355bef50a7f7" + } }, "ebb1b8dca0a32111968139e3bd91dd6a": { "result": "0x000000000000000000000000000000000000000000000000453b6b4ab0c6823b" @@ -181,32 +373,26 @@ "764a91cffd751b099869bbc7a628a68f": { "result": "0x0000000000000000000000000000000000000000000000014add3b9e08e89863" }, - "016ddd519799e1ac4c6dd3a12cd8951a": { - "result": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000" + "120f1dbca5d4d5c4fc8928bb6d004474": { + "result": "0x00000000000000000000000000000000000000000000000001765bd7e6b2953300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000" }, "c0556d3a8b591e54115b23af079ddcb7": { "result": "0x00000000000000000000000000000000000000000000000000304f9b10971aa600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000" }, - "120f1dbca5d4d5c4fc8928bb6d004474": { - "result": "0x00000000000000000000000000000000000000000000000001765bd7e6b2953300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000" - }, - "9870468ac1fb47b67ec3d5321dc7fc50": { - "result": "0x0000000000000000000000000000000000000000000000000000000000000000" + "5da6e6770bf50e1d79f6a828b2cc8e6a": { + "result": "0x000000000000000000000000000000000000000000000000001cbe798c02eab2" }, "cb5943f407f6ae40223d02525a6da05b": { "result": "0x0000000000000000000000000000000000000000000000000022e81058b99777" }, - "5da6e6770bf50e1d79f6a828b2cc8e6a": { - "result": "0x000000000000000000000000000000000000000000000000001cbe798c02eab2" - }, "d6512b66e4c47ef0e20cec2f6493bd0f": { "result": "0x00000000000000000000000000000000000000000000000600000000000055be0000000000000000000000000000000000000000000000000000003c6786b8400000000000000000000000000000000000000000000000000000000066c4e6b30000000000000000000000000000000000000000000000000000000066c4e6b300000000000000000000000000000000000000000000000600000000000055be" }, - "7d4458fa03390d8ad42472bbff2bd8c7": { - "result": "0x0000000000000000000000000000000000000000000000000e152ee7cc0ffc9d" - }, "476e3b53535fcb664b36101fc61655d2": { "result": "0x0000000000000000000000000000000000000000000000000dc6ae6127261bac" + }, + "7d4458fa03390d8ad42472bbff2bd8c7": { + "result": "0x0000000000000000000000000000000000000000000000000e152ee7cc0ffc9d" } } } diff --git a/packages/adapters-library/src/adapters/pendle/products/yield-token/tests/snapshots/ethereum.prices.yt.json b/packages/adapters-library/src/adapters/pendle/products/yield-token/tests/snapshots/ethereum.prices.yt.json index 89bc64d66..3352bd2de 100644 --- a/packages/adapters-library/src/adapters/pendle/products/yield-token/tests/snapshots/ethereum.prices.yt.json +++ b/packages/adapters-library/src/adapters/pendle/products/yield-token/tests/snapshots/ethereum.prices.yt.json @@ -18,7 +18,7 @@ "baseRate": 1, "type": "protocol", "address": "0xD66b560f4e3e85f22C192d91dA847886d5C5Fd00", - "name": "YT-rswETH-26SEP2024", + "name": "YT rswETH 26SEP2024", "symbol": "YT-rswETH-26SEP2024", "decimals": 18, "tokens": [ @@ -26,7 +26,7 @@ "type": "underlying", "underlyingRateRaw": "8089831469223860n", "address": "0x7786729eEe8b9d30fE7d91fDFf23A0f1D0C615D9", - "name": "SY-rswETH", + "name": "SY rswETH", "symbol": "SY-rswETH", "decimals": 18, "underlyingRate": 0.00808983146922386, diff --git a/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.deposits.json b/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.deposits.json index f2bd61392..1346dbd65 100644 --- a/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.deposits.json +++ b/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.deposits.json @@ -17,14 +17,14 @@ "transactionHash": "0x4771ea9eee1fe63b5702371cccf767c44b9630bc0b61b9a8aeb9935448835cc6", "protocolToken": { "address": "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110", - "name": "ezETH", + "name": "Renzo Restaked ETH", "symbol": "ezETH", "decimals": 18 }, "tokens": [ { "address": "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110", - "name": "ezETH", + "name": "Renzo Restaked ETH", "symbol": "ezETH", "decimals": 18, "balanceRaw": "156100995664536937n", diff --git a/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.positions.json b/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.positions.json index 6388e934e..197d912f9 100644 --- a/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.positions.json +++ b/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.positions.json @@ -17,7 +17,7 @@ "tokens": [ { "address": "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110", - "name": "ezETH", + "name": "Renzo Restaked ETH", "symbol": "ezETH", "decimals": 18, "balanceRaw": "2499606512389029946991n", diff --git a/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.prices.json b/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.prices.json index 9ea1125c2..d1b2aa9a4 100644 --- a/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.prices.json +++ b/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.prices.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110", - "name": "ezETH", + "name": "Renzo Restaked ETH", "symbol": "ezETH", "decimals": 18, "baseRate": 1, diff --git a/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.profits.json b/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.profits.json index 75782606d..58fd62f2a 100644 --- a/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.profits.json +++ b/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.profits.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110", - "name": "ezETH", + "name": "Renzo Restaked ETH", "symbol": "ezETH", "decimals": 18, "type": "protocol", diff --git a/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.tvl.json b/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.tvl.json index dd5986c5e..4979fab69 100644 --- a/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.tvl.json +++ b/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.tvl.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110", - "name": "ezETH", + "name": "Renzo Restaked ETH", "symbol": "ezETH", "decimals": 18, "type": "protocol", diff --git a/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.withdrawals.json b/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.withdrawals.json index 59adb0b86..f94d3cb82 100644 --- a/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.withdrawals.json +++ b/packages/adapters-library/src/adapters/renzo/products/ez-eth/tests/snapshots/ethereum.withdrawals.json @@ -17,14 +17,14 @@ "transactionHash": "0x3c1554801014cd6d56c1f95b4007d7ee424c5259d4c4bfd1ff9464bc7631e726", "protocolToken": { "address": "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110", - "name": "ezETH", + "name": "Renzo Restaked ETH", "symbol": "ezETH", "decimals": 18 }, "tokens": [ { "address": "0xbf5495Efe5DB9ce00f80364C8B423567e58d2110", - "name": "ezETH", + "name": "Renzo Restaked ETH", "symbol": "ezETH", "decimals": 18, "balanceRaw": "2267764738252909312n", diff --git a/packages/adapters-library/src/adapters/solv/products/solv-btc/tests/snapshots/ethereum.positions.user-2.json b/packages/adapters-library/src/adapters/solv/products/solv-btc/tests/snapshots/ethereum.positions.user-2.json index 21b77370c..7c871ca29 100644 --- a/packages/adapters-library/src/adapters/solv/products/solv-btc/tests/snapshots/ethereum.positions.user-2.json +++ b/packages/adapters-library/src/adapters/solv/products/solv-btc/tests/snapshots/ethereum.positions.user-2.json @@ -17,7 +17,7 @@ "tokens": [ { "address": "0xd9D920AA40f578ab794426F5C90F6C731D159DEf", - "name": "SolvBTC.BBN", + "name": "SolvBTC Babylon", "symbol": "SolvBTC.BBN", "decimals": 18, "balanceRaw": "6215687507000000n", diff --git a/packages/adapters-library/src/adapters/solv/products/solv-btc/tests/snapshots/ethereum.profits.user-2.json b/packages/adapters-library/src/adapters/solv/products/solv-btc/tests/snapshots/ethereum.profits.user-2.json index 1f841fb40..6d182cf40 100644 --- a/packages/adapters-library/src/adapters/solv/products/solv-btc/tests/snapshots/ethereum.profits.user-2.json +++ b/packages/adapters-library/src/adapters/solv/products/solv-btc/tests/snapshots/ethereum.profits.user-2.json @@ -16,7 +16,7 @@ "tokens": [ { "address": "0xd9D920AA40f578ab794426F5C90F6C731D159DEf", - "name": "SolvBTC.BBN", + "name": "SolvBTC Babylon", "symbol": "SolvBTC.BBN", "decimals": 18, "type": "protocol", diff --git a/packages/adapters-library/src/adapters/stargate/products/farm/tests/snapshots/ethereum.positions.farm-v1.json b/packages/adapters-library/src/adapters/stargate/products/farm/tests/snapshots/ethereum.positions.farm-v1.json index 33c743449..df732940f 100644 --- a/packages/adapters-library/src/adapters/stargate/products/farm/tests/snapshots/ethereum.positions.farm-v1.json +++ b/packages/adapters-library/src/adapters/stargate/products/farm/tests/snapshots/ethereum.positions.farm-v1.json @@ -19,7 +19,7 @@ "type": "protocol", "address": "0x38EA452219524Bb87e18dE1C24D3bB59510BD783", "symbol": "S*USDT", - "name": "S*USDT", + "name": "Tether USD-LP", "decimals": 6, "balanceRaw": "1000000000n", "tokens": [ diff --git a/packages/adapters-library/src/adapters/stargate/products/farm/tests/snapshots/ethereum.withdrawals.farm-v1.json b/packages/adapters-library/src/adapters/stargate/products/farm/tests/snapshots/ethereum.withdrawals.farm-v1.json index 5b31df79a..a2dc5f33e 100644 --- a/packages/adapters-library/src/adapters/stargate/products/farm/tests/snapshots/ethereum.withdrawals.farm-v1.json +++ b/packages/adapters-library/src/adapters/stargate/products/farm/tests/snapshots/ethereum.withdrawals.farm-v1.json @@ -16,7 +16,7 @@ { "protocolToken": { "address": "0x38EA452219524Bb87e18dE1C24D3bB59510BD783", - "name": "S*USDT", + "name": "Tether USD-LP", "symbol": "S*USDT", "decimals": 6 },